API para o seu sistema
Ligue o painel aos seus sistemas via API
O seu sistema manda a mensagem, cria a campanha e lê o funil sem ninguém abrir o painel. E o painel avisa de volta na hora em que chega mensagem, muda o status da entrega ou o número cai.
Em resumo
A API do Drope CRM, CRM para WhatsApp e Instagram, deixa o seu sistema enviar mensagem, criar campanha, etiquetar contato e mover o lead no funil sem abrir o painel. Esta página é a referência: endereços por recurso, permissões, avisos de saída e códigos de erro. A partir do plano Starter, por R$ 29,90 por mês.
- 3 dias grátis
- Resposta sempre em JSON
- Um acesso por sistema, com prazo
- Botão de testar dentro da conta
Funciona com
Os mesmos canais que você usa no painel, comandados pelo seu sistema.
Antes da primeira chamada
Primeiros passos na API de WhatsApp: seis coisas antes da primeira chamada.
O endereço base, o acesso, o número da chamada, o formato da resposta e o limite. Tudo isso já existe dentro da sua conta.
Endereço base
https://dropecrm.com/api
Toda chamada sai daqui. O que vem depois diz o recurso: /messages/text, /devices, /kanban/stages.
Autenticação
Authorization: Bearer SEU_ACESSO
Vai em toda chamada. Existe o acesso da conta inteira, que faz tudo, e o acesso por sistema, criado na área de API: você marca as permissões e até quando vale, ele começa com dcrm_ e aparece uma única vez. Revogar um não derruba os outros.
O número da chamada
X-Device-Token: ACESSO_DO_NUMERO
As chamadas que agem sobre um número levam também este cabeçalho. Em mensagens, funil, campanhas e grupos dá para usar o parâmetro device_id na URL no lugar dele, com uma exceção: POST /api/contacts/{id}/kanban, que está no funil mas só aceita o cabeçalho. Carrosséis, Instagram e as chamadas de número valem para a conta inteira e não pedem este cabeçalho, com uma única ressalva: GET /api/devices/me pede, porque é justamente a chamada que descobre a qual número o acesso pertence. Os avisos de saída não pedem: eles agem sobre um número, mas quem diz qual é o {id} do próprio endereço.
Resposta
{"success":true,"data":{}}
Sempre o mesmo envelope. No erro vem success false, o código e uma mensagem em português, como {"success":false,"error":"INSUFFICIENT_SCOPE"}.
Limite por minuto
X-RateLimit-Remaining: 118
A conta tem um teto de chamadas por minuto. Assim que o acesso é aceito, a resposta já traz o teto e quanto ainda sobra. Quem é barrado antes disso, com acesso inválido, revogado, vencido ou conta suspensa, não recebe essa contagem. Ao estourar vem 429 com o tempo de espera.
Teste sem escrever código
Dentro da conta, na área de API, as chamadas mais usadas já vêm com o exemplo montado e um botão de testar, com o acesso da sua conta. As de carrossel e de Instagram ainda não estão lá: essas você monta no seu código, a partir desta página. A lista se ajusta ao número que você escolher no alto da tela.
Referência
Referência da API: cada chamada, recurso por recurso.
Cada linha é uma chamada de verdade, com o método e o endereço que você vai escrever no seu código.
Só no número por QR code Não sai em todo número por QR code Só no número oficial Só no número por QR code, e não em todos
Conexão e descoberta
devices:read
Só o teste de conexão passa com qualquer acesso válido, sem permissão nenhuma marcada. A descoberta pede devices:read como qualquer outra chamada.
-
GET
/Confere o acesso e devolve o id, o nome e o e-mail da conta autenticada.api/ ping -
GET
/Numa chamada só: os números da conta, o que cada um libera, as permissões do acesso em uso, o plano e os limites.api/ capabilities
Números
devices:read
devices:write
Os GET pedem a de ler; criar, conectar e remover pedem a de gerenciar.
-
GET
/Lista os números da conta com id, nome, tipo, status, conexão e dados do perfil.api/ devices -
POST
/Cria um número novo, ou traz um que já existe, dispara a conexão e devolve o QR code ou o código de pareamento. Cria só número por QR code: o número oficial não nasce por aqui, ele é ligado dentro do painel.api/ devices -
GET
/Diz a qual número pertence o cabeçalho enviado. Serve para descobrir o id a partir do acesso do número.api/ devices/ me -
GET
/Detalhe do número, com o status consultado na hora e, quando ele está pareando, o QR code e o código de pareamento.api/ devices/ {id} -
POST
/Dispara a conexão e devolve QR code e código de pareamento. O QR vale cerca de 40 segundos: chame de novo se ninguém escanear. Só no número por QR codeapi/ devices/ {id}/ connect -
DELETE
/Remove o número da conta. Durante o período de teste a exclusão é recusada.api/ devices/ {id}
Avisos de saída
webhooks:manage
O aviso é sempre por número, um por número. Os eventos e a assinatura estão logo abaixo da referência.
-
GET
/Mostra o endereço cadastrado, os eventos, se está ativo e o último sucesso, a última falha e o último erro. O segredo nunca volta aqui.api/ devices/ {id}/ webhook -
PUT
/Cadastra ou atualiza o endereço e os eventos. O segredo da assinatura nasce na primeira vez e volta só nesta resposta.api/ devices/ {id}/ webhook -
POST
/Mesmo efeito do PUT: os dois verbos criam ou atualizam a mesma inscrição.api/ devices/ {id}/ webhook -
DELETE
/Tira o aviso de saída do número. Para trocar o segredo, apague e cadastre de novo.api/ devices/ {id}/ webhook
Mensagens
messages:send
Todas são POST e agem sobre um número. Os campos opcionais replyid, mentions, readchat, readmessages, delay, forward, track_source, track_id e async valem em cinco envios: texto, mídia (a enquete inclusive), botões, carrossel e lista, e só quando o número é dos conectados por QR code. No número oficial a API aceita os campos e depois os ignora: não mudam nada no envio. No modelo aprovado eles são descartados, e nos sete últimos desta lista, do cartão de contato ao botão de PIX, o corpo segue como veio, sem que a API monte esses campos: não conte com eles. Só o envio de texto tem os campos de prévia de link. Antes de contar com botões ou carrossel, confira o número em GET /api/capabilities.
-
POST
/Envia texto. É o único envio com os campos de prévia de link: título, descrição, imagem e o formato grande.api/ messages/ text -
POST
/Envia imagem, vídeo, áudio ou documento a partir de uma URL, com legenda e nome de arquivo.api/ messages/ media -
POST
/Envia uma enquete, com 2 a 12 opções e quantas o contato pode marcar. Não é outro endereço: é o mesmo /api/messages/media da linha de cima, com o campo type valendo "poll" no corpo. Só no número por QR codeapi/ messages/ media -
POST
/Envia de 1 a 3 botões: responder, abrir link, ligar ou copiar código. No número oficial só existe o de responder. Não sai em todo número por QR codeapi/ messages/ buttons -
POST
/Envia uma lista de opções, com seções, itens e o rótulo do botão que abre a lista. Só no número por QR codeapi/ messages/ list -
POST
/Envia um carrossel de cards, cada um com imagem, título, descrição e botões. Não sai em todo número por QR codeapi/ messages/ carousel -
POST
/Envia um modelo aprovado, por id ou por nome, com variáveis, cabeçalho, links dos botões e código de cupom. O texto do botão vem do modelo aprovado e não muda no envio. Só no número oficialapi/ messages/ template -
POST
/Envia um cartão de contato, com nome completo e telefone. Só no número por QR code, e não em todosapi/ messages/ contact -
POST
/Envia uma localização, por latitude e longitude. Só no número por QR code, e não em todosapi/ messages/ location -
POST
/Mostra na conversa que o número está digitando ou gravando. Só no número por QR code, e não em todosapi/ messages/ presence -
POST
/Publica um status, o stories do WhatsApp. Só no número por QR code, e não em todosapi/ messages/ status -
POST
/Envia uma mensagem com botão que pede a localização do contato. Só no número por QR code, e não em todosapi/ messages/ location-button -
POST
/Envia um pedido de pagamento, com valor. Só no número por QR code, e não em todosapi/ messages/ request-payment -
POST
/Envia um botão de PIX, com o tipo e a chave. Só no número por QR code, e não em todosapi/ messages/ pix-button
Etiquetas e contatos
contacts:read
contacts:write
Criar contato não existe: o contato nasce da conversa. O que a API faz com ele é etiquetar, mover no funil e conferir o número.
-
GET
/Lista as etiquetas do número, com id, nome e cor.api/ tags -
POST
/Cria uma etiqueta, com nome e cor.api/ tags -
PUT
/Muda o nome ou a cor de uma etiqueta do próprio número.api/ tags/ {id} -
DELETE
/Apaga uma etiqueta do próprio número.api/ tags/ {id} -
POST
/Troca as etiquetas do contato pela lista enviada. Substitui todas, não soma.api/ contacts/ {id}/ tags -
POST
/Diz quais números têm WhatsApp. Aceita um só ou uma lista. Só no número por QR codeapi/ number/ check
Funil
kanban:read
kanban:write
Ler as etapas e os leads pede a de ler; criar, editar e mover pedem a de gerenciar.
-
GET
/Lista as etapas do funil.api/ kanban/ stages -
POST
/Cria uma etapa, com nome, cor e posição.api/ kanban/ stages -
PUT
/Muda o nome, a cor ou a posição de uma etapa.api/ kanban/ stages/ {id} -
DELETE
/Apaga uma etapa vazia. Com cards dentro, responde 409 e diz quantos existem.api/ kanban/ stages/ {id} -
GET
/Devolve os contatos com telefone das etapas pedidas, já sem repetição e com paginação.api/ kanban/ leads?stage_ids=1,2 -
POST
/Move o contato para a etapa informada, criando o card se ele ainda não existir. É a única chamada do funil que não aceita device_id na URL: aqui o cabeçalho do número é obrigatório.api/ contacts/ {id}/ kanban
Campanhas
campaigns:read
campaigns:write
Acompanhar pede a de ler; criar, pausar, retomar e excluir pedem a de gerenciar.
-
POST
/Cria e começa uma campanha, com a lista de contatos, os blocos da mensagem, o intervalo entre envios e, se quiser, a hora do agendamento.api/ campaigns/ dispatch -
POST
/A mesma campanha, só que a lista de contatos vem das etapas do funil.api/ campaigns/ from-kanban -
GET
/Lista as campanhas do número, com filtro opcional por status.api/ campaigns -
GET
/Mostra o status de cada envio da campanha, com até 500 por página.api/ campaigns/ {id}/ messages -
POST
/Pausa, retoma ou exclui a campanha.api/ campaigns/ {id}/ action
Grupos Só no número por QR code
groups:read
groups:write
Listar, sincronizar e consultar informação e convite pedem a de ler; o resto pede a de gerenciar.
-
GET
/Lista os grupos do número a partir do cache, ou ao vivo com ?source=live.api/ groups -
GET
/Detalhe de um grupo do cache: nome, foto, dono, quantidade de participantes e se você é administrador. Enquanto o cache nunca tiver sido sincronizado, responde 404: chame POST /api/groups/sync antes.api/ groups/ {jid} -
POST
/Força a sincronização da lista de grupos e atualiza o cache.api/ groups/ sync -
POST
/Cria um grupo, com nome e a lista inicial de participantes.api/ groups/ create -
POST
/Consulta os dados de um grupo e, se você pedir, devolve o link de convite.api/ groups/ info -
POST
/Consulta um grupo a partir do código de convite, antes de entrar nele.api/ groups/ invite-info -
POST
/Entra em um grupo pelo código de convite.api/ groups/ join -
POST
/Sai de um grupo.api/ groups/ leave -
POST
/Invalida o link de convite atual e gera um novo.api/ groups/ reset-invite -
POST
/Muda o nome do grupo.api/ groups/ update-name -
POST
/Muda a descrição do grupo.api/ groups/ update-description -
POST
/Troca a foto do grupo, por URL ou base64, ou remove a que está lá.api/ groups/ update-image -
POST
/Liga ou desliga o modo em que só administrador manda mensagem.api/ groups/ update-announce -
POST
/Liga ou desliga o bloqueio de edição dos dados do grupo por quem não é administrador.api/ groups/ update-locked -
POST
/Exige, ou dispensa, aprovação de administrador para entrar no grupo.api/ groups/ update-join-approval -
POST
/Define quem pode adicionar gente: só administrador ou qualquer participante.api/ groups/ update-member-add-mode -
POST
/Define o tempo das mensagens temporárias do grupo.api/ groups/ ephemeral -
POST
/Adiciona, remove, promove, rebaixa, aprova ou rejeita participantes.api/ groups/ participants
Comunidades Só no número por QR code, e não em todos
groups:write
-
POST
/Cria uma comunidade com o nome informado.api/ community/ create -
POST
/Adiciona ou remove grupos de uma comunidade.api/ community/ editgroups
Canais Só no número por QR code, e não em todos
groups:read
groups:write
Cada canal é identificado por id ou pelo endereço completo dele. Listar, consultar, pesquisar, ler mensagens e buscar atualizações pedem a de ler; o resto pede a de gerenciar.
-
POST
/Cria um canal.api/ newsletter/ create -
GET
/Lista os canais do número.api/ newsletter/ list -
POST
/Consulta os dados de um canal.api/ newsletter/ info -
POST
/Resolve o canal a partir da chave do link público.api/ newsletter/ link -
POST
/Inscreve o número nas atualizações do canal.api/ newsletter/ subscribe -
POST
/Lista as mensagens publicadas no canal.api/ newsletter/ messages -
POST
/Edita o texto de uma mensagem já publicada.api/ newsletter/ messages/ edit -
POST
/Apaga uma mensagem do canal.api/ newsletter/ messages/ delete -
POST
/Busca as atualizações recentes do canal.api/ newsletter/ updates -
POST
/Marca mensagens do canal como vistas.api/ newsletter/ viewed -
POST
/Reage a uma mensagem do canal.api/ newsletter/ reaction -
POST
/Passa a seguir o canal.api/ newsletter/ follow -
POST
/Deixa de seguir o canal.api/ newsletter/ unfollow -
POST
/Silencia o canal.api/ newsletter/ mute -
POST
/Tira o silêncio do canal.api/ newsletter/ unmute -
POST
/Apaga o canal.api/ newsletter/ delete -
POST
/Troca a foto do canal.api/ newsletter/ picture -
POST
/Muda o nome do canal.api/ newsletter/ name -
POST
/Muda a descrição do canal.api/ newsletter/ description -
POST
/Define as reações permitidas no canal.api/ newsletter/ settings -
POST
/Procura canais.api/ newsletter/ search -
POST
/Convida um número para administrar o canal.api/ newsletter/ admin/ invite -
POST
/Aceita o convite de administração.api/ newsletter/ admin/ accept -
POST
/Remove um administrador do canal.api/ newsletter/ admin/ remove -
POST
/Revoga um convite de administração ainda não aceito.api/ newsletter/ admin/ revoke -
POST
/Transfere a posse do canal para outro número.api/ newsletter/ owner/ transfer
Carrosséis
carousels:read
carousels:write
instagram:publish
Valem para a conta inteira e não pedem número de WhatsApp. Publicar o carrossel pede a permissão de publicar no Instagram, não a de carrossel. As chamadas de IA respondem com um andamento e consomem créditos.
-
GET
/Lista os carrosséis da conta, com limite e deslocamento.api/ carousels -
POST
/Cria um carrossel: a IA escreve o roteiro e desenha a capa. A resposta já volta com o andamento.api/ carousels -
GET
/Devolve modelos, formatos, fontes, ícones, preços em créditos, saldo, modos e estilos salvos.api/ carousels/ catalog -
GET
/Devolve o saldo de créditos e a tabela de preços.api/ carousels/ credits -
POST
/Diz quanto custaria uma configuração, sem criar nada.api/ carousels/ quote -
GET
/Acompanha uma geração. Com ?wait=20 a resposta espera até 20 segundos antes de voltar.api/ carousels/ jobs/ {chave} -
GET
/Lista os estilos salvos da conta.api/ carousels/ styles -
POST
/Salva um estilo a partir de um carrossel existente ou de um documento.api/ carousels/ styles -
POST
/Define qual estilo é o padrão da conta.api/ carousels/ styles/ default -
DELETE
/Apaga um estilo salvo.api/ carousels/ styles/ {id} -
GET
/Devolve o documento completo do carrossel e as gerações em andamento.api/ carousels/ {id} -
POST
/Edita título, legenda, estilo, cores, fontes e formato, ou substitui o documento inteiro. O mesmo endereço aceita POST, PATCH ou PUT, com o mesmo efeito.api/ carousels/ {id} -
DELETE
/Apaga o carrossel e as imagens dele.api/ carousels/ {id} -
POST
/Duplica o carrossel em um novo.api/ carousels/ {id}/ duplicate -
POST
/Gera a legenda do post por IA.api/ carousels/ {id}/ caption -
GET
/Diz se a conta pode baixar e por onde baixar. As artes são desenhadas no navegador, no editor.api/ carousels/ {id}/ download -
POST
/Transforma o carrossel em publicação do Instagram, agora ou agendada.api/ carousels/ {id}/ publish -
POST
/Adiciona um slide, em uma posição opcional.api/ carousels/ {id}/ slides -
POST
/Edita os campos do slide. O índice começa em 0, que é a capa. Também aceita PATCH ou PUT.api/ carousels/ {id}/ slides/ {i} -
DELETE
/Remove um slide. A capa não pode ser removida.api/ carousels/ {id}/ slides/ {i} -
POST
/Move o slide para outra posição.api/ carousels/ {id}/ slides/ {i}/ move -
POST
/Gera a imagem do slide por IA, no modo rápido ou no caprichado.api/ carousels/ {id}/ slides/ {i}/ image -
POST
/Transforma uma cena descrita em português no pedido da imagem.api/ carousels/ {id}/ slides/ {i}/ scene -
POST
/Reescreve o texto do slide seguindo uma instrução sua.api/ carousels/ {id}/ slides/ {i}/ rewrite -
POST
/Usa uma foto sua no slide, a partir de uma URL, com ponto de foco.api/ carousels/ {id}/ slides/ {i}/ photo
instagram:read
instagram:publish
Valem para a conta inteira e não pedem número de WhatsApp. Quem publica é o agendador, no minuto seguinte: acompanhe pelo status da publicação.
-
GET
/Lista as contas, o que cada uma pode fazer e o motivo quando não pode. Com ?quota=1 traz a cota de 24 horas.api/ instagram/ accounts -
GET
/Lista as publicações, com filtros por status, tipo, período e conta.api/ instagram/ posts -
POST
/Cria a publicação inteira numa chamada: conta, tipo, legenda, opções, os arquivos e o agendamento.api/ instagram/ posts -
GET
/Detalhe da publicação, com arquivos, avisos de proporção, conta e resumo das métricas.api/ instagram/ posts/ {id} -
POST
/Edita um rascunho ou um agendamento: legenda, tipo, opções ou conta. Também aceita PATCH ou PUT.api/ instagram/ posts/ {id} -
DELETE
/Exclui a publicação daqui. Com ?from_instagram=1 tira também do Instagram o que já foi ao ar.api/ instagram/ posts/ {id} -
POST
/Copia a publicação para um rascunho novo.api/ instagram/ posts/ {id}/ duplicate -
POST
/Agenda a publicação ou coloca na fila para sair agora.api/ instagram/ posts/ {id}/ schedule -
POST
/Cancela o agendamento e devolve a publicação para rascunho.api/ instagram/ posts/ {id}/ cancel -
POST
/Adiciona um arquivo, por URL pública ou pela galeria do painel.api/ instagram/ posts/ {id}/ media -
POST
/Reordena os arquivos da publicação.api/ instagram/ posts/ {id}/ media/ reorder -
DELETE
/Remove um arquivo da publicação.api/ instagram/ posts/ {id}/ media/ {mid} -
POST
/Ajusta o arquivo à proporção do post: corta ou encaixa com bordas.api/ instagram/ posts/ {id}/ media/ {mid}/ fit -
GET
/Devolve as métricas da publicação.api/ instagram/ posts/ {id}/ insights -
POST
/Pergunta as métricas ao Instagram na hora. Uma vez a cada 10 minutos por publicação.api/ instagram/ posts/ {id}/ insights/ refresh
Avisos de saída
Webhooks, os avisos de saída: o painel chama o seu endereço.
Cadastre um endereço por número e receba o evento na hora em que ele acontece. É o aviso de saída, que o seu programador conhece pelo nome de webhook.
Como chega
POST no seu endereço
O corpo vai em JSON, no mesmo formato para os dois tipos de número: o evento, o número, a hora, os dados já organizados e, dentro de raw, o original que o WhatsApp mandou.
Assinatura
X-Drope-Signature: sha256=...
HMAC-SHA256 do corpo BRUTO recebido, com o segredo que o cadastro devolveu. Vêm junto X-Drope-Event, com o nome do evento, X-Drope-Delivery-Id, o id da entrega que você guarda para recusar repetição, e X-Drope-Timestamp, a hora do envio.
Se o seu endereço estiver fora
5s · 30s · 5min · 30min
A primeira tentativa sai na hora. Se ela falhar, vêm até quatro novas, nesses intervalos, cinco no total por entrega. Responda 2xx em até 10 segundos. Depois de 20 falhas seguidas o aviso é desligado sozinho e precisa ser religado.
Os quatro eventos
Você escolhe quais quer receber no cadastro do aviso.
-
messages.receivedChegou mensagem no número: texto, mídia, resposta de botão ou resposta de lista. -
messages.statusA entrega de um envio mudou: enviada, entregue, lida, ouvida ou falhou. -
connectionO número conectou, está conectando ou caiu. -
qrSaiu um QR code novo para parear.
Permissões
Marque só o que o seu sistema precisa.
O acesso da conta inteira passa em tudo. O acesso por sistema passa só no que você marcou, e a chamada fora disso responde 403 dizendo qual permissão falta.
As 16 permissões
São as mesmas caixas que aparecem na hora de criar o acesso, na área de API da sua conta.
-
devices:readListar números, ver status, QR code e o que cada um faz. -
devices:writeCriar, conectar e remover números. -
messages:sendEnviar texto, mídia, botões, listas, carrossel e modelo aprovado. -
campaigns:readListar campanhas e acompanhar o status dos envios. -
campaigns:writeCriar campanha, inclusive a partir do funil, pausar, retomar e excluir. -
groups:readListar grupos, sincronizar e consultar informações e convites. -
groups:writeCriar e editar grupos, cuidar dos participantes, das comunidades e dos canais. -
kanban:readListar as etapas do funil e os leads de cada uma. -
kanban:writeCriar e editar etapas e mover contatos no funil. -
contacts:readListar etiquetas e conferir se um número tem WhatsApp. -
contacts:writeCriar e editar etiquetas e aplicá-las a contatos. -
webhooks:manageConfigurar, consultar e remover o aviso de saída de um número. -
carousels:readListar carrosséis, ver slides, catálogo, saldo de créditos e o andamento das gerações. -
carousels:writeCriar carrossel com IA, editar textos, cores e imagens, gerar imagem, legenda e estilo salvo. -
instagram:readListar as contas, as publicações e as métricas de cada uma. -
instagram:publishCriar, editar, agendar, publicar, cancelar e excluir publicações, e enviar as fotos e os vídeos delas.
Erros
Quando dá errado, vem escrito o motivo.
O corpo traz sempre o mesmo envelope, com o código e uma mensagem em português. Alguns códigos ainda trazem o campo que resolve, como a permissão que falta ou o tempo de espera.
Acesso e permissão
-
401
INVALID_TOKENO acesso não veio, veio mal formado ou não existe. -
401
TOKEN_REVOKEDO acesso foi revogado no painel. -
401
TOKEN_EXPIREDO acesso passou da validade que você escolheu. -
401
DEVICE_TOKEN_REQUIREDA chamada age sobre um número e o cabeçalho dele não veio. -
401
INVALID_DEVICE_TOKENO cabeçalho do número veio, mas o acesso dentro dele não é de número nenhum. -
403
INVALID_DEVICE_TOKENO acesso é de um número de verdade, só que de outra conta. Mesmo código, 403 em vez de 401. -
404
NOT_FOUNDPelo parâmetro device_id na URL: o número não existe ou não é desta conta. Os dois casos respondem igual, para não revelar id de ninguém. -
403
INSUFFICIENT_SCOPEO acesso não cobre esta chamada. O campo required diz qual permissão falta. -
403
ACCOUNT_INACTIVEA conta está suspensa ou inativa. -
403
API_NOT_AVAILABLE_FOR_PLANO plano da conta não inclui a API. -
403
FEATURE_NOT_IN_PLANO plano não inclui o recurso pedido: carrossel, publicação no Instagram, métricas do Instagram ou a conexão com IA. -
403
FORBIDDENO contato, a etiqueta ou a etapa não pertence ao número da chamada.
Número e recurso
-
403
DEVICE_OFFLINEO número não está conectado. -
403
PLAN_REQUIREDCriar número sem plano ativo nem período de teste. -
403
DEVICE_LIMIT_REACHEDO limite de números do plano foi atingido. -
403
TRIAL_FORBIDDENExcluir número durante o período de teste. -
422
UNSUPPORTED_FEATUREO recurso não existe nesse tipo de número: modelo aprovado fora do oficial, enquete, grupos, canais ou PIX fora do QR code, e carrossel no número por QR code que não envia carrossel. -
422
UNSUPPORTED_DEVICEO id apontado é uma conta de Instagram, não um número de WhatsApp. -
422
PROVIDER_NOT_ENABLEDEsse tipo de número não está habilitado na conta.
Chamada e resposta
-
404
NOT_FOUNDO endereço não existe, ou o registro não é desta conta. -
405
METHOD_NOT_ALLOWEDO método está errado para esse endereço. -
409
STAGE_NOT_EMPTYA etapa tem cards dentro e não pode ser apagada. -
422
INVALID_PAYLOADO corpo não é JSON válido, ou falta um campo obrigatório. -
429
RATE_LIMITEDPassou do limite por minuto. Vem com o tempo de espera, no corpo e no cabeçalho. -
502
PROVIDER_ERRORO WhatsApp recusou ou falhou. No envio de modelo aprovado ele sai como 422, para a mensagem real chegar até você. -
502
INSTAGRAM_ERRORErro devolvido pelo Instagram, com o campo que diz se vale tentar de novo. -
402
INSUFFICIENT_CREDITSSem saldo de créditos de IA para essa geração. -
409
RENDER_STALEA arte do carrossel mudou, ou nunca foi gerada, e a publicação precisa dela.
Perguntas frequentes
API de WhatsApp: as dúvidas mais comuns.
Dúvida sobre permissão, sobre o tipo de número ou sobre limite? Chama a gente.
O recomendado é sim. Existe o acesso da conta inteira, que passa em tudo, e o acesso por sistema, em que você marca as permissões e a validade. Se um vazar, você revoga só ele e os outros continuam rodando.
Chame GET /api/capabilities. Ele devolve, numa resposta só, os números da conta, o que cada um libera, as permissões do acesso em uso, o plano e os limites. É o mesmo mapa que esconde na tela o que o número escolhido não faz.
Criar contato, não. O contato nasce da conversa. O que dá pra fazer com ele é aplicar etiqueta, mover de etapa no funil e conferir se um número tem WhatsApp antes de enviar.
Modelo aprovado só sai do oficial. Lista de opções, enquete e grupos só existem no número conectado por QR code, em qualquer um deles. Comunidades, canais, cartão de contato, localização e PIX também são só do QR code, e nem em todo número por QR code eles saem. Texto, mídia, etiqueta, funil, campanha e avisos de saída funcionam nos dois. Botões e carrossel também saem nos dois, só que não em todo número por QR code: confira o seu em GET /api/capabilities.
Existe, por conta e por minuto, em janela de 60 segundos. Assim que o acesso é aceito, a resposta já diz quanto ainda sobra, e ao estourar vem 429 com o tempo de espera. Algumas listas também têm teto próprio: 500 envios de campanha por página e, na leitura do funil, 2000 contatos por chamada, somando todas as etapas que você pedir de uma vez. Sem pedir nada, o funil devolve 500.
As do carrossel respondem com um andamento, e você acompanha em GET /api/carousels/jobs/{chave}, que segura a resposta por até 20 segundos. Publicar no Instagram também não sai dentro da chamada: entra na fila e o agendador publica no minuto seguinte.
A API vem junto com o plano, não é compra por fora. Em Preços você vê, plano a plano, quem já tem a linha "Conexão com seus sistemas (API)". O Servidor MCP, que liga a sua IA na conta, é uma opção separada e pode estar ligada ou não no mesmo plano.
Continue por aqui
Outros caminhos para ligar a sua conta.
Atualizado em