Referência da API do Entagl
A API do Entagl permite que o seu próprio software trabalhe com um workspace do Entagl: contatos, conversas, mensagens, agendamentos, lembretes, pedidos, produtos, chamadas de IA e campanhas. Os webhooks avisam seus sistemas no instante em que algo acontece. É a mesma API que o app do Entagl para o Make usa.
URL base
https://api.entagl.com/api/v1Requisições e respostas são JSON sobre HTTPS. Os nomes dos campos usam snake_case. Os IDs são números inteiros, a menos que um endpoint diga outra coisa. Os horários são strings ISO 8601; as respostas usam UTC.
Autenticação
Envie um token em toda requisição, no header Authorization: Authorization: Bearer <token>. Dois tipos de token funcionam:
Chave de API
Para o código do seu próprio servidor. Crie uma chave no app do Entagl em Configurações → API Keys. As chaves começam com ai_. Uma chave funciona no workspace em que foi criada e tem direitos de proprietário nele, então mantenha-a em segredo e nunca a coloque em um navegador ou app mobile.
Token de acesso OAuth 2.0
Usado por conectores como o app do Entagl para o Make. A pessoa entra com a conta do Entagl, e o conector age em nome dela, com o papel que ela tem no workspace. Para criar sua própria integração OAuth, fale com support@entagl.com.
curl "https://api.entagl.com/api/v1/contacts?limit=2" \
-H "Authorization: Bearer ai_your_api_key"Um header ausente responde 401 unauthenticated. Uma chave errada ou revogada responde 401 invalid_api_key. Um token OAuth expirado responde 401 invalid_token: renove-o e tente de novo.
Workspaces e permissões
Cada requisição trabalha em exatamente um workspace. Uma API key sempre usa o próprio workspace. Um login OAuth pode pertencer a vários workspaces (próprios ou em que entrou como membro da equipe): envie o header X-Entagl-Workspace com o ID do workspace para escolher um. Com um único workspace, o header é opcional. GET /me funciona sem o header e lista todos os workspaces que o login pode usar.
curl "https://api.entagl.com/api/v1/me" \
-H "Authorization: Bearer <oauth_access_token>"
curl "https://api.entagl.com/api/v1/contacts" \
-H "Authorization: Bearer <oauth_access_token>" \
-H "X-Entagl-Workspace: <workspace_id from /me>"Sem o header em um login com vários workspaces, você recebe 400 workspace_required; um workspace a que o login não tem acesso responde 403 workspace_forbidden. Um ID que pertence a outro workspace sempre responde 404 not_found, nunca 403.
Cada endpoint abaixo mostra a permissão de que precisa. Proprietários, admins e API keys passam em todas as verificações. Membros da equipe passam quando o papel deles tem essa permissão marcada nas configurações da equipe: contacts, inbox, calendar, orders, business_pages, call_agent, campaigns ou integrations. Sem ela, a API responde 403 insufficient_permissions.
Requisições e erros
Envie os corpos como JSON com Content-Type: application/json. A maioria dos endpoints rejeita campos desconhecidos no corpo com 422, então um erro de digitação nunca passa em silêncio. Todo erro usa o mesmo formato: um code estável para você tratar no código, uma message legível e, nos erros de validação, uma lista details que aponta cada campo inválido.
{
"error": {
"code": "validation_failed",
"message": "Invalid email address",
"details": [
{ "path": "email", "message": "Invalid email address" }
]
}
}- 400Requisição malformada: ID inválido, cursor inválido, header de workspace ausente.
- 401Token ausente, inválido ou expirado.
- 402Créditos insuficientes para a ação (por exemplo, enviar uma campanha).
- 403Autenticado, mas sem permissão: falta a permissão ou o acesso ao workspace.
- 404Não encontrado, inclusive IDs de outro workspace.
- 409Conflito: nome duplicado, estado incorreto ou choque de Idempotency-Key.
- 422A validação falhou, ou uma regra de negócio recusou a mudança.
- 429Limite de taxa atingido. Veja Retry-After.
- 500 / 502O Entagl ou o canal de mensagens falhou. Confira o resultado antes de tentar de novo uma escrita.
As rotas marcadas como Formato de resposta legado são anteriores a estas convenções: retornam objetos ou arrays JSON simples e respondem à maioria dos erros como { "message": "…" }.
Paginação
Os endpoints marcados como Paginado retornam primeiro os itens mais recentes, dentro de um envelope de lista. Peça até 100 itens com limit (padrão 25). Quando has_more for true, passe next_cursor como starting_after para obter a próxima página. As outras listas retornam tudo de uma vez com has_more: false.
{
"object": "list",
"data": [
{
"object": "contact",
"id": 6789,
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+15551234567",
"tags": ["vip"]
}
],
"has_more": true,
"next_cursor": "6789"
}curl "https://api.entagl.com/api/v1/contacts?limit=100&starting_after=6789" \
-H "Authorization: Bearer ai_your_api_key"Idempotência
Todo endpoint POST no formato padrão aceita o header Idempotency-Key (até 200 caracteres). Use um valor único por operação, como um UUID. A Entagl guarda a primeira resposta por 24 horas: uma nova tentativa com a mesma chave e o mesmo body recebe essa resposta com Idempotent-Replayed: true, e nada é executado duas vezes. Rotas marcadas como Formato de resposta legado funcionam de outro jeito, veja abaixo.
curl -X POST "https://api.entagl.com/api/v1/contacts" \
-H "Authorization: Bearer ai_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f9c1d2e-order-7781" \
-d '{ "first_name": "Jane", "phone": "+15551234567", "tags": ["vip"] }'- A mesma chave com um corpo diferente responde
409 idempotency_key_reused. - Enquanto a primeira requisição ainda está em andamento, ou se ela nunca terminou, uma nova tentativa responde
409 request_in_progress. Confira o resultado e tente de novo com uma chave nova. - Todo resultado é guardado, inclusive erros. Para tentar de novo uma requisição que falhou, use uma chave nova.
- As chaves valem para o workspace e a credencial.
Rotas legadas. POST /messages também aceita Idempotency-Key (ou um message_id no body): repetir uma mensagem já aceita responde 202 com o mesmo conversationId e ela não é processada duas vezes, e a mesma chave com outro body responde 409. POST /chat não tem proteção contra repetição: uma nova tentativa roda a IA de novo, então confira o resultado antes de tentar outra vez.
Limites de taxa
Cada workspace pode fazer 120 requisições por minuto, compartilhadas por todas as suas API keys e conexões. As respostas trazem RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset (segundos até a janela reiniciar). Acima do limite, você recebe 429 rate_limited com um header Retry-After: espere esse número de segundos e tente de novo. As rotas legadas do canal de API não contam neste limite.