🥑 Abacato AI

Documentação da API

API REST pública do Abacato AI para integrar seus próprios sistemas ao WhatsApp.

Com a API pública você envia mensagens de WhatsApp (texto e template), lista os contatos importados e consulta o status da conexão do número — tudo autenticado por uma chave de API criada no painel. A especificação legível por máquina está disponível em openapi.yaml.

Última atualização: 2026-07-08 · versão 1.0.0

Conteúdo

Primeiros passos

Base URL

https://api.abacato.vps.aprendendoai.com

Todas as requisições usam Content-Type: application/json e retornam JSON. Envios bem-sucedidos retornam 201; consultas retornam 200.

Autenticação

Toda requisição é autenticada por uma chave de API enviada no cabeçalho X-API-Key. Crie e gerencie suas chaves no painel do Abacato AI em Configurações → Chaves de API. A chave completa é exibida uma única vez, no momento da criação — guarde-a com segurança.

X-API-Key: ak_live_xxxxxxxxxxxxxxxxxxxxxxxx
Nunca exponha a chave no front-end. A chave dá acesso ao envio de mensagens em nome da sua conta. Use-a apenas a partir do seu servidor.

Referência de endpoints

Todos os caminhos são relativos à Base URL e ficam sob /api/v1/public. Todos exigem o cabeçalho X-API-Key.

MétodoCaminhoDescrição
POST/api/v1/public/messages/textEnvia uma mensagem de texto
POST/api/v1/public/messages/templateEnvia uma mensagem de template aprovado
GET/api/v1/public/contactsLista os contatos importados
GET/api/v1/public/whatsapp/statusConsulta o status da conta de WhatsApp

Enviar uma mensagem de texto

POST /api/v1/public/messages/text
Só dentro da janela de 24 horas. Pela política da Meta, mensagens de texto livre só podem ser enviadas dentro da janela de atendimento de 24 horas — ou seja, até 24h após a última mensagem que o cliente enviou para o seu número. Fora dessa janela, a Meta recusa o envio e a API retorna o erro correspondente. Para iniciar ou reabrir uma conversa, use um template aprovado, que pode ser enviado a qualquer momento.

Parâmetros do corpo

CampoTipoObrigatórioDescrição
tostringsimNúmero do destinatário, apenas dígitos (E.164). Ex.: 5511888888888
textstringsimCorpo da mensagem, até 4096 caracteres

Requisição

# envia um texto simples
curl -X POST https://api.abacato.vps.aprendendoai.com/api/v1/public/messages/text \
  -H "X-API-Key: ak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "5511888888888",
    "text": "Olá! Essa é uma mensagem de teste."
  }'

Resposta 201

{
  "message": {
    "id": "9f1c2d3e-...",
    "direction": "outbound",
    "recipientNumber": "5511888888888",
    "messageType": "text",
    "content": "Olá! Essa é uma mensagem de teste.",
    "wamid": "wamid.HBg...",
    "status": "sent",
    "sentAt": "2026-07-08T14:00:00.000Z"
  }
}

Enviar uma mensagem de template

POST /api/v1/public/messages/template

Templates podem ser enviados a qualquer momento (fora da janela de 24h de atendimento). O template precisa já estar aprovado na conta de WhatsApp Business.

Somente contas via API Oficial (Meta Cloud). Contas conectadas por QR Code (Evolution) não enviam templates — use Enviar texto.

Parâmetros do corpo

CampoTipoObrigatórioDescrição
tostringsimNúmero do destinatário, apenas dígitos (E.164)
templateNamestringsimNome do template aprovado. Ex.: pedido_atualizado
languagestringnãoCódigo de idioma do template (padrão pt_BR)
componentsarraynãoComponentes do template para preencher variáveis (formato Meta)

Requisição

curl -X POST https://api.abacato.vps.aprendendoai.com/api/v1/public/messages/template \
  -H "X-API-Key: ak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "5511888888888",
    "templateName": "pedido_atualizado",
    "language": "pt_BR",
    "components": [
      { "type": "body",
        "parameters": [ { "type": "text", "text": "#1234" } ] }
    ]
  }'

Resposta 201

{
  "message": {
    "id": "9f1c2d3e-...",
    "direction": "outbound",
    "recipientNumber": "5511888888888",
    "messageType": "template",
    "templateName": "pedido_atualizado",
    "wamid": "wamid.HBg...",
    "status": "sent",
    "sentAt": "2026-07-08T14:00:00.000Z"
  }
}

Listar contatos importados

GET /api/v1/public/contacts

Parâmetros de query

ParâmetroTipoPadrãoDescrição
pageinteger1Página da listagem
limitinteger50Itens por página (máx. 100)
searchstringFiltra por nome ou número do contato

Requisição

curl "https://api.abacato.vps.aprendendoai.com/api/v1/public/contacts?page=1&limit=50" \
  -H "X-API-Key: ak_live_xxx"

Resposta 200

{
  "contacts": [
    {
      "id": "3a2b1c...",
      "phoneNumber": "5511888888888",
      "name": "Maria Silva",
      "createdAt": "2026-07-01T10:00:00.000Z",
      "updatedAt": "2026-07-01T10:00:00.000Z"
    }
  ],
  "total": 128,
  "page": 1,
  "limit": 50
}

Status da conta de WhatsApp

GET /api/v1/public/whatsapp/status

Retorna a conta de WhatsApp ativa, ou null se nenhuma estiver conectada.

Requisição

curl https://api.abacato.vps.aprendendoai.com/api/v1/public/whatsapp/status \
  -H "X-API-Key: ak_live_xxx"

Resposta 200

{
  "account": {
    "id": "7d6e5f...",
    "provider": "meta_cloud",
    "displayName": "Minha Empresa",
    "displayPhoneNumber": "+55 11 99999-9999",
    "qualityRating": "GREEN",
    "isCoex": true,
    "status": "active",
    "connectedAt": "2026-07-08T12:00:00.000Z"
  }
}

Limites de taxa

Cada chave de API pode fazer até 1000 requisições a cada 15 minutos. Ao exceder, a API retorna 429 Too Many Requests — aguarde e tente novamente.

Erros

Erros retornam um corpo JSON no formato { "error": "descrição" }.

StatusSignificadoQuando acontece
400Bad RequestCorpo inválido ou campos obrigatórios ausentes
401UnauthorizedChave de API ausente, inválida ou revogada
429Too Many RequestsLimite de taxa excedido (1000 req / 15 min por chave)
{
  "error": "Missing, invalid, or revoked API key"
}