Referência da API
Integre o enuchat nos seus sistemas usando a API Tenant. Gira conversas, envie mensagens e aceda a dados de faturação de forma programática.
Autenticação
Todos os pedidos à API são autenticados através de uma chave API enviada no cabeçalho X-Api-Key.
Obter a sua chave API
- Vá a Definições → Chaves API no painel
- Clique em Criar chave API e dê-lhe um nome
- Copie a chave imediatamente — só é mostrada uma vez
- Guarde-a em segurança (variável de ambiente, gestor de segredos)
Efetuar pedidos
Inclua a chave em cada pedido:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsTodas as respostas são em JSON. As respostas bem-sucedidas têm um campo data. Os erros têm um campo error com code e message.
Segurança: as chaves API são hashed (SHA-256) na nossa base de dados. Nunca guardamos a chave em bruto. Trate a sua chave como uma palavra-passe — não a comite no código nem a partilhe publicamente.
URL base
https://api.enuchat.com/api/v1/tenant-apiTodos os endpoints abaixo são relativos a este URL base.
Endpoints
GET /widgets
Lista todos os widgets da sua conta.
Resposta
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Lista conversas, ordenadas pela mensagem mais recente.
Parâmetros de consulta
| Parâmetro | Tipo | Descrição |
|---|---|---|
status | string | Filtrar por estado: open, pending, closed |
widgetId | string | Filtrar por UUID de widget |
limit | integer | Máximo de resultados (predefinição 20, máximo 100) |
offset | integer | Ignorar N resultados |
Exemplo
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Resposta
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
Obter uma conversa com todas as mensagens.
Parâmetros de consulta
| Parâmetro | Tipo | Descrição |
|---|---|---|
limit | integer | Mensagens máximas (predefinição 50, máximo 200) |
Resposta
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Envia uma mensagem a uma conversa. A mensagem será entregue ao visitante em tempo real via widget de chat.
Corpo do pedido
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| Campo | Tipo | Descrição |
|---|---|---|
content | string | Obrigatório. O texto da mensagem. |
role | string | system (predefinição) ou operator |
Resposta (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Atualiza o estado ou a atribuição de uma conversa.
Corpo do pedido
{'{'}
"status": "closed"
}| Campo | Tipo | Descrição |
|---|---|---|
status | string | open, pending, ou closed |
assignedTo | string|null | UUID do operador a atribuir, ou null para desatribuir |
GET /billing/balance
Obtém o plano atual e o saldo de créditos.
Resposta
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Tratamento de erros
Os erros retornam um código de estado não-2xx com um corpo JSON:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| Estado HTTP | Significado |
|---|---|
401 | Chave API inválida, expirada ou em falta |
400 | Corpo do pedido ou parâmetros inválidos |
404 | Recurso não encontrado (ou pertence a outro tenant) |
500 | Erro de servidor |
Casos de uso comuns
Integração com CRM
Faça polling de novas conversas e sincronize os dados dos visitantes (nome, e-mail, idioma) com o seu CRM. Use o ID da conversa como referência externa.
Seguimentos automatizados
Após o fecho de uma conversa, envie uma mensagem de seguimento via API: «Obrigado pela conversa! Há mais alguma coisa em que possamos ajudar?»
Alternativa a webhooks
Até os webhooks de saída estarem disponíveis, faça polling periódico ao endpoint de conversas para detetar novas mensagens ou mudanças de estado.
Operações em massa
Feche todas as conversas com mais de 7 dias, atribua conversas a operadores com base em lógica externa ou exporte o histórico de conversas para análise.
Limites de débito
A API permite até 60 pedidos por minuto por chave API. Se exceder este limite, receberá uma resposta 429 Too Many Requests. Aguarde e tente novamente com backoff exponencial.
Pronto para integrar?
Crie a sua conta gratuita e gere uma chave API em minutos.
Começar gratuitamente