# AtendroZAP — documentação completa Origem: https://wpp.atendro.cloud/docs Exemplos ilustrativos; não contêm credenciais ou conversas reais. Fonte: https://wpp.atendro.cloud/docs.md # Documentação do AtendroZAP Integre instâncias do WhatsApp ao Atendro: gerencie a conexão, envie mensagens e receba eventos no seu próprio webhook. Esta é a central de documentação de todos os servidores. Use os guias para montar a integração e a referência da API para consultar cada operação, seus campos e suas respostas. ## Comece pela sua integração 1. [Cadastre o servidor e teste o acesso](https://wpp.atendro.cloud/docs/guias/primeiros-passos.md). Confirme a URL da API e o token administrativo. 2. [Crie e conecte uma instância](https://wpp.atendro.cloud/docs/guias/instancias.md). Guarde o ID, o token da instância e o vínculo com a empresa. 3. [Configure o webhook global](https://wpp.atendro.cloud/docs/guias/webhooks.md). Escolha os eventos e um destino para as instâncias desse servidor. 4. [Implemente o receptor no Atendro](https://wpp.atendro.cloud/docs/guias/receber-eventos.md). Valide a assinatura e processe os eventos com idempotência. ## Central, servidor e instância | Recurso | Endereço ou credencial | Responsabilidade | |---|---|---| | Central | `https://wpp.atendro.cloud` | Painel de administração e esta documentação pública | | API do servidor 1 | `https://1.atendro.cloud` | Operações REST do servidor selecionado | | Token do servidor | Header `admintoken` | Criar instâncias, consultar capacidades e administrar o webhook global | | Token da instância | Header `token` | Conectar a instância, enviar mensagens e consultar seus dados | A URL da central não substitui a URL da API. Cada servidor tem seu próprio endereço e sua própria credencial administrativa. ## Explore a API por recurso - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md): criação, pareamento, status, reinício e exclusão. - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md): texto, mídia, contato, localização e menus. - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md): encaminhamento, reação, edição e exclusão. - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md): histórico armazenado, contatos, números e foto de perfil. - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md): cadastro global, exceções, entrega e reprocessamento. - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md): consulta e operações administrativas de grupo. - [Referência completa](https://wpp.atendro.cloud/docs/api.md): todos os métodos e caminhos publicados. ## Recursos disponíveis Consulte `GET /v1/capabilities` no servidor antes de habilitar uma ação no Atendro. A API documentada está em fase `laboratory`: os testes de contrato e a disponibilidade HTTP não substituem a homologação da integração com números autorizados. **Chamadas de voz usam instâncias de tipo `calls`.** Habilite a interface quando o servidor anunciar `capabilities.calls=true` e a instância de ligação estiver conectada. A instância de mensagens mantém a resposta `501 calls_not_supported`. Consulte o [guia de chamadas de voz](https://wpp.atendro.cloud/docs/guias/chamadas-de-voz.md). ## Documentação para ferramentas e IA - [OpenAPI 3.1](https://wpp.atendro.cloud/openapi.json): contrato estruturado de requisições e respostas. - [llms.txt](https://wpp.atendro.cloud/llms.txt): índice por assunto com links para cada guia, endpoint e modelo. - [llms-full.txt](https://wpp.atendro.cloud/llms-full.txt): conteúdo completo em um único documento de texto. - Cada página também tem uma versão **Markdown**, acessível pelo link no cabeçalho do conteúdo. --- Fonte: https://wpp.atendro.cloud/docs/guias/primeiros-passos.md # Primeiros passos Prepare o cadastro do provedor AtendroZAP, teste o acesso ao servidor e crie a primeira instância da integração. ## 1. Cadastre o servidor No backend do Atendro, guarde a URL base e o token administrativo do servidor. O exemplo abaixo usa o servidor 1. Em outra instalação, substitua a URL pelo endereço correspondente. ```sh export ATENDROZAP_URL="https://1.atendro.cloud" # Defina ATENDROZAP_ADMIN_TOKEN no ambiente privado do seu backend. ``` Guarde a URL sem `/v1`, `/instance`, query ou barra final. O token é o valor configurado em `ATENDROZAP_ADMIN_TOKEN` nesse servidor. Ele é diferente da senha do console e do segredo do webhook. O provedor precisa ser implementado no Atendro antes de ativar o cadastro. Vincule cada instância ao servidor e à empresa corretos. Veja [servidores e autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md). ## 2. Teste saúde e autenticação ```sh curl --request GET "$ATENDROZAP_URL/health/ready" curl --request GET "$ATENDROZAP_URL/v1/capabilities" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` O primeiro endpoint deve responder `200` com `status: ready`. O segundo verifica o token e informa as capacidades. `401` indica credencial ou header incorreto. O teste de cadastro não precisa conectar uma instância nem enviar mensagens. ## 3. Configure o receptor de eventos No [console](https://wpp.atendro.cloud), abra **Servidores → servidor → Configurações de webhook**. Informe a URL HTTPS do novo receptor no Atendro, o segredo de assinatura e os eventos necessários. Você também pode usar [POST /v1/webhook](https://wpp.atendro.cloud/docs/api/configure-global-webhook.md) com `admintoken`. As novas instâncias herdam o destino global. O [guia de webhooks](https://wpp.atendro.cloud/docs/guias/webhooks.md) explica as exceções e a desativação por instância. ## 4. Crie a instância ```sh curl --request POST "$ATENDROZAP_URL/instance/init" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: cadastro-instancia-exemplo-001" \ --data '{"name":"atendimento-teste","systemName":"Atendro","companyId":"empresa-teste"}' ``` A resposta é `200` e contém `instance.id` e `instance.token`. Guarde ambos no backend antes de continuar. A criação não conecta o WhatsApp. A listagem posterior não recupera o token. Use uma chave de idempotência nova para cada criação de negócio; mantenha a mesma chave e os mesmos bytes do corpo ao repetir uma tentativa. Consulte [erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## 5. Faça o pareamento autorizado Depois de guardar o token da instância em `ATENDROZAP_INSTANCE_TOKEN`, o fluxo de pareamento usa: ```sh curl --request POST "$ATENDROZAP_URL/instance/connect" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{}' ``` Execute esse passo somente com o responsável e o telefone autorizados. Mostre o QR apenas na interface privada. Acompanhe [GET /instance/status](https://wpp.atendro.cloud/docs/api/get-instance-status.md) até a sessão estar conectada e autenticada. ## Próximo passo Implemente o recebimento de eventos antes de habilitar automações. Depois, consulte [enviar texto](https://wpp.atendro.cloud/docs/api/send-text.md), [enviar mídia](https://wpp.atendro.cloud/docs/api/send-media.md) e [consultar conversas](https://wpp.atendro.cloud/docs/api/find-chats.md). --- Fonte: https://wpp.atendro.cloud/docs/guias/autenticacao.md # Servidores e autenticação O painel central gerencia vários servidores. As requisições REST são enviadas à URL do servidor selecionado, usando a credencial exigida pelo endpoint. ## URLs de cadastro | Campo | Valor | |---|---| | Console e documentação | `https://wpp.atendro.cloud` | | API do servidor 1 | `https://1.atendro.cloud` | | API local padrão | `http://127.0.0.1:8091` | | Token do servidor | `ATENDROZAP_ADMIN_TOKEN` desse servidor, cadastrado no backend privado | No Atendro, selecione o provedor `atendrozap` quando a integração estiver implementada. A URL deve apontar para a API, sem acrescentar `/v1` ou `/instance`. Para outro servidor, cadastre a URL e o token daquele servidor. ## Token administrativo Envie o header `admintoken` para criar e listar instâncias, consultar capacidades, administrar instâncias por ID e configurar o webhook global. ```sh curl "$ATENDROZAP_URL/v1/capabilities" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` O token é definido no servidor AtendroZAP. Não use a senha do console, o segredo de assinatura do webhook ou uma credencial do provedor anterior. Para copiar o token de um servidor já cadastrado, entre no console e abra **Servidores**. Abaixo da URL, clique no valor mascarado ou no ícone de **Token administrativo**. O painel busca a credencial somente nesse clique e a copia para a área de transferência, mantendo a tela mascarada. Essa ação exige uma sessão autenticada; não reemite o token nem altera instâncias. Use o valor no cadastro privado do backend da aplicação que consumirá a API. ## Token da instância Envie o header `token` nas operações da instância. Esse segredo é retornado em `POST /instance/init` e na reemissão administrativa de token. ```sh curl "$ATENDROZAP_URL/instance/status" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` Guarde o token associado ao ID da instância, ao servidor e à empresa. `GET /instance/all` não recupera o segredo. O token administrativo não substitui o token da instância nessas rotas. ## Headers aceitos Envie exatamente um header da credencial exigida. Headers ausentes, inválidos ou duplicados devolvem `401 unauthorized`. `Authorization: Bearer`, query string e `instancekey` não substituem `admintoken` e `token`. A única exceção para query é `GET /call/{id}/audio`, que aceita `?token=` na abertura do WebSocket. O console faz proxy usando o header no backend, sem entregar o token ao navegador. O botão de testar cadastro deve consultar somente readiness e capacidades. Não conecte, reinicie, exclua ou reemita tokens como teste de autenticação. ## Reemissão de token Use [POST /v1/instances/{id}/token](https://wpp.atendro.cloud/docs/api/admin-reissue-token.md) com `admintoken` quando for necessário substituir o segredo. `graceSeconds` aceita de 0 a 3600 segundos de convivência com o anterior; zero o revoga imediatamente. A aplicação deve salvar o novo token no backend antes de substituir a credencial usada pelas próximas requisições. ## Segredos de webhook e mídia O segredo de assinatura do webhook é separado dos tokens REST. Ele valida `X-AtendroZAP-Signature` no receptor, como descrito em [receber eventos](https://wpp.atendro.cloud/docs/guias/receber-eventos.md). Links de mídia carregam um token temporário na própria URL. Consuma o `fileURL` completo e respeite `expiresAt`; não remonte o link nem inclua sua URL em logs. ## Cadastro no Atendro Adapte as restrições de domínio e o tipo de provedor no consumidor antes da ativação. Trocar a URL de um cadastro do provedor anterior não implementa o contrato AtendroZAP. O navegador do atendente deve chamar o backend do Atendro. Tokens administrativos, tokens de instância e segredos de webhook ficam nesse backend. Esta documentação pública não recebe credenciais. --- Fonte: https://wpp.atendro.cloud/docs/guias/instancias.md # Ciclo de vida da instância Uma instância representa a sessão de WhatsApp de uma empresa em um servidor. Criação, conexão, reinício e exclusão têm efeitos diferentes. ## Fluxo de integração | Etapa | Operação | Resultado esperado | |---|---|---| | Criar | [POST /instance/init](https://wpp.atendro.cloud/docs/api/create-instance.md) | ID e token; estado `disconnected` | | Preparar eventos | [POST /v1/webhook](https://wpp.atendro.cloud/docs/api/configure-global-webhook.md) | Destino global herdado pela instância | | Conectar | [POST /instance/connect](https://wpp.atendro.cloud/docs/api/connect-instance.md) | Início de conexão, QR ou código de pareamento | | Acompanhar | [GET /instance/status](https://wpp.atendro.cloud/docs/api/get-instance-status.md) | Estado, `connected`, `loggedIn` e resumo de webhook | | Reiniciar sessão | [POST /instance/restart](https://wpp.atendro.cloud/docs/api/restart-instance.md) | Retoma a sessão com credenciais guardadas | | Desvincular | [POST /instance/disconnect](https://wpp.atendro.cloud/docs/api/disconnect-instance.md) | Remove a credencial local e tenta desvincular remotamente | | Excluir | [DELETE /instance](https://wpp.atendro.cloud/docs/api/delete-instance.md) | Remove a instância e seus dados associados | ## Criação e vínculo O cadastro usa `admintoken`. `name` é obrigatório; `systemName` e `companyId` ajudam a identificar a integração. Guarde o vínculo servidor → empresa → ID de instância no backend do Atendro. `kind` é fixado na criação: `whatsapp` (padrão) para mensagens e `calls` para voz. A instância de ligação tem pareamento próprio e pode usar um número dedicado ou outro dispositivo vinculado do mesmo número. O campo `companyId` não concede autorização automaticamente. A aplicação deve validar o vínculo em cada ação e em cada evento recebido. ## Estados da sessão | Estado | Significado | |---|---| | `disconnected` | Não há sessão autenticada disponível para as operações | | `connecting` | Pareamento ou conexão em andamento | | `connected` | Sessão conectada; considere também `connected` e `loggedIn` na resposta | O QR é temporário. Mostre-o apenas ao usuário autorizado e consulte o status para obter uma versão vigente. Não registre QR, código de pareamento ou chaves de sessão. ## Webhook de conexão O evento `connection` informa mudanças de estado. Configure a inscrição antes de iniciar o pareamento, porque uma URL nova começa a receber eventos após seu cadastro. `qrcode` é aceito por compatibilidade, mas não é entregue. Obtenha o QR pelo fluxo privado de connect/status. Veja [payloads dos eventos](https://wpp.atendro.cloud/docs/guias/eventos.md). ## Reinício e desconexão `restart` preserva a credencial de sessão. `disconnect` limpa a credencial local mesmo quando `unlinked` é `false`; nesse caso, a confirmação remota da desvinculação não ocorreu. O reinício administrativo do worker em [POST /admin/restart](https://wpp.atendro.cloud/docs/api/admin-restart-worker.md) devolve `202` e agenda o trabalho em background. Ele não retorna uma contagem de sessões já reiniciadas. ## Sessões distribuídas Cada sessão tem um worker dono e um lease. `409 session_owned_elsewhere` indica que a sessão está sob responsabilidade de outro worker; não crie outra instância para contornar o erro. Uma instância conectada permite apenas os recursos anunciados por `GET /v1/capabilities`. Conexão não implica suporte a chamadas de voz. --- Fonte: https://wpp.atendro.cloud/docs/guias/webhooks.md # Configurar webhooks Cadastre um destino global para os eventos de cada servidor. As instâncias podem herdar esse destino, usar uma configuração própria ou manter a entrega desativada. ## Cadastro pelo console No [console central](https://wpp.atendro.cloud), abra **Servidores → servidor → Configurações de webhook**. Informe a URL HTTPS do novo receptor AtendroZAP no Atendro, o segredo de assinatura e os eventos desejados. O global pertence ao servidor selecionado. As instâncias atuais sem exceção e as novas instâncias herdam URL, segredo e eventos. A configuração é persistida e permanece após o reinício. ## Cadastro pela API Use [POST /v1/webhook](https://wpp.atendro.cloud/docs/api/configure-global-webhook.md) na URL da API do servidor e o header `admintoken`. ```json { "action": "update", "url": "https://seu-atendro.example/webhooks/atendrozap", "secret": "", "events": ["connection", "messages", "messages_update", "messages_edit", "groups"], "enabled": true } ``` Substitua os marcadores no backend privado. A URL precisa ser HTTPS pública, sem credenciais embutidas ou redirecionamento. O segredo aceita até 256 caracteres ASCII sem espaços e não é devolvido nas consultas. ## Herança por instância | Ação | Endpoint ou opção | Efeito | |---|---|---| | Usar o global | `POST /webhook`, `action: inherit` | A instância acompanha o destino do servidor | | Criar exceção | `POST /webhook`, `action: update` | URL e eventos próprios para essa instância | | Desativar na instância | `POST /webhook`, `action: delete` | Impede que futuras alterações globais reativem a entrega | | Pausar o global | `POST /v1/webhook`, `enabled: false` | Pausa somente as instâncias que herdam | | Remover o global | `POST /v1/webhook`, `action: delete` | Remove inscrições herdadas e preserva exceções | Cadastros anteriores à migração de herança permanecem como configurações próprias. Escolha **Usar webhook global** em cada instância que deve passar a herdar. ## Eventos entregues | Evento | Uso no Atendro | |---|---| | `connection` | Atualizar o estado da instância | | `messages` | Receber mensagens novas e ações projetadas nesse formato | | `messages_update` | Atualizar entrega, leitura e exclusão | | `messages_edit` | Atualizar o conteúdo de uma mensagem existente | | `groups` | Atualizar informações e participantes de grupos | | `call` | Acompanhar estados das ligações em instâncias `calls` | | `limits` | Informar limites da sessão | | `undecryptable` | Tratar mensagem que não pôde ser decifrada | `qrcode`, `chats` e `history` não são entregues. Nomes de compatibilidade aceitos aparecem em `ignoredEvents`; nomes desconhecidos retornam `400 invalid_event`. `addUrlEvents` e `addUrlTypesMessages` devem ser `false`. ## Mudança de URL e backlog A mesma URL preserva cursor e saúde de entrega. Um segredo omitido preserva o anterior quando a URL é a mesma. Ao mudar de URL, informe o segredo do novo destino; a inscrição começa após os eventos já existentes. Registrar um webhook não reenvia automaticamente o histórico. Eventos anteriores ao registro não são entregues por essa inscrição. ## Acompanhar a entrega [GET /webhook](https://wpp.atendro.cloud/docs/api/get-webhook.md) informa `inheritedGlobal` e `deliveryStatus`, incluindo pendentes, dead-letters e a última falha. [GET /webhook/errors](https://wpp.atendro.cloud/docs/api/get-webhook-errors.md) consulta as falhas recentes sem devolver payloads. O receptor deve validar a assinatura, deduplicar eventos e responder 2xx somente após uma gravação durável. Continue em [implementar o receptor](https://wpp.atendro.cloud/docs/guias/receber-eventos.md) e [payloads e política de entrega](https://wpp.atendro.cloud/docs/guias/eventos.md). --- Fonte: https://wpp.atendro.cloud/docs/guias/receber-eventos.md # Receptor AtendroZAP no Atendro Contrato para criar um **novo receptor específico do AtendroZAP**. O endpoint do provedor anterior não é reutilizado. A implementação e a URL definitiva no Atendro serão feitas separadamente; nenhum destino real está predefinido aqui. ## Cadastro global por servidor No console [wpp.atendro.cloud](https://wpp.atendro.cloud): **Servidores → servidor → Configurações de webhook**. Informe URL HTTPS pública, segredo de assinatura e eventos. Salve com entrega habilitada quando o receptor estiver pronto. Credenciais reais ficam no backend privado. Via API, `GET /v1/webhook` consulta e `POST /v1/webhook` salva na URL do servidor selecionado, ambos com header `admintoken`. A documentação fica na central; o webhook global continua sendo uma configuração de cada servidor. O corpo de cadastro é: ```json { "url": "https://seu-atendro.example/webhooks/atendrozap", "secret": "", "events": ["connection", "messages", "messages_update", "messages_edit", "groups", "limits", "undecryptable"], "enabled": true, "excludeMessages": [] } ``` O segredo deve ter até 256 caracteres ASCII sem espaços. Para gerar um novo, `openssl rand -hex 32` produz 32 bytes aleatórios; guarde o resultado somente no servidor e no receptor. É diferente do `admintoken` e dos tokens de instância. Com `ATENDROZAP_ENVELOPE_KEY`, fica cifrado no banco; as consultas só devolvem `hasSecret` e `secretSealed`, nunca o valor. | Ação | Resultado | |---|---| | Salvar o global | Aplica às instâncias atuais sem exceção e às novas, em transação | | Salvar `enabled:false` | Pausa as instâncias que herdam; a mesma URL mantém o cursor | | Salvar a mesma URL sem `secret` | Preserva o segredo anterior | | Trocar URL | Começa após os eventos já existentes; informe o segredo do novo destino | | `POST /v1/webhook` com `{"action":"delete"}` | Remove o global e as inscrições herdadas; preserva as próprias | | `POST /webhook` com token de instância | Cria uma configuração própria, independente do global | | `POST /webhook` com `{"action":"delete"}` | Desativa essa instância inclusive em futuras mudanças globais | | `POST /webhook` com `{"action":"inherit"}` | Remove a exceção e passa a seguir o global, inclusive se cadastrado depois | A administração por ID usa `GET/POST /v1/instances/{id}/webhook` e `GET /v1/instances/{id}/webhook/errors`, com `admintoken`, sem reemitir o token. `GET /webhook` informa `inheritedGlobal` quando há inscrição. Uma instância sem destino pode optar por `inherit` antes de existir um global. Se não existir global, a ação remove o destino próprio e aguarda o futuro cadastro. Inscrições existentes antes desta versão são preservadas como configurações próprias. Para incluí-las no global, selecione **Usar webhook global** em cada uma. `ATENDROZAP_WEBHOOK_URL` e `ATENDROZAP_WEBHOOK_SECRET` inicializam o cadastro global uma única vez. A configuração salva no banco, inclusive sua remoção, prevalece sobre essas variáveis nos próximos reinícios. ## Identificar servidor, instância e empresa No Atendro, cadastre o servidor com URL base e token administrativo. Associe cada `instanceId` retornado por `/instance/init` ao servidor e à empresa autorizada. Use um segredo diferente por servidor e identifique o servidor pela rota/configuração do receptor, por exemplo `/webhooks/atendrozap/{serverId}`. Esse `serverId` é uma referência de cadastro do Atendro, não uma credencial. Não resolva permissões por `instanceName`, `owner`, nome de empresa ou número. Depois da assinatura, confira se o `instanceId` pertence àquele servidor e a uma empresa ativa. O envelope não contém um `serverId` autenticado nem `companyId`. Não compartilhe um segredo global entre empresas sem esse vínculo no receptor. ## Verificação do POST O servidor envia JSON com timeout de 10 segundos, sem seguir redirecionamentos. | Header | Conteúdo | |---|---| | `X-AtendroZAP-Event-Id` | UUID do evento; igual a `eventId` | | `X-AtendroZAP-Instance-Id` | UUID da instância; igual a `instanceId` | | `X-AtendroZAP-Event-Type` | Tipo projetado; igual a `EventType` | | `X-AtendroZAP-Event-Seq` | Sequência numérica; igual a `seq` | | `X-AtendroZAP-Attempt` | Tentativa; informativo, não faz parte da assinatura | | `X-AtendroZAP-Timestamp` | Unix em segundos, gerado a cada tentativa | | `X-AtendroZAP-Signature` | `sha256=` seguido de HMAC SHA-256 em hexadecimal | Assinatura: `HMAC-SHA256(segredo, bytes(timestamp + ".") + bytes(corpo_bruto))`. Verifique **antes** de chamar um parser que altere o corpo. Rejeite timestamps mais de 5 minutos no passado ou no futuro. A comparação deve usar uma primitiva criptográfica, como `crypto.subtle.verify`. Rejeite eventos sem assinatura. [verify-webhook.mjs](https://wpp.atendro.cloud/docs/examples/verify-webhook.mjs) implementa essa verificação, limita o corpo a 2 MiB e confere a correspondência dos headers com os campos assinados. É um módulo JavaScript sem dependências, importável também em uma Edge Function com Web Crypto. Os testes estão em `scripts/verify_webhook_test.mjs`. O módulo **não** grava eventos, resolve empresas ou retorna sucesso HTTP. O receptor do Atendro deve completar esse fluxo: 1. Resolver o servidor cadastrado a partir da rota e carregar seu segredo. 2. Chamar `verifyAtendroZAP(request, secret)` com o corpo ainda intacto. 3. Verificar o vínculo servidor → instância → empresa. 4. Gravar o envelope em uma inbox durável com restrição única em `(server_id, instance_id, event_id)`. Uma duplicata já gravada pode receber 2xx. 5. Responder 204/200 apenas depois do commit. Em falha temporária do banco, responder 503 para que o AtendroZAP tente novamente. 6. Processar a inbox com retry interno; marcar o processamento concluído na mesma transação das alterações do Atendro ou usando operações idempotentes. Se a plataforma exigir JWT por padrão na entrada, ajuste **somente essa função** para aceitar os headers HMAC deste contrato. O AtendroZAP não envia Bearer/JWT, apikey da plataforma nem headers customizados. A assinatura e o vínculo de instância são a autenticação e autorização do novo receptor. ## Eventos a tratar O envelope comum contém `eventId`, `seq`, `EventType`, `instanceId` e `instanceName`. `instance` pode ser string ou objeto conforme o evento; `owner` pode estar ausente. Use `instanceId` como identificador estável. | Tipo | Tratamento no Atendro | |---|---| | `connection` | Ler `state/status/connection` e atualizar conexão. `instance` é objeto. QR não é enviado: consultar status autenticado | | `messages` | Upsert de mensagem pelo ID externo; distinguir texto, mídia, contato, localização e `ReactionMessage` | | `messages_update` | Processar **todos** os `event.MessageIDs`; aplicar `Sent`, `Delivered`, `Read`, `Played` ou `Deleted`. `chat` pode ser string | | `messages_edit` | Atualizar o conteúdo do ID original; não criar nova mensagem | | `groups` | Ler `data` com `action`, `groupJid`, assunto e alterações de participantes | | `call` | Ler `data` com `callId`, `direction`, `status`, `endReason` e `endedBy`; emitido por instâncias `calls` | | `limits` | Ler `data` e apresentar a restrição da sessão | | `undecryptable` | Registrar estado de mensagem indecifrável sem inventar seu conteúdo | O formato detalhado e os exemplos estão em [EVENTS.md](https://wpp.atendro.cloud/docs/guias/eventos.md). Reações chegam como `messages` com `messageType: ReactionMessage`. Mensagens enviadas pela API e edições próprias têm projeções filtradas; o Atendro deve registrar a resposta do envio/edição e reconciliar por ID. Não dependa de um eco do webhook. `history`, `chats`, `qrcode`, `presence`, `contacts`, `labels`, `chat_labels`, `blocks`, `sender`, `newsletter_messages` são aceitos por compatibilidade, mas aparecem em `ignoredEvents`. Histórico é consultado por `/chat/find` e `/message/find`. Estados de ligações são entregues por `call` nas instâncias de tipo `calls`. ## Duplicação, ordem e recuperação A entrega é pelo menos uma vez. `seq` é crescente por instância, com lacunas possíveis; não é um contador exclusivo daquela instância. Eventos filtrados e recibos condensados não geram POST. Estados de entrega de mensagens não devem regredir quando ocorrer replay. Uma inbox deve processar todos os itens de um recibo em lote antes de marcar o evento concluído. 2xx confirma a entrega. `400/410/413/422` encerram imediatamente as tentativas; `401/403` encerram após 3. Rede, timeout e demais códigos usam retry com backoff, até 20 tentativas ou 48 horas. Após 10 falhas transitórias consecutivas há uma pausa de 5 minutos. A requisição já em trânsito pode concluir após uma mudança de configuração; a próxima entrega usa o cadastro atualizado. Consulte `GET /webhook` e `/webhook/errors`, ou as versões administrativas por ID. Com o token da instância, liste `GET /v1/events?status=dead` e use `POST /v1/events/{id}/replay` depois de corrigir o receptor. Se sua inbox já aceitou o evento, retente o processamento interno dela: reenviar o mesmo ID não deve duplicar a alteração. Trocar o destino não transfere eventos anteriores. ## Homologação do novo receptor Validar assinatura válida/inválida, janela de timestamp, instância de outro servidor/empresa, duplicatas concorrentes, falha de persistência, recibos com múltiplos IDs, mudança de conexão, reação, edição, mídia e recuperação após indisponibilidade. Não registrar payloads, números, conteúdo de conversas ou segredos em logs. Esta revisão testa o contrato e a entrega local com dados sintéticos; a homologação no Atendro real depende da implementação desse receptor. --- Fonte: https://wpp.atendro.cloud/docs/guias/eventos.md # Eventos e webhooks O serviço persiste eventos no PostgreSQL (`events`) antes de qualquer entrega e os entrega ao webhook da instância em ordem de `seq`, pelo menos uma vez. O formato persistido (`/v1/events`) é o próprio do serviço; o corpo entregue ao webhook é a **projeção legada**, no envelope que o parser do consumidor (`uazapi-webhook`) lê. A projeção é uma função pura de `internal/webhook`, coberta por fixtures fixadas na revisão do parser (`projector_test.go`). ## Registro `POST /webhook` (token da instância): ```json {"enabled": true, "url": "https://seu-atendro.example/webhooks/atendrozap", "events": ["connection", "messages", "messages_update", "groups", "qrcode"], "excludeMessages": ["wasSentByApi"], "addUrlEvents": false, "addUrlTypesMessages": false, "action": "add", "secret": "opcional"} ``` - Um webhook por instância; `action: update` é o mesmo upsert, `delete` desativa inclusive em mudanças globais; `inherit` volta ao destino global. Reregistrar a mesma URL mantém o cursor, a saúde e o `secret` (que nunca aparece nas respostas). Uma URL nova começa **depois** dos eventos já existentes: o consumidor nunca recebe o backlog de outra vida. - `url`: https para host público, sem credenciais, sem redirects. Hosts em `ATENDROZAP_WEBHOOK_HOST_ALLOWLIST` (o receptor do laboratório) podem ser privados e http. IPs privados por DNS são recusados na conexão. - `events`: os nomes entregues são `connection`, `messages`, `messages_update`, `messages_edit`, `groups`, `limits`, `undecryptable`, `call`; `history`, `chats`, `qrcode`, `presence`, `contacts`, `labels`, `chat_labels`, `blocks`, `sender` e `newsletter_messages` são aceitos e devolvidos em `ignoredEvents`. Nomes desconhecidos → `400 invalid_event`. - `addUrlEvents`/`addUrlTypesMessages: true` → `400 unsupported_option` (o nome do evento vai no corpo e em `X-AtendroZAP-Event-Type`). - `excludeMessages`: `wasSentByApi`, `wasNotSentByApi`, `fromMeYes`, `fromMeNo`, `isGroupYes`, `isGroupNo` — filtram só `messages`. Envios pela API nunca geram `messages` de qualquer forma. - O cadastro global persistido usa `GET/POST /v1/webhook` com `admintoken`. O console oferece **Servidor → Configurações de webhook**. Instâncias sem exceção herdam o destino; as futuras o recebem na transação de criação. `ATENDROZAP_WEBHOOK_URL` e `ATENDROZAP_WEBHOOK_SECRET` apenas inicializam a configuração uma vez; alterações salvas prevalecem nos reinícios. O [contrato do novo receptor](https://wpp.atendro.cloud/docs/guias/receber-eventos.md) detalha essas regras. `GET /webhook` devolve o registro (`registered`, `inheritedGlobal`, `url`, `events`, `excludeMessages`, `enabled`, `hasSecret`, `deliveryStatus{pending, dead, oldestPendingSeconds, paused, pausedUntil, consecutiveFailures, lastStatus, lastError, lastDeliveredAt}`) e `webhooks: [o mesmo]`. `GET /webhook/errors` lista as últimas 20 falhas deste worker, sem payload. `GET /instance/status` traz o resumo em `webhooks`. ## Entrega - `POST` JSON, timeout 10 s, sem redirects, `User-Agent: AtendroZAP/…`. - Headers: `X-AtendroZAP-Event-Id`, `X-AtendroZAP-Event-Type`, `X-AtendroZAP-Event-Seq`, `X-AtendroZAP-Instance-Id`, `X-AtendroZAP-Attempt`, `X-AtendroZAP-Timestamp` e, com `secret`, `X-AtendroZAP-Signature: sha256=`. O novo receptor do Atendro deve verificar assinatura e vínculo servidor/instância antes de aceitar o evento; o parser legado não satisfaz esse contrato. - Um entregador por instância por vez, em qualquer worker: a linha de `webhooks` é reclamada com `FOR UPDATE SKIP LOCKED` e um lease de 30 s renovado a cada evento; cada claim trabalha no máximo 20 s e devolve o webhook, para que um receptor lento ocupe uma vaga e nunca o worker. Desabilitar ou trocar a URL para de entregar no evento seguinte. Ordem por `seq`; um evento que precisa de retry bloqueia os seguintes da instância (o parser tolera recibo antes da mensagem só por heurística). Recibos da mesma mensagem enfileirados juntos são condensados no estado mais alto (o consumidor descarta atualizações do mesmo id em < 5 s). - Política por resposta: 2xx entregue; `400`, `410`, `413`, `422` dead-letter imediato; `401`/`403` dead após 3 tentativas; o resto (rede, timeout, 3xx, 404, 429, 5xx) retenta com backoff exponencial de 5 s, teto 10 min, jitter, `Retry-After` honrado; dead após 20 tentativas ou 48 h. - Circuit breaker: 10 falhas consecutivas (dead-letters não contam) pausam o webhook por 5 min sem perder eventos. Sucesso zera o contador. - Falha transitória do próprio serviço ao montar o envelope (banco indisponível) retenta como uma falha de rede; só um defeito permanente (mensagem inexistente, payload ilegível) vira dead-letter. - `GET /v1/events?status=pending|delivered|dead` (pendentes do mais antigo para o mais novo: o primeiro é o que bloqueia); `POST /v1/events/{id}/replay` põe um evento (dead ou entregue) de volta na fila com orçamento novo de tentativas; eventos de antes do registro atual respondem `409 event_before_registration`. - Retenção: entregues 7 d, dead 30 d, pendentes que nenhum webhook pode entregar (sem registro, ou anteriores a ele) 30 d; poda horária. Instância apagada perde o webhook e tem o backlog marcado dead. - Eventos de antes do registro não são entregues (`start_seq`). - Receptores devem tratar a entrega como pelo menos uma vez: desduplicar por `X-AtendroZAP-Event-Id` e recusar `X-AtendroZAP-Timestamp` fora de uma janela (5 min) quando verificarem a assinatura. ## Catálogo (formato persistido → projeção legada) | Tipo persistido | Payload | Projeção | |---|---|---| | `messages` | `{message: }` | `EventType: messages`, `chat{wa_chatid, wa_isGroup, owner, name}`, `message` no formato legado (`legacy.Message`): `id` = `owner:messageid`, `messageid`, `chatid` (forma telefone quando o chat é LID), `sender`, `sender_pn`, `participant` (grupo), `pushName`, `fromMe`, `messageType` PascalCase, `type` (`text`/`media`/…), `mediaType`, `timestamp` (s), `messageTimestamp` (ms), `text`, `caption`, `fileName`, `mimetype`, `fileURL` (só mídia retida), `content{key{id, fromMe, remoteJid, participant}, text/caption, contextInfo{stanzaId, participant}, selectedButtonId, selectedDisplayText, degreesLatitude…}`, `edited: ""`, `reaction: ""`. Envios pela API nunca são projetados | | `messages_update` recibo | `{ids, status, chatid, timestamp}` | `EventType: messages_update`, `state` na raiz (`Sent`, `Delivered`, `Read`, `Played`), `event{Type, MessageIDs (bare), Chat (string), IsFromMe, Timestamp}`, `chat` string, `owner` dígitos. `failed` não tem projeção | | `messages_update` revogação | `{type: revoke, targetId, …}` | `state: Deleted`, `type: DeletedMessage`, `event{Type: Deleted, MessageIDs: [alvo]}` | | `messages_update` "apagar para mim" | `{type: delete_for_me, targetId, chatid, fromMe, known}` (a mensagem ganha `deletedForMeAt`) | **Não projetado**: a mensagem sumiu só da visão da conta; anunciar `Deleted` apagaria no consumidor uma mensagem que a outra parte ainda tem. Visível em `/v1/events` e em `GET /message/status/{id}` | | `messages_update` reação | `{type: reaction, targetId, text, sender, fromMe, …}` | **forma `messages`** com `messageType: ReactionMessage`, `type: reaction`, `content.key.ID` = alvo, `text` = emoji (vazio remove), `fromMe` = quem reagiu, `reaction: ""`, `message.owner`. A forma `messages_update` do parser consulta uma coluna inexistente e não funciona | | `messages_edit` | `{targetId, text, id, fromMe, …}` | `messages_edit` (`originalMessageId`, `messageId` = original, `newText`, `text`, `editMessageId`) quando assinado; senão in-band em `messages` com `message.edited` = id original e `text` novo. Edições feitas pela API não são anunciadas | | `connection` (não emitido quando o motivo é `lease lost`: outro worker é o dono e anuncia o próprio estado) | `{state, previous, reason, disconnectCode, jid, owner, pushName, worker, timestamp}` | `state`/`status`/`connection` (`connected`, `connecting`, `disconnected`), `phoneNumber` (dígitos, só quando conhecido), `lastDisconnectReason` (textos que casam os regex do consumidor), `instance{status, owner, profileName, lastDisconnect, lastDisconnectReason}`, `reasonCode`, `needsHumanQr` | | `groups` | `{action: joined\|update, groupJid, name?, topic?, sender, join[], leave[], promote[], demote[], deleted, timestamp}` | Entregue como `{EventType: groups, event: groups, data}` quando inscrito. O assunto do grupo também sai em `chat.name` e `message.groupName` das mensagens | | `limits`, `undecryptable` | próprio | Só para quem assina o nome; `{EventType, event, data}` | | `call` (só instâncias `kind: calls`) | `{callId, direction (outbound/inbound), status (ringing/connecting/active/ended), number, jid, seq, timestamp, startedAt, answeredAt?, endedAt?, endReason?, endedBy? (local/remote)}` | Só para quem assina `call`; `{EventType: call, event: call, data: }`. `number` é a identidade registrada no WhatsApp (celular BR pode vir sem o nono dígito) | Eventos internos e `qrcode` nunca são entregues; o QR nunca entra em `events`. ## Limites conhecidos deste serviço - Mensagens de grupo saem com `chat.name`/`message.groupName` quando o assunto é conhecido (sincronizado no `connected`, mantido por notificações e history sync); um grupo que a conta ainda não viu descrito sai sem nome, nunca com o push name de um participante. - Mensagens importadas do histórico do telefone (`from_history`) nunca geram `messages`: são lidas por `/message/find` (padrão) e `/chat/find`. - Chats LID sem forma telefônica conhecida saem com `@lid` em `chatid`; nenhum telefone é fabricado. ## Limites conhecidos do consumidor - Recibos para o mesmo id em < 5 s são descartados pelo consumidor (debounce); `Delivered` seguido de `Read` em < 5 s perde o `Read`. - Um envio estacionado como ambíguo (504) só é resgatado pela heurística de 90 s do consumidor quando o `Delivered` chega com `event.Chat` cujos dígitos coincidem com `contacts.phone`; números brasileiros guardados pelo WhatsApp sem o nono dígito não coincidem. - A edição in-band não é idempotente no consumidor (`edit_count` cresce a cada reentrega). - O guard de transferência do consumidor responde `503 Retry-After: 5` quando indisponível; a entrega retenta. --- Fonte: https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md # Erros e idempotência Leia o status HTTP e o campo `error` juntos. Uma falha de transporte não significa necessariamente que uma mensagem deixou de ser enviada. ## Decida pelo resultado | HTTP / erro | Como tratar | |---|---| | `400` | Corrigir JSON, parâmetros, opções ou allowlist antes de repetir | | `401 unauthorized` | Conferir o tipo de header e o token do servidor ou da instância | | `403` em grupos | Conferir participação e permissões da conta | | `404` | Recurso inexistente; não presumir desconexão | | `405` | Corrigir o método; consultar o header `Allow` | | `409 whatsapp_disconnected` | Aguardar o fluxo autorizado de reconexão | | `409 session_owned_elsewhere` | Sessão pertence a outro worker; não duplicar a instância | | `409 media_reupload_pending` | Aguardar o reenvio da mídia e tentar o download depois | | `409 idempotency_in_progress` | Aguardar e repetir a mesma requisição com a mesma chave | | `422 idempotency_mismatch` | A chave foi reutilizada com método, caminho ou corpo diferentes | | `422 send_failed` / `number_not_on_whatsapp` | Falha definitiva desse envio; inspecionar o erro | | `429` | Respeitar `Retry-After` | | `500 whatsapp_reachout_timelock` | Bloqueio 463 do WhatsApp; observar `error_key` e `details.reachout_timelock.until` | | `501 calls_not_supported` | Verificar módulo habilitado e uso de instância `calls`; uma instância de mensagens mantém esse erro | | `502 storage_unavailable` | Aguardar recuperação do banco; respeitar `Retry-After` | | `503` em readiness | Banco não pronto | | `504 send_ambiguous` / `action_ambiguous` | Reconciliar pelo ID e pelos eventos antes de reenviar | ## Resultado ambíguo Um `504` pode ocorrer depois de o WhatsApp aceitar a operação. Guarde o identificador devolvido e consulte o status ou os eventos. Repetir com uma chave nova pode duplicar o efeito. Os aliases `messageid`, `messageId` e `id` dos envios se referem ao ID da mensagem do WhatsApp. Na edição, `editId` identifica a ação de edição e o ID original permanece separado. ## Rotas com idempotência | Operações | Retenção | |---|---| | `POST /instance/init` | 15 minutos | | `/send/*`, ações em mensagens e mutações de grupo indicadas no contrato | 24 horas | A página de cada endpoint informa se ele oferece `Idempotency-Key`. Não há garantia geral para qualquer POST. ```http Idempotency-Key: operacao-exemplo-001 ``` Crie uma chave por operação de negócio. Em uma repetição, mantenha a mesma chave, o método, o caminho e **os mesmos bytes do corpo**. Alterar espaços ou a ordem das chaves no JSON altera o hash. ## Replay de requisição `Idempotency-Replayed: true` indica uma resposta guardada. Respostas transitórias `409`, `429` e `5xx`, exceto `504`, liberam a chave. Resultados concluídos e ambíguos `504` permanecem guardados durante a retenção. Repetir um `504` e receber a mesma resposta não autoriza criar outra chave para o mesmo envio. ## Limites e correlação Use `X-Request-Id` para correlacionar falhas sem registrar tokens ou conversas. O corpo geral aceita 64 KiB; `/send/media` aceita 48 MiB de JSON e `/group/updateImage` 12 MiB. Bytes UTF-8 e caracteres não são a mesma medida. O orçamento do handler de envio é de 44 segundos. Configure o timeout do cliente de forma compatível e implemente a reconciliação de resultados ambíguos. ## Reentrega de eventos Idempotência de requisição e deduplicação de webhook são responsabilidades distintas. Para eventos, deduplique por servidor, instância e `X-AtendroZAP-Event-Id`. [POST /v1/events/{id}/replay](https://wpp.atendro.cloud/docs/api/replay-event.md) pode repetir um efeito já processado. --- Fonte: https://wpp.atendro.cloud/docs/guias/chamadas-de-voz.md # Chamadas de voz Ligações usam uma instância de tipo `calls`, com pareamento próprio e áudio nos dois sentidos pelo navegador. O módulo precisa estar habilitado no servidor. ## Capacidade anunciada Consulte [GET /v1/capabilities](https://wpp.atendro.cloud/docs/api/get-capabilities.md) com `admintoken`. Exigir `capabilities.calls=true` e `instance_kinds` contendo `calls`. Este recorte ilustra um servidor habilitado: ```json { "capabilities": {"calls": true}, "instance_kinds": ["whatsapp", "calls"], "calls_max_concurrent": 1 } ``` Com `ATENDROZAP_CALLS_ENABLED=false`, criar ou operar a instância de ligação é recusado. O limite padrão é uma chamada por instância. Conectar uma instância de mensagens não habilita voz nela. ## Primeiro teste pelo painel 1. Abra o servidor no [console](https://wpp.atendro.cloud) e clique em **Nova instância**. 2. Selecione **Tipo → Ligação**, informe um nome e crie. O painel guarda o token no backend. 3. Solicite a conexão e escaneie o QR pelo WhatsApp do número autorizado. Aguarde **connected**. Pode ser outro dispositivo vinculado do mesmo número usado para mensagens ou um número dedicado. 4. Nas **Conversas** da instância de mensagens, abra a conversa autorizada e clique em **Ligar**. O painel escolhe uma instância de ligação conectada do mesmo servidor cujo token conhece. Também é possível usar **Discar** na página da instância de ligação. 5. Permita o microfone, atenda no telefone de destino e confira áudio nos dois sentidos. **Mudo** controla o microfone; **Desligar** encerra a chamada. Mantenha a página aberta durante a conversa. Se o tipo **Ligação** não aparecer, confira a capacidade do servidor. Se o painel não conhecer o token de uma instância criada fora dele, reemita-o pela interface antes do uso. Erros de linha ocupada ou sessão desconectada são mostrados no widget. ## Ruído e eco O painel solicita cancelamento de eco, supressão de ruído e ajuste de ganho ao navegador. Quando o dispositivo oferece o modo de cancelamento de todo o áudio reproduzido, ele é preferido para incluir a voz que sai pelo painel. O widget avisa quando não consegue confirmar o cancelamento de eco. **Reduzir ruído do microfone** vem marcado: acrescenta um filtro de graves e atenua suavemente o fundo entre as falas. Desmarque durante uma chamada para comparar, especialmente se sua voz for muito baixa. Essa opção controla o filtro adicional; o cancelamento de eco do navegador continua solicitado. O tratamento ocorre no computador do atendente antes do envio, sem gravar o áudio nem alterar o som recebido. O filtro não elimina todas as vozes, teclas ou sons fortes enquanto você fala. Use fone se persistir eco; no teste com dois aparelhos próximos, afaste o telefone do microfone do computador e evite volume alto no viva-voz. A qualidade depende também do navegador, microfone e ambiente. ## Rotas e estados | Operação | Resultado | |---|---| | [POST /call/make](https://wpp.atendro.cloud/docs/api/make-call.md) | Corpo `{number}`; `201` com `callId`; aceita `Idempotency-Key` | | [POST /call/answer](https://wpp.atendro.cloud/docs/api/answer-call.md) | Corpo `{callId}`; atende uma chamada recebida | | [POST /call/reject](https://wpp.atendro.cloud/docs/api/reject-call.md) | Corpo `{callId}`; recusa uma chamada recebida | | [POST /call/hangup](https://wpp.atendro.cloud/docs/api/hangup-call.md) | Corpo `{callId}`; encerra a chamada | | [GET /call/active](https://wpp.atendro.cloud/docs/api/list-active-calls.md) | Lista as chamadas vivas da instância | | [GET /call/{id}](https://wpp.atendro.cloud/docs/api/get-call.md) | Estado da chamada viva ou recém-encerrada | | [GET /call/{id}/audio](https://wpp.atendro.cloud/docs/api/stream-call-audio.md) | Upgrade WebSocket; PCM s16le mono a 16 kHz | Todas usam o token da instância `calls`. Estados: `ringing`, `connecting`, `active`, `ended`; o encerramento inclui `endReason` e `endedBy`. Uma instância `whatsapp` mantém `501 calls_not_supported` em `/call/make`; outras rotas de ligação recusam o tipo incorreto com `409 wrong_instance_kind`. O áudio passa pelo console, que autentica a sessão do navegador e adiciona o token no pedido à API. Apenas a ponte de áudio aceita `?token=` como alternativa ao header. Prefira o proxy para manter a credencial no backend e não registrar tokens em URLs. Fechar o socket encerra a chamada. ## Eventos e limites de validação Inscreva `call` no webhook global ou próprio para receber `data` com `callId`, direção, estado e motivo de encerramento. A entrega segue a política de assinatura, retry e deduplicação dos demais eventos. A bancada validou uma chamada curta de saída com áudio nos dois sentidos, e o responsável confirmou a chamada real pelo painel da VPS em 18/09/2026. Após o ajuste de áudio, repetiu a chamada e confirmou melhora tanto do ruído quanto do eco. Essa confirmação é qualitativa, no ambiente testado. Latência boca-ouvido medida, chamada longa, recebimento e o defeito upstream #25 (recusa por aparelho Web/Desktop do destino) continuam pendentes de homologação. Veja [validação e limites](https://wpp.atendro.cloud/docs/guias/validacao.md). --- Fonte: https://wpp.atendro.cloud/docs/guias/compatibilidade.md # Compatibilidade Uazapi — contrato alvo e estado de implementação Auditado no código de `atendro-ai` em 15/09/2026 e revisto em 16/09/2026 para o ciclo de vida. A nomenclatura de prioridade define a ordem de desenvolvimento; contas que usam uma função só podem migrar quando ela estiver homologada. ## Implementado (ciclo de vida, mensagens, mídia, ações, menus e webhooks; homologado com número de laboratório em 16–17/09/2026) | Rota | Resposta entregue | |---|---| | `POST /instance/init` | `{response, connected:false, loggedIn:false, instance:{id, token, name, systemName, status, ...}}`; o `token` só aparece aqui | | `GET /instance/all` | Array de instâncias com `id, name, systemName, status, owner, profileName, lastDisconnectReason, worker`; sem `token` e sem `qrcode` | | `POST /instance/connect` | `{connected, loggedIn, jid, instance:{status, qrcode (data URI PNG), paircode, owner, profileName, lastDisconnectReason}}`. Espera até 5 s por QR ou login antes de responder; o consumidor pode continuar em `GET /instance/status` | | `GET /instance/status` | Mesma forma do connect, sem efeitos colaterais; `status` em `connected|connecting|disconnected` | | `POST /instance/disconnect` | Logout: `{response, unlinked, instance}`; a credencial é apagada mesmo sem confirmação remota | | `POST /instance/restart` | Reabre preservando credencial: `{response, connected, loggedIn, jid, instance}` | | `DELETE /instance` | `{response:"Instance deleted"}`; síncrono, sem estado `deleting` | | `POST /send/text` | `{number, text, replyid?, delay?, linkPreview?}` → `{success:true, messageid, id, timestamp}` com o ID real do WhatsApp. `number` aceita dígitos ou chat (`@s.whatsapp.net`, `@g.us`, `@lid`). `replyid` cita a mensagem guardada (`422 reply_not_found`); `delay` em ms (string ou número, teto 15 s). Erros: sem sessão logada `409 whatsapp_disconnected` ("WhatsApp disconnected … not connected", reconhecido pelo classificador); número sem conta `422` ("not on WhatsApp"); recusa do servidor `422 send_failed` com `provider_code`; bloqueio de prospecção (código 463) `500` com `error_key: WHATSAPP_REACHOUT_TIMELOCK`, `provider_code: 463` e `details.reachout_timelock.until` — a forma que o consumidor procura para a mensagem amigável; fila ocupada `429 too_many_requests`; falha transitória antes do envio (nada enviado) `429 retry_later`; frame enviado sem ack ou socket perdido após o envio `504 send_ambiguous` com `messageid`. 504 e o 500 do 463 são os únicos 5xx; 4xx são falhas definitivas ou retentáveis (429) | | `POST /instance/init` e `POST /send/text` com `Idempotency-Key` | Mesma chave e corpo → mesma resposta com `Idempotency-Replayed: true` (24 h para envios; 15 min para `init`, cuja resposta contém o token); corpo diferente → `422 idempotency_mismatch`; em andamento → `409 idempotency_in_progress`; tentativa abandonada há mais de 2 min é retomada. Respostas transitórias (409, 429, 5xx exceto 504) não são guardadas: a chave fica livre para a repetição | | `GET/POST/DELETE /v1/instances/{id}[/connect|disconnect|restart]` | Rotas administrativas por id (`admintoken`), para o painel agir sem o token da instância que `GET /instance/all` não devolve | | `GET /message/status/{id}` | `{id, status, failure, fromMe, timestamp, deliveredAt, readAt, playedAt}`; `404 message_not_found` | | `POST /send/media` | `{number, type, file, text?, docName?, replyid?, delay?}` → `{success, messageid, id, timestamp, mimetype, ptt}`. `file`: data URI (o que o consumidor envia até 5 MiB), base64 ou URL de host da allowlist — **o consumidor cai para URL acima de 5 MiB, então `ATENDROZAP_MEDIA_URL_ALLOWLIST` precisa conter o host do storage do Atendro** (https, sem redirects, sem redes privadas, até 32 MiB). O mime declarado é conciliado com os bytes (o consumidor embrulha base64 cru como `image/jpeg`); `docName` é reduzido ao nome-base. `ptt` só vira nota de voz com `audio/ogg`; outros áudios saem como arquivo, com `note`. Erros de política de URL `400`; arquivo grande `413`; fetch transitório `429 url_fetch_failed`; upload falho antes do envio `429 retry_later`; tipo × mime incompatíveis `422 invalid_media` | | `POST /send/contact`, `POST /send/location` | `{number, fullName, phoneNumber, organization?, replyid?, delay?}` e `{number, latitude, longitude, name?, address?, replyid?, delay?}` → `{success, messageid, id, timestamp}` | | `POST /message/download` | `{id}` (aceita `owner:id`) → `{fileURL, url, mimetype, mimeType, fileName, size, expiresAt, messageid}`; `mimetype` sem parâmetros (`audio/ogg`, não `audio/ogg; codecs=opus`), inferido dos bytes quando ausente. O link é um GET público assinado válido pela retenção (48 h), com `Content-Length`; só tipos passivos (imagem, áudio, vídeo, PDF) são servidos `inline`; markup/script viram `application/octet-stream` em `attachment`, com CSP `sandbox`. Mídia expirada no servidor → `409 media_reupload_pending` (não 404/503, que o consumidor trata como irrecuperável) com pedido de reenvio ao celular (um a cada 5 min); celular sem o arquivo → `404 media_unavailable` (definitivo); acima de 64 MiB → `413 media_too_large`; mensagem desconhecida `404`; sem mídia `422 not_media`; falha `502 media_failed`. Até 4 downloads simultâneos por worker | | `POST /message/markread` | `{id: [..] ou "id"}` (até 1000) → `{success, marked, count}`; um recibo por (chat, remetente); ids desconhecidos ou próprios são ignorados | | `POST /chat/read` | `{number, read:true}` → `{success, marked}`: recibo para as recebidas ainda não lidas do chat (até 100) | | `POST /chat/check` | `{numbers:[..]}` ou `{number}` → array `[{query, exists, numberExists, jid, data:{exists, jid}}]` (todas as formas que o consumidor lê) | | `POST /chat/details` | `{number}` → `{jid, exists, name, pushName, displayName, verifiedName, isBusiness, profilePicUrl, profilePictureUrl, imagePreview, pictureId, imageState}`; foto com cache de 24 h e revalidação por id; número sem conta `404` | | `POST /send/menu` | `{number, type: button\|list\|poll, text, choices[], footerText?, listButton?, selectableCount?, replyid?, delay?, renderMode?}` → `{success, messageid, messageId, id, timestamp, type, renderMode, rendered}`. `choices` na gramática legada: `"[Seção]"` abre seção (listas), `"label\|id\|descrição"`, `"label\nid"` ou `"label"` (id = label), `"label\|url:"`/`"label\|https://…"` e `"label\|copy:"` (só em botões); `call:` responde `400`. Limites da plataforma: 3 botões (4 a 10 botões só de resposta — como o menu de avaliação do consumidor — saem como lista, `rendered: list`), 10 linhas, 2–12 opções de enquete; labels cortados no limite do que é renderizado (20 botão, 24 linha, 100 enquete; inteiros no modo texto); ids de resposta até 256 bytes, URLs até 2048; `carousel` responde `400`. `renderMode`: `auto` (padrão: tenta a forma nativa — `InteractiveMessage` com native flow, aceita pelo servidor e renderizada no aparelho de laboratório em 17/09/2026; os protos legados `ButtonsMessage`/`ListMessage` são recusados com 405 — uma recusa é lembrada por 6 h na sessão e o menu cai para enquete, ou para texto quando há opção `url:`/`copy:`), `native` (só a forma nativa; a recusa vira `422 send_failed` com `provider_code: 405`), `poll` (as opções viram enquete de escolha única e o voto volta com o `id` original; labels duplicados são recusados) ou `text` (lista numerada em texto; a resposta chega como texto e o consumidor casa por label). `rendered` diz o que saiu (`button`, `list`, `poll`, `text`). `selectableCount` só vale para `type: poll` (padrão 1). As opções ficam guardadas na mensagem (`choices`) em todos os modos | | `POST /message/react` | `{number?, text, id}` → `{success, messageid, messageId, id, timestamp, reaction:{id, emoji, status: sent\|removed}}`; `text` vazio remove; `number` é ignorado (o chat é o da mensagem guardada — o consumidor deriva `number` do contato, errado em grupos); `id` aceita `owner:id`. Reação própria fica em `reactions` da mensagem. Mensagem desconhecida `404`; apagada `422 message_revoked`; emoji inválido `400` | | `POST /message/delete` | `{id}` → `{success, id, messageid, status: "Deleted", timestamp (RFC 3339), recorded}`; repetido → `200` com `alreadyDeleted`. Só mensagens próprias (`422 cannot_delete` para as recebidas: apagar a de um participante exige ser admin do grupo, que o motor ainda não verifica). Apaga corpo, conteúdo bruto, opções, reações e mídia retida; gera evento `messages_update`. `recorded:false` quando o WhatsApp aceitou mas o store não gravou | | `POST`/`PUT /message/edit` | `{id\|messageId, text}` (o consumidor vivo manda `POST {id, text}`; o hook V2 `PUT {number, messageId, text}`) → `{success, id: owner:id, messageid, messageId, editId, content, messageType, messageTimestamp (ms), timestamp, status, owner, editCount, recorded}`. Só mensagens próprias de texto ou legenda (imagem, vídeo, documento com conteúdo guardado) até 20 min (`422 edit_window_expired`, `not_own_message`, `not_editable`, `message_revoked`). O texto editado vai sem a prévia de link antiga | | `POST /message/forward` | `{number, id\|messageId, delay?}` → resposta de envio. Rota própria (a UAZAPI não tem forward por id; o consumidor reenvia). Texto, contato e localização (inclusive localização ao vivo, como pino) são copiados do conteúdo guardado; mídia é baixada (store ou WhatsApp) e reenviada — `409 media_reupload_pending`, `404 media_unavailable`, `413`, falha transitória `429 retry_later`; visualização única, contato/localização sem conteúdo guardado e outros tipos `422 not_forwardable`; apagada `422 message_revoked`. Nada é gravado antes de o original ser aceito. A cópia carrega a marca "Encaminhada" e `forwardedFrom` | | `forward: true` em `/send/text`, `/send/media`, `/send/contact`, `/send/location` | Marca a mensagem como encaminhada (como na spec legada) | | `POST /message/find` | `{chatid?, id?, limit? (padrão 100, máx. 200), offset?}` → `{messages[], returnedMessages, limit, offset, nextOffset?, hasMore}`, mais recentes primeiro. Cada item no formato legado `Message`: `id` (`owner:messageid`), `messageid`, `chatid`, `sender`, `sender_pn`, `senderName`/`pushName`, `isGroup`, `fromMe`, `wasSentByApi`, `messageType` (`Conversation`, `ExtendedTextMessage`, `ImageMessage`, …, `ButtonsResponseMessage`), `type`, `messageTimestamp` (ms), `timestamp` (s), `status` (`Pending\|Sent\|Delivered\|Read\|Played\|Failed\|Received\|Deleted`), `text` (o label escolhido, em respostas interativas), `quoted`, `edited`, `content{key, text\|caption, selectedButtonId…}`, `buttonOrListid`, `reactions`, `choices`, `fileURL`/`mediaUrl` (só quando a mídia está retida; consulta só de metadados). Só mensagens desde o pareamento (histórico é etapa 5b) | | `GET /message/status/{id}` | Inclui `revokedAt`, `editedAt`, `editCount` e `reactions` | | `POST /webhook`, `GET /webhook`, `GET /webhook/errors` | Registro com o corpo exato que o consumidor envia (`enabled, url, events, excludeMessages, addUrlEvents:false, addUrlTypesMessages:false, action:add`); `ignoredEvents` para nomes aceitos e não emitidos; `deliveryStatus`. Entrega assinada, em ordem por instância, com retry, dead-letter, replay e circuit breaker — ver [EVENTS.md](https://wpp.atendro.cloud/docs/guias/eventos.md) | | `GET /v1/messages`, `GET /v1/events?status=`, `POST /v1/events/{id}/replay` | Rotas próprias de inspeção e replay (não fazem parte do contrato legado) | Falhas de banco respondem `502 storage_unavailable` com `Retry-After` (não 503, que a fila de mídia do consumidor trata como irrecuperável na primeira tentativa). Diferenças deliberadas em relação ao provedor legado: tokens não são listados (o painel usa as rotas por id); `companyId` opcional no `init` filtra `GET /instance/all?companyId=`; um registro `connected` sem lease viva é reportado como `disconnected` (`worker lost`); `disconnect` sempre limpa a credencial (o legado mantinha `owner` preso e exigia recriar a instância); `409 session_owned_elsewhere` sinaliza sessão em outro worker; `502 whatsapp_unreachable` sinaliza falha de conexão ao iniciar o pareamento; `408` não é usado. `lastDisconnectReason` usa `QR Code timeout`, `logged out: `, `connection replaced by another session`, `connection closed`, `disconnected by API (user requested)`, `worker shutdown`, `worker lost`, `restart` e `lease lost`, com o `disconnectCode` correspondente; os textos casam com os regex que o consumidor usa para classificar quedas (`logged.?out`, `connection.?replaced`, `disconnected by API`). ## Superfície restante | Prioridade | Método e caminho | Contrato esperado | |---|---|---| | P1 | `POST /message/presence` | Presença coerente com sessão (só uso interno via `delay` hoje) | | P2/gate | importação de sessão pela extensão | Sem suporte previsto | | feito (5d) | `POST /call/make` e demais rotas `/call/*` | Em instância `kind: calls`: chamada real com áudio pela ponte WebSocket ([guia de ligações](https://wpp.atendro.cloud/docs/guias/chamadas-de-voz)); em instância `whatsapp`, `501 calls_not_supported` como antes | Grupos, chats e histórico (etapa 5b) estão implementados no contrato que o consumidor usa, com as diferenças deliberadas abaixo: - `GET /group/list?noparticipants=true` → `{groups: Group[]}` com os campos PascalCase (`JID`, `Name`, `Topic`, `OwnerJID`, `ParticipantCount`, `Participants[].JID/PhoneNumber/LID/IsAdmin/IsSuperAdmin/DisplayName/Error`, `invite_link`); a lista vem do que o serviço sincronizou (no `connected`, por notificações e por history sync); `force=true` ressincroniza. - `POST /group/info {groupjid, getInviteLink, force}` → `Group`; sem `force` serve o cache por 10 min; `getInviteLink` só devolve o link se a conta é admin (senão fica vazio, sem erro). `getRequestsParticipants` é ignorado. - `POST /group/create {name, participants[]}` → `Group` direto (o consumidor lê `result.group || result`), com `Participants[].Error` para quem o servidor recusou; nome de 1–100 caracteres (o WhatsApp atual aceita 100; o `maxLength: 25` da spec é antigo). - `POST /group/updateParticipants` → `{groupUpdated: [{JID, Error}], needs_refresh}`; `approve`/`reject` respondem `400 invalid_action`. - `POST /group/updateName` e `/group/updateImage` respondem `200` com `needs_refresh`; a imagem (data URI, base64 ou URL da allowlist; JPEG, PNG ou GIF) é convertida para JPEG de até 640×640 aqui, então o consumidor pode mandar o que o usuário subiu; `"remove"` apaga. Erros: `400` (entrada), `403 not_admin`, `404 group_not_found`, `415 invalid_image`, `429` (limite do WhatsApp). - `POST /chat/find` ({} ou `{limit, offset, wa_isGroup}`) → `{chats: Chat[], hasMore, pagination}` com `wa_chatid` (forma telefone para conversas diretas), `name` (assunto do grupo / push name), `wa_name`, `wa_contactName` (só grupos: assunto), `wa_isGroup`, `wa_unreadCount`, `wa_lastMsgTimestamp` (s) e `wa_lastMessageTime` (s, o que o webhook `chats` do consumidor lê). Sem filtros de lead/etiqueta. - `/message/find` inclui o histórico importado do telefone por padrão (`includeHistory: false` exclui); o histórico chega pelo history sync do pareamento e nunca gera eventos. - `POST /admin/restart` (`admintoken`) reinicia as sessões **deste worker** (soft, `202 {message, worker}`); o processo não sai. A resposta agenda a operação em background e não inclui contagem de sessões reiniciadas. - `POST /call/make` em instância `whatsapp` responde `501 calls_not_supported`; a chamada real é da instância `calls` (etapa 5d). - Eventos `groups` são persistidos e entregues quando inscritos no webhook global ou próprio. `chats` continua sem emissão de webhook. `GET/POST /instance/proxy` está implementado no contrato que o consumidor usa (`{mode: custom, proxy_url}` antes do `connect`; `{mode: internal}` para soltar; resposta com `proxy.effective_mode` e `fallback.active`), com duas diferenças deliberadas: não há pool gerenciado (`internal` = conexão direta, `effective_mode` só `custom`/`none`, `fallback` nunca ativo) e um proxy que não alcança o WhatsApp é recusado com `400 proxy_unreachable` em vez de gravado com `validation_error`. `POST /v1/instances/{id}/token` (reemissão de token com prazo de convivência) não tem equivalente legado. `profilePicUrl` vem de `/chat/details`; `GET /instance/status` ainda não o inclui. Headers de instância usam `token`; o sender também envia `instancekey`. Compatibilidade não concede autorização com base no nome da instância. Associar token à empresa e à sessão corretas. O admin token não pode ser exposto ao cliente. O OpenAPI legado diverge do runtime em alguns pontos: há `/instance/create` no spec, mas o Atendro chama `/instance/init`. Não implementar só a especificação. `/sender/simple`, `/sender/advanced` e `/instance/updateDelaySettings` não foram encontrados como dependência runtime e não fazem parte de P0. ## Eventos e mensagens Entregues desde a 4a; o catálogo e a projeção estão em [EVENTS.md](https://wpp.atendro.cloud/docs/guias/eventos.md). Envelope observado: `{EventType,instanceName,token,chat,message}`; `token` é omitido (só o digest existe) e a autorização é a assinatura, que o consumidor ainda não verifica. Contratos alvo: - `messages`: entrada e mensagens do celular; `messageid/key.id`, `chatid`, `fromMe`, `participant`, sender, conteúdo e citação. Não fabricar telefone de LID. - `connection` e `qrcode`: estado/identidade/QR, motivo de desconexão distinguível. - `messages_update`: ACK por `MessageIDs/messageIds/ids` e `Sent/Delivered/Read/Played`, além de formatos de reação, edição e exclusão usados pelo parser. Desde a 3c, reações, revogações e edições recebidas atualizam a mensagem alvo (`reactions`, `revokedAt`, `editedAt`/`editCount`/corpo) e geram eventos internos `messages_update` (`type: reaction|revoke`, com `known:false` quando o alvo nunca foi guardado) e `messages_edit`; votos de enquete e respostas de botão/lista viram mensagens `button_reply` com `targetId` = menu e `choices` = seleção. A projeção para o envelope legado é da etapa 4a. - `history`: opt-in e separado do recebimento novo; sem disparo de IA/automação. O mesmo ID precisa casar entre REST, eco, ACK, reply, reação e exclusão. Tratar variantes `owner:id` sem perder identidade. Suprimir somente ecos de envios API; preservar mensagens manuais do celular. Recibos podem chegar repetidos ou antes da resposta REST e não podem regredir `read` para `sent`. A API legada deve devolver ID de mensagem, não sucesso com ID de fila. Se ocorrer timeout após entrega ao motor, manter resultado ambíguo e reconciliar; não reenviar automaticamente. O Atendro já possui fila/pacing: coordenar contratos entre sistemas. ## Evidências no consumidor - [Ciclo de vida](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/uazapi-instance-manager/index.ts) - [Envio](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/uazapi-send-message/index.ts) - [Parser de webhook](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/uazapi-webhook/index.ts) - [Ações](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/uazapi-message-actions/index.ts) - [Mídia](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/process-media-queue/index.ts) - [Grupos](https://github.com/atendro-ai/atendro-ai/blob/main/supabase/functions/uazapi-group-manager/index.ts) Fixar a revisão do consumidor quando escrever fixtures/testes de contrato. Fixtures devem ser sintéticas ou anonimizadas. Matching deve validar semântica de campos, IDs e efeitos, sem exigir ordem byte-a-byte irrelevante de propriedades JSON. ## Gates de integração O produto ainda restringe domínios a `uazapi.com` em guard de URL, migration e media-proxy. Serão necessárias allowlists explícitas, assinatura de webhook, elegibilidade de piloto e revisão do cutover antes da integração. `is_active=false` não devolve sessões ao backend anterior e `max_instances=0` significa ilimitado. Não cadastrar este bootstrap como servidor ativo no produto. O cutover precisa bloquear eventos tardios do backend antigo, invalidar cache de vínculo e reconciliar ACKs de envios anteriores. O parser atual também resolve instância por nome; trocar token/URL sozinho não isola os eventos. --- Fonte: https://wpp.atendro.cloud/docs/guias/validacao.md # Validação do contrato de integração — 18/09/2026 Escopo: [guia do Atendro](https://wpp.atendro.cloud/docs/ATENDRO_INTEGRATION.md), [OpenAPI](https://wpp.atendro.cloud/openapi.json), [catálogo](https://wpp.atendro.cloud/docs/API_ENDPOINTS.md) e [llms.txt](https://wpp.atendro.cloud/llms.txt). Revisão funcional do serviço: esta alteração adiciona cadastro global persistido, herança por instância, rotas públicas de documentação e gerenciamento no console. A migração 0013 preserva inscrições anteriores como exceções explícitas. ## Documentação central — 18/09/2026 A referência pública é servida pelo console em `https://wpp.atendro.cloud/docs`. As URLs da API continuam específicas de cada servidor. Os antigos caminhos de documentação redirecionam com 308 para a central, descartando parâmetros de consulta. A organização contém 10 guias, 56 operações em 12 categorias e 71 modelos. São 152 páginas com versões HTML e Markdown, além do OpenAPI, `llms.txt`, `llms-full.txt` e arquivos públicos de apoio. Os exemplos são sintéticos. | Verificação desta revisão | Resultado | |---|---| | Cobertura da referência | Cada operação e modelo do OpenAPI possui página; cada operação está nos dois arquivos para IA | | Exemplos contra JSON Schema 2020-12 | 181 requisições/respostas ilustrativas válidas; verificação executada no ambiente Python temporário | | Publicação pelo console | GET/HEAD sem login, sem acesso a store, credenciais ou worker; POST recusado | | Privacidade dos redirects | Destino fixo em `wpp.atendro.cloud`; host e query do solicitante não são propagados | | Autenticação existente | Console privado preservado; rotas operacionais continuam na API com os headers originais | | Conteúdo sem JavaScript | Títulos, campos, exemplos e respostas renderizados pelo servidor; Markdown integral disponível | | Navegação no navegador | Busca com acentos, páginas de endpoint, abas cURL/JavaScript e status HTTP, cópia de código | | Responsividade | Revisão visual de desktop e quadros locais com 390 px e 1024 px de largura | | Renderer e links para IA | Testes de escape HTML, preservação do código e resolução de todos os links Markdown passaram | | `go test -race ./...`, `go vet ./...`, builds da API e console | Passaram; integração em PostgreSQL descartável | | Dependências e receptor | 47 módulos revisados; 5 testes do validador HMAC passaram | O CI compara o catálogo gerado, os índices para IA e o conteúdo completo com o OpenAPI e os guias. A conferência dos exemplos valida o formato; não comprova execução de cada exemplo contra WhatsApp real. ## Resultados da integração — 17/09/2026 | Verificação | Resultado | O que demonstra | |---|---|---| | Readiness remota (revisão anterior `b626aa3`) | `200 ready` em 17/09 | Evidência anterior, não valida a instalação desta alteração | | `python3 scripts/sync_api_docs.py --check` | Passou; 56 operações / 50 caminhos | Referências locais, parâmetros de caminho, headers e catálogo sincronizados | | `openapi-spec-validator 0.7.2` sobre `docs/openapi.json` | `OK` | Documento válido segundo a especificação OpenAPI 3.1 | | `TestOpenAPICoversRouter` | Passou | Rotas fixas e catálogo de rotas por prefixo correspondem ao OpenAPI; testes referenciados existem | | `TestOpenAPIAuthenticationMatchesRouter` | Passou nas 56 operações | Headers administrativos/de instância, rejeição de credenciais ausentes/incorretas/duplicadas, Bearer/query/instancekey; despacho autenticado com fixtures | | `go test -race ./...` | Passou em todos os pacotes | Suíte HTTP/sessão/engine/storage/webhooks e testes de persistência com banco descartável | | `go vet ./...` | Passou | Análise estática Go | | `go build ./cmd/atendrozap` e build do console | Passou | Binários compilados | | `docker build --target api` | Passou | Empacotamento com documentação embutida e compilação dos alvos API/console | | `python3 scripts/check_dependencies.py` | Passou; 47 módulos revisados | Inventário de dependências Go preservado | | Herança global e concorrência | Passou com PostgreSQL descartável | Instâncias atuais/futuras, exceções, opt-out, troca de URL, remoção persistida e rotação de chave | | `TestGlobalWebhookSignedHTTPDelivery` | Passou | Cadastro via HTTP, criação com herança, projeção e entrega HTTP assinada de connection/groups, ordem e baixa na outbox | | `node --test scripts/verify_webhook_test.mjs` | 5 testes passaram | Corpo bruto, assinatura, timestamp, metadados, limites e falhas do exemplo do receptor | | Console de webhook | Testes e navegador passaram | Autenticação, CSRF, gravação global/por instância, ausência do segredo nas páginas e bloqueio de redirects com credenciais | | Documentação no navegador | Passou | Busca entre 56 operações, expansão de schemas, autenticação indicada; tela desktop e largura de 390 px sem overflow horizontal | | `git diff --check` | Passou | Sem problemas de whitespace no diff | O PostgreSQL foi criado exclusivamente para esta validação, em contêiner temporário com armazenamento descartável, e informado por `ATENDROZAP_TEST_DATABASE_URL`. Não foi usado o banco de laboratório ou o banco do Atendro. O validador OpenAPI foi instalado em ambiente Python temporário; nenhuma dependência de execução foi adicionada ao projeto. O teste de autenticação não substitui os testes funcionais de cada operação: eles estão relacionados no catálogo e foram executados pela suíte completa. As sessões HTTP são falsas, por desenho. A validação formal do OpenAPI verifica o documento, não compara automaticamente cada campo de todos os payloads de resposta ao JSON Schema. Exemplos e contratos foram revisados no código. ## Publicação inicial autorizada — 17/09/2026 A revisão funcional `74a63a9` foi publicada na API e no console após autorização do responsável. A configuração de logs do proxy recebeu filtros para dados sensíveis. Um backup do banco e as imagens anteriores foram preservados antes da atualização. | Verificação no servidor publicado | Resultado | |---|---| | `https://1.atendro.cloud/health/ready` | `200 ready` após reiniciar API e console | | Documentação pública | As 16 rotas permitidas responderam 200, com conteúdo correspondente aos arquivos da revisão | | OpenAPI publicado | 56 operações / 50 caminhos | | `https://wpp.atendro.cloud/login` | 200, formulário de acesso disponível | | `GET /v1/capabilities` com `admintoken`, via HTTPS público | 200; `global_webhook=true`, eventos `groups` disponíveis, `calls=false` | | `GET /v1/webhook` com `admintoken` | 200; `scope=server`, `registered=false`: aguardando a URL do novo receptor no Atendro | | `GET /v1/webhook` sem credenciais | 401 | | Migrações do banco | As 13 migrações aplicadas, incluindo 0013 | | Logs do proxy | Marcadores sintéticos confirmaram a ausência de headers e URI no acesso público; um contêiner isolado confirmou a mesma proteção nos logs de acesso e de erro para respostas 502 | Os tokens permaneceram no servidor durante as consultas autenticadas; não foram exibidos nem incluídos na documentação. A publicação preservou banco, volumes e configurações existentes. O webhook global não foi ativado: seu cadastro pelo console depende da URL e do segredo do receptor que será criado no Atendro. ## Constatações da publicação inicial para o consumidor (17/09/2026) - **Ligações:** `POST /call/make` retorna `501 calls_not_supported` com token válido; `capabilities.calls=false` naquela publicação. A etapa 5d posterior habilita voz por instâncias `calls`, conforme o guia de ligações. - **Instâncias:** token do servidor usa `admintoken`; token da instância usa `token`. Criação responde 200. Listagem não recupera o segredo. - **Restart administrativo:** responde `202 {message, worker}`; agenda o trabalho em background e não devolve a quantidade de sessões reiniciadas. - **Grupos no webhook:** o cadastro REST agora permite `groups`; a entrega assinada foi verificada com evento sintético e receptor HTTP local. - **Idempotência:** cobre init, todos os envios, ações e mutações de grupo, conforme o catálogo; não cobre qualquer POST indiscriminadamente. ## Limites e pendências As consultas remotas acima validam publicação, autenticação administrativa e leitura da configuração global. Não substituem a homologação das operações que alteram instâncias ou interagem com o WhatsApp, nem a entrega ao futuro receptor do Atendro. O teste de entrega assinada usou somente eventos sintéticos e um receptor local. Não houve novo pareamento, envio de mensagem, chamada, alteração de grupos, cadastro/ativação de servidor no Atendro, migração de tráfego ou chamadas à rota de conexão durante esta publicação. Os testes locais e as consultas remotas não encerram os [gates de piloto](https://wpp.atendro.cloud/docs/PILOT_GATES.md). A documentação foi centralizada no console: `/docs`, `/openapi.json` e `/llms.txt` são públicos em `https://wpp.atendro.cloud`. Os caminhos antigos em `https://1.atendro.cloud` redirecionam para a central; a URL das operações da API permanece específica de cada servidor. O próximo teste de cadastro no consumidor deve verificar readiness e capabilities com o token informado no backend privado. As demais operações reais dependem de ambiente de homologação, números/grupo de teste autorizados e dos cenários descritos no guia e nos gates. ## Reproduzir as verificações Com `ATENDROZAP_TEST_DATABASE_URL` já configurada para **um banco descartável**: ```sh python3 scripts/sync_api_docs.py --check python3 scripts/check_dependencies.py python3 -m unittest discover -s scripts -p 'test_build_docs.py' node --test scripts/verify_webhook_test.mjs go test -race ./... go vet ./... go build ./cmd/atendrozap git diff --check ``` Opcionalmente, em um ambiente que tenha `openapi-spec-validator==0.7.2`: ```sh python -m openapi_spec_validator docs/openapi.json ``` O CI executa a sincronização da documentação, o exemplo de verificação HMAC, os testes Go, vet e build. A validação formal externa acima foi executada nesta revisão e não é uma dependência do CI. Sem `ATENDROZAP_TEST_DATABASE_URL`, os testes de PostgreSQL são pulados; esse resultado não equivale à execução com banco descartável. --- Fonte: https://wpp.atendro.cloud/docs/api/health-live.md # Verificar processo HTTP `GET /health/live` Sem autenticação; não atesta banco nem WhatsApp. ## Autenticação Endpoint público, sem token. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Verificar processo HTTP | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `status` | `string` | obrigatório | Valores: `"alive"`, `"ready"`, `"not_ready"` | | `reason` | `string` | opcional | Valores: `"database_unreachable"` | Exemplo ilustrativo, com valores sintéticos: ```json { "status": "alive" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/health/live" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/health/live"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Diagnóstico](https://wpp.atendro.cloud/docs/api/diagnostico.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/health-ready.md # Verificar banco acessível `GET /health/ready` 200 não significa instância conectada nem integração homologada. ## Autenticação Endpoint público, sem token. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Verificar banco acessível | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `status` | `string` | obrigatório | Valores: `"alive"`, `"ready"`, `"not_ready"` | | `reason` | `string` | opcional | Valores: `"database_unreachable"` | Exemplo ilustrativo, com valores sintéticos: ```json { "status": "ready" } ``` ## Resposta 503 Banco inacessível: status=not_ready, reason=database_unreachable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `status` | `string` | obrigatório | Valores: `"alive"`, `"ready"`, `"not_ready"` | | `reason` | `string` | opcional | Valores: `"database_unreachable"` | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/health/ready" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/health/ready"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Diagnóstico](https://wpp.atendro.cloud/docs/api/diagnostico.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-capabilities.md # Consultar capacidades `GET /v1/capabilities` Fonte para habilitar funcionalidades. Para voz, exigir capabilities.calls=true e instance_kinds contendo calls. status=laboratory. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar capacidades | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `service` | `string` | obrigatório | Valores: `"AtendroZAP"` | | `status` | `string` | obrigatório | Valores: `"laboratory"` | | `worker` | `string` | opcional | — | | `engine` | `object` | opcional | — | | `capabilities` | `object` | obrigatório | — | | `capabilities.calls` | `boolean` | opcional | Habilitado neste worker por ATENDROZAP_CALLS_ENABLED; exige instância calls. | | `capabilities.ptt_transcoding` | `boolean` | opcional | Valores: `false` | | `interactive` | `object` | opcional | — | | `webhookEvents` | `object` | opcional | — | | `webhookEvents.delivered` | `array` | opcional | — | | `webhookEvents.ignored` | `array` | opcional | — | | `instance_kinds` | `array` | opcional | — | | `calls_max_concurrent` | `integer` | opcional | Teto por instância; padrão 1 quando configurado. Mínimo: `0` | Exemplo ilustrativo, com valores sintéticos: ```json { "service": "AtendroZAP", "status": "laboratory", "worker": "worker-1", "engine": { "configured": true, "store": "postgresql" }, "instance_kinds": [ "whatsapp", "calls" ], "calls_max_concurrent": 1, "capabilities": { "instance_lifecycle": true, "message_send_text": true, "webhooks": true, "global_webhook": true, "calls": true, "ptt_transcoding": false }, "webhookEvents": { "delivered": [ "connection", "messages", "messages_update", "messages_edit", "groups", "limits", "undecryptable", "call" ], "ignored": [ "qrcode", "history", "chats" ] } } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/capabilities" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/capabilities"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Diagnóstico](https://wpp.atendro.cloud/docs/api/diagnostico.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/create-instance.md # Criar instância e emitir token `POST /instance/init` Não pareia nem conecta. Guardar instance.id e instance.token no backend; listar não recupera o token. kind=whatsapp por padrão; kind=calls cria um dispositivo vinculado próprio para voz. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 15 minutos. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `name` | `string` | obrigatório | Obrigatório, até 128 bytes UTF-8, sem controle ou espaços nas extremidades. Comprimento mínimo: `1`. Comprimento máximo: `128` | | `systemName` | `string` | opcional | Até 128 bytes; recomendado Atendro. Comprimento máximo: `128` | | `companyId` | `string` | opcional | Até 128 bytes; vínculo com tenant no consumidor. Filtro de lista, não autorização. Comprimento máximo: `128` | | `kind` | `string` | opcional | Imutável após criar. calls exige o módulo habilitado e pareamento próprio. Valores: `"whatsapp"`, `"calls"`. Padrão: `"whatsapp"` | ## Resposta 200 Criar instância e emitir token | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `connected` | `boolean` | obrigatório | Valores: `false` | | `loggedIn` | `boolean` | obrigatório | Valores: `false` | | `instance` | `object` | obrigatório | Modelo: [IssuedInstance](https://wpp.atendro.cloud/docs/modelos/issued-instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected", "token": "0000000000000000000000000000000000000000000000000000000000000000" }, "loggedIn": false, "response": "Instance created" } ``` ## Resposta 400 invalid_name, invalid_kind ou invalid_json. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported ao solicitar kind=calls com o módulo desligado. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/instance/init" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "name": "atendimento-teste", "systemName": "Atendro", "companyId": "empresa-teste" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/init"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "name": "atendimento-teste", "systemName": "Atendro", "companyId": "empresa-teste" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/list-instances.md # Listar instâncias do servidor `GET /instance/all` Array direto. Nunca inclui token; qrcode é vazio. companyId é filtro administrativo, não isolamento de autenticação. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de consulta | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `companyId` | `string` | opcional | — | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Listar instâncias do servidor | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `[].id` | `string` | obrigatório | Formato: `uuid` | | `[].name` | `string` | obrigatório | — | | `[].systemName` | `string` | opcional | — | | `[].companyId` | `string` | opcional | — | | `[].status` | `string` | obrigatório | Valores: `"disconnected"`, `"connecting"`, `"connected"` | | `[].owner` | `string` | obrigatório | — | | `[].profileName` | `string` | obrigatório | — | | `[].qrcode` | `string` | obrigatório | PNG em data URI quando há QR vigente; vazio no restante e nas listagens. | | `[].paircode` | `string` | opcional | — | | `[].lastDisconnect` | `string` | opcional | RFC 3339. Formato: `date-time` | | `[].lastDisconnectReason` | `string` | opcional | — | | `[].disconnectCode` | `string` | opcional | — | | `[].worker` | `string` | opcional | — | | `[].limitEnforcement` | `string` | opcional | — | | `[].limitUntil` | `string` | opcional | RFC 3339. Formato: `date-time` | | `[].created` | `string` | opcional | RFC 3339. Formato: `date-time` | | `[].updated` | `string` | opcional | RFC 3339. Formato: `date-time` | | `[].kind` | `string` | obrigatório | Valores: `"whatsapp"`, `"calls"` | Exemplo ilustrativo, com valores sintéticos: ```json [] ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/instance/all" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/all"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/connect-instance.md # Conectar ou iniciar pareamento `POST /instance/connect` Abre conexão real; exige autorização para laboratório. Aguarda até 5 s por QR/login; acompanhar /instance/status. Sem phone: QR; com phone: paircode. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo opcional. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `phone` | `string` | opcional | Opcional. Sem phone usa QR; com phone extrai 8–15 dígitos incluindo DDI e pede código de pareamento. | ## Resposta 200 Conectar ou iniciar pareamento | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/instance/connect" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{}' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/connect"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({}), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-instance-status.md # Consultar sessão e webhook `GET /instance/status` Sem iniciar conexão. Usar connected e loggedIn; QR/código podem estar presentes durante pareamento. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar sessão e webhook | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/instance/status" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/status"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/disconnect-instance.md # Desvincular e limpar credencial `POST /instance/disconnect` Logout, distinto de restart. unlinked informa confirmação remota. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Desvincular e limpar credencial | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `unlinked` | `boolean` | obrigatório | Indica confirmação remota. Credencial local é limpa mesmo se false. | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "response": "Operação concluída", "unlinked": false } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/instance/disconnect" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/disconnect"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/restart-instance.md # Reiniciar preservando credencial `POST /instance/restart` Reabre sessão; não usar como rotina de validação de cadastro. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Reiniciar preservando credencial | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | | `response` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false, "response": "Operação concluída" } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/instance/restart" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/restart"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/delete-instance.md # Excluir instância `DELETE /instance` Logout em melhor esforço e exclusão definitiva; somente após autorização do responsável. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Excluir instância | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "response": "Operação concluída" } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request DELETE "$ATENDROZAP_URL/instance" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "DELETE", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Instâncias](https://wpp.atendro.cloud/docs/api/instancias.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-get-instance.md # Consultar instância por ID `GET /v1/instances/{id}` Ação administrativa com admintoken, sem precisar do token da instância. Mesmos efeitos da rota de instância. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar instância por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/instances/${ID}" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-delete-instance.md # Excluir instância por ID `DELETE /v1/instances/{id}` Ação administrativa com admintoken, sem precisar do token da instância. Mesmos efeitos da rota de instância. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Excluir instância por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "response": "Operação concluída" } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request DELETE "$ATENDROZAP_URL/v1/instances/${ID}" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "DELETE", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-connect-instance.md # Conectar instância por ID `POST /v1/instances/{id}/connect` Ação administrativa com admintoken, sem precisar do token da instância. Mesmos efeitos da rota de instância. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo opcional. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `phone` | `string` | opcional | Opcional. Sem phone usa QR; com phone extrai 8–15 dígitos incluindo DDI e pede código de pareamento. | ## Resposta 200 Conectar instância por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/instances/${ID}/connect" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --data '{}' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/connect"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({}), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-disconnect-instance.md # Desvincular instância por ID `POST /v1/instances/{id}/disconnect` Ação administrativa com admintoken, sem precisar do token da instância. Mesmos efeitos da rota de instância. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Desvincular instância por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `unlinked` | `boolean` | obrigatório | Indica confirmação remota. Credencial local é limpa mesmo se false. | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "response": "Operação concluída", "unlinked": false } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/instances/${ID}/disconnect" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/disconnect"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-restart-instance.md # Reiniciar instância por ID `POST /v1/instances/{id}/restart` Ação administrativa com admintoken, sem precisar do token da instância. Mesmos efeitos da rota de instância. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Reiniciar instância por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | | `response` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "connected": false, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected" }, "jid": "", "loggedIn": false, "response": "Operação concluída" } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/instances/${ID}/restart" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/restart"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-reissue-token.md # Reemitir token da instância `POST /v1/instances/{id}/token` O novo segredo aparece nesta resposta. graceSeconds=0 revoga o anterior imediatamente; máximo 3600. Não possui idempotência. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo opcional. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `graceSeconds` | `integer` | opcional | Prazo de convivência do token anterior; zero revoga imediatamente. Padrão: `0`. Mínimo: `0`. Máximo: `3600` | ## Resposta 200 Reemitir token da instância | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `graceSeconds` | `integer` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [IssuedInstance](https://wpp.atendro.cloud/docs/modelos/issued-instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "graceSeconds": 0, "instance": { "id": "00000000-0000-4000-8000-000000000001", "kind": "whatsapp", "name": "instancia-de-teste", "owner": "", "profileName": "", "qrcode": "", "status": "disconnected", "token": "0000000000000000000000000000000000000000000000000000000000000000" }, "response": "Operação concluída" } ``` ## Resposta 400 Corpo ou telefone inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 session_owned_elsewhere ou outro conflito de sessão. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 worker_full; Retry-After=5. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 whatsapp_unreachable ou storage_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/instances/${ID}/token" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "graceSeconds": 300 }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/token"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "graceSeconds": 300 }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-restart-worker.md # Reiniciar sessões deste worker `POST /admin/restart` Soft restart das sessões do worker que atende a requisição. Não reinicia processo nem todos os workers do cluster. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 202 Reiniciar sessões deste worker | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `message` | `string` | obrigatório | — | | `worker` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "message": "Operação agendada", "worker": "worker-1" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/admin/restart" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/admin/restart"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Administração](https://wpp.atendro.cloud/docs/api/administracao.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/send-text.md # Enviar texto `POST /send/text` Retorna ID real do WhatsApp, não ID de fila. linkPreview é ignorado. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `text` | `string` | obrigatório | UTF-8, não vazio/branco, até 65536 bytes. Comprimento mínimo: `1`. Comprimento máximo: `65536` | | `linkPreview` | `any` | opcional | Aceito e ignorado; o serviço não gera prévia de link. | ## Resposta 200 Enviar texto | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/send/text" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123", "text": "Mensagem de teste da integração." }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/send/text"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123", "text": "Mensagem de teste da integração." }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/send-media.md # Enviar mídia `POST /send/media` URL depende da allowlist de mídia. PTT requer OGG/Opus; sem transcodificação outros formatos saem como áudio comum. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `type` | `string` | obrigatório | Valores: `"image"`, `"video"`, `"audio"`, `"ptt"`, `"document"`, `"sticker"` | | `file` | `string` | obrigatório | Data URI, base64 ou URL permitida por ATENDROZAP_MEDIA_URL_ALLOWLIST. Até 32 MiB decodificados; JSON até 48 MiB. Comprimento mínimo: `1` | | `text` | `string` | opcional | Legenda em UTF-8, até 65536 bytes. Comprimento máximo: `65536` | | `docName` | `string` | opcional | Nome-base do documento. | ## Resposta 200 Enviar mídia | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `mimetype` | `string` | obrigatório | — | | `ptt` | `boolean` | obrigatório | — | | `note` | `string` | opcional | Explica envio como áudio comum quando PTT não é possível. | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "mimetype": "valor-de-exemplo", "ptt": false, "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/send/media" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123", "type": "image", "file": "https://arquivos.example/imagem.png", "text": "Imagem de teste." }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/send/media"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123", "type": "image", "file": "https://arquivos.example/imagem.png", "text": "Imagem de teste." }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/send-contact.md # Enviar contato `POST /send/contact` Contato vCard; number é o destinatário e phoneNumber é o telefone do contato. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `fullName` | `string` | obrigatório | Nome do contato sintético/autorizado, 1–128 bytes após trim. Comprimento mínimo: `1`. Comprimento máximo: `128` | | `phoneNumber` | `string` | obrigatório | Telefone do contato: 8–15 dígitos com DDI após retirar formatação. | | `organization` | `string` | opcional | Até 128 bytes. Comprimento máximo: `128` | ## Resposta 200 Enviar contato | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/send/contact" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123", "fullName": "Contato de teste", "phoneNumber": "12025550124", "organization": "Empresa de teste" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/send/contact"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123", "fullName": "Contato de teste", "phoneNumber": "12025550124", "organization": "Empresa de teste" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/send-location.md # Enviar localização `POST /send/location` Coordenadas obrigatórias; suporta citação e marca de encaminhada. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `latitude` | `number` | obrigatório | Mínimo: `-90`. Máximo: `90` | | `longitude` | `number` | obrigatório | Mínimo: `-180`. Máximo: `180` | | `name` | `string` | opcional | Até 256 bytes. Comprimento máximo: `256` | | `address` | `string` | opcional | Até 512 bytes. Comprimento máximo: `512` | ## Resposta 200 Enviar localização | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/send/location" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123", "latitude": -15.7939, "longitude": -47.8828, "name": "Local de teste" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/send/location"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123", "latitude": -15.7939, "longitude": -47.8828, "name": "Local de teste" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/send-menu.md # Enviar botões, lista ou enquete `POST /send/menu` renderMode=auto tenta nativo e pode cair para enquete/texto. rendered informa o formato entregue. 3 botões; 4–10 respostas podem virar lista; até 10 linhas; enquetes 2–12 opções. call: e carousel recusados. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `type` | `string` | obrigatório | Valores: `"button"`, `"buttons"`, `"list"`, `"poll"` | | `text` | `string` | obrigatório | Até 4096 bytes. Comprimento mínimo: `1`. Comprimento máximo: `4096` | | `choices` | `array` | obrigatório | Mínimo de itens: `1` | | `footerText` | `string` | opcional | — | | `listButton` | `string` | opcional | — | | `selectableCount` | `integer / string` | opcional | Só em type=poll; padrão 1. | | `renderMode` | `string` | opcional | Valores: `"auto"`, `"native"`, `"poll"`, `"text"`. Padrão: `"auto"` | ## Resposta 200 Enviar botões, lista ou enquete | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `type` | `string` | obrigatório | — | | `renderMode` | `string` | obrigatório | Valores: `"auto"`, `"native"`, `"poll"`, `"text"` | | `rendered` | `string` | obrigatório | Valores: `"button"`, `"list"`, `"poll"`, `"text"` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "renderMode": "auto", "rendered": "button", "success": true, "timestamp": 1789603200, "type": "valor-de-exemplo" } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/send/menu" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123", "type": "poll", "text": "Qual assunto deseja tratar?", "choices": [ "Atendimento", "Financeiro" ], "selectableCount": 1, "renderMode": "auto" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/send/menu"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123", "type": "poll", "text": "Qual assunto deseja tratar?", "choices": [ "Atendimento", "Financeiro" ], "selectableCount": 1, "renderMode": "auto" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Enviar mensagens](https://wpp.atendro.cloud/docs/api/envio.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/forward-message.md # Encaminhar mensagem guardada `POST /message/forward` Rota própria do AtendroZAP. Faz novo envio; mídias são baixadas e reenviadas, com marca de encaminhada. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Resposta 200 Encaminhar mensagem guardada | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found ou media_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/forward" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "id": "MENSAGEM_DE_TESTE", "number": "12025550123" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/forward"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE", "number": "12025550123" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/react-message.md # Reagir ou remover reação `POST /message/react` Chat vem do ID guardado; number é ignorado. text vazio remove a reação. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | | `text` | `string` | opcional | Um emoji; vazio/ausente remove a reação. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Resposta 200 Reagir ou remover reação | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `reaction` | `object` | obrigatório | — | | `reaction.id` | `string` | obrigatório | — | | `reaction.emoji` | `string` | obrigatório | — | | `reaction.status` | `string` | obrigatório | Valores: `"sent"`, `"removed"` | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "messageId": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "reaction": { "emoji": "valor-de-exemplo", "id": "MENSAGEM_DE_TESTE", "status": "sent" }, "success": true, "timestamp": 1789603200 } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found ou media_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/react" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "id": "MENSAGEM_DE_TESTE", "text": "👍" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/react"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE", "text": "👍" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/delete-message.md # Apagar mensagem própria para todos `POST /message/delete` Mensagem recebida retorna cannot_delete. recorded=false indica WhatsApp aceitou mas o banco não gravou. Repetida pode retornar alreadyDeleted. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Resposta 200 Apagar mensagem própria para todos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `id` | `string` | obrigatório | — | | `messageid` | `string` | opcional | — | | `messageId` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"Deleted"` | | `timestamp` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `recorded` | `boolean` | obrigatório | — | | `alreadyDeleted` | `boolean` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "id": "MENSAGEM_DE_TESTE", "recorded": true, "status": "Deleted", "success": true, "timestamp": "2026-09-17T00:00:00Z" } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found ou media_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/delete" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "id": "MENSAGEM_DE_TESTE" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/delete"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/edit-message.md # Editar texto ou legenda própria `POST /message/edit` Janela de 20 min. id/messageid do resultado identificam o original; editId identifica a ação. recorded=false exige reconciliação. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | | `text` | `string` | obrigatório | Texto/legenda UTF-8, não vazio, até 65536 bytes. Comprimento mínimo: `1`. Comprimento máximo: `65536` | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Resposta 200 Editar texto ou legenda própria | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `id` | `string` | obrigatório | owner:id do original. | | `messageid` | `string` | obrigatório | ID do original. | | `messageId` | `string` | opcional | — | | `editId` | `string` | obrigatório | ID da ação de edição. | | `content` | `string` | opcional | — | | `messageType` | `string` | opcional | — | | `messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `status` | `string` | opcional | — | | `owner` | `string` | opcional | — | | `editCount` | `integer` | opcional | — | | `recorded` | `boolean` | obrigatório | false: WhatsApp aceitou mas a persistência local falhou. | Exemplo ilustrativo, com valores sintéticos: ```json { "editId": "MENSAGEM_DE_TESTE", "id": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "recorded": true, "success": true } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found ou media_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/edit" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "id": "MENSAGEM_DE_TESTE", "text": "Texto atualizado no exemplo." }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/edit"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE", "text": "Texto atualizado no exemplo." }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/edit-message-put.md # Editar mensagem (alias PUT) `PUT /message/edit` Mesmo contrato de POST /message/edit. Trocar POST por PUT com a mesma Idempotency-Key muda o hash da requisição. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | | `text` | `string` | obrigatório | Texto/legenda UTF-8, não vazio, até 65536 bytes. Comprimento mínimo: `1`. Comprimento máximo: `65536` | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Resposta 200 Editar mensagem (alias PUT) | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `id` | `string` | obrigatório | owner:id do original. | | `messageid` | `string` | obrigatório | ID do original. | | `messageId` | `string` | opcional | — | | `editId` | `string` | obrigatório | ID da ação de edição. | | `content` | `string` | opcional | — | | `messageType` | `string` | opcional | — | | `messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `status` | `string` | opcional | — | | `owner` | `string` | opcional | — | | `editCount` | `integer` | opcional | — | | `recorded` | `boolean` | obrigatório | false: WhatsApp aceitou mas a persistência local falhou. | Exemplo ilustrativo, com valores sintéticos: ```json { "editId": "MENSAGEM_DE_TESTE", "id": "MENSAGEM_DE_TESTE", "messageid": "MENSAGEM_DE_TESTE", "recorded": true, "success": true } ``` ## Resposta 400 Entrada inválida. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 body_too_large ou mídia acima do limite. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 too_many_requests ou retry_later: nada enviado, respeitar Retry-After. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 500 whatsapp_reachout_timelock / WHATSAPP_REACHOUT_TIMELOCK, provider_code=463. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 504 send_ambiguous ou action_ambiguous com ID. Reconciliar antes de repetir. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request PUT "$ATENDROZAP_URL/message/edit" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "id": "MENSAGEM_DE_TESTE", "text": "Texto atualizado no exemplo." }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/edit"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "PUT", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE", "text": "Texto atualizado no exemplo." }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Ações em mensagens](https://wpp.atendro.cloud/docs/api/acoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/find-messages.md # Buscar mensagens no formato legado `POST /message/find` Ordem mais recente primeiro. includeHistory=true por padrão; histórico nunca dispara automações novas. id ausente no store retorna messages=[]. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo opcional. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | opcional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `chatid` | `string` | opcional | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `limit` | `integer / string` | opcional | 0/ausente usa 100; máximo 200. Padrão: `100` | | `offset` | `integer / string` | opcional | Deslocamento da página. | | `includeHistory` | `boolean / string / integer / null` | opcional | Padrão: `true` | ## Resposta 200 Buscar mensagens no formato legado | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `messages` | `array` | obrigatório | — | | `messages[].id` | `string` | obrigatório | owner:messageid. | | `messages[].messageid` | `string` | obrigatório | — | | `messages[].chatid` | `string` | obrigatório | — | | `messages[].sender` | `string` | opcional | — | | `messages[].sender_pn` | `string` | opcional | — | | `messages[].senderName` | `string` | opcional | — | | `messages[].pushName` | `string` | opcional | — | | `messages[].isGroup` | `boolean` | opcional | — | | `messages[].fromMe` | `boolean` | obrigatório | — | | `messages[].wasSentByApi` | `boolean` | opcional | — | | `messages[].messageType` | `string` | opcional | Tipo legado PascalCase. | | `messages[].type` | `string` | opcional | — | | `messages[].messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `messages[].timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `messages[].status` | `string` | opcional | Pending, Sent, Delivered, Read, Played, Failed, Received ou Deleted. | | `messages[].text` | `string` | opcional | — | | `messages[].content` | `object` | opcional | — | | `messages[].buttonOrListid` | `string` | opcional | — | | `messages[].reactions` | `array` | opcional | — | | `messages[].choices` | `any` | opcional | Opções armazenadas de menus/enquetes; estrutura depende do tipo e pode ser null. | | `messages[].fileURL` | `string` | opcional | — | | `messages[].mediaUrl` | `string` | opcional | — | | `returnedMessages` | `integer` | obrigatório | — | | `limit` | `integer` | obrigatório | — | | `offset` | `integer` | obrigatório | — | | `hasMore` | `boolean` | obrigatório | — | | `nextOffset` | `integer` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "hasMore": false, "limit": 0, "messages": [], "offset": 0, "returnedMessages": 0 } ``` ## Resposta 400 invalid_limit ou invalid_chatid. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/find" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "chatid": "12025550123", "limit": 20, "offset": 0 }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/find"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "chatid": "12025550123", "limit": 20, "offset": 0 }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-message-status.md # Consultar resultado da mensagem `GET /message/status/{id}` Estados internos em minúsculas; usar para reconciliar resultado ambíguo. Preferir ID bruto messageid devolvido no envio. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar resultado da mensagem | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | — | | `status` | `string` | obrigatório | Estado interno, em minúsculas: sending, unknown, failed, sent, delivered, read, played ou received. | | `failure` | `string` | obrigatório | — | | `fromMe` | `boolean` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `deliveredAt` | `integer / null` | opcional | — | | `readAt` | `integer / null` | opcional | — | | `playedAt` | `integer / null` | opcional | — | | `revokedAt` | `integer / null` | opcional | — | | `deletedForMeAt` | `integer / null` | opcional | — | | `editedAt` | `integer / null` | opcional | — | | `editCount` | `integer` | opcional | — | | `reactions` | `array / null` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "failure": "valor-de-exemplo", "fromMe": false, "id": "MENSAGEM_DE_TESTE", "status": "valor-de-exemplo", "timestamp": 1789603200 } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/message/status/${ID}" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/status/{id}"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/list-stored-messages.md # Listar mensagens no formato interno `GET /v1/messages` Até 200, sem offset. Para paginação e formato legado use /message/find. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de consulta | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `limit` | `integer` | opcional | Padrão: `50`. Mínimo: `1`. Máximo: `200` | | `chatid` | `string` | opcional | — | | `excludeHistory` | `boolean` | opcional | Padrão: `false` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Listar mensagens no formato interno | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `messages` | `array` | obrigatório | — | | `messages[].id` | `string` | opcional | — | | `messages[].chatid` | `string` | opcional | — | | `messages[].fromMe` | `boolean` | opcional | — | | `messages[].status` | `string` | opcional | — | | `messages[].timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `hasMore` | `boolean` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "hasMore": false, "messages": [] } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/messages" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/messages"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/download-message-media.md # Obter link assinado de mídia `POST /message/download` Pode buscar mídia no WhatsApp e pedir reenvio ao celular; não é uma consulta sem efeitos. Link vence com retenção de 48 h, use expiresAt. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | ## Resposta 200 Obter link assinado de mídia | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `fileURL` | `string` | obrigatório | — | | `url` | `string` | obrigatório | — | | `mimetype` | `string` | obrigatório | — | | `mimeType` | `string` | obrigatório | — | | `fileName` | `string` | obrigatório | — | | `size` | `integer` | obrigatório | — | | `expiresAt` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `messageid` | `string` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "expiresAt": "2026-09-17T00:00:00Z", "fileName": "valor-de-exemplo", "fileURL": "valor-de-exemplo", "messageid": "MENSAGEM_DE_TESTE", "mimeType": "valor-de-exemplo", "mimetype": "valor-de-exemplo", "size": 0, "url": "valor-de-exemplo" } ``` ## Resposta 400 invalid_id. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 message_not_found ou media_unavailable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 media_reupload_pending; aguardar reenvio ao celular. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 media_too_large; limite 64 MiB. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 not_media. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/download" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "id": "MENSAGEM_DE_TESTE" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/download"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "id": "MENSAGEM_DE_TESTE" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Mídia](https://wpp.atendro.cloud/docs/api/midia.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-signed-media.md # Ler bytes pelo link assinado `GET /v1/media/{token}` Sem header token: a credencial é o token na URL assinada devolvida pela API. Não registrar/compartilhar o link. Expirado ou inválido retorna 404. Não aceita upload. ## Autenticação URL assinada: utilize o `fileURL` completo recebido no download, dentro de sua validade. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `token` | `string` | obrigatório | Token assinado do fileURL; usar a URL inteira devolvida pelo download. Comprimento mínimo: `1` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Bytes da mídia; Content-Length presente. Tipos passivos inline; conteúdo ativo vira attachment/application/octet-stream com CSP sandbox. Conteúdo: `application/octet-stream`, `image/*`, `audio/*`, `video/*`, `application/pdf`. ## Resposta 404 Link inválido, expirado ou mídia não encontrada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/media/${TOKEN}" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/media/{token}"; path = path.replace("{token}", encodeURIComponent(process.env.TOKEN)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.arrayBuffer(); ``` ## Relacionados - [Mídia](https://wpp.atendro.cloud/docs/api/midia.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/mark-messages-read.md # Enviar recibos de leitura por ID `POST /message/markread` Até 1000 IDs; mensagens próprias e desconhecidas são ignoradas. Afeta leitura no WhatsApp. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string / array` | obrigatório | — | ## Resposta 200 Enviar recibos de leitura por ID | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `marked` | `array` | obrigatório | — | | `count` | `integer` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "count": 0, "marked": [], "success": true } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/message/markread" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "id": [ "MENSAGEM_DE_TESTE" ] }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/message/markread"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "id": [ "MENSAGEM_DE_TESTE" ] }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Leitura](https://wpp.atendro.cloud/docs/api/leitura.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/mark-chat-read.md # Marcar recebidas do chat como lidas `POST /chat/read` Envia recibo para até 100 mensagens ainda não lidas. read=false retorna marked=0 e note; não há suporte a marcar como não lido. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `read` | `boolean` | opcional | Ausente equivale a true; false não marca como não lido e retorna marked=0 com note. Padrão: `true` | ## Resposta 200 Marcar recebidas do chat como lidas | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `marked` | `integer` | obrigatório | — | | `note` | `string` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "marked": 0, "success": true } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/chat/read" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "number": "12025550123", "read": true }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/chat/read"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "number": "12025550123", "read": true }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Leitura](https://wpp.atendro.cloud/docs/api/leitura.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/check-numbers.md # Verificar números no WhatsApp `POST /chat/check` 1–50 telefones; number é alias singular de numbers. Exige sessão conectada. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | condicional | Um telefone com DDI. | | `numbers` | `string / array` | condicional | — | Pelo menos uma destas combinações deve ser válida: - `number` - `numbers` ## Resposta 200 Verificar números no WhatsApp | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `[].query` | `string` | obrigatório | — | | `[].exists` | `boolean` | obrigatório | — | | `[].numberExists` | `boolean` | obrigatório | — | | `[].jid` | `string` | obrigatório | — | | `[].data` | `object` | obrigatório | — | | `[].data.exists` | `boolean` | opcional | — | | `[].data.jid` | `string` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json [] ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/chat/check" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "numbers": [ "12025550123" ] }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/chat/check"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "numbers": [ "12025550123" ] }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-chat-details.md # Obter identidade e foto `POST /chat/details` Foto em cache por 24 h; campos vazios dependem de privacidade do WhatsApp. Não devolver dados de terceiros em logs. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | ## Resposta 200 Obter identidade e foto | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `jid` | `string` | obrigatório | — | | `exists` | `boolean` | obrigatório | — | | `name` | `string` | opcional | — | | `pushName` | `string` | opcional | — | | `displayName` | `string` | opcional | — | | `verifiedName` | `string` | opcional | — | | `isBusiness` | `boolean` | opcional | — | | `profilePicUrl` | `string` | obrigatório | — | | `profilePictureUrl` | `string` | opcional | — | | `imagePreview` | `string` | opcional | — | | `pictureId` | `string` | opcional | — | | `imageState` | `string` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "exists": false, "jid": "", "profilePicUrl": "" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 number_not_on_whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/chat/details" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "number": "12025550123" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/chat/details"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "number": "12025550123" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/find-chats.md # Listar conversas conhecidas `POST /chat/find` Não consulta histórico remoto sob demanda. wa_lastMsgTimestamp e wa_lastMessageTime estão em segundos. Sem filtros de lead/etiqueta. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo opcional. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `limit` | `integer / string` | opcional | 0/ausente retorna até 5000. Padrão: `5000` | | `offset` | `integer / string` | opcional | Deslocamento da página. | | `wa_isGroup` | `boolean / string / integer / null` | opcional | — | | `includeLeft` | `boolean / string / integer / null` | opcional | — | ## Resposta 200 Listar conversas conhecidas | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `chats` | `array` | obrigatório | — | | `chats[].id` | `string` | obrigatório | — | | `chats[].wa_chatid` | `string` | obrigatório | — | | `chats[].name` | `string` | opcional | — | | `chats[].wa_name` | `string` | opcional | — | | `chats[].wa_contactName` | `string` | opcional | — | | `chats[].wa_isGroup` | `boolean` | obrigatório | — | | `chats[].wa_unreadCount` | `integer` | opcional | — | | `chats[].wa_archived` | `boolean` | opcional | — | | `chats[].wa_lastMsgTimestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `chats[].wa_lastMessageTime` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `chats[].owner` | `string` | opcional | — | | `chats[].phone` | `string` | opcional | Vazio para grupo ou LID sem telefone conhecido. | | `chats[].pictureId` | `string` | opcional | — | | `chats[].wa_isGroup_announce` | `boolean` | opcional | — | | `chats[].participantCount` | `integer` | opcional | — | | `chats[].topic` | `string` | opcional | — | | `hasMore` | `boolean` | obrigatório | — | | `pagination` | `object` | obrigatório | — | | `pagination.limit` | `integer` | obrigatório | — | | `pagination.offset` | `integer` | obrigatório | — | | `pagination.returned` | `integer` | obrigatório | — | | `nextOffset` | `integer` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "chats": [], "hasMore": false, "pagination": { "limit": 0, "offset": 0, "returned": 0 } } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/chat/find" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "limit": 20, "offset": 0 }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/chat/find"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "limit": 20, "offset": 0 }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Conversas e consultas](https://wpp.atendro.cloud/docs/api/consultas.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/list-groups.md # Listar grupos sincronizados `GET /group/list` Contrato implementado; homologação real de grupos pendente. force=true consulta WhatsApp; noparticipants=true omite Participants. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de consulta | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `force` | `boolean` | opcional | Padrão: `false` | | `noparticipants` | `boolean` | opcional | Padrão: `false` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Listar grupos sincronizados | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groups` | `array` | obrigatório | — | | `groups[].JID` | `string` | obrigatório | — | | `groups[].Name` | `string` | obrigatório | — | | `groups[].Topic` | `string` | opcional | — | | `groups[].OwnerJID` | `string` | opcional | — | | `groups[].OwnerPN` | `string` | opcional | — | | `groups[].IsLocked` | `boolean` | opcional | — | | `groups[].IsAnnounce` | `boolean` | opcional | — | | `groups[].AddressingMode` | `string` | opcional | — | | `groups[].ParticipantCount` | `integer` | obrigatório | — | | `groups[].Participants` | `array` | opcional | — | | `groups[].Participants[].JID` | `string` | obrigatório | — | | `groups[].Participants[].PhoneNumber` | `string` | opcional | — | | `groups[].Participants[].LID` | `string` | opcional | — | | `groups[].Participants[].IsAdmin` | `boolean` | obrigatório | — | | `groups[].Participants[].IsSuperAdmin` | `boolean` | obrigatório | — | | `groups[].Participants[].DisplayName` | `string` | obrigatório | — | | `groups[].Participants[].Error` | `integer` | obrigatório | Código por participante; 0 indica ausência de erro registrado. | | `groups[].invite_link` | `string` | obrigatório | Vazio se não solicitado ou sem permissão de admin. | | `groups[].PictureID` | `string` | opcional | — | | `groups[].lastMessageAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `groups[].syncedAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `groups[].left` | `boolean` | opcional | — | | `groups[].GroupCreated` | `string` | opcional | RFC 3339. Formato: `date-time` | Exemplo ilustrativo, com valores sintéticos: ```json { "groups": [] } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Sessão desconectada/ocupada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/group/list" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/list"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-group-info.md # Consultar grupo `POST /group/info` Cache de 10 min; force=true atualiza. getInviteLink só retorna link para administrador. getRequestsParticipants ignorado. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `force` | `boolean / string / integer / null` | opcional | — | | `getInviteLink` | `boolean / string / integer / null` | opcional | — | | `getRequestsParticipants` | `any` | opcional | Aceito e ignorado. | ## Resposta 200 Consultar grupo | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `JID` | `string` | obrigatório | — | | `Name` | `string` | obrigatório | — | | `Topic` | `string` | opcional | — | | `OwnerJID` | `string` | opcional | — | | `OwnerPN` | `string` | opcional | — | | `IsLocked` | `boolean` | opcional | — | | `IsAnnounce` | `boolean` | opcional | — | | `AddressingMode` | `string` | opcional | — | | `ParticipantCount` | `integer` | obrigatório | — | | `Participants` | `array` | opcional | — | | `Participants[].JID` | `string` | obrigatório | — | | `Participants[].PhoneNumber` | `string` | opcional | — | | `Participants[].LID` | `string` | opcional | — | | `Participants[].IsAdmin` | `boolean` | obrigatório | — | | `Participants[].IsSuperAdmin` | `boolean` | obrigatório | — | | `Participants[].DisplayName` | `string` | obrigatório | — | | `Participants[].Error` | `integer` | obrigatório | Código por participante; 0 indica ausência de erro registrado. | | `invite_link` | `string` | obrigatório | Vazio se não solicitado ou sem permissão de admin. | | `PictureID` | `string` | opcional | — | | `lastMessageAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `syncedAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `left` | `boolean` | opcional | — | | `GroupCreated` | `string` | opcional | RFC 3339. Formato: `date-time` | Exemplo ilustrativo, com valores sintéticos: ```json { "JID": "", "Name": "valor-de-exemplo", "ParticipantCount": 0, "invite_link": "" } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Sessão desconectada/ocupada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/group/info" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "groupjid": "120363000000000001@g.us", "force": false }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/info"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "groupjid": "120363000000000001@g.us", "force": false }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/create-group.md # Criar grupo `POST /group/create` Nome até 100 caracteres e até 50 participantes na criação. Conferir Error por participante. Exige autorização para grupo de teste. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `name` | `string` | obrigatório | Comprimento mínimo: `1`. Comprimento máximo: `100` | | `participants` | `array` | obrigatório | Mínimo de itens: `1`. Máximo de itens: `50` | ## Resposta 200 Criar grupo | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `JID` | `string` | obrigatório | — | | `Name` | `string` | obrigatório | — | | `Topic` | `string` | opcional | — | | `OwnerJID` | `string` | opcional | — | | `OwnerPN` | `string` | opcional | — | | `IsLocked` | `boolean` | opcional | — | | `IsAnnounce` | `boolean` | opcional | — | | `AddressingMode` | `string` | opcional | — | | `ParticipantCount` | `integer` | obrigatório | — | | `Participants` | `array` | opcional | — | | `Participants[].JID` | `string` | obrigatório | — | | `Participants[].PhoneNumber` | `string` | opcional | — | | `Participants[].LID` | `string` | opcional | — | | `Participants[].IsAdmin` | `boolean` | obrigatório | — | | `Participants[].IsSuperAdmin` | `boolean` | obrigatório | — | | `Participants[].DisplayName` | `string` | obrigatório | — | | `Participants[].Error` | `integer` | obrigatório | Código por participante; 0 indica ausência de erro registrado. | | `invite_link` | `string` | obrigatório | Vazio se não solicitado ou sem permissão de admin. | | `PictureID` | `string` | opcional | — | | `lastMessageAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `syncedAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `left` | `boolean` | opcional | — | | `GroupCreated` | `string` | opcional | RFC 3339. Formato: `date-time` | Exemplo ilustrativo, com valores sintéticos: ```json { "JID": "", "Name": "valor-de-exemplo", "ParticipantCount": 0, "invite_link": "" } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/group/create" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "name": "Grupo de teste", "participants": [ "12025550123" ] }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/create"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "name": "Grupo de teste", "participants": [ "12025550123" ] }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/update-group-participants.md # Alterar participantes `POST /group/updateParticipants` add/remove/promote/demote. approve/reject retornam 400 invalid_action. Conferir Error por participante e atualizar o grupo. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `action` | `string` | obrigatório | Valores: `"add"`, `"remove"`, `"promote"`, `"demote"` | | `participants` | `array` | obrigatório | Mínimo de itens: `1` | ## Resposta 200 Alterar participantes | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupUpdated` | `array` | obrigatório | — | | `groupUpdated[].JID` | `string` | obrigatório | — | | `groupUpdated[].Error` | `integer` | obrigatório | — | | `needs_refresh` | `boolean` | obrigatório | Valores: `true` | Exemplo ilustrativo, com valores sintéticos: ```json { "groupUpdated": [], "needs_refresh": true } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/group/updateParticipants" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "groupjid": "120363000000000001@g.us", "action": "add", "participants": [ "12025550123" ] }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/updateParticipants"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "groupjid": "120363000000000001@g.us", "action": "add", "participants": [ "12025550123" ] }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/update-group-name.md # Alterar nome do grupo `POST /group/updateName` Nome até 100 caracteres. Efeito real em grupo; homologação de laboratório pendente. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `name` | `string` | obrigatório | Comprimento mínimo: `1`. Comprimento máximo: `100` | ## Resposta 200 Alterar nome do grupo | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `needs_refresh` | `boolean` | obrigatório | Valores: `true` | | `pictureId` | `string` | opcional | Presente na atualização de imagem. | Exemplo ilustrativo, com valores sintéticos: ```json { "needs_refresh": true, "response": "Operação concluída" } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/group/updateName" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "groupjid": "120363000000000001@g.us", "name": "Grupo de teste atualizado" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/updateName"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "groupjid": "120363000000000001@g.us", "name": "Grupo de teste atualizado" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/update-group-image.md # Alterar imagem do grupo `POST /group/updateImage` JPEG/PNG/GIF até 8 MiB; corpo JSON até 12 MiB; convertido em JPEG até 640×640. remove/delete removem a foto. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `image` | `string` | obrigatório | Data URI/base64/URL permitida (JPEG, PNG, GIF; até 8 MiB), ou remove/delete. Convertida para JPEG até 640×640. Comprimento mínimo: `1` | ## Resposta 200 Alterar imagem do grupo | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `needs_refresh` | `boolean` | obrigatório | Valores: `true` | | `pictureId` | `string` | opcional | Presente na atualização de imagem. | Exemplo ilustrativo, com valores sintéticos: ```json { "needs_refresh": true, "response": "Operação concluída" } ``` ## Resposta 400 Grupo, participantes, nome ou imagem inválidos. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 not_in_group ou not_admin. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 group_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 Conflito de sessão ou idempotency_in_progress; respeitar o código error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 413 image_too_large ou body_too_large. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 415 invalid_image. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 Falha semântica da operação ou idempotency_mismatch. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 429 rate_limited, Retry-After=30. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/group/updateImage" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "groupjid": "120363000000000001@g.us", "image": "https://arquivos.example/grupo.png" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/group/updateImage"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "groupjid": "120363000000000001@g.us", "image": "https://arquivos.example/grupo.png" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Grupos](https://wpp.atendro.cloud/docs/api/grupos.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-instance-proxy.md # Consultar proxy da instância `GET /instance/proxy` Credenciais da URL são redigidas; não há pool gerenciado nem fallback automático. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar proxy da instância | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `mode` | `string` | obrigatório | Valores: `"custom"`, `"none"` | | `effective_mode` | `string` | obrigatório | Valores: `"custom"`, `"none"` | | `effective_detail` | `string` | opcional | Valores: `"direct"`, `"instance"`, `"sealed"` | | `fallback` | `object` | obrigatório | — | | `fallback.active` | `boolean` | opcional | Valores: `false` | | `fallback.reason` | `string` | opcional | — | | `fallback.since` | `integer` | opcional | — | | `proxy_url` | `string` | obrigatório | Credenciais redigidas. | | `proxy_fallback` | `string` | opcional | Valores: `"never"` | | `managed` | `boolean` | opcional | Valores: `false` | | `last_test_at` | `integer` | opcional | Unix em milissegundos. | | `last_test_error` | `string` | opcional | — | | `validation_error` | `boolean` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "effective_mode": "custom", "fallback": { "active": false, "reason": "valor-de-exemplo", "since": 0 }, "mode": "custom", "proxy_url": "valor-de-exemplo" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/instance/proxy" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/proxy"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Proxy da instância](https://wpp.atendro.cloud/docs/api/proxy.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/set-instance-proxy.md # Configurar proxy ou conexão direta `POST /instance/proxy` custom sonda conectividade antes de gravar. internal significa conexão direta; none exige confirm_no_proxy=true. Mudança pode reiniciar sessão; não usar para testar cadastro. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `mode` | `string` | obrigatório | Valores: `"custom"`, `"none"`, `"internal"` | | `proxy_url` | `string` | condicional | Obrigatória em custom; http/https/socks5/socks5h; sondada antes da gravação. Somente na requisição; não é devolvido | | `confirm_no_proxy` | `boolean` | condicional | Obrigatório true em mode=none. | Quando `mode` = `"custom"`, informe `proxy_url`. Quando `mode` = `"none"`, informe `confirm_no_proxy`. ## Resposta 200 Configurar proxy ou conexão direta | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `details` | `string` | obrigatório | — | | `proxy` | `object` | obrigatório | Modelo: [Proxy](https://wpp.atendro.cloud/docs/modelos/proxy.md). | | `restart_requested` | `boolean` | obrigatório | — | Exemplo ilustrativo, com valores sintéticos: ```json { "details": "valor-de-exemplo", "proxy": { "effective_mode": "custom", "fallback": { "active": false, "reason": "valor-de-exemplo", "since": 0 }, "mode": "custom", "proxy_url": "valor-de-exemplo" }, "restart_requested": false } ``` ## Resposta 400 proxy_unreachable, invalid_proxy_url, invalid_mode ou confirm_no_proxy_required. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 proxy_required ou secret_unreadable. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/instance/proxy" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "mode": "internal" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/instance/proxy"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "mode": "internal" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Proxy da instância](https://wpp.atendro.cloud/docs/api/proxy.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/configure-webhook.md # Configurar, desativar ou herdar webhook `POST /webhook` Um destino efetivo por instância. Cadastro cria exceção ao global. URL nova começa após o backlog; mesma URL preserva cursor e segredo omitido. action=delete desativa inclusive em mudanças globais; action=inherit volta ao global. groups e call são entregues; qrcode continua ignorado. call é emitido pelas instâncias calls. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `action` | `string` | condicional | Valores: `"add"`, `"update"`, `"delete"`, `"inherit"`. Padrão: `"add"` | | `enabled` | `boolean` | opcional | Padrão: `true` | | `url` | `string` | condicional | HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist. Comprimento máximo: `2048` | | `events` | `string / array` | condicional | Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados. | | `excludeMessages` | `string / array` | opcional | wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo. | | `addUrlEvents` | `boolean / string / integer / null` | opcional | Deve ser false. | | `addUrlTypesMessages` | `boolean / string / integer / null` | opcional | Deve ser false. | | `secret` | `string` | opcional | Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido. Comprimento máximo: `256`. Somente na requisição; não é devolvido | Pelo menos uma destas combinações deve ser válida: - `action`; `action`: Valores: `"delete"`, `"inherit"` - `url`, `events` ## Resposta 200 Cadastrar, atualizar ou remover webhook ### Variante 1 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | ### Variante 2 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `deleted` | `boolean` | obrigatório | Valores: `true` | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "inheritedGlobal": true } ``` ## Resposta 400 invalid_url/event/events/exclude/secret, invalid_action ou unsupported_option. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 503 webhooks_disabled. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/webhook" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "action": "inherit" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/webhook"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "action": "inherit" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-webhook.md # Consultar webhook e entrega `GET /webhook` Sem cadastro: registered=false, webhooks=[]. Com cadastro inclui webhooks=[registro] e deliveryStatus. Nunca revela o secret. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar webhook e entrega | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "inheritedGlobal": true } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/webhook" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/webhook"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-webhook-errors.md # Consultar falhas recentes de entrega `GET /webhook/errors` Falhas deste worker, sem payload; também inclui estado persistido quando houver webhook. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar falhas recentes de entrega | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `errors` | `array` | obrigatório | — | | `worker` | `string` | obrigatório | — | | `lastStatus` | `integer` | opcional | — | | `lastError` | `string` | opcional | — | | `consecutiveFailures` | `integer` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "errors": [], "worker": "worker-1" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/webhook/errors" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/webhook/errors"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/list-events.md # Inspecionar eventos internos e fila `GET /v1/events` Formato persistido difere do envelope legado entregue. Consultar EVENTS.md. Não expor payloads em logs. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de consulta | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `limit` | `integer` | opcional | Padrão: `50`. Mínimo: `1`. Máximo: `200` | | `status` | `string` | opcional | Valores: `"pending"`, `"delivered"`, `"dead"` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Inspecionar eventos internos e fila | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `events` | `array` | obrigatório | — | | `events[].id` | `string` | obrigatório | Formato: `uuid` | | `events[].seq` | `integer` | obrigatório | — | | `events[].type` | `string` | obrigatório | — | | `events[].payload` | `object` | obrigatório | Evento interno; o envelope HTTP entregue ao consumidor é uma projeção. Ver EVENTS.md. | | `events[].createdAt` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `events[].attempts` | `integer` | obrigatório | — | | `events[].status` | `string` | obrigatório | Valores: `"pending"`, `"delivered"`, `"dead"` | | `events[].deliveredAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].deadAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].lastAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].lastStatus` | `integer` | opcional | — | | `events[].lastError` | `string` | opcional | — | | `events[].nextAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `status` | `string` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "events": [] } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/events" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/events"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/replay-event.md # Reenfileirar evento `POST /v1/events/{id}/replay` Reinicia orçamento de tentativas; pode repetir automações no consumidor. Deduplicar pelo ID do evento. Exige avaliação antes do replay real. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Reenfileirar evento | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `event` | `object` | obrigatório | Modelo: [Event](https://wpp.atendro.cloud/docs/modelos/event.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "event": { "attempts": 0, "createdAt": "2026-09-17T00:00:00Z", "id": "00000000-0000-4000-8000-000000000001", "payload": {}, "seq": 0, "status": "pending", "type": "valor-de-exemplo" }, "success": true } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 event_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 event_before_registration; anterior ao webhook atual ou sem webhook. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/events/${ID}/replay" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/events/{id}/replay"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/make-call.md # Iniciar ligação por instância calls `POST /call/make` Exige kind=calls conectado e módulo ligado. Retorna 201 ao iniciar; acompanhar o estado. Em instância whatsapp mantém 501 calls_not_supported. Não equivale à chamada sem áudio do provedor legado. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. **Idempotência:** suporta `Idempotency-Key`, com retenção de 24 horas. Preserve a mesma chave, método, caminho e bytes do corpo ao repetir. [Entenda a idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md). ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | | `Idempotency-Key` | `string` | opcional | ASCII visível sem espaços, 1–128. Repetir método, caminho e os mesmos bytes do JSON. 409 em andamento; 422 se mudar a requisição. 504 é guardado e não deve causar reenvio automático. Comprimento mínimo: `1`. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Telefone com DDI (formatação removida pela API) ou JID de conversa direta. Resolve as duas formas do nono dígito brasileiro. Comprimento mínimo: `1` | ## Resposta 201 Chamada iniciada; acompanhar pelo callId. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "callId": "CHAMADA_DE_TESTE", "direction": "outbound", "number": "12025550123", "status": "ringing", "startedAt": "2026-09-18T00:00:00Z" } ``` ## Resposta 400 invalid_number ou invalid_json. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 number_not_on_whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 line_busy, not_connected, owned_elsewhere ou idempotency_in_progress. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 422 idempotency_mismatch: chave repetida com corpo diferente. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta 502 call_failed. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 503 retry_later antes de iniciar a chamada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/call/make" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: $IDEMPOTENCY_KEY" \ --data '{ "number": "12025550123" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/make"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json", "Idempotency-Key": process.env.IDEMPOTENCY_KEY }, body: JSON.stringify({ "number": "12025550123" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/configure-global-webhook.md # Salvar ou remover webhook global `POST /v1/webhook` Configuração persistida por servidor. Instâncias sem exceção herdam automaticamente. Atualização transacional preserva configurações próprias. action=delete limpa o global; a configuração salva prevalece sobre bootstrap por ambiente. Segredo nunca é devolvido. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `action` | `string` | condicional | Valores: `"add"`, `"update"`, `"delete"`. Padrão: `"add"` | | `enabled` | `boolean` | opcional | Padrão: `true` | | `url` | `string` | condicional | HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist. Comprimento máximo: `2048` | | `events` | `string / array` | condicional | Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados. | | `excludeMessages` | `string / array` | opcional | wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo. | | `addUrlEvents` | `boolean / string / integer / null` | opcional | Deve ser false. | | `addUrlTypesMessages` | `boolean / string / integer / null` | opcional | Deve ser false. | | `secret` | `string` | opcional | Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido. Comprimento máximo: `256`. Somente na requisição; não é devolvido | Pelo menos uma destas combinações deve ser válida: - `action`; `action`: Valor fixo: `"delete"` - `url`, `events` ## Resposta 200 Salvar ou remover webhook global | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `ignoredEvents` | `array` | opcional | — | | `scope` | `string` | obrigatório | Valor fixo: `"server"` | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "scope": "server", "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "secretSealed": true, "excludeMessages": [], "ignoredEvents": [] } ``` ## Resposta 400 invalid_url/event/events/exclude/secret, invalid_action ou unsupported_option. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 503 webhooks_disabled. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/webhook" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "action": "update", "url": "https://seu-atendro.example/webhooks/atendrozap", "secret": "", "events": [ "connection", "messages", "messages_update", "messages_edit", "groups" ], "enabled": true }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/webhook"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "action": "update", "url": "https://seu-atendro.example/webhooks/atendrozap", "secret": "", "events": [ "connection", "messages", "messages_update", "messages_edit", "groups" ], "enabled": true }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-global-webhook.md # Consultar webhook global `GET /v1/webhook` Configuração persistida por servidor. Instâncias sem exceção herdam automaticamente. Atualização transacional preserva configurações próprias. action=delete limpa o global; a configuração salva prevalece sobre bootstrap por ambiente. Segredo nunca é devolvido. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar webhook global | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `ignoredEvents` | `array` | opcional | — | | `scope` | `string` | obrigatório | Valor fixo: `"server"` | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "scope": "server", "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "secretSealed": true, "excludeMessages": [], "ignoredEvents": [] } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/webhook" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/webhook"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-configure-webhook.md # Configurar, desativar ou herdar webhook por ID `POST /v1/instances/{id}/webhook` Um destino efetivo por instância. Cadastro cria exceção ao global. URL nova começa após o backlog; mesma URL preserva cursor e segredo omitido. action=delete desativa inclusive em mudanças globais; action=inherit volta ao global. groups e call são entregues; qrcode continua ignorado. call é emitido pelas instâncias calls. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `action` | `string` | condicional | Valores: `"add"`, `"update"`, `"delete"`, `"inherit"`. Padrão: `"add"` | | `enabled` | `boolean` | opcional | Padrão: `true` | | `url` | `string` | condicional | HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist. Comprimento máximo: `2048` | | `events` | `string / array` | condicional | Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados. | | `excludeMessages` | `string / array` | opcional | wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo. | | `addUrlEvents` | `boolean / string / integer / null` | opcional | Deve ser false. | | `addUrlTypesMessages` | `boolean / string / integer / null` | opcional | Deve ser false. | | `secret` | `string` | opcional | Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido. Comprimento máximo: `256`. Somente na requisição; não é devolvido | Pelo menos uma destas combinações deve ser válida: - `action`; `action`: Valores: `"delete"`, `"inherit"` - `url`, `events` ## Resposta 200 Cadastrar, atualizar ou remover webhook ### Variante 1 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | ### Variante 2 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `deleted` | `boolean` | obrigatório | Valores: `true` | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "inheritedGlobal": true } ``` ## Resposta 400 invalid_url/event/events/exclude/secret, invalid_action ou unsupported_option. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta 503 webhooks_disabled. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/v1/instances/${ID}/webhook" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "action": "inherit" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/webhook"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "action": "inherit" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-get-webhook.md # Consultar webhook e entrega por ID `GET /v1/instances/{id}/webhook` Sem cadastro: registered=false, webhooks=[]. Com cadastro inclui webhooks=[registro] e deliveryStatus. Nunca revela o secret. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar webhook e entrega | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | Exemplo ilustrativo, com valores sintéticos: ```json { "registered": true, "url": "https://seu-atendro.example/webhooks/atendrozap", "events": [ "connection", "messages" ], "enabled": true, "hasSecret": true, "inheritedGlobal": true } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/instances/${ID}/webhook" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/webhook"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/admin-get-webhook-errors.md # Consultar falhas recentes de entrega por ID `GET /v1/instances/{id}/webhook/errors` Falhas deste worker, sem payload; também inclui estado persistido quando houver webhook. ## Autenticação Header obrigatório: `admintoken`. Use o token administrativo do servidor. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Identificador devolvido pela API. Comprimento mínimo: `1`. Formato: `uuid` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Consultar falhas recentes de entrega | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `errors` | `array` | obrigatório | — | | `worker` | `string` | obrigatório | — | | `lastStatus` | `integer` | opcional | — | | `lastError` | `string` | opcional | — | | `consecutiveFailures` | `integer` | opcional | — | Exemplo ilustrativo, com valores sintéticos: ```json { "errors": [], "worker": "worker-1" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 instance_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 502 storage_unavailable (Retry-After=5). Algumas rotas também retornam 502 por falha da conexão/mídia; consultar error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "storage_unavailable" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/v1/instances/${ID}/webhook/errors" \ --header "admintoken: $ATENDROZAP_ADMIN_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/v1/instances/{id}/webhook/errors"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "admintoken": process.env.ATENDROZAP_ADMIN_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Webhooks e eventos](https://wpp.atendro.cloud/docs/api/webhooks.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/answer-call.md # Atender ligação recebida `POST /call/answer` Token da instância calls que possui a chamada. Corpo com callId; a operação renova o lease antes do efeito externo. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | Comprimento mínimo: `1` | ## Resposta 200 Estado da chamada após a ação. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "callId": "CHAMADA_DE_TESTE", "direction": "inbound", "number": "12025550123", "status": "connecting", "startedAt": "2026-09-18T00:00:00Z" } ``` ## Resposta 400 invalid_json ou invalid_call_id. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 call_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta 503 retry_later. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/call/answer" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "callId": "CHAMADA_DE_TESTE" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/answer"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "callId": "CHAMADA_DE_TESTE" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/reject-call.md # Recusar ligação recebida `POST /call/reject` Token da instância calls que possui a chamada. Corpo com callId; a operação renova o lease antes do efeito externo. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | Comprimento mínimo: `1` | ## Resposta 200 Estado da chamada após a ação. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "callId": "CHAMADA_DE_TESTE", "direction": "inbound", "number": "12025550123", "status": "ended", "startedAt": "2026-09-18T00:00:00Z", "endedAt": "2026-09-18T00:00:10Z", "endedBy": "local", "endReason": "rejected" } ``` ## Resposta 400 invalid_json ou invalid_call_id. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 call_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta 503 retry_later. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/call/reject" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "callId": "CHAMADA_DE_TESTE" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/reject"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "callId": "CHAMADA_DE_TESTE" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/hangup-call.md # Encerrar ligação `POST /call/hangup` Token da instância calls que possui a chamada. Corpo com callId; a operação renova o lease antes do efeito externo. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Formato: `application/json`. Corpo obrigatório. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | Comprimento mínimo: `1` | ## Resposta 200 Estado da chamada após a ação. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "callId": "CHAMADA_DE_TESTE", "direction": "outbound", "number": "12025550123", "status": "ended", "startedAt": "2026-09-18T00:00:00Z", "endedAt": "2026-09-18T00:00:10Z", "endedBy": "local", "endReason": "hangup" } ``` ## Resposta 400 invalid_json ou invalid_call_id. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 call_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta 503 retry_later. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request POST "$ATENDROZAP_URL/call/hangup" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "callId": "CHAMADA_DE_TESTE" }' ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/hangup"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "POST", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN, "Content-Type": "application/json" }, body: JSON.stringify({ "callId": "CHAMADA_DE_TESTE" }), }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/list-active-calls.md # Listar ligações ativas `GET /call/active` Lista as chamadas vivas da instância calls neste worker. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Chamadas vivas. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `calls` | `array` | obrigatório | — | | `calls[].callId` | `string` | obrigatório | — | | `calls[].direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `calls[].number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `calls[].jid` | `string` | opcional | — | | `calls[].status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `calls[].startedAt` | `string` | obrigatório | Formato: `date-time` | | `calls[].answeredAt` | `string` | opcional | Formato: `date-time` | | `calls[].endedAt` | `string` | opcional | Formato: `date-time` | | `calls[].endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `calls[].endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "calls": [ { "callId": "CHAMADA_DE_TESTE", "direction": "outbound", "number": "12025550123", "status": "ringing", "startedAt": "2026-09-18T00:00:00Z" } ] } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/call/active" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/active"; const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/get-call.md # Consultar estado de ligação `GET /call/{id}` Consulta chamada viva ou recém-encerrada mantida na memória deste worker. ## Autenticação Header obrigatório: `token`. Use o token da instância. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | callId retornado pela API. Comprimento mínimo: `1` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 200 Estado da chamada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | Exemplo ilustrativo, com valores sintéticos: ```json { "callId": "CHAMADA_DE_TESTE", "direction": "outbound", "number": "12025550123", "status": "ringing", "startedAt": "2026-09-18T00:00:00Z" } ``` ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 404 call_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### cURL ```sh curl --request GET "$ATENDROZAP_URL/call/${ID}" \ --header "token: $ATENDROZAP_INSTANCE_TOKEN" ``` ### JavaScript ```javascript const baseUrl = process.env.ATENDROZAP_URL; let path = "/call/{id}"; path = path.replace("{id}", encodeURIComponent(process.env.ID)); const url = new URL(path, baseUrl); const response = await fetch(url, { method: "GET", headers: { "token": process.env.ATENDROZAP_INSTANCE_TOKEN }, }); if (!response.ok) { throw new Error(`AtendroZAP: HTTP ${response.status}`); } const result = await response.json(); ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/api/stream-call-audio.md # Abrir ponte WebSocket de áudio `GET /call/{id}/audio` Upgrade WebSocket. PCM s16le mono 16 kHz binário nos dois sentidos; origem validada por ATENDROZAP_CALLS_AUDIO_ORIGINS. Aceita token no header ou na query somente nesta rota. O console faz proxy com o header e guarda o token fora do navegador. Fechar o socket encerra a chamada; um segundo socket substitui o primeiro. Códigos 4000 encerrada, 4001 PCM ímpar, 4002 falha de escrita, 4003 substituído. ## Autenticação Header aceito: `token`. Use o token da instância. Alternativa exclusiva desta ponte: `?token=`. O proxy do console usa o header no backend; prefira esse fluxo para manter a credencial fora do navegador. Não registrar a query. Base URL: a API do servidor selecionado, como `https://1.atendro.cloud`. O domínio `wpp.atendro.cloud` hospeda a documentação e o console. ## Parâmetros de caminho | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | callId retornado pela API. Comprimento mínimo: `1` | ## Headers adicionais | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `X-Request-Id` | `string` | opcional | ASCII visível sem espaços, 1–128 caracteres. Inválido/ausente é substituído por UUID. Ecoado na resposta. Comprimento máximo: `128` | ## Corpo da requisição Não há corpo de requisição definido para esta operação. ## Resposta 101 WebSocket estabelecido; mensagens binárias PCM. ## Resposta 400 Upgrade WebSocket inválido. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 401 unauthorized: header ausente, inválido ou duplicado. Bearer/query/instancekey não substituem admintoken/token. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "unauthorized" } ``` ## Resposta 403 Origem de navegador não autorizada. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 404 call_not_found. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 409 wrong_instance_kind, not_connected, owned_elsewhere ou invalid_call_state; conferir error. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Resposta 501 calls_not_supported: módulo desligado; /call/make também recusa instância whatsapp. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | Exemplo ilustrativo, com valores sintéticos: ```json { "error": "calls_not_supported" } ``` ## Resposta default Falha; usar HTTP status e error. 404 rota inexistente; 405 método inválido com Allow. Ver catálogo no guia de integração. | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Exemplos de requisição Defina as variáveis no ambiente privado e substitua os dados sintéticos antes de usar. Os exemplos não executam operações nesta página. ### Go (backend) ```go // github.com/coder/websocket; credencial somente no backend. endpoint, err := url.Parse(os.Getenv("ATENDROZAP_URL")) if err != nil { return err } endpoint.Path = "/call/" + os.Getenv("CALL_ID") + "/audio" endpoint.Scheme = "wss" conn, _, err := websocket.Dial(ctx, endpoint.String(), &websocket.DialOptions{ HTTPHeader: http.Header{"token": {os.Getenv("ATENDROZAP_INSTANCE_TOKEN")}}, }) if err != nil { return err } defer conn.CloseNow() // Enviar e receber mensagens binárias PCM s16le, mono, 16 kHz. // No navegador, usar a ponte autenticada do console para manter o token privado. ``` ## Relacionados - [Chamadas de voz](https://wpp.atendro.cloud/docs/api/ligacoes.md) - [Autenticação](https://wpp.atendro.cloud/docs/guias/autenticacao.md) - [Erros e idempotência](https://wpp.atendro.cloud/docs/guias/erros-e-idempotencia.md) --- Fonte: https://wpp.atendro.cloud/docs/modelos/error.md # Error Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `error` | `string` | obrigatório | — | | `message` | `string` | opcional | — | | `messageid` | `string` | opcional | ID para reconciliação quando o resultado é ambíguo. | | `messageId` | `string` | opcional | — | | `id` | `string` | opcional | — | | `provider_code` | `integer` | opcional | — | | `error_key` | `string` | opcional | — | | `error_source` | `string` | opcional | — | | `details` | `object` | opcional | — | | `instance` | `object` | opcional | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Definição OpenAPI ```json { "type": "object", "properties": { "error": { "type": "string" }, "message": { "type": "string" }, "messageid": { "type": "string", "description": "ID para reconciliação quando o resultado é ambíguo." }, "messageId": { "type": "string" }, "id": { "type": "string" }, "provider_code": { "type": "integer" }, "error_key": { "type": "string" }, "error_source": { "type": "string" }, "details": { "type": "object" }, "instance": { "$ref": "#/components/schemas/Instance" } }, "required": [ "error" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/health.md # Health Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `status` | `string` | obrigatório | Valores: `"alive"`, `"ready"`, `"not_ready"` | | `reason` | `string` | opcional | Valores: `"database_unreachable"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "status": { "type": "string", "enum": [ "alive", "ready", "not_ready" ] }, "reason": { "type": "string", "enum": [ "database_unreachable" ] } }, "required": [ "status" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/capabilities.md # Capabilities Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `service` | `string` | obrigatório | Valores: `"AtendroZAP"` | | `status` | `string` | obrigatório | Valores: `"laboratory"` | | `worker` | `string` | opcional | — | | `engine` | `object` | opcional | — | | `capabilities` | `object` | obrigatório | — | | `capabilities.calls` | `boolean` | opcional | Habilitado neste worker por ATENDROZAP_CALLS_ENABLED; exige instância calls. | | `capabilities.ptt_transcoding` | `boolean` | opcional | Valores: `false` | | `interactive` | `object` | opcional | — | | `webhookEvents` | `object` | opcional | — | | `webhookEvents.delivered` | `array` | opcional | — | | `webhookEvents.ignored` | `array` | opcional | — | | `instance_kinds` | `array` | opcional | — | | `calls_max_concurrent` | `integer` | opcional | Teto por instância; padrão 1 quando configurado. Mínimo: `0` | ## Definição OpenAPI ```json { "type": "object", "properties": { "service": { "type": "string", "enum": [ "AtendroZAP" ] }, "status": { "type": "string", "enum": [ "laboratory" ] }, "worker": { "type": "string" }, "engine": { "type": "object" }, "capabilities": { "type": "object", "properties": { "calls": { "type": "boolean", "description": "Habilitado neste worker por ATENDROZAP_CALLS_ENABLED; exige instância calls." }, "ptt_transcoding": { "type": "boolean", "enum": [ false ] } }, "additionalProperties": { "type": "boolean" } }, "interactive": { "type": "object", "additionalProperties": { "type": "string" } }, "webhookEvents": { "type": "object", "properties": { "delivered": { "type": "array", "items": { "type": "string" } }, "ignored": { "type": "array", "items": { "type": "string" } } } }, "instance_kinds": { "type": "array", "items": { "type": "string", "enum": [ "whatsapp", "calls" ] } }, "calls_max_concurrent": { "type": "integer", "minimum": 0, "description": "Teto por instância; padrão 1 quando configurado." } }, "required": [ "service", "status", "capabilities" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/instance.md # Instance Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Formato: `uuid` | | `name` | `string` | obrigatório | — | | `systemName` | `string` | opcional | — | | `companyId` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"disconnected"`, `"connecting"`, `"connected"` | | `owner` | `string` | obrigatório | — | | `profileName` | `string` | obrigatório | — | | `qrcode` | `string` | obrigatório | PNG em data URI quando há QR vigente; vazio no restante e nas listagens. | | `paircode` | `string` | opcional | — | | `lastDisconnect` | `string` | opcional | RFC 3339. Formato: `date-time` | | `lastDisconnectReason` | `string` | opcional | — | | `disconnectCode` | `string` | opcional | — | | `worker` | `string` | opcional | — | | `limitEnforcement` | `string` | opcional | — | | `limitUntil` | `string` | opcional | RFC 3339. Formato: `date-time` | | `created` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updated` | `string` | opcional | RFC 3339. Formato: `date-time` | | `kind` | `string` | obrigatório | Valores: `"whatsapp"`, `"calls"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "systemName": { "type": "string" }, "companyId": { "type": "string" }, "status": { "type": "string", "enum": [ "disconnected", "connecting", "connected" ] }, "owner": { "type": "string" }, "profileName": { "type": "string" }, "qrcode": { "type": "string", "description": "PNG em data URI quando há QR vigente; vazio no restante e nas listagens." }, "paircode": { "type": "string" }, "lastDisconnect": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "lastDisconnectReason": { "type": "string" }, "disconnectCode": { "type": "string" }, "worker": { "type": "string" }, "limitEnforcement": { "type": "string" }, "limitUntil": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "created": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "updated": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "kind": { "type": "string", "enum": [ "whatsapp", "calls" ] } }, "required": [ "id", "name", "status", "qrcode", "owner", "profileName", "kind" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/issued-instance.md # IssuedInstance Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Formato: `uuid` | | `name` | `string` | obrigatório | — | | `systemName` | `string` | opcional | — | | `companyId` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"disconnected"`, `"connecting"`, `"connected"` | | `owner` | `string` | obrigatório | — | | `profileName` | `string` | obrigatório | — | | `qrcode` | `string` | obrigatório | PNG em data URI quando há QR vigente; vazio no restante e nas listagens. | | `paircode` | `string` | opcional | — | | `lastDisconnect` | `string` | opcional | RFC 3339. Formato: `date-time` | | `lastDisconnectReason` | `string` | opcional | — | | `disconnectCode` | `string` | opcional | — | | `worker` | `string` | opcional | — | | `limitEnforcement` | `string` | opcional | — | | `limitUntil` | `string` | opcional | RFC 3339. Formato: `date-time` | | `created` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updated` | `string` | opcional | RFC 3339. Formato: `date-time` | | `kind` | `string` | obrigatório | Valores: `"whatsapp"`, `"calls"` | | `token` | `string` | obrigatório | Segredo de instância: guardar no backend. Só criação/reemissão; replay idempotente de init pode repetir por 15 min. Comprimento mínimo: `64`. Comprimento máximo: `64` | ## Definição OpenAPI ```json { "allOf": [ { "$ref": "#/components/schemas/Instance" }, { "type": "object", "properties": { "token": { "type": "string", "description": "Segredo de instância: guardar no backend. Só criação/reemissão; replay idempotente de init pode repetir por 15 min.", "minLength": 64, "maxLength": 64 } }, "required": [ "token" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/connection.md # Connection Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | ## Definição OpenAPI ```json { "type": "object", "properties": { "connected": { "type": "boolean", "description": "Socket conectado." }, "loggedIn": { "type": "boolean", "description": "Credencial de sessão autenticada; usar junto de connected." }, "jid": { "type": "string" }, "instance": { "$ref": "#/components/schemas/Instance" }, "webhooks": { "type": "object", "description": "Presente no status, inclui registered e a saúde de entrega quando registrada." } }, "required": [ "connected", "loggedIn", "jid", "instance" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/init-request.md # InitRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `name` | `string` | obrigatório | Obrigatório, até 128 bytes UTF-8, sem controle ou espaços nas extremidades. Comprimento mínimo: `1`. Comprimento máximo: `128` | | `systemName` | `string` | opcional | Até 128 bytes; recomendado Atendro. Comprimento máximo: `128` | | `companyId` | `string` | opcional | Até 128 bytes; vínculo com tenant no consumidor. Filtro de lista, não autorização. Comprimento máximo: `128` | | `kind` | `string` | opcional | Imutável após criar. calls exige o módulo habilitado e pareamento próprio. Valores: `"whatsapp"`, `"calls"`. Padrão: `"whatsapp"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "name": { "type": "string", "description": "Obrigatório, até 128 bytes UTF-8, sem controle ou espaços nas extremidades.", "minLength": 1, "maxLength": 128 }, "systemName": { "type": "string", "description": "Até 128 bytes; recomendado Atendro.", "maxLength": 128 }, "companyId": { "type": "string", "description": "Até 128 bytes; vínculo com tenant no consumidor. Filtro de lista, não autorização.", "maxLength": 128 }, "kind": { "type": "string", "enum": [ "whatsapp", "calls" ], "default": "whatsapp", "description": "Imutável após criar. calls exige o módulo habilitado e pareamento próprio." } }, "required": [ "name" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/init-result.md # InitResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `connected` | `boolean` | obrigatório | Valores: `false` | | `loggedIn` | `boolean` | obrigatório | Valores: `false` | | `instance` | `object` | obrigatório | Modelo: [IssuedInstance](https://wpp.atendro.cloud/docs/modelos/issued-instance.md). | ## Definição OpenAPI ```json { "type": "object", "properties": { "response": { "type": "string" }, "connected": { "type": "boolean", "enum": [ false ] }, "loggedIn": { "type": "boolean", "enum": [ false ] }, "instance": { "$ref": "#/components/schemas/IssuedInstance" } }, "required": [ "response", "connected", "loggedIn", "instance" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/connect-request.md # ConnectRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `phone` | `string` | opcional | Opcional. Sem phone usa QR; com phone extrai 8–15 dígitos incluindo DDI e pede código de pareamento. | ## Definição OpenAPI ```json { "type": "object", "properties": { "phone": { "type": "string", "description": "Opcional. Sem phone usa QR; com phone extrai 8–15 dígitos incluindo DDI e pede código de pareamento." } } } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/disconnect-result.md # DisconnectResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `unlinked` | `boolean` | obrigatório | Indica confirmação remota. Credencial local é limpa mesmo se false. | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | ## Definição OpenAPI ```json { "type": "object", "properties": { "response": { "type": "string" }, "unlinked": { "type": "boolean", "description": "Indica confirmação remota. Credencial local é limpa mesmo se false." }, "instance": { "$ref": "#/components/schemas/Instance" } }, "required": [ "response", "unlinked", "instance" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/restart-result.md # RestartResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `connected` | `boolean` | obrigatório | Socket conectado. | | `loggedIn` | `boolean` | obrigatório | Credencial de sessão autenticada; usar junto de connected. | | `jid` | `string` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [Instance](https://wpp.atendro.cloud/docs/modelos/instance.md). | | `webhooks` | `object` | opcional | Presente no status, inclui registered e a saúde de entrega quando registrada. | | `response` | `string` | obrigatório | — | ## Definição OpenAPI ```json { "allOf": [ { "$ref": "#/components/schemas/Connection" }, { "type": "object", "properties": { "response": { "type": "string" } }, "required": [ "response" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/response-message.md # ResponseMessage Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "response": { "type": "string" } }, "required": [ "response" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/token-request.md # TokenRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `graceSeconds` | `integer` | opcional | Prazo de convivência do token anterior; zero revoga imediatamente. Padrão: `0`. Mínimo: `0`. Máximo: `3600` | ## Definição OpenAPI ```json { "type": "object", "properties": { "graceSeconds": { "type": "integer", "description": "Prazo de convivência do token anterior; zero revoga imediatamente.", "minimum": 0, "maximum": 3600, "default": 0 } } } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/token-result.md # TokenResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `graceSeconds` | `integer` | obrigatório | — | | `instance` | `object` | obrigatório | Modelo: [IssuedInstance](https://wpp.atendro.cloud/docs/modelos/issued-instance.md). | ## Definição OpenAPI ```json { "type": "object", "properties": { "response": { "type": "string" }, "graceSeconds": { "type": "integer" }, "instance": { "$ref": "#/components/schemas/IssuedInstance" } }, "required": [ "response", "graceSeconds", "instance" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-text-request.md # SendTextRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `text` | `string` | obrigatório | UTF-8, não vazio/branco, até 65536 bytes. Comprimento mínimo: `1`. Comprimento máximo: `65536` | | `linkPreview` | `any` | opcional | Aceito e ignorado; o serviço não gera prévia de link. | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "replyid": { "type": "string", "description": "ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found." }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." }, "forward": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "text": { "type": "string", "description": "UTF-8, não vazio/branco, até 65536 bytes.", "minLength": 1, "maxLength": 65536 }, "linkPreview": { "description": "Aceito e ignorado; o serviço não gera prévia de link." } }, "required": [ "number", "text" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-media-request.md # SendMediaRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `type` | `string` | obrigatório | Valores: `"image"`, `"video"`, `"audio"`, `"ptt"`, `"document"`, `"sticker"` | | `file` | `string` | obrigatório | Data URI, base64 ou URL permitida por ATENDROZAP_MEDIA_URL_ALLOWLIST. Até 32 MiB decodificados; JSON até 48 MiB. Comprimento mínimo: `1` | | `text` | `string` | opcional | Legenda em UTF-8, até 65536 bytes. Comprimento máximo: `65536` | | `docName` | `string` | opcional | Nome-base do documento. | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "replyid": { "type": "string", "description": "ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found." }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." }, "forward": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "type": { "type": "string", "enum": [ "image", "video", "audio", "ptt", "document", "sticker" ] }, "file": { "type": "string", "description": "Data URI, base64 ou URL permitida por ATENDROZAP_MEDIA_URL_ALLOWLIST. Até 32 MiB decodificados; JSON até 48 MiB.", "minLength": 1 }, "text": { "type": "string", "description": "Legenda em UTF-8, até 65536 bytes.", "maxLength": 65536 }, "docName": { "type": "string", "description": "Nome-base do documento." } }, "required": [ "number", "type", "file" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-contact-request.md # SendContactRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `fullName` | `string` | obrigatório | Nome do contato sintético/autorizado, 1–128 bytes após trim. Comprimento mínimo: `1`. Comprimento máximo: `128` | | `phoneNumber` | `string` | obrigatório | Telefone do contato: 8–15 dígitos com DDI após retirar formatação. | | `organization` | `string` | opcional | Até 128 bytes. Comprimento máximo: `128` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "replyid": { "type": "string", "description": "ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found." }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." }, "forward": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "fullName": { "type": "string", "description": "Nome do contato sintético/autorizado, 1–128 bytes após trim.", "minLength": 1, "maxLength": 128 }, "phoneNumber": { "type": "string", "description": "Telefone do contato: 8–15 dígitos com DDI após retirar formatação." }, "organization": { "type": "string", "description": "Até 128 bytes.", "maxLength": 128 } }, "required": [ "number", "fullName", "phoneNumber" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-location-request.md # SendLocationRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `latitude` | `number` | obrigatório | Mínimo: `-90`. Máximo: `90` | | `longitude` | `number` | obrigatório | Mínimo: `-180`. Máximo: `180` | | `name` | `string` | opcional | Até 256 bytes. Comprimento máximo: `256` | | `address` | `string` | opcional | Até 512 bytes. Comprimento máximo: `512` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "replyid": { "type": "string", "description": "ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found." }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." }, "forward": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "latitude": { "type": "number", "minimum": -90, "maximum": 90 }, "longitude": { "type": "number", "minimum": -180, "maximum": 180 }, "name": { "type": "string", "description": "Até 256 bytes.", "maxLength": 256 }, "address": { "type": "string", "description": "Até 512 bytes.", "maxLength": 512 } }, "required": [ "number", "latitude", "longitude" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-menu-request.md # SendMenuRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `replyid` | `string` | opcional | ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found. | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | | `forward` | `boolean / string / integer / null` | opcional | — | | `type` | `string` | obrigatório | Valores: `"button"`, `"buttons"`, `"list"`, `"poll"` | | `text` | `string` | obrigatório | Até 4096 bytes. Comprimento mínimo: `1`. Comprimento máximo: `4096` | | `choices` | `array` | obrigatório | Mínimo de itens: `1` | | `footerText` | `string` | opcional | — | | `listButton` | `string` | opcional | — | | `selectableCount` | `integer / string` | opcional | Só em type=poll; padrão 1. | | `renderMode` | `string` | opcional | Valores: `"auto"`, `"native"`, `"poll"`, `"text"`. Padrão: `"auto"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "replyid": { "type": "string", "description": "ID de mensagem guardada para citação; desconhecida retorna 422 reply_not_found." }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." }, "forward": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "type": { "type": "string", "enum": [ "button", "buttons", "list", "poll" ] }, "text": { "type": "string", "description": "Até 4096 bytes.", "minLength": 1, "maxLength": 4096 }, "choices": { "type": "array", "items": { "type": "string", "description": "label|id|descrição, label\nid ou label; [Seção] nas listas; url:/copy: em botões. call: não suportado." }, "minItems": 1 }, "footerText": { "type": "string" }, "listButton": { "type": "string" }, "selectableCount": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Só em type=poll; padrão 1." }, "renderMode": { "type": "string", "enum": [ "auto", "native", "poll", "text" ], "default": "auto" } }, "required": [ "number", "type", "text", "choices" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-result.md # SendResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean", "enum": [ true ] }, "messageid": { "type": "string" }, "messageId": { "type": "string" }, "id": { "type": "string" }, "timestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" } }, "required": [ "success", "messageid", "messageId", "id", "timestamp" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-media-result.md # SendMediaResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `mimetype` | `string` | obrigatório | — | | `ptt` | `boolean` | obrigatório | — | | `note` | `string` | opcional | Explica envio como áudio comum quando PTT não é possível. | ## Definição OpenAPI ```json { "allOf": [ { "$ref": "#/components/schemas/SendResult" }, { "type": "object", "properties": { "mimetype": { "type": "string" }, "ptt": { "type": "boolean" }, "note": { "type": "string", "description": "Explica envio como áudio comum quando PTT não é possível." } }, "required": [ "mimetype", "ptt" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/send-menu-result.md # SendMenuResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `type` | `string` | obrigatório | — | | `renderMode` | `string` | obrigatório | Valores: `"auto"`, `"native"`, `"poll"`, `"text"` | | `rendered` | `string` | obrigatório | Valores: `"button"`, `"list"`, `"poll"`, `"text"` | ## Definição OpenAPI ```json { "allOf": [ { "$ref": "#/components/schemas/SendResult" }, { "type": "object", "properties": { "type": { "type": "string" }, "renderMode": { "type": "string", "enum": [ "auto", "native", "poll", "text" ] }, "rendered": { "type": "string", "enum": [ "button", "list", "poll", "text" ] } }, "required": [ "type", "renderMode", "rendered" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/react-request.md # ReactRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | | `text` | `string` | opcional | Um emoji; vazio/ausente remove a reação. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "messageId": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "number": { "type": "string", "description": "Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada." }, "text": { "type": "string", "description": "Um emoji; vazio/ausente remove a reação." } }, "anyOf": [ { "required": [ "id" ] }, { "required": [ "messageId" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/delete-message-request.md # DeleteMessageRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "messageId": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "number": { "type": "string", "description": "Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada." } }, "anyOf": [ { "required": [ "id" ] }, { "required": [ "messageId" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/edit-request.md # EditRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | opcional | Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada. | | `text` | `string` | obrigatório | Texto/legenda UTF-8, não vazio, até 65536 bytes. Comprimento mínimo: `1`. Comprimento máximo: `65536` | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "messageId": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "number": { "type": "string", "description": "Ignorado para reação, edição e exclusão; o chat vem da mensagem guardada." }, "text": { "type": "string", "description": "Texto/legenda UTF-8, não vazio, até 65536 bytes.", "minLength": 1, "maxLength": 65536 } }, "required": [ "text" ], "anyOf": [ { "required": [ "id" ] }, { "required": [ "messageId" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/forward-request.md # ForwardRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `messageId` | `string` | condicional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `delay` | `integer / string` | opcional | Espera de digitação em milissegundos; o manager limita a 15000 ms. | Pelo menos uma destas combinações deve ser válida: - `id` - `messageId` ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "messageId": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "delay": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Espera de digitação em milissegundos; o manager limita a 15000 ms." } }, "required": [ "number" ], "anyOf": [ { "required": [ "id" ] }, { "required": [ "messageId" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/react-result.md # ReactResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `messageid` | `string` | obrigatório | — | | `messageId` | `string` | obrigatório | — | | `id` | `string` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `reaction` | `object` | obrigatório | — | | `reaction.id` | `string` | obrigatório | — | | `reaction.emoji` | `string` | obrigatório | — | | `reaction.status` | `string` | obrigatório | Valores: `"sent"`, `"removed"` | ## Definição OpenAPI ```json { "allOf": [ { "$ref": "#/components/schemas/SendResult" }, { "type": "object", "properties": { "reaction": { "type": "object", "properties": { "id": { "type": "string" }, "emoji": { "type": "string" }, "status": { "type": "string", "enum": [ "sent", "removed" ] } }, "required": [ "id", "emoji", "status" ] } }, "required": [ "reaction" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/delete-message-result.md # DeleteMessageResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `id` | `string` | obrigatório | — | | `messageid` | `string` | opcional | — | | `messageId` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"Deleted"` | | `timestamp` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `recorded` | `boolean` | obrigatório | — | | `alreadyDeleted` | `boolean` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string" }, "messageid": { "type": "string" }, "messageId": { "type": "string" }, "status": { "type": "string", "enum": [ "Deleted" ] }, "timestamp": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "recorded": { "type": "boolean" }, "alreadyDeleted": { "type": "boolean" } }, "required": [ "success", "id", "status", "timestamp", "recorded" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/edit-result.md # EditResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `id` | `string` | obrigatório | owner:id do original. | | `messageid` | `string` | obrigatório | ID do original. | | `messageId` | `string` | opcional | — | | `editId` | `string` | obrigatório | ID da ação de edição. | | `content` | `string` | opcional | — | | `messageType` | `string` | opcional | — | | `messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `status` | `string` | opcional | — | | `owner` | `string` | opcional | — | | `editCount` | `integer` | opcional | — | | `recorded` | `boolean` | obrigatório | false: WhatsApp aceitou mas a persistência local falhou. | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean", "enum": [ true ] }, "id": { "type": "string", "description": "owner:id do original." }, "messageid": { "type": "string", "description": "ID do original." }, "messageId": { "type": "string" }, "editId": { "type": "string", "description": "ID da ação de edição." }, "content": { "type": "string" }, "messageType": { "type": "string" }, "messageTimestamp": { "type": "integer", "description": "Unix em milissegundos.", "format": "int64" }, "timestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "status": { "type": "string" }, "owner": { "type": "string" }, "editCount": { "type": "integer" }, "recorded": { "type": "boolean", "description": "false: WhatsApp aceitou mas a persistência local falhou." } }, "required": [ "success", "id", "messageid", "editId", "recorded" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/find-messages-request.md # FindMessagesRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | opcional | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | | `chatid` | `string` | opcional | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `limit` | `integer / string` | opcional | 0/ausente usa 100; máximo 200. Padrão: `100` | | `offset` | `integer / string` | opcional | Deslocamento da página. | | `includeHistory` | `boolean / string / integer / null` | opcional | Padrão: `true` | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "chatid": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "limit": { "oneOf": [ { "type": "integer", "minimum": 0, "maximum": 200 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "0/ausente usa 100; máximo 200.", "default": 100 }, "offset": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Deslocamento da página." }, "includeHistory": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ], "default": true } } } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/legacy-message.md # LegacyMessage Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | owner:messageid. | | `messageid` | `string` | obrigatório | — | | `chatid` | `string` | obrigatório | — | | `sender` | `string` | opcional | — | | `sender_pn` | `string` | opcional | — | | `senderName` | `string` | opcional | — | | `pushName` | `string` | opcional | — | | `isGroup` | `boolean` | opcional | — | | `fromMe` | `boolean` | obrigatório | — | | `wasSentByApi` | `boolean` | opcional | — | | `messageType` | `string` | opcional | Tipo legado PascalCase. | | `type` | `string` | opcional | — | | `messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `status` | `string` | opcional | Pending, Sent, Delivered, Read, Played, Failed, Received ou Deleted. | | `text` | `string` | opcional | — | | `content` | `object` | opcional | — | | `buttonOrListid` | `string` | opcional | — | | `reactions` | `array` | opcional | — | | `choices` | `any` | opcional | Opções armazenadas de menus/enquetes; estrutura depende do tipo e pode ser null. | | `fileURL` | `string` | opcional | — | | `mediaUrl` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "owner:messageid." }, "messageid": { "type": "string" }, "chatid": { "type": "string" }, "sender": { "type": "string" }, "sender_pn": { "type": "string" }, "senderName": { "type": "string" }, "pushName": { "type": "string" }, "isGroup": { "type": "boolean" }, "fromMe": { "type": "boolean" }, "wasSentByApi": { "type": "boolean" }, "messageType": { "type": "string", "description": "Tipo legado PascalCase." }, "type": { "type": "string" }, "messageTimestamp": { "type": "integer", "description": "Unix em milissegundos.", "format": "int64" }, "timestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "status": { "type": "string", "description": "Pending, Sent, Delivered, Read, Played, Failed, Received ou Deleted." }, "text": { "type": "string" }, "content": { "type": "object" }, "buttonOrListid": { "type": "string" }, "reactions": { "type": "array", "items": { "type": "object" } }, "choices": { "description": "Opções armazenadas de menus/enquetes; estrutura depende do tipo e pode ser null." }, "fileURL": { "type": "string" }, "mediaUrl": { "type": "string" } }, "required": [ "id", "messageid", "chatid", "fromMe" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/find-messages-result.md # FindMessagesResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `messages` | `array` | obrigatório | — | | `messages[].id` | `string` | obrigatório | owner:messageid. | | `messages[].messageid` | `string` | obrigatório | — | | `messages[].chatid` | `string` | obrigatório | — | | `messages[].sender` | `string` | opcional | — | | `messages[].sender_pn` | `string` | opcional | — | | `messages[].senderName` | `string` | opcional | — | | `messages[].pushName` | `string` | opcional | — | | `messages[].isGroup` | `boolean` | opcional | — | | `messages[].fromMe` | `boolean` | obrigatório | — | | `messages[].wasSentByApi` | `boolean` | opcional | — | | `messages[].messageType` | `string` | opcional | Tipo legado PascalCase. | | `messages[].type` | `string` | opcional | — | | `messages[].messageTimestamp` | `integer` | opcional | Unix em milissegundos. Formato: `int64` | | `messages[].timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `messages[].status` | `string` | opcional | Pending, Sent, Delivered, Read, Played, Failed, Received ou Deleted. | | `messages[].text` | `string` | opcional | — | | `messages[].content` | `object` | opcional | — | | `messages[].buttonOrListid` | `string` | opcional | — | | `messages[].reactions` | `array` | opcional | — | | `messages[].choices` | `any` | opcional | Opções armazenadas de menus/enquetes; estrutura depende do tipo e pode ser null. | | `messages[].fileURL` | `string` | opcional | — | | `messages[].mediaUrl` | `string` | opcional | — | | `returnedMessages` | `integer` | obrigatório | — | | `limit` | `integer` | obrigatório | — | | `offset` | `integer` | obrigatório | — | | `hasMore` | `boolean` | obrigatório | — | | `nextOffset` | `integer` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "messages": { "type": "array", "items": { "$ref": "#/components/schemas/LegacyMessage" } }, "returnedMessages": { "type": "integer" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "hasMore": { "type": "boolean" }, "nextOffset": { "type": "integer" } }, "required": [ "messages", "returnedMessages", "limit", "offset", "hasMore" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/message-status.md # MessageStatus Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | — | | `status` | `string` | obrigatório | Estado interno, em minúsculas: sending, unknown, failed, sent, delivered, read, played ou received. | | `failure` | `string` | obrigatório | — | | `fromMe` | `boolean` | obrigatório | — | | `timestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `deliveredAt` | `integer / null` | opcional | — | | `readAt` | `integer / null` | opcional | — | | `playedAt` | `integer / null` | opcional | — | | `revokedAt` | `integer / null` | opcional | — | | `deletedForMeAt` | `integer / null` | opcional | — | | `editedAt` | `integer / null` | opcional | — | | `editCount` | `integer` | opcional | — | | `reactions` | `array / null` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string" }, "status": { "type": "string", "description": "Estado interno, em minúsculas: sending, unknown, failed, sent, delivered, read, played ou received." }, "failure": { "type": "string" }, "fromMe": { "type": "boolean" }, "timestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "deliveredAt": { "type": [ "integer", "null" ] }, "readAt": { "type": [ "integer", "null" ] }, "playedAt": { "type": [ "integer", "null" ] }, "revokedAt": { "type": [ "integer", "null" ] }, "deletedForMeAt": { "type": [ "integer", "null" ] }, "editedAt": { "type": [ "integer", "null" ] }, "editCount": { "type": "integer" }, "reactions": { "type": [ "array", "null" ], "items": { "type": "object" } } }, "required": [ "id", "status", "failure", "fromMe", "timestamp" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/stored-message.md # StoredMessage Projeção interna session.DescribeMessage; campos de conteúdo variam com o tipo. Para o formato legado use /message/find. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | opcional | — | | `chatid` | `string` | opcional | — | | `fromMe` | `boolean` | opcional | — | | `status` | `string` | opcional | — | | `timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string" }, "chatid": { "type": "string" }, "fromMe": { "type": "boolean" }, "status": { "type": "string" }, "timestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" } }, "description": "Projeção interna session.DescribeMessage; campos de conteúdo variam com o tipo. Para o formato legado use /message/find." } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/list-messages-result.md # ListMessagesResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `messages` | `array` | obrigatório | — | | `messages[].id` | `string` | opcional | — | | `messages[].chatid` | `string` | opcional | — | | `messages[].fromMe` | `boolean` | opcional | — | | `messages[].status` | `string` | opcional | — | | `messages[].timestamp` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `hasMore` | `boolean` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "messages": { "type": "array", "items": { "$ref": "#/components/schemas/StoredMessage" } }, "hasMore": { "type": "boolean" } }, "required": [ "messages", "hasMore" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/download-request.md # DownloadRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id. Comprimento mínimo: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 } }, "required": [ "id" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/download-result.md # DownloadResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `fileURL` | `string` | obrigatório | — | | `url` | `string` | obrigatório | — | | `mimetype` | `string` | obrigatório | — | | `mimeType` | `string` | obrigatório | — | | `fileName` | `string` | obrigatório | — | | `size` | `integer` | obrigatório | — | | `expiresAt` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `messageid` | `string` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "fileURL": { "type": "string" }, "url": { "type": "string" }, "mimetype": { "type": "string" }, "mimeType": { "type": "string" }, "fileName": { "type": "string" }, "size": { "type": "integer" }, "expiresAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "messageid": { "type": "string" } }, "required": [ "fileURL", "url", "mimetype", "mimeType", "fileName", "size", "expiresAt", "messageid" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/mark-read-request.md # MarkReadRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string / array` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "oneOf": [ { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, { "type": "array", "items": { "type": "string", "description": "ID da mensagem guardada nesta instância. Nos corpos aceita também owner:id.", "minLength": 1 }, "minItems": 1, "maxItems": 1000 } ] } }, "required": [ "id" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/mark-read-result.md # MarkReadResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `marked` | `array` | obrigatório | — | | `count` | `integer` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean" }, "marked": { "type": "array", "items": { "type": "string" } }, "count": { "type": "integer" } }, "required": [ "success", "marked", "count" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/chat-read-request.md # ChatReadRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | | `read` | `boolean` | opcional | Ausente equivale a true; false não marca como não lido e retorna marked=0 com note. Padrão: `true` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "read": { "type": "boolean", "description": "Ausente equivale a true; false não marca como não lido e retorna marked=0 com note.", "default": true } }, "required": [ "number" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/chat-read-result.md # ChatReadResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `marked` | `integer` | obrigatório | — | | `note` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean" }, "marked": { "type": "integer" }, "note": { "type": "string" } }, "required": [ "success", "marked" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/check-request.md # CheckRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | condicional | Um telefone com DDI. | | `numbers` | `string / array` | condicional | — | Pelo menos uma destas combinações deve ser válida: - `number` - `numbers` ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Um telefone com DDI." }, "numbers": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" }, "maxItems": 50 } ] } }, "anyOf": [ { "required": [ "number" ] }, { "required": [ "numbers" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/number-check.md # NumberCheck Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `query` | `string` | obrigatório | — | | `exists` | `boolean` | obrigatório | — | | `numberExists` | `boolean` | obrigatório | — | | `jid` | `string` | obrigatório | — | | `data` | `object` | obrigatório | — | | `data.exists` | `boolean` | opcional | — | | `data.jid` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "query": { "type": "string" }, "exists": { "type": "boolean" }, "numberExists": { "type": "boolean" }, "jid": { "type": "string" }, "data": { "type": "object", "properties": { "exists": { "type": "boolean" }, "jid": { "type": "string" } } } }, "required": [ "query", "exists", "numberExists", "jid", "data" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/details-request.md # DetailsRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID. Comprimento mínimo: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 } }, "required": [ "number" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/chat-details.md # ChatDetails Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `jid` | `string` | obrigatório | — | | `exists` | `boolean` | obrigatório | — | | `name` | `string` | opcional | — | | `pushName` | `string` | opcional | — | | `displayName` | `string` | opcional | — | | `verifiedName` | `string` | opcional | — | | `isBusiness` | `boolean` | opcional | — | | `profilePicUrl` | `string` | obrigatório | — | | `profilePictureUrl` | `string` | opcional | — | | `imagePreview` | `string` | opcional | — | | `pictureId` | `string` | opcional | — | | `imageState` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "jid": { "type": "string" }, "exists": { "type": "boolean" }, "name": { "type": "string" }, "pushName": { "type": "string" }, "displayName": { "type": "string" }, "verifiedName": { "type": "string" }, "isBusiness": { "type": "boolean" }, "profilePicUrl": { "type": "string" }, "profilePictureUrl": { "type": "string" }, "imagePreview": { "type": "string" }, "pictureId": { "type": "string" }, "imageState": { "type": "string" } }, "required": [ "jid", "exists", "profilePicUrl" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/find-chats-request.md # FindChatsRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `limit` | `integer / string` | opcional | 0/ausente retorna até 5000. Padrão: `5000` | | `offset` | `integer / string` | opcional | Deslocamento da página. | | `wa_isGroup` | `boolean / string / integer / null` | opcional | — | | `includeLeft` | `boolean / string / integer / null` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "limit": { "oneOf": [ { "type": "integer", "minimum": 0, "maximum": 5000 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "0/ausente retorna até 5000.", "default": 5000 }, "offset": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string", "description": "Inteiro em formato decimal.", "pattern": "^\\d+$" } ], "description": "Deslocamento da página." }, "wa_isGroup": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "includeLeft": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] } } } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/chat.md # Chat Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | — | | `wa_chatid` | `string` | obrigatório | — | | `name` | `string` | opcional | — | | `wa_name` | `string` | opcional | — | | `wa_contactName` | `string` | opcional | — | | `wa_isGroup` | `boolean` | obrigatório | — | | `wa_unreadCount` | `integer` | opcional | — | | `wa_archived` | `boolean` | opcional | — | | `wa_lastMsgTimestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `wa_lastMessageTime` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `owner` | `string` | opcional | — | | `phone` | `string` | opcional | Vazio para grupo ou LID sem telefone conhecido. | | `pictureId` | `string` | opcional | — | | `wa_isGroup_announce` | `boolean` | opcional | — | | `participantCount` | `integer` | opcional | — | | `topic` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string" }, "wa_chatid": { "type": "string" }, "name": { "type": "string" }, "wa_name": { "type": "string" }, "wa_contactName": { "type": "string" }, "wa_isGroup": { "type": "boolean" }, "wa_unreadCount": { "type": "integer" }, "wa_archived": { "type": "boolean" }, "wa_lastMsgTimestamp": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "wa_lastMessageTime": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "owner": { "type": "string" }, "phone": { "type": "string", "description": "Vazio para grupo ou LID sem telefone conhecido." }, "pictureId": { "type": "string" }, "wa_isGroup_announce": { "type": "boolean" }, "participantCount": { "type": "integer" }, "topic": { "type": "string" } }, "required": [ "id", "wa_chatid", "wa_isGroup", "wa_lastMsgTimestamp", "wa_lastMessageTime" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/find-chats-result.md # FindChatsResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `chats` | `array` | obrigatório | — | | `chats[].id` | `string` | obrigatório | — | | `chats[].wa_chatid` | `string` | obrigatório | — | | `chats[].name` | `string` | opcional | — | | `chats[].wa_name` | `string` | opcional | — | | `chats[].wa_contactName` | `string` | opcional | — | | `chats[].wa_isGroup` | `boolean` | obrigatório | — | | `chats[].wa_unreadCount` | `integer` | opcional | — | | `chats[].wa_archived` | `boolean` | opcional | — | | `chats[].wa_lastMsgTimestamp` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `chats[].wa_lastMessageTime` | `integer` | obrigatório | Unix em segundos. Formato: `int64` | | `chats[].owner` | `string` | opcional | — | | `chats[].phone` | `string` | opcional | Vazio para grupo ou LID sem telefone conhecido. | | `chats[].pictureId` | `string` | opcional | — | | `chats[].wa_isGroup_announce` | `boolean` | opcional | — | | `chats[].participantCount` | `integer` | opcional | — | | `chats[].topic` | `string` | opcional | — | | `hasMore` | `boolean` | obrigatório | — | | `pagination` | `object` | obrigatório | — | | `pagination.limit` | `integer` | obrigatório | — | | `pagination.offset` | `integer` | obrigatório | — | | `pagination.returned` | `integer` | obrigatório | — | | `nextOffset` | `integer` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "chats": { "type": "array", "items": { "$ref": "#/components/schemas/Chat" } }, "hasMore": { "type": "boolean" }, "pagination": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "returned": { "type": "integer" } }, "required": [ "limit", "offset", "returned" ] }, "nextOffset": { "type": "integer" } }, "required": [ "chats", "hasMore", "pagination" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-participant.md # GroupParticipant Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `JID` | `string` | obrigatório | — | | `PhoneNumber` | `string` | opcional | — | | `LID` | `string` | opcional | — | | `IsAdmin` | `boolean` | obrigatório | — | | `IsSuperAdmin` | `boolean` | obrigatório | — | | `DisplayName` | `string` | obrigatório | — | | `Error` | `integer` | obrigatório | Código por participante; 0 indica ausência de erro registrado. | ## Definição OpenAPI ```json { "type": "object", "properties": { "JID": { "type": "string" }, "PhoneNumber": { "type": "string" }, "LID": { "type": "string" }, "IsAdmin": { "type": "boolean" }, "IsSuperAdmin": { "type": "boolean" }, "DisplayName": { "type": "string" }, "Error": { "type": "integer", "description": "Código por participante; 0 indica ausência de erro registrado." } }, "required": [ "JID", "IsAdmin", "IsSuperAdmin", "DisplayName", "Error" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group.md # Group Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `JID` | `string` | obrigatório | — | | `Name` | `string` | obrigatório | — | | `Topic` | `string` | opcional | — | | `OwnerJID` | `string` | opcional | — | | `OwnerPN` | `string` | opcional | — | | `IsLocked` | `boolean` | opcional | — | | `IsAnnounce` | `boolean` | opcional | — | | `AddressingMode` | `string` | opcional | — | | `ParticipantCount` | `integer` | obrigatório | — | | `Participants` | `array` | opcional | — | | `Participants[].JID` | `string` | obrigatório | — | | `Participants[].PhoneNumber` | `string` | opcional | — | | `Participants[].LID` | `string` | opcional | — | | `Participants[].IsAdmin` | `boolean` | obrigatório | — | | `Participants[].IsSuperAdmin` | `boolean` | obrigatório | — | | `Participants[].DisplayName` | `string` | obrigatório | — | | `Participants[].Error` | `integer` | obrigatório | Código por participante; 0 indica ausência de erro registrado. | | `invite_link` | `string` | obrigatório | Vazio se não solicitado ou sem permissão de admin. | | `PictureID` | `string` | opcional | — | | `lastMessageAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `syncedAt` | `integer` | opcional | Unix em segundos. Formato: `int64` | | `left` | `boolean` | opcional | — | | `GroupCreated` | `string` | opcional | RFC 3339. Formato: `date-time` | ## Definição OpenAPI ```json { "type": "object", "properties": { "JID": { "type": "string" }, "Name": { "type": "string" }, "Topic": { "type": "string" }, "OwnerJID": { "type": "string" }, "OwnerPN": { "type": "string" }, "IsLocked": { "type": "boolean" }, "IsAnnounce": { "type": "boolean" }, "AddressingMode": { "type": "string" }, "ParticipantCount": { "type": "integer" }, "Participants": { "type": "array", "items": { "$ref": "#/components/schemas/GroupParticipant" } }, "invite_link": { "type": "string", "description": "Vazio se não solicitado ou sem permissão de admin." }, "PictureID": { "type": "string" }, "lastMessageAt": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "syncedAt": { "type": "integer", "description": "Unix em segundos.", "format": "int64" }, "left": { "type": "boolean" }, "GroupCreated": { "type": "string", "description": "RFC 3339.", "format": "date-time" } }, "required": [ "JID", "Name", "ParticipantCount", "invite_link" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-info-request.md # GroupInfoRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `force` | `boolean / string / integer / null` | opcional | — | | `getInviteLink` | `boolean / string / integer / null` | opcional | — | | `getRequestsParticipants` | `any` | opcional | Aceito e ignorado. | ## Definição OpenAPI ```json { "type": "object", "properties": { "groupjid": { "type": "string", "description": "Identificador do grupo terminado em @g.us.", "minLength": 1 }, "force": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "getInviteLink": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ] }, "getRequestsParticipants": { "description": "Aceito e ignorado." } }, "required": [ "groupjid" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/create-group-request.md # CreateGroupRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `name` | `string` | obrigatório | Comprimento mínimo: `1`. Comprimento máximo: `100` | | `participants` | `array` | obrigatório | Mínimo de itens: `1`. Máximo de itens: `50` | ## Definição OpenAPI ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "participants": { "type": "array", "items": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "maxItems": 50, "minItems": 1 } }, "required": [ "name", "participants" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-participants-request.md # GroupParticipantsRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `action` | `string` | obrigatório | Valores: `"add"`, `"remove"`, `"promote"`, `"demote"` | | `participants` | `array` | obrigatório | Mínimo de itens: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "groupjid": { "type": "string", "description": "Identificador do grupo terminado em @g.us.", "minLength": 1 }, "action": { "type": "string", "enum": [ "add", "remove", "promote", "demote" ] }, "participants": { "type": "array", "items": { "type": "string", "description": "Dígitos com DDI (8–15) ou identificador @s.whatsapp.net, @g.us ou @lid. Nunca inferir telefone de um LID.", "minLength": 1 }, "minItems": 1 } }, "required": [ "groupjid", "action", "participants" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-participants-result.md # GroupParticipantsResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupUpdated` | `array` | obrigatório | — | | `groupUpdated[].JID` | `string` | obrigatório | — | | `groupUpdated[].Error` | `integer` | obrigatório | — | | `needs_refresh` | `boolean` | obrigatório | Valores: `true` | ## Definição OpenAPI ```json { "type": "object", "properties": { "groupUpdated": { "type": "array", "items": { "type": "object", "properties": { "JID": { "type": "string" }, "Error": { "type": "integer" } }, "required": [ "JID", "Error" ] } }, "needs_refresh": { "type": "boolean", "enum": [ true ] } }, "required": [ "groupUpdated", "needs_refresh" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-name-request.md # GroupNameRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `name` | `string` | obrigatório | Comprimento mínimo: `1`. Comprimento máximo: `100` | ## Definição OpenAPI ```json { "type": "object", "properties": { "groupjid": { "type": "string", "description": "Identificador do grupo terminado em @g.us.", "minLength": 1 }, "name": { "type": "string", "minLength": 1, "maxLength": 100 } }, "required": [ "groupjid", "name" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-image-request.md # GroupImageRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `groupjid` | `string` | obrigatório | Identificador do grupo terminado em @g.us. Comprimento mínimo: `1` | | `image` | `string` | obrigatório | Data URI/base64/URL permitida (JPEG, PNG, GIF; até 8 MiB), ou remove/delete. Convertida para JPEG até 640×640. Comprimento mínimo: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "groupjid": { "type": "string", "description": "Identificador do grupo terminado em @g.us.", "minLength": 1 }, "image": { "type": "string", "description": "Data URI/base64/URL permitida (JPEG, PNG, GIF; até 8 MiB), ou remove/delete. Convertida para JPEG até 640×640.", "minLength": 1 } }, "required": [ "groupjid", "image" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/group-update-result.md # GroupUpdateResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `response` | `string` | obrigatório | — | | `needs_refresh` | `boolean` | obrigatório | Valores: `true` | | `pictureId` | `string` | opcional | Presente na atualização de imagem. | ## Definição OpenAPI ```json { "type": "object", "properties": { "response": { "type": "string" }, "needs_refresh": { "type": "boolean", "enum": [ true ] }, "pictureId": { "type": "string", "description": "Presente na atualização de imagem." } }, "required": [ "response", "needs_refresh" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/proxy-request.md # ProxyRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `mode` | `string` | obrigatório | Valores: `"custom"`, `"none"`, `"internal"` | | `proxy_url` | `string` | condicional | Obrigatória em custom; http/https/socks5/socks5h; sondada antes da gravação. Somente na requisição; não é devolvido | | `confirm_no_proxy` | `boolean` | condicional | Obrigatório true em mode=none. | Quando `mode` = `"custom"`, informe `proxy_url`. Quando `mode` = `"none"`, informe `confirm_no_proxy`. ## Definição OpenAPI ```json { "type": "object", "properties": { "mode": { "type": "string", "enum": [ "custom", "none", "internal" ] }, "proxy_url": { "type": "string", "description": "Obrigatória em custom; http/https/socks5/socks5h; sondada antes da gravação.", "writeOnly": true }, "confirm_no_proxy": { "type": "boolean", "description": "Obrigatório true em mode=none." } }, "required": [ "mode" ], "allOf": [ { "if": { "properties": { "mode": { "const": "custom" } } }, "then": { "required": [ "proxy_url" ] } }, { "if": { "properties": { "mode": { "const": "none" } } }, "then": { "required": [ "confirm_no_proxy" ], "properties": { "confirm_no_proxy": { "const": true } } } } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/proxy.md # Proxy Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `mode` | `string` | obrigatório | Valores: `"custom"`, `"none"` | | `effective_mode` | `string` | obrigatório | Valores: `"custom"`, `"none"` | | `effective_detail` | `string` | opcional | Valores: `"direct"`, `"instance"`, `"sealed"` | | `fallback` | `object` | obrigatório | — | | `fallback.active` | `boolean` | opcional | Valores: `false` | | `fallback.reason` | `string` | opcional | — | | `fallback.since` | `integer` | opcional | — | | `proxy_url` | `string` | obrigatório | Credenciais redigidas. | | `proxy_fallback` | `string` | opcional | Valores: `"never"` | | `managed` | `boolean` | opcional | Valores: `false` | | `last_test_at` | `integer` | opcional | Unix em milissegundos. | | `last_test_error` | `string` | opcional | — | | `validation_error` | `boolean` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "mode": { "type": "string", "enum": [ "custom", "none" ] }, "effective_mode": { "type": "string", "enum": [ "custom", "none" ] }, "effective_detail": { "type": "string", "enum": [ "direct", "instance", "sealed" ] }, "fallback": { "type": "object", "properties": { "active": { "type": "boolean", "enum": [ false ] }, "reason": { "type": "string" }, "since": { "type": "integer" } } }, "proxy_url": { "type": "string", "description": "Credenciais redigidas." }, "proxy_fallback": { "type": "string", "enum": [ "never" ] }, "managed": { "type": "boolean", "enum": [ false ] }, "last_test_at": { "type": "integer", "description": "Unix em milissegundos." }, "last_test_error": { "type": "string" }, "validation_error": { "type": "boolean" } }, "required": [ "mode", "effective_mode", "fallback", "proxy_url" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/proxy-result.md # ProxyResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `details` | `string` | obrigatório | — | | `proxy` | `object` | obrigatório | Modelo: [Proxy](https://wpp.atendro.cloud/docs/modelos/proxy.md). | | `restart_requested` | `boolean` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "details": { "type": "string" }, "proxy": { "$ref": "#/components/schemas/Proxy" }, "restart_requested": { "type": "boolean" } }, "required": [ "details", "proxy", "restart_requested" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/webhook-request.md # WebhookRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `action` | `string` | condicional | Valores: `"add"`, `"update"`, `"delete"`, `"inherit"`. Padrão: `"add"` | | `enabled` | `boolean` | opcional | Padrão: `true` | | `url` | `string` | condicional | HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist. Comprimento máximo: `2048` | | `events` | `string / array` | condicional | Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados. | | `excludeMessages` | `string / array` | opcional | wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo. | | `addUrlEvents` | `boolean / string / integer / null` | opcional | Deve ser false. | | `addUrlTypesMessages` | `boolean / string / integer / null` | opcional | Deve ser false. | | `secret` | `string` | opcional | Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido. Comprimento máximo: `256`. Somente na requisição; não é devolvido | Pelo menos uma destas combinações deve ser válida: - `action`; `action`: Valores: `"delete"`, `"inherit"` - `url`, `events` ## Definição OpenAPI ```json { "type": "object", "properties": { "action": { "type": "string", "enum": [ "add", "update", "delete", "inherit" ], "default": "add" }, "enabled": { "type": "boolean", "default": true }, "url": { "type": "string", "description": "HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist.", "maxLength": 2048 }, "events": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados." }, "excludeMessages": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo." }, "addUrlEvents": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ], "description": "Deve ser false." }, "addUrlTypesMessages": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ], "description": "Deve ser false." }, "secret": { "type": "string", "description": "Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido.", "maxLength": 256, "writeOnly": true } }, "anyOf": [ { "required": [ "action" ], "properties": { "action": { "enum": [ "delete", "inherit" ] } } }, { "required": [ "url", "events" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/delivery-status.md # DeliveryStatus Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `consecutiveFailures` | `integer` | opcional | — | | `lastStatus` | `integer` | opcional | — | | `lastError` | `string` | opcional | — | | `paused` | `boolean` | opcional | — | | `pausedUntil` | `string` | opcional | RFC 3339. Formato: `date-time` | | `lastDeliveredAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `pending` | `integer` | opcional | — | | `dead` | `integer` | opcional | — | | `oldestPendingSeconds` | `integer` | opcional | — | | `statsError` | `boolean` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "consecutiveFailures": { "type": "integer" }, "lastStatus": { "type": "integer" }, "lastError": { "type": "string" }, "paused": { "type": "boolean" }, "pausedUntil": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "lastDeliveredAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "pending": { "type": "integer" }, "dead": { "type": "integer" }, "oldestPendingSeconds": { "type": "integer" }, "statsError": { "type": "boolean" } } } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/webhook.md # Webhook Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | ## Definição OpenAPI ```json { "type": "object", "properties": { "registered": { "type": "boolean" }, "id": { "type": "string", "format": "uuid" }, "url": { "type": "string" }, "events": { "type": "array", "items": { "type": "string" } }, "enabled": { "type": "boolean" }, "excludeMessages": { "type": [ "array", "null" ], "items": { "type": "string" } }, "hasSecret": { "type": "boolean" }, "secretSealed": { "type": "boolean" }, "createdAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "deliveryStatus": { "$ref": "#/components/schemas/DeliveryStatus" }, "ignoredEvents": { "type": "array", "items": { "type": "string" } }, "webhooks": { "type": "array", "items": { "type": "object" } }, "inheritedGlobal": { "type": "boolean", "description": "Indica que a inscrição segue o webhook global do servidor." } }, "required": [ "registered" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/webhook-write-result.md # WebhookWriteResult Estrutura de dados do contrato OpenAPI. ## Campos ### Variante 1 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `id` | `string` | opcional | Formato: `uuid` | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deliveryStatus` | `object` | opcional | Modelo: [DeliveryStatus](https://wpp.atendro.cloud/docs/modelos/delivery-status.md). | | `ignoredEvents` | `array` | opcional | — | | `webhooks` | `array` | opcional | — | | `inheritedGlobal` | `boolean` | opcional | Indica que a inscrição segue o webhook global do servidor. | ### Variante 2 | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | Valores: `true` | | `deleted` | `boolean` | obrigatório | Valores: `true` | ## Definição OpenAPI ```json { "oneOf": [ { "$ref": "#/components/schemas/Webhook" }, { "type": "object", "properties": { "success": { "type": "boolean", "enum": [ true ] }, "deleted": { "type": "boolean", "enum": [ true ] } }, "required": [ "success", "deleted" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/webhook-errors.md # WebhookErrors Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `errors` | `array` | obrigatório | — | | `worker` | `string` | obrigatório | — | | `lastStatus` | `integer` | opcional | — | | `lastError` | `string` | opcional | — | | `consecutiveFailures` | `integer` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "errors": { "type": "array", "items": { "type": "object", "description": "Falhas recentes do worker, sem payload." } }, "worker": { "type": "string" }, "lastStatus": { "type": "integer" }, "lastError": { "type": "string" }, "consecutiveFailures": { "type": "integer" } }, "required": [ "errors", "worker" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/event.md # Event Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `id` | `string` | obrigatório | Formato: `uuid` | | `seq` | `integer` | obrigatório | — | | `type` | `string` | obrigatório | — | | `payload` | `object` | obrigatório | Evento interno; o envelope HTTP entregue ao consumidor é uma projeção. Ver EVENTS.md. | | `createdAt` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `attempts` | `integer` | obrigatório | — | | `status` | `string` | obrigatório | Valores: `"pending"`, `"delivered"`, `"dead"` | | `deliveredAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `deadAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `lastAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `lastStatus` | `integer` | opcional | — | | `lastError` | `string` | opcional | — | | `nextAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | ## Definição OpenAPI ```json { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "seq": { "type": "integer" }, "type": { "type": "string" }, "payload": { "type": "object", "description": "Evento interno; o envelope HTTP entregue ao consumidor é uma projeção. Ver EVENTS.md." }, "createdAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "attempts": { "type": "integer" }, "status": { "type": "string", "enum": [ "pending", "delivered", "dead" ] }, "deliveredAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "deadAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "lastAttemptAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "lastStatus": { "type": "integer" }, "lastError": { "type": "string" }, "nextAttemptAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" } }, "required": [ "id", "seq", "type", "payload", "createdAt", "attempts", "status" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/events-result.md # EventsResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `events` | `array` | obrigatório | — | | `events[].id` | `string` | obrigatório | Formato: `uuid` | | `events[].seq` | `integer` | obrigatório | — | | `events[].type` | `string` | obrigatório | — | | `events[].payload` | `object` | obrigatório | Evento interno; o envelope HTTP entregue ao consumidor é uma projeção. Ver EVENTS.md. | | `events[].createdAt` | `string` | obrigatório | RFC 3339. Formato: `date-time` | | `events[].attempts` | `integer` | obrigatório | — | | `events[].status` | `string` | obrigatório | Valores: `"pending"`, `"delivered"`, `"dead"` | | `events[].deliveredAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].deadAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].lastAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `events[].lastStatus` | `integer` | opcional | — | | `events[].lastError` | `string` | opcional | — | | `events[].nextAttemptAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `status` | `string` | opcional | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "events": { "type": "array", "items": { "$ref": "#/components/schemas/Event" } }, "status": { "type": "string" } }, "required": [ "events" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/replay-result.md # ReplayResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `success` | `boolean` | obrigatório | — | | `event` | `object` | obrigatório | Modelo: [Event](https://wpp.atendro.cloud/docs/modelos/event.md). | ## Definição OpenAPI ```json { "type": "object", "properties": { "success": { "type": "boolean" }, "event": { "$ref": "#/components/schemas/Event" } }, "required": [ "success", "event" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/admin-restart-result.md # AdminRestartResult Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `message` | `string` | obrigatório | — | | `worker` | `string` | obrigatório | — | ## Definição OpenAPI ```json { "type": "object", "properties": { "message": { "type": "string" }, "worker": { "type": "string" } }, "required": [ "message", "worker" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/global-webhook-request.md # GlobalWebhookRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `action` | `string` | condicional | Valores: `"add"`, `"update"`, `"delete"`. Padrão: `"add"` | | `enabled` | `boolean` | opcional | Padrão: `true` | | `url` | `string` | condicional | HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist. Comprimento máximo: `2048` | | `events` | `string / array` | condicional | Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados. | | `excludeMessages` | `string / array` | opcional | wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo. | | `addUrlEvents` | `boolean / string / integer / null` | opcional | Deve ser false. | | `addUrlTypesMessages` | `boolean / string / integer / null` | opcional | Deve ser false. | | `secret` | `string` | opcional | Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido. Comprimento máximo: `256`. Somente na requisição; não é devolvido | Pelo menos uma destas combinações deve ser válida: - `action`; `action`: Valor fixo: `"delete"` - `url`, `events` ## Definição OpenAPI ```json { "type": "object", "properties": { "action": { "type": "string", "enum": [ "add", "update", "delete" ], "default": "add" }, "enabled": { "type": "boolean", "default": true }, "url": { "type": "string", "description": "HTTPS público, sem credenciais/redirects; exceções de laboratório na allowlist.", "maxLength": 2048 }, "events": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "Entregues: connection, messages, messages_update, messages_edit, groups, limits, undecryptable, call. qrcode, history e chats são aceitos e ignorados, assim como os demais nomes de compatibilidade documentados." }, "excludeMessages": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "wasSentByApi, wasNotSentByApi, fromMeYes, fromMeNo, isGroupYes, isGroupNo." }, "addUrlEvents": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ], "description": "Deve ser false." }, "addUrlTypesMessages": { "oneOf": [ { "type": "boolean" }, { "type": "string", "enum": [ "true", "false", "1", "0", "" ] }, { "type": "integer", "enum": [ 0, 1 ] }, { "type": "null" } ], "description": "Deve ser false." }, "secret": { "type": "string", "description": "Segredo de assinatura do webhook; até 256 ASCII sem espaços. Nunca é devolvido.", "maxLength": 256, "writeOnly": true } }, "anyOf": [ { "required": [ "action" ], "properties": { "action": { "const": "delete" } } }, { "required": [ "url", "events" ] } ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/global-webhook.md # GlobalWebhook Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `registered` | `boolean` | obrigatório | — | | `url` | `string` | opcional | — | | `events` | `array` | opcional | — | | `enabled` | `boolean` | opcional | — | | `excludeMessages` | `array / null` | opcional | — | | `hasSecret` | `boolean` | opcional | — | | `secretSealed` | `boolean` | opcional | — | | `createdAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `updatedAt` | `string` | opcional | RFC 3339. Formato: `date-time` | | `ignoredEvents` | `array` | opcional | — | | `scope` | `string` | obrigatório | Valor fixo: `"server"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "registered": { "type": "boolean" }, "url": { "type": "string" }, "events": { "type": "array", "items": { "type": "string" } }, "enabled": { "type": "boolean" }, "excludeMessages": { "type": [ "array", "null" ], "items": { "type": "string" } }, "hasSecret": { "type": "boolean" }, "secretSealed": { "type": "boolean" }, "createdAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "RFC 3339.", "format": "date-time" }, "ignoredEvents": { "type": "array", "items": { "type": "string" } }, "scope": { "type": "string", "const": "server" } }, "required": [ "registered", "scope" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/make-call-request.md # MakeCallRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `number` | `string` | obrigatório | Telefone com DDI (formatação removida pela API) ou JID de conversa direta. Resolve as duas formas do nono dígito brasileiro. Comprimento mínimo: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "number": { "type": "string", "minLength": 1, "description": "Telefone com DDI (formatação removida pela API) ou JID de conversa direta. Resolve as duas formas do nono dígito brasileiro." } }, "required": [ "number" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/call-action-request.md # CallActionRequest Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | Comprimento mínimo: `1` | ## Definição OpenAPI ```json { "type": "object", "properties": { "callId": { "type": "string", "minLength": 1 } }, "required": [ "callId" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/call.md # Call Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `callId` | `string` | obrigatório | — | | `direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `jid` | `string` | opcional | — | | `status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `startedAt` | `string` | obrigatório | Formato: `date-time` | | `answeredAt` | `string` | opcional | Formato: `date-time` | | `endedAt` | `string` | opcional | Formato: `date-time` | | `endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "callId": { "type": "string" }, "direction": { "type": "string", "enum": [ "inbound", "outbound" ] }, "number": { "type": "string", "description": "Identidade telefônica canônica, quando conhecida." }, "jid": { "type": "string" }, "status": { "type": "string", "enum": [ "ringing", "connecting", "active", "ended" ] }, "startedAt": { "type": "string", "format": "date-time" }, "answeredAt": { "type": "string", "format": "date-time" }, "endedAt": { "type": "string", "format": "date-time" }, "endReason": { "type": "string", "description": "hangup, rejected, ring_timeout, closed ou motivo do motor." }, "endedBy": { "type": "string", "enum": [ "local", "remote" ] } }, "required": [ "callId", "direction", "number", "status", "startedAt" ] } ``` --- Fonte: https://wpp.atendro.cloud/docs/modelos/active-calls.md # ActiveCalls Estrutura de dados do contrato OpenAPI. ## Campos | Campo | Tipo | Presença | Descrição | |---|---|---|---| | `calls` | `array` | obrigatório | — | | `calls[].callId` | `string` | obrigatório | — | | `calls[].direction` | `string` | obrigatório | Valores: `"inbound"`, `"outbound"` | | `calls[].number` | `string` | obrigatório | Identidade telefônica canônica, quando conhecida. | | `calls[].jid` | `string` | opcional | — | | `calls[].status` | `string` | obrigatório | Valores: `"ringing"`, `"connecting"`, `"active"`, `"ended"` | | `calls[].startedAt` | `string` | obrigatório | Formato: `date-time` | | `calls[].answeredAt` | `string` | opcional | Formato: `date-time` | | `calls[].endedAt` | `string` | opcional | Formato: `date-time` | | `calls[].endReason` | `string` | opcional | hangup, rejected, ring_timeout, closed ou motivo do motor. | | `calls[].endedBy` | `string` | opcional | Valores: `"local"`, `"remote"` | ## Definição OpenAPI ```json { "type": "object", "properties": { "calls": { "type": "array", "items": { "$ref": "#/components/schemas/Call" } } }, "required": [ "calls" ] } ```