{"openapi":"3.1.0","info":{"title":"Recadu","summary":"API para enviar e receber mensagens de WhatsApp por instâncias conectadas.","description":"\nAPI para enviar e receber mensagens de WhatsApp por instâncias conectadas como aparelho vinculado.\n\n**Autenticação:** `Authorization: Bearer gwk_live_...`. Cada chave tem escopos e pode ser\nrestrita a instâncias.\n\n**Erros:** RFC 9457 (`application/problem+json`), com `type`, `title`, `status`, `detail` e `request_id`.\n\n**Idempotência:** envie `Idempotency-Key` nos `POST` que criam recursos; o mesmo pedido em até 24 h devolve\na mesma resposta (com `Idempotent-Replayed: true`) sem repetir o efeito.\n\n**Paginação:** `?limit=&cursor=`; a resposta traz `next_cursor` (null no fim).\n\n**Limites:** cabeçalhos `RateLimit-Limit`, `RateLimit-Remaining` e `RateLimit-Reset`; `429` com `Retry-After`.\n","version":"0.1.0"},"paths":{"/v1/instances":{"get":{"tags":["Instâncias"],"summary":"Listar instâncias","operationId":"list_instances_v1_instances_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstanceOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"post":{"tags":["Instâncias"],"summary":"Criar instância","operationId":"create_instance_v1_instances_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}":{"get":{"tags":["Instâncias"],"summary":"Detalhar instância (com o estado atual no motor)","operationId":"get_instance_v1_instances__instance_id__get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"patch":{"tags":["Instâncias"],"summary":"Alterar instância","operationId":"update_instance_v1_instances__instance_id__patch","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"delete":{"tags":["Instâncias"],"summary":"Remover instância (desconecta o aparelho)","operationId":"delete_instance_v1_instances__instance_id__delete","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/policy":{"get":{"tags":["Instâncias"],"summary":"Política contra banimento em vigor (ambiente, conta e instância)","operationId":"get_policy_v1_instances__instance_id__policy_get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/pairing":{"post":{"tags":["Instâncias"],"summary":"Iniciar pareamento por QR ou código","operationId":"start_pairing_v1_instances__instance_id__pairing_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PairingRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"get":{"tags":["Instâncias"],"summary":"Estado do pareamento e o QR em exibição (com a imagem pronta)","operationId":"pairing_status_v1_instances__instance_id__pairing_get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/pairing/stream":{"get":{"tags":["Instâncias"],"summary":"QRs novos e conclusão do pareamento (Server-Sent Events)","operationId":"pairing_stream_v1_instances__instance_id__pairing_stream_get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/event-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/sandbox/inbound":{"post":{"tags":["Instâncias"],"summary":"Sandbox: simular uma mensagem recebida ou uma resposta a botão, lista ou enquete","operationId":"sandbox_inbound_v1_instances__instance_id__sandbox_inbound_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxInbound"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxInboundOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/health":{"get":{"tags":["Instâncias"],"summary":"Saúde do número: nota de 0 a 100, risco de banimento e recomendações","operationId":"instance_health_v1_instances__instance_id__health_get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/availability":{"get":{"tags":["Instâncias"],"summary":"Disponibilidade: percentual do mês conectado, por dia, e as quedas","operationId":"instance_availability_v1_instances__instance_id__availability_get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}},{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"AAAA-MM; padrão: o mês corrente.","title":"Month"},"description":"AAAA-MM; padrão: o mês corrente."},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"America/Sao_Paulo","title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/logout":{"post":{"tags":["Instâncias"],"summary":"Desconectar o aparelho","operationId":"logout_v1_instances__instance_id__logout_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/restart":{"post":{"tags":["Instâncias"],"summary":"Reconectar ao WhatsApp","operationId":"restart_v1_instances__instance_id__restart_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/contacts/{phone}":{"get":{"tags":["Instâncias"],"summary":"Conferir se um número tem WhatsApp","operationId":"check_contact_v1_instances__instance_id__contacts__phone__get","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}},{"name":"phone","in":"path","required":true,"schema":{"type":"string","title":"Phone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCheckOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/chats/{chat}/read":{"post":{"tags":["Instâncias"],"summary":"Marcar mensagens como lidas","operationId":"mark_read_v1_instances__instance_id__chats__chat__read_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}},{"name":"chat","in":"path","required":true,"schema":{"type":"string","title":"Chat"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/instances/{instance_id}/chats/{chat}/presence":{"post":{"tags":["Instâncias"],"summary":"Mostrar digitando, gravando ou parar","operationId":"presence_v1_instances__instance_id__chats__chat__presence_post","parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}},{"name":"chat","in":"path","required":true,"schema":{"type":"string","title":"Chat"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresenceRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/messages":{"post":{"tags":["Mensagens"],"summary":"Enviar mensagem","description":"Aceita a mensagem e responde na hora com `status: queued`. O envio ao WhatsApp acontece em seguida; acompanhe por `GET /v1/messages/{id}` ou pelos webhooks. Use `Idempotency-Key` para repetir o pedido com segurança.","operationId":"send_message_v1_messages_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"get":{"tags":["Mensagens"],"summary":"Listar mensagens","operationId":"list_messages_v1_messages_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"instance_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["queued","sending","sent","delivered","read","failed"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MessageOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/messages/{message_id}":{"get":{"tags":["Mensagens"],"summary":"Detalhar mensagem","operationId":"get_message_v1_messages__message_id__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"patch":{"tags":["Mensagens"],"summary":"Editar o texto de uma mensagem enviada","operationId":"edit_message_v1_messages__message_id__patch","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"delete":{"tags":["Mensagens"],"summary":"Apagar uma mensagem para todos","description":"Mensagem enviada: apaga para todos. Mensagem agendada (`scheduled_for`) que ainda não saiu: cancela o envio.","operationId":"delete_message_v1_messages__message_id__delete","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/messages/{message_id}/reactions":{"post":{"tags":["Mensagens"],"summary":"Reagir a uma mensagem","operationId":"react_v1_messages__message_id__reactions_post","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/media":{"post":{"tags":["Mídia"],"summary":"Enviar um arquivo para usar em mensagens","operationId":"upload_media_v1_media_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_media_v1_media_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/media/{media_id}":{"get":{"tags":["Mídia"],"summary":"Metadados e link temporário de um arquivo","operationId":"get_media_v1_media__media_id__get","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints":{"get":{"tags":["Webhooks"],"summary":"Listar destinos de webhook","operationId":"list_endpoints_v1_webhook_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookEndpointOut"},"type":"array","title":"Response List Endpoints V1 Webhook Endpoints Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"post":{"tags":["Webhooks"],"summary":"Criar destino de webhook","operationId":"create_endpoint_v1_webhook_endpoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}":{"get":{"tags":["Webhooks"],"summary":"Detalhar destino","operationId":"get_endpoint_v1_webhook_endpoints__endpoint_id__get","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"patch":{"tags":["Webhooks"],"summary":"Alterar destino","operationId":"update_endpoint_v1_webhook_endpoints__endpoint_id__patch","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"delete":{"tags":["Webhooks"],"summary":"Remover destino","operationId":"delete_endpoint_v1_webhook_endpoints__endpoint_id__delete","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}/rotate-secret":{"post":{"tags":["Webhooks"],"summary":"Trocar o segredo","operationId":"rotate_secret_v1_webhook_endpoints__endpoint_id__rotate_secret_post","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretRotated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}/test":{"post":{"tags":["Webhooks"],"summary":"Enviar evento de teste","operationId":"send_test_v1_webhook_endpoints__endpoint_id__test_post","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Histórico de entregas","operationId":"list_deliveries_v1_webhook_endpoints__endpoint_id__deliveries_get","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","succeeded","failed"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_DeliveryOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-endpoints/{endpoint_id}/retry-failed":{"post":{"tags":["Webhooks"],"summary":"Reenviar todas as entregas que falharam num período","operationId":"retry_failed_v1_webhook_endpoints__endpoint_id__retry_failed_post","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryFailedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryFailedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/webhook-deliveries/{delivery_id}/retry":{"post":{"tags":["Webhooks"],"summary":"Reenviar uma entrega","operationId":"retry_delivery_v1_webhook_deliveries__delivery_id__retry_post","parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/events":{"get":{"tags":["Eventos"],"summary":"Listar eventos (mais recentes primeiro)","operationId":"list_events_v1_events_get","parameters":[{"name":"instance_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["message.received","message.sent_from_device","message.sent","message.failed","message.status_updated","message.interactive_reply","message.edited","message.deleted","message.reaction","instance.qr","instance.paired","instance.connected","instance.disconnected","instance.logged_out","instance.banned","webhook.test"],"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_EventOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/events/{event_id}":{"get":{"tags":["Eventos"],"summary":"Detalhar evento","operationId":"get_event_v1_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/opt-outs":{"get":{"tags":["Descadastros"],"summary":"Listar descadastros","description":"Contatos que mandaram uma palavra de descadastro (SAIR, PARAR...) ou foram cadastrados à mão. Envios para eles são recusados com `contact-opted-out`. Mais recentes primeiro.","operationId":"list_opt_outs_v1_opt_outs_get","parameters":[{"name":"phone","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":15},{"type":"null"}],"description":"Filtra por parte do número.","title":"Phone"},"description":"Filtra por parte do número."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_OptOutOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]},"post":{"tags":["Descadastros"],"summary":"Descadastrar um contato","description":"Para quando o pedido chegou por outro canal (telefone, e-mail, balcão).","operationId":"create_opt_out_v1_opt_outs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutCreate"}}}},"responses":{"200":{"description":"Já estava descadastrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptOutOut"}}}},"201":{"description":"Descadastrado"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/opt-outs/{phone}":{"delete":{"tags":["Descadastros"],"summary":"Remover descadastro","description":"Só com o consentimento do contato: ele volta a receber mensagens da conta.","operationId":"delete_opt_out_v1_opt_outs__phone__delete","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{10,15}$","description":"Número com DDI e DDD, só dígitos.","title":"Phone"},"description":"Número com DDI e DDD, só dígitos."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/status/interactive":{"get":{"tags":["Status"],"summary":"Quais mensagens interativas estão funcionando hoje (público, sem autenticação)","operationId":"interactive_v1_status_interactive_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractiveStatusOut"}}}}},"security":[{"ApiKey":[]}]}}},"components":{"schemas":{"ActiveHoursPolicy":{"properties":{"start":{"anyOf":[{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"},{"type":"null"}],"title":"Start"},"end":{"anyOf":[{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"},{"type":"null"}],"title":"End"},"timezone":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Timezone"},"outside":{"anyOf":[{"type":"string","enum":["reject","schedule"]},{"type":"null"}],"title":"Outside","description":"Fora da janela: \"reject\" recusa (padrão); \"schedule\" aceita e envia na abertura da janela."}},"additionalProperties":false,"type":"object","title":"ActiveHoursPolicy"},"AudioContent":{"properties":{"media":{"$ref":"#/components/schemas/MediaInput"},"voice":{"type":"boolean","title":"Voice","description":"true envia como mensagem de voz (arquivo OGG/Opus).","default":false}},"additionalProperties":false,"type":"object","required":["media"],"title":"AudioContent"},"AvailabilityDay":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"uptime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Uptime","description":"Percentual conectado no dia; vazio se o dia não foi medido."}},"type":"object","required":["date","uptime"],"title":"AvailabilityDay"},"AvailabilityIncident":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End","description":"Vazio: a instância ainda está fora do ar."},"duration_s":{"type":"integer","title":"Duration S"},"state":{"type":"string","title":"State","description":"Estado que abriu a queda: disconnected, connecting, logged_out ou banned."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["start","end","duration_s","state","reason"],"title":"AvailabilityIncident"},"AvailabilityOut":{"properties":{"instance_id":{"type":"string","title":"Instance Id"},"month":{"type":"string","title":"Month"},"timezone":{"type":"string","title":"Timezone"},"period_start":{"type":"string","format":"date-time","title":"Period Start","description":"Início medido: o começo do mês ou a primeira conexão."},"period_end":{"type":"string","format":"date-time","title":"Period End","description":"Fim do mês ou agora, no mês corrente."},"uptime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Uptime","description":"Percentual do período em que a instância ficou conectada."},"up_seconds":{"type":"integer","title":"Up Seconds"},"tracked_seconds":{"type":"integer","title":"Tracked Seconds"},"incidents":{"items":{"$ref":"#/components/schemas/AvailabilityIncident"},"type":"array","title":"Incidents"},"days":{"items":{"$ref":"#/components/schemas/AvailabilityDay"},"type":"array","title":"Days"}},"type":"object","required":["instance_id","month","timezone","period_start","period_end","uptime","up_seconds","tracked_seconds","incidents","days"],"title":"AvailabilityOut"},"Body_upload_media_v1_media_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"O arquivo."},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Filename"}},"type":"object","required":["file"],"title":"Body_upload_media_v1_media_post"},"Button":{"properties":{"type":{"type":"string","enum":["reply","url","call","copy"],"title":"Type"},"id":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Id"},"label":{"type":"string","maxLength":25,"minLength":1,"title":"Label"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"phone":{"anyOf":[{"type":"string","pattern":"^\\+?[0-9]{8,15}$"},{"type":"null"}],"title":"Phone"},"code":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Code"}},"additionalProperties":false,"type":"object","required":["type","label"],"title":"Button"},"CaptionedMedia":{"properties":{"media":{"$ref":"#/components/schemas/MediaInput"},"caption":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Caption"}},"additionalProperties":false,"type":"object","required":["media"],"title":"CaptionedMedia"},"ContactCheckOut":{"properties":{"phone":{"type":"string","title":"Phone"},"exists":{"type":"boolean","title":"Exists"},"jid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jid"}},"type":"object","required":["phone","exists"],"title":"ContactCheckOut"},"ContactContent":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"phones":{"items":{"type":"string","pattern":"^\\+?[0-9]{8,15}$"},"type":"array","maxItems":5,"minItems":1,"title":"Phones"},"organization":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Organization"}},"additionalProperties":false,"type":"object","required":["name","phones"],"title":"ContactContent"},"DeliveryOut":{"properties":{"id":{"type":"string","title":"Id"},"endpoint_id":{"type":"string","title":"Endpoint Id"},"event_id":{"type":"string","title":"Event Id"},"event_type":{"type":"string","title":"Event Type"},"status":{"type":"string","enum":["pending","succeeded","failed"],"title":"Status"},"attempts":{"type":"integer","title":"Attempts"},"next_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Attempt At"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"last_latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Latency Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"}},"type":"object","required":["id","endpoint_id","event_id","event_type","status","attempts","next_attempt_at","last_status_code","last_error","last_latency_ms","created_at","delivered_at"],"title":"DeliveryOut"},"DeviceStatus":{"properties":{"status":{"type":"string","enum":["works","partial","broken","unknown"],"title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"}},"type":"object","required":["status","note","checked_at"],"title":"DeviceStatus"},"EditMessageRequest":{"properties":{"text":{"type":"string","maxLength":65536,"minLength":1,"title":"Text"}},"additionalProperties":false,"type":"object","required":["text"],"title":"EditMessageRequest"},"EventOut":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["id","type","instance_id","timestamp","data"],"title":"EventOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthFactor":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"status":{"type":"string","enum":["ok","attention","bad","info"],"title":"Status"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"Valor medido (proporção de 0 a 1 ou contagem)."},"detail":{"type":"string","title":"Detail"},"penalty":{"type":"integer","title":"Penalty","description":"Pontos que o fator tirou da nota."}},"type":"object","required":["key","label","status","detail","penalty"],"title":"HealthFactor"},"HealthOut":{"properties":{"instance_id":{"type":"string","title":"Instance Id"},"score":{"type":"integer","title":"Score","description":"0 a 100; quanto maior, menor o risco de banimento ou queda."},"risk":{"type":"string","enum":["low","medium","high"],"title":"Risk"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"warming_up":{"type":"boolean","title":"Warming Up"},"warmup_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Warmup Ends At"},"factors":{"items":{"$ref":"#/components/schemas/HealthFactor"},"type":"array","title":"Factors"},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations"}},"type":"object","required":["instance_id","score","risk","computed_at","warming_up","warmup_ends_at","factors","recommendations"],"title":"HealthOut"},"InstanceCreate":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"interactive_mode":{"type":"string","enum":["native","native+text","text"],"title":"Interactive Mode","default":"native+text"},"kind":{"type":"string","enum":["web","sandbox"],"title":"Kind","description":"web: número de WhatsApp de verdade. sandbox: instância simulada para integrar e testar sem celular (pareia sozinha, não envia nada ao WhatsApp, não conta no limite do plano).","default":"web"}},"additionalProperties":false,"type":"object","required":["name"],"title":"InstanceCreate"},"InstanceOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind","description":"web ou sandbox"},"environment":{"type":"string","title":"Environment"},"state":{"type":"string","title":"State","description":"pending_pair, connecting, connected, disconnected, logged_out, banned"},"jid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jid"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"interactive_mode":{"type":"string","enum":["native","native+text","text"],"title":"Interactive Mode"},"state_changed_at":{"type":"string","format":"date-time","title":"State Changed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"live":{"anyOf":[{"$ref":"#/components/schemas/LiveStatus"},{"type":"null"}],"description":"Estado consultado agora no motor; ausente se o motor não respondeu."}},"type":"object","required":["id","name","kind","environment","state","jid","business_name","interactive_mode","state_changed_at","created_at"],"title":"InstanceOut"},"InstanceUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name"},"interactive_mode":{"anyOf":[{"type":"string","enum":["native","native+text","text"]},{"type":"null"}],"title":"Interactive Mode"},"policy":{"anyOf":[{"$ref":"#/components/schemas/PolicyOverrides"},{"type":"null"}],"description":"Substitui as sobrescritas de política da instância ({} volta ao padrão da conta)."}},"additionalProperties":false,"type":"object","title":"InstanceUpdate"},"InteractiveContent":{"properties":{"body":{"type":"string","maxLength":1024,"minLength":1,"title":"Body"},"footer":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Footer"},"buttons":{"anyOf":[{"items":{"$ref":"#/components/schemas/Button"},"type":"array","maxItems":3,"minItems":1},{"type":"null"}],"title":"Buttons"},"list":{"anyOf":[{"$ref":"#/components/schemas/ListContent"},{"type":"null"}]},"mode":{"anyOf":[{"type":"string","enum":["native","native+text","text"]},{"type":"null"}],"title":"Mode","description":"Sobrescreve o modo interativo da instância."},"format":{"anyOf":[{"type":"string","enum":["native_flow","legacy"]},{"type":"null"}],"title":"Format"}},"additionalProperties":false,"type":"object","required":["body"],"title":"InteractiveContent"},"InteractiveFormatStatus":{"properties":{"format":{"type":"string","title":"Format"},"label":{"type":"string","title":"Label"},"monitor":{"anyOf":[{"$ref":"#/components/schemas/MonitorStatus"},{"type":"null"}],"description":"Monitor automático (entrega); ausente se nunca rodou."},"devices":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/DeviceStatus"},{"type":"null"}]},"type":"object","title":"Devices","description":"Conferência manual de como o app desenha o formato: android, iphone e web."}},"type":"object","required":["format","label","monitor","devices"],"title":"InteractiveFormatStatus"},"InteractiveStatusOut":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"formats":{"items":{"$ref":"#/components/schemas/InteractiveFormatStatus"},"type":"array","title":"Formats"}},"type":"object","required":["generated_at","formats"],"title":"InteractiveStatusOut"},"ListContent":{"properties":{"button":{"type":"string","maxLength":20,"minLength":1,"title":"Button"},"sections":{"items":{"$ref":"#/components/schemas/ListSection"},"type":"array","maxItems":10,"minItems":1,"title":"Sections"}},"additionalProperties":false,"type":"object","required":["button","sections"],"title":"ListContent"},"ListRow":{"properties":{"id":{"type":"string","maxLength":200,"minLength":1,"title":"Id"},"title":{"type":"string","maxLength":24,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":72},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","required":["id","title"],"title":"ListRow"},"ListSection":{"properties":{"title":{"type":"string","maxLength":24,"title":"Title"},"rows":{"items":{"$ref":"#/components/schemas/ListRow"},"type":"array","maxItems":10,"minItems":1,"title":"Rows"}},"additionalProperties":false,"type":"object","required":["title","rows"],"title":"ListSection"},"LiveStatus":{"properties":{"node_id":{"type":"string","title":"Node Id"},"state":{"type":"string","title":"State"},"connected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Connected"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},"type":"object","required":["node_id","state"],"title":"LiveStatus"},"LocationContent":{"properties":{"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude"},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude"},"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string","maxLength":400},{"type":"null"}],"title":"Address"}},"additionalProperties":false,"type":"object","required":["latitude","longitude"],"title":"LocationContent"},"MassBlockPolicy":{"properties":{"max_contacts":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":1.0},{"type":"null"}],"title":"Max Contacts"},"window_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":1.0},{"type":"null"}],"title":"Window Minutes"}},"additionalProperties":false,"type":"object","title":"MassBlockPolicy"},"MediaInput":{"properties":{"media_id":{"anyOf":[{"type":"string","pattern":"^med_[0-9a-f]{32}$"},{"type":"null"}],"title":"Media Id"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Filename"},"mimetype":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Mimetype"}},"additionalProperties":false,"type":"object","title":"MediaInput"},"MediaOut":{"properties":{"id":{"type":"string","title":"Id"},"mimetype":{"type":"string","title":"Mimetype"},"size":{"type":"integer","title":"Size"},"sha256":{"type":"string","title":"Sha256"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Link temporário para baixar o arquivo."}},"type":"object","required":["id","mimetype","size","sha256","filename","created_at","expires_at"],"title":"MediaOut"},"MessageError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["code","message"],"title":"MessageError"},"MessageOut":{"properties":{"id":{"type":"string","title":"Id"},"instance_id":{"type":"string","title":"Instance Id"},"direction":{"type":"string","enum":["outbound","inbound"],"title":"Direction"},"to":{"type":"string","title":"To"},"type":{"type":"string","title":"Type"},"status":{"type":"string","enum":["queued","sending","sent","delivered","read","failed"],"title":"Status"},"wa_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wa Message Id"},"rendered_as":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rendered As"},"error":{"anyOf":[{"$ref":"#/components/schemas/MessageError"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"},"failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failed At"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For","description":"Mensagem fora da janela de horário: quando ela sai (política `active_hours`)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instance_id","direction","to","type","status","wa_message_id","rendered_as","error","created_at","sent_at","delivered_at","read_at","failed_at","updated_at"],"title":"MessageOut"},"MonitorStatus":{"properties":{"result":{"type":"string","enum":["ok","failed","pending"],"title":"Result"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"},"success_rate_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Rate 30D","description":"Rodadas ok ÷ rodadas conferidas em 30 dias."},"runs_30d":{"type":"integer","title":"Runs 30D"}},"type":"object","required":["result","checked_at","success_rate_30d","runs_30d"],"title":"MonitorStatus"},"OptOutCreate":{"properties":{"phone":{"type":"string","pattern":"^\\d{10,15}$","title":"Phone","description":"Número com DDI e DDD, só dígitos. Ex.: 5537999990000."}},"additionalProperties":false,"type":"object","required":["phone"],"title":"OptOutCreate"},"OptOutOut":{"properties":{"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Número do contato, quando conhecido."},"contact_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Id","description":"JID do contato no WhatsApp, quando veio de uma mensagem."},"source":{"type":"string","enum":["keyword","api","panel"],"title":"Source","description":"keyword: o contato mandou a palavra; api ou panel: cadastrado à mão."},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"Palavra que o contato mandou (source = keyword)."},"instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id","description":"Instância que recebeu a palavra."},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["phone","contact_id","source","keyword","instance_id","created_at"],"title":"OptOutOut"},"OptOutPolicy":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"Reconhece as palavras de descadastro e de retorno."},"keywords":{"anyOf":[{"items":{"type":"string","maxLength":30,"minLength":1},"type":"array","maxItems":20,"minItems":1},{"type":"null"}],"title":"Keywords","description":"Mensagem só com uma destas palavras descadastra o contato (ignora acento e caixa)."},"resume_keywords":{"anyOf":[{"items":{"type":"string","maxLength":30,"minLength":1},"type":"array","maxItems":20},{"type":"null"}],"title":"Resume Keywords","description":"Mensagem só com uma destas palavras volta a liberar o contato."}},"additionalProperties":false,"type":"object","title":"OptOutPolicy"},"Page_DeliveryOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DeliveryOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Passe em ?cursor= para a próxima página; null no fim."}},"type":"object","required":["data"],"title":"Page[DeliveryOut]"},"Page_EventOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EventOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Passe em ?cursor= para a próxima página; null no fim."}},"type":"object","required":["data"],"title":"Page[EventOut]"},"Page_InstanceOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstanceOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Passe em ?cursor= para a próxima página; null no fim."}},"type":"object","required":["data"],"title":"Page[InstanceOut]"},"Page_MessageOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MessageOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Passe em ?cursor= para a próxima página; null no fim."}},"type":"object","required":["data"],"title":"Page[MessageOut]"},"Page_OptOutOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OptOutOut"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Passe em ?cursor= para a próxima página; null no fim."}},"type":"object","required":["data"],"title":"Page[OptOutOut]"},"PairingOut":{"properties":{"instance_id":{"type":"string","title":"Instance Id"},"state":{"type":"string","title":"State"},"qr":{"anyOf":[{"$ref":"#/components/schemas/QRCode"},{"type":"null"}],"description":"QR em exibição, enquanto o pareamento estiver aberto (state = pairing)."},"pairing_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pairing Code","description":"Código de 8 dígitos para digitar no celular."}},"type":"object","required":["instance_id","state"],"title":"PairingOut"},"PairingRequest":{"properties":{"method":{"type":"string","enum":["qr","code"],"title":"Method","default":"qr"},"phone":{"anyOf":[{"type":"string","pattern":"^[0-9]{8,15}$"},{"type":"null"}],"title":"Phone","description":"Obrigatório para method=code."}},"additionalProperties":false,"type":"object","title":"PairingRequest"},"PolicyOut":{"properties":{"environment":{"type":"string","title":"Environment"},"effective":{"additionalProperties":true,"type":"object","title":"Effective","description":"Política em vigor: ambiente < conta < instância."},"account_overrides":{"additionalProperties":true,"type":"object","title":"Account Overrides"},"instance_overrides":{"additionalProperties":true,"type":"object","title":"Instance Overrides"},"warming_up":{"type":"boolean","title":"Warming Up","description":"Número novo: limites multiplicados pelo fator de aquecimento."}},"type":"object","required":["environment","effective","account_overrides","instance_overrides","warming_up"],"title":"PolicyOut"},"PolicyOverrides":{"properties":{"per_minute":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Per Minute","description":"Envios por minuto da instância; acima disso as mensagens esperam na fila."},"new_contacts_per_day":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"New Contacts Per Day","description":"Contatos que nunca escreveram que podem receber mensagem em 24 h."},"mass_block":{"anyOf":[{"$ref":"#/components/schemas/MassBlockPolicy"},{"type":"null"}],"description":"Bloqueia o mesmo texto para muitos contatos novos em pouco tempo."},"active_hours":{"anyOf":[{"$ref":"#/components/schemas/ActiveHoursPolicy"},{"type":"null"}],"description":"Janela para mensagens a quem não escreveu nas últimas 24 h."},"typing":{"anyOf":[{"$ref":"#/components/schemas/TypingPolicy"},{"type":"null"}]},"warmup":{"anyOf":[{"$ref":"#/components/schemas/WarmupPolicy"},{"type":"null"}],"description":"Limites menores nos primeiros dias do número."},"menu_ttl_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Menu Ttl Hours","description":"Por quanto tempo a resposta em texto a um menu é reconhecida."},"opt_out":{"anyOf":[{"$ref":"#/components/schemas/OptOutPolicy"},{"type":"null"}],"description":"Descadastro por palavra-chave (SAIR, PARAR...); `null` desliga o reconhecimento."}},"additionalProperties":false,"type":"object","title":"PolicyOverrides","description":"Só os campos informados sobrescrevem; `null` desliga o limite."},"PollContent":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"options":{"items":{"$ref":"#/components/schemas/PollOption"},"type":"array","maxItems":12,"minItems":2,"title":"Options"},"selectable":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Selectable","default":1}},"additionalProperties":false,"type":"object","required":["name","options"],"title":"PollContent"},"PollOption":{"properties":{"id":{"type":"string","maxLength":100,"minLength":1,"title":"Id"},"label":{"type":"string","maxLength":100,"minLength":1,"title":"Label"}},"additionalProperties":false,"type":"object","required":["id","label"],"title":"PollOption"},"PresenceRequest":{"properties":{"state":{"type":"string","enum":["typing","recording","paused"],"title":"State"}},"additionalProperties":false,"type":"object","required":["state"],"title":"PresenceRequest"},"QRCode":{"properties":{"code":{"type":"string","title":"Code","description":"Conteúdo do QR, para quem prefere gerar a imagem do próprio lado."},"expires_in_s":{"type":"integer","title":"Expires In S","description":"Segundos até o WhatsApp trocar este QR por outro."},"image":{"type":"string","title":"Image","description":"Imagem PNG do QR em data URL (data:image/png;base64,...), pronta para usar em <img src>."}},"type":"object","required":["code","expires_in_s","image"],"title":"QRCode"},"ReactionRequest":{"properties":{"emoji":{"type":"string","maxLength":16,"title":"Emoji","description":"Vazio remove a reação."}},"additionalProperties":false,"type":"object","required":["emoji"],"title":"ReactionRequest"},"ReadRequest":{"properties":{"wa_message_ids":{"items":{"type":"string","maxLength":128,"minLength":1},"type":"array","maxItems":100,"minItems":1,"title":"Wa Message Ids"},"sender":{"anyOf":[{"type":"string","pattern":"^([0-9]{8,15}|[0-9A-Za-z.:_-]+@(s\\.whatsapp\\.net|g\\.us|lid))$","description":"Telefone com DDI, só dígitos (ex.: 5537999990000), ou JID completo."},{"type":"null"}],"title":"Sender"}},"additionalProperties":false,"type":"object","required":["wa_message_ids"],"title":"ReadRequest"},"RetryFailedOut":{"properties":{"requeued":{"type":"integer","title":"Requeued"}},"type":"object","required":["requeued"],"title":"RetryFailedOut"},"RetryFailedRequest":{"properties":{"since":{"type":"string","format":"date-time","title":"Since"},"until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},"additionalProperties":false,"type":"object","required":["since"],"title":"RetryFailedRequest"},"SandboxInbound":{"properties":{"from":{"type":"string","pattern":"^[0-9]{8,15}$","title":"From","description":"Quem manda a mensagem: telefone com DDI, só dígitos."},"text":{"type":"string","maxLength":4096,"minLength":1,"title":"Text"},"quoted_wa_message_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}],"title":"Quoted Wa Message Id","description":"Mensagem citada (responder a uma mensagem enviada)."},"reply":{"anyOf":[{"$ref":"#/components/schemas/SandboxReply"},{"type":"null"}],"description":"Simula um clique em botão, lista ou enquete: vira message.interactive_reply."}},"additionalProperties":false,"type":"object","required":["from","text"],"title":"SandboxInbound"},"SandboxInboundOut":{"properties":{"wa_message_id":{"type":"string","title":"Wa Message Id"}},"type":"object","required":["wa_message_id"],"title":"SandboxInboundOut"},"SandboxReply":{"properties":{"option_id":{"type":"string","maxLength":200,"minLength":1,"title":"Option Id"},"label":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Label"},"source":{"type":"string","enum":["button","native_flow","list","poll"],"title":"Source","default":"native_flow"},"in_reply_to_wa_message_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}],"title":"In Reply To Wa Message Id"}},"additionalProperties":false,"type":"object","required":["option_id"],"title":"SandboxReply"},"SecretRotated":{"properties":{"secret":{"type":"string","title":"Secret","description":"Novo segredo. O anterior continua assinando até previous_expires_at."},"previous_expires_at":{"type":"string","format":"date-time","title":"Previous Expires At"}},"type":"object","required":["secret","previous_expires_at"],"title":"SecretRotated"},"SendMessageRequest":{"properties":{"instance_id":{"type":"string","pattern":"^ins_[0-9a-f]{32}$","title":"Instance Id"},"to":{"type":"string","pattern":"^([0-9]{8,15}|[0-9A-Za-z.:_-]+@(s\\.whatsapp\\.net|g\\.us|lid))$","title":"To","description":"Telefone com DDI, só dígitos (ex.: 5537999990000), ou JID completo."},"type":{"type":"string","enum":["text","image","video","audio","document","sticker","location","contact","interactive","poll"],"title":"Type"},"reply_to":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}],"title":"Reply To","description":"ID da mensagem citada: msg_... (enviada por esta API) ou o ID do WhatsApp."},"mentions":{"anyOf":[{"items":{"type":"string","pattern":"^[0-9]{8,15}$"},"type":"array","maxItems":50},{"type":"null"}],"title":"Mentions"},"text":{"anyOf":[{"$ref":"#/components/schemas/TextContent"},{"type":"null"}]},"image":{"anyOf":[{"$ref":"#/components/schemas/CaptionedMedia"},{"type":"null"}]},"video":{"anyOf":[{"$ref":"#/components/schemas/CaptionedMedia"},{"type":"null"}]},"document":{"anyOf":[{"$ref":"#/components/schemas/CaptionedMedia"},{"type":"null"}]},"audio":{"anyOf":[{"$ref":"#/components/schemas/AudioContent"},{"type":"null"}]},"sticker":{"anyOf":[{"$ref":"#/components/schemas/StickerContent"},{"type":"null"}]},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationContent"},{"type":"null"}]},"contact":{"anyOf":[{"$ref":"#/components/schemas/ContactContent"},{"type":"null"}]},"interactive":{"anyOf":[{"$ref":"#/components/schemas/InteractiveContent"},{"type":"null"}]},"poll":{"anyOf":[{"$ref":"#/components/schemas/PollContent"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["instance_id","to","type"],"title":"SendMessageRequest"},"StickerContent":{"properties":{"media":{"$ref":"#/components/schemas/MediaInput"}},"additionalProperties":false,"type":"object","required":["media"],"title":"StickerContent"},"TextContent":{"properties":{"body":{"type":"string","maxLength":65536,"minLength":1,"title":"Body"},"preview_url":{"type":"boolean","title":"Preview Url","default":false}},"additionalProperties":false,"type":"object","required":["body"],"title":"TextContent"},"TypingPolicy":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"ms_per_char":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":0.0},{"type":"null"}],"title":"Ms Per Char"},"min_ms":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Min Ms"},"max_ms":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Max Ms"},"jitter_ms":{"anyOf":[{"type":"integer","maximum":5000.0,"minimum":0.0},{"type":"null"}],"title":"Jitter Ms"}},"additionalProperties":false,"type":"object","title":"TypingPolicy"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WarmupPolicy":{"properties":{"days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Days"},"factor":{"anyOf":[{"type":"number","maximum":1.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Factor"}},"additionalProperties":false,"type":"object","title":"WarmupPolicy"},"WebhookEndpointCreate":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":8,"title":"Url"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description"},"event_types":{"items":{"type":"string","enum":["message.received","message.sent_from_device","message.sent","message.failed","message.status_updated","message.interactive_reply","message.edited","message.deleted","message.reaction","instance.qr","instance.paired","instance.connected","instance.disconnected","instance.logged_out","instance.banned","webhook.test"]},"type":"array","maxItems":20,"title":"Event Types","description":"Vazio = todos, menos instance.qr."},"instance_ids":{"items":{"type":"string","pattern":"^ins_[0-9a-f]{32}$"},"type":"array","maxItems":500,"title":"Instance Ids","description":"Vazio = todas as instâncias da conta."}},"additionalProperties":false,"type":"object","required":["url"],"title":"WebhookEndpointCreate"},"WebhookEndpointCreated":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types"},"instance_ids":{"items":{"type":"string"},"type":"array","title":"Instance Ids"},"active":{"type":"boolean","title":"Active"},"disabled_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disabled Reason"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"failing_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failing Since"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"secret":{"type":"string","title":"Secret","description":"Segredo para validar a assinatura (whsec_...). Mostrado só agora."}},"type":"object","required":["id","url","description","event_types","instance_ids","active","disabled_reason","consecutive_failures","failing_since","created_at","updated_at","secret"],"title":"WebhookEndpointCreated"},"WebhookEndpointOut":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types"},"instance_ids":{"items":{"type":"string"},"type":"array","title":"Instance Ids"},"active":{"type":"boolean","title":"Active"},"disabled_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disabled Reason"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"failing_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failing Since"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","url","description","event_types","instance_ids","active","disabled_reason","consecutive_failures","failing_since","created_at","updated_at"],"title":"WebhookEndpointOut"},"WebhookEndpointUpdate":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":8},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description"},"event_types":{"anyOf":[{"items":{"type":"string","enum":["message.received","message.sent_from_device","message.sent","message.failed","message.status_updated","message.interactive_reply","message.edited","message.deleted","message.reaction","instance.qr","instance.paired","instance.connected","instance.disconnected","instance.logged_out","instance.banned","webhook.test"]},"type":"array","maxItems":20},{"type":"null"}],"title":"Event Types"},"instance_ids":{"anyOf":[{"items":{"type":"string","pattern":"^ins_[0-9a-f]{32}$"},"type":"array","maxItems":500},{"type":"null"}],"title":"Instance Ids"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active","description":"true reativa um destino desativado por falhas."}},"additionalProperties":false,"type":"object","title":"WebhookEndpointUpdate"}},"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"gwk_live_...","description":"Chave de API da conta."}}}}