Skip to main content
A API da Arara é REST, com JSON na entrada e na saída. Esta página declara as convenções uma única vez. Para os campos de cada rota, veja a referência de cada endpoint no menu ao lado.

Base URL

Não há versão no host. Os paths de negócio começam em /v1. O prefixo /api (https://api.ararahq.com/api/v1/...) também é aceito por compatibilidade, mas use a forma sem prefixo.

Autenticação

Envie a chave de API no header Authorization:
Crie a chave em Chaves de API. Permissões, expiração e erros estão em Autenticação.

Telefone

O formato canônico é E.164 com +: +5511999999999. Use esse formato em corpo, path e query. No envio de mensagem a API também aceita 5511999999999 e whatsapp:+5511999999999. Ela remove o prefixo e o + e exige de 7 a 15 dígitos. Fora disso responde 422 INVALID_RECIPIENT. POST /v1/conversations/window-status não faz essa normalização. Mande só dígitos com DDI, com ou sem + (+5511999999999 ou 5511999999999). A busca tolera o + e o nono dígito de celular brasileiro. Com whatsapp:, espaços, parênteses ou hífens o telefone não casa com a conversa e a janela volta como fechada.

O que a chave de API alcança

Gestão de chaves, pagamentos e perfil pessoal são operações do painel e não aceitam chave de API. O webhook também é configurado só pelo painel, em Webhooks. URL, lista de entregas, reenvio e teste não funcionam com chave de API. Veja Webhooks.

Formato de resposta

Toda resposta com corpo é JSON. Datas em ISO 8601 (UTC). Exceções:
  • 204 No Content não tem corpo (por exemplo, cancelar campanha).
  • GET /v1/messages/{id} responde 403 e 404 sem corpo.
  • 401 e 403 de autenticação trazem o JSON padrão do servidor, fora do envelope de erro. Veja Autenticação.

Objeto único

Listas

O envelope mais comum é { data, pagination }:
O envelope de lista muda por rota. Confira antes de ler a resposta:

Erro

Trate pelo status HTTP e depois por error.code. Falha de autenticação e alguns 404 saem fora desse formato. Códigos e exceções em Erros.

Paginação

Os parâmetros são os mesmos em todas as listas paginadas. O nome dos campos da resposta muda por rota, como mostra a tabela em Listas. GET /v1/opt-outs não tem paginação.

Idempotência

Regras:
  • A chave tem de 1 a 255 caracteres, sem caracteres de controle. Fora disso: 400 INVALID_IDEMPOTENCY_KEY.
  • A chave não expira.
  • Derive a chave de um evento do seu sistema (id do pedido, id da tentativa). Não gere um valor novo a cada chamada, senão a retentativa duplica o envio.
  • Em POST /v1/messages o corpo não é comparado: reusar a chave com outro destinatário devolve a mensagem antiga, sem erro. Use uma chave por intenção de envio.

Rate limits

O limite é por usuário dono da chave. Toda resposta traz X-RateLimit-Remaining. Ao estourar:

Quais respostas trazem Retry-After

Quando o header vier, espere o tempo indicado e repita a chamada com a mesma Idempotency-Key.

Status HTTP

Status e enums

Enums vêm em maiúsculas (LIVE, MARKETING, APPROVED). O status da mensagem tem duas grafias: PENDING no REST é queued no webhook.

IDs

Rota que espera UUID e recebe outra coisa responde 400 INVALID_PATH_PARAM.

Valores monetários

Custos e saldos (cost, totalCost, balance, threshold, amount) vêm em reais, decimal (0.3835). Campos com sufixo Cents (amountCents, monthlyPriceCents) vêm em centavos inteiros.

CORS

A API só libera CORS para domínios da Arara. Chamada direta do navegador é bloqueada. Chame a API a partir do seu backend.

Próximos passos

Autenticação

Como enviar a chave, permissões e erros.

Erros

Códigos e como tratar cada um.

Mensagens

O endpoint mais usado.

Webhooks

Eventos em tempo real no seu backend.