Referência da API
Documentação completa da API para integrar a Hanc.AI nas suas aplicações. Faça a gestão de agentes, obtenha dados de chamadas, coloque chamadas e opere programaticamente todas as partes da plataforma.
Cada secção abaixo dá-lhe o método e caminho HTTP, os parâmetros (de caminho, de consulta e de corpo), um exemplo de pedido pronto a executar e um exemplo de resposta representativo, para que possa integrar sem adivinhar a forma do payload.
Visão geral rápida
| URL base | https://api.hanc.ai |
| Prefixo de versão | Todas as rotas têm o prefixo /v1 |
| Autenticação | Chave de API através do cabeçalho x-api-key |
| Formato | JSON (pedido e resposta) |
Gere uma chave de API em Integração → Chaves de API no painel. Pode ter até 3 chaves por utilizador — consulte a secção Chaves de API em Integrações para orientações de configuração, permissões e segurança.
curl -X GET "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Autenticação
Envie a sua chave no cabeçalho x-api-key em todos os pedidos:
x-api-key: YOUR_API_KEY
A chave resolve para o utilizador que a possui, e cada pedido é automaticamente limitado a esse utilizador — nunca precisa de passar um ID de utilizador. Uma chave em falta ou inválida é rejeitada com 401 Unauthorized / 403 Forbidden.
Mantenha as chaves no lado do servidor. Nunca incorpore uma chave de API num browser, aplicação móvel ou qualquer cliente que o utilizador final possa inspecionar. Se uma chave vazar, revogue-a em Integração → Chaves de API e emita uma nova.
Convenções
Algumas regras aplicam-se a toda a API. Lê-las uma vez poupa-lhe tempo de depuração:
- Prefixo de versão — todos os caminhos começam por
/v1(ex.:https://api.hanc.ai/v1/agent/list). - Os IDs são ObjectIds do Mongo — qualquer
:id(e:agentActionId,:agentToolId, etc.) tem de ser uma cadeia hexadecimal de 24 caracteres. IDs malformados devolvem400 Bad Request. - Os campos de corpo desconhecidos são removidos — a API valida os corpos de pedido e descarta silenciosamente as propriedades que não reconhece, pelo que um erro de escrita no nome de um campo é ignorado em vez de armazenado.
- Datas — os endpoints de análise/exportação recebem
date_from/date_tono formatoYYYY-MM-DD.date_toé inclusivo até ao final desse dia. - Parâmetros de consulta em array — quando um filtro aceita vários valores (ex.:
agent_ids,direction), pode repetir a chave (?direction=inbound&direction=outbound) ou separá-la por vírgulas (?direction=inbound,outbound). - As marcas temporais nas respostas são em milissegundos epoch, salvo se apresentadas como uma cadeia ISO-8601.
Índice de endpoints
Um mapa rápido de tudo o que está disponível. A documentação detalhada de cada um segue abaixo.
Chamadas
| Ação | Método | Endpoint |
|---|---|---|
| Listar chamadas | GET | /v1/call/list |
| Detalhes da chamada (transcrição, sentimento, resumo) | GET | /v1/call/:id |
| Análises gerais (totais num intervalo) | GET | /v1/call/general-metrics |
| Análises diárias | GET | /v1/call/daily-metrics |
| Estatísticas de sentimento | GET | /v1/call/sentiment-stats |
| Detalhe de custos | GET | /v1/call/costs-breakdown |
| Exportar chamadas (CSV) | GET | /v1/call/list/export |
| Exportar custos (CSV) | GET | /v1/call/costs-breakdown/export |
| Fazer uma chamada telefónica | POST | /v1/call/make-phone-call |
| Fazer uma chamada web | POST | /v1/call/make-web-call |
Agentes
| Ação | Método | Endpoint |
|---|---|---|
| Listar agentes | GET | /v1/agent/list |
| Detalhes do agente | GET | /v1/agent/:id |
| Criar agente | POST | /v1/agent |
| Atualizar agente | PATCH | /v1/agent/:id |
| Eliminar agente | DELETE | /v1/agent/:id |
| Estatísticas de chamadas do agente | GET | /v1/agent/:id/call-stats |
| Listar modelos de agente | GET | /v1/agent/agent_template/list |
| Listar ações | GET | /v1/agent/:id/actions |
| Adicionar ação | POST | /v1/agent/:id/actions |
| Atualizar ação | PATCH | /v1/agent/:id/actions/:agentActionId |
| Eliminar ação | DELETE | /v1/agent/:id/actions/:agentActionId |
| Listar ferramentas | GET | /v1/agent/:id/tools |
| Adicionar ferramenta | POST | /v1/agent/:id/tools |
| Atualizar ferramenta | PATCH | /v1/agent/:id/tools/:agentToolId |
| Eliminar ferramenta | DELETE | /v1/agent/:id/tools/:agentToolId |
Base de Conhecimento
| Ação | Método | Endpoint |
|---|---|---|
| Listar bases de conhecimento | GET | /v1/knowledge-base/list |
| Criar (com o primeiro ficheiro) | POST | /v1/knowledge-base |
| Adicionar um único ficheiro | POST | /v1/knowledge-base/:id/file |
| Adicionar vários ficheiros | POST | /v1/knowledge-base/:id/files |
| Eliminar ficheiro(s) | DELETE | /v1/knowledge-base/:id/file |
| Atribuir agentes | PUT | /v1/knowledge-base/:id/agents |
Números de Telefone
| Ação | Método | Endpoint |
|---|---|---|
| Listar números | GET | /v1/phone-number/list |
| Números disponíveis (por país) | GET | /v1/phone-number/available |
| Comprar um número | POST | /v1/phone-number/buy |
| Importar do Twilio | POST | /v1/phone-number/import-twilio |
| Ligar ao SIP | PATCH | /v1/phone-number/connect-to-sip |
Vozes · Subscrição · Clientes · Espaços de Trabalho
| Ação | Método | Endpoint |
|---|---|---|
| Listar vozes | GET | /v1/voice/list |
| Detalhes da subscrição | GET | /v1/subscription |
| Configurar recarga automática | PATCH | /v1/subscription/auto-top-up |
| Definir valor de recarga | PATCH | /v1/subscription/top-up-amount |
| Listar clientes | GET | /v1/customer/list |
| Detalhes do cliente | GET | /v1/customer/:id |
| Criar cliente | POST | /v1/customer |
| Atualizar cliente | PATCH | /v1/customer/:id |
| Eliminar cliente | DELETE | /v1/customer/:id |
| Listar espaços de trabalho | GET | /v1/workspaces/list |
| Criar espaço de trabalho | POST | /v1/workspaces |
| Detalhes do espaço de trabalho | GET | /v1/workspaces/:id |
| Atualizar espaço de trabalho | PATCH | /v1/workspaces/:id |
| Eliminar espaço de trabalho | DELETE | /v1/workspaces/:id |
| Convidar membro | POST | /v1/workspaces/:workspace_id/invite-member |
| Remover membro | DELETE | /v1/workspaces/:workspace_id/remove-member |
Chamadas
Faça a gestão e análise de chamadas de voz: liste e inspecione chamadas (transcrição, sentimento, resumo), obtenha métricas agregadas, exporte relatórios CSV e coloque chamadas telefónicas e web de saída.
Listar chamadas
GET /v1/call/list
Liste as chamadas da sua conta com filtragem, ordenação e paginação.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_ids | string[] | Não | Filtra por um ou mais IDs de agente (repita ou separe por vírgulas). |
agent_id | string | Não | Filtra por um único agente (legado; prefira agent_ids). |
direction | enum[] | Não | inbound e/ou outbound. |
call_status | enum[] | Não | started, success, failed, pending. |
call_type | enum[] | Não | phone, web. |
customer_id | string | Não | Filtra por cliente. |
workspace_id | string | Não | Filtra por espaço de trabalho. |
date_from / date_to | string | Não | Filtro de intervalo (YYYY-MM-DD). |
sort_order | enum | Não | asc ou desc. |
limit | number | Não | Máximo de resultados a devolver. |
skip | number | Não | Resultados a ignorar (deslocamento de paginação). |
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/list" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "agent_ids=507f1f77bcf86cd799439042" \
--data-urlencode "direction=inbound" \
--data-urlencode "sort_order=desc" \
--data-urlencode "limit=10"
Exemplo de resposta — 200 OK
[
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"agent_name": "Customer Support Agent",
"call_status": "success",
"call_from": "+12345678900",
"call_to": "+12345678911",
"direction": "inbound",
"start_timestamp": 1703302407333,
"end_timestamp": 1703302428855,
"recording_url": "https://recordings.example.com/12345",
"disconnection_reason": "user_hangup",
"sentiment": { "sentiment": "positive", "explanation": "Friendly, helpful tone." },
"call_summary": "Customer issue resolved.",
"task_achieved": true
}
]
Obter detalhes da chamada
GET /v1/call/:id
Obtenha os detalhes completos de uma chamada — transcrição, sentimento, resumo, créditos e métricas de desempenho.
Parâmetros de caminho
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID da chamada. |
Exemplo de pedido
curl "https://api.hanc.ai/v1/call/507f1f77bcf86cd799439011" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"agent_name": "Customer Support Agent",
"call_status": "success",
"call_from": "+12345678900",
"call_to": "+12345678911",
"direction": "inbound",
"start_timestamp": 1703302407333,
"end_timestamp": 1703302428855,
"recording_url": "https://recordings.example.com/12345",
"transcription": [
{ "speaker": "agent", "content": "Hello, how can I help?", "timestamp": 1703302407333 },
{ "speaker": "user", "content": "I need help with my order.", "timestamp": 1703302410000 }
],
"sentiment": { "sentiment": "positive", "explanation": "Friendly, helpful tone." },
"call_summary": "Customer issue resolved.",
"task_achieved": true,
"call_credits_details": {
"phone_call_credits": 1,
"web_call_credits": 0,
"text_message_credits": 0,
"call_forwarding_credits": 0
}
}
Devolve 404 se a chamada não existir ou não pertencer à sua conta.
Métricas gerais
GET /v1/call/general-metrics
Totais agregados (contagem de chamadas, duração total e média) num intervalo de datas.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_from | string | Sim | Data de início (YYYY-MM-DD). |
date_to | string | Sim | Data de fim (YYYY-MM-DD, inclusiva). |
agent_id / agent_ids | string(s) | Não | Restringe a um ou mais agentes. |
customer_id | string | Não | Filtra por cliente. |
workspace_id | string | Não | Filtra por espaço de trabalho. |
direction / call_status / call_type | enum[] | Não | Os mesmos filtros que em Listar chamadas. |
Omitir
date_fromoudate_todevolve400 Bad Request.
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/general-metrics" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31"
Exemplo de resposta — 200 OK
{ "total_calls": 128, "total_duration": 45230, "average_duration": 353 }
Métricas diárias
GET /v1/call/daily-metrics
Duração total de chamadas por dia num intervalo de datas — ideal para criar gráficos de tendências.
Parâmetros de consulta — iguais aos de Métricas gerais (date_from/date_to obrigatórios, mais os filtros opcionais de agente/cliente/espaço de trabalho/direção/estado/tipo).
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/daily-metrics" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-07"
Exemplo de resposta — 200 OK
[
{ "date": "2026-05-01", "total_duration": 5400 },
{ "date": "2026-05-02", "total_duration": 7320 },
{ "date": "2026-05-03", "total_duration": 0 }
]
Estatísticas de sentimento
GET /v1/call/sentiment-stats
Contagens de chamadas por sentimento para um agente num intervalo de datas.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_id | string | Sim | Agente sobre o qual reportar. |
date_from | string | Sim | Data de início. |
date_to | string | Sim | Data de fim (inclusiva). |
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/sentiment-stats" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "agent_id=507f1f77bcf86cd799439042" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31"
Exemplo de resposta — 200 OK
{ "positive": 84, "negative": 12, "neutral": 32 }
Detalhe de custos
GET /v1/call/costs-breakdown
Detalhe de custo/utilização (chamadas, minutos, créditos, tokens, detalhe por modelo) agrupado por utilizador, agente ou espaço de trabalho.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_from | string | Sim | Data de início. |
date_to | string | Sim | Data de fim (inclusiva). |
group_by | enum | Não | user (predefinição), agent ou workspace. |
customer_id | string | Não | Filtra por cliente (acesso de agência). |
workspace_id | string | Não | Filtra por espaço de trabalho. |
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/costs-breakdown" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31" \
--data-urlencode "group_by=agent"
Exemplo de resposta — 200 OK
{
"breakdown": [
{
"agent_id": "507f1f77bcf86cd799439042",
"agent_name": "Customer Support Agent",
"total_calls": 64,
"total_duration_minutes": 380,
"credits": { "phone_call": 60, "web_call": 4, "text_message": 0, "call_forwarding": 1, "total": 65 },
"tokens": { "input": 920000, "output": 120000, "total": 1040000 }
}
],
"totals": { "total_calls": 64, "total_duration_minutes": 380, "total_credits": 65, "total_tokens": 1040000 },
"period": { "from": 1746057600000, "to": 1748735999999 }
}
Exportar chamadas (CSV)
GET /v1/call/list/export
Descarregue todas as chamadas de um intervalo de datas como ficheiro CSV (com detalhe de tokens por chamada e por modelo).
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_from | string | Sim | Data de início. |
date_to | string | Sim | Data de fim (inclusiva). |
Resposta — um ficheiro CSV (Content-Type: text/csv), servido como anexo com o nome call-details_<date_from>_<date_to>.csv.
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/list/export" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31" \
-o call-details.csv
Exportar custos (CSV)
GET /v1/call/costs-breakdown/export
Descarregue o detalhe de custos como ficheiro CSV.
Parâmetros de consulta — iguais aos de Detalhe de custos (date_from/date_to obrigatórios; opcionais group_by, customer_id, workspace_id).
Resposta — um ficheiro CSV servido como costs-breakdown_<date_from>_<date_to>.csv.
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/call/costs-breakdown/export" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31" \
--data-urlencode "group_by=agent" \
-o costs-breakdown.csv
Fazer uma chamada telefónica
POST /v1/call/make-phone-call
Coloque uma chamada telefónica de saída a partir de um dos seus agentes.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_id | string | Sim | Agente que vai colocar a chamada. |
from_number | string | Sim | Identificação do autor da chamada no formato E.164 (ex.: +1234567890). |
to_number | string | Sim | Número de telefone do destinatário. |
custom_data | object | Não | Dados arbitrários anexados à chamada. |
dynamic_context | object | Não | Contexto passado para a conversa (ex.: nome do cliente). |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/call/make-phone-call" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "507f1f77bcf86cd799439042",
"from_number": "+1234567890",
"to_number": "+19876543210",
"dynamic_context": { "customer_name": "Jane", "order_id": "12345" }
}'
Exemplo de resposta — 201 Created
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"call_from": "+1234567890",
"call_to": "+19876543210",
"direction": "outbound",
"start_timestamp": 1703302407333
}
Fazer uma chamada web
POST /v1/call/make-web-call
Crie uma sessão de chamada de browser/WebRTC para um dos seus agentes.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_id | string | Sim | Agente que vai tratar a chamada web. |
custom_data | object | Não | Dados arbitrários anexados à chamada. |
dynamic_context | object | Não | Contexto passado para a conversa. |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/call/make-web-call" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_id": "507f1f77bcf86cd799439042", "dynamic_context": { "topic": "billing" } }'
Exemplo de resposta — 201 Created
{
"_id": "507f1f77bcf86cd799439077",
"call_type": "web",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"start_timestamp": 1703302407333
}
Agentes
Crie e faça a gestão de agentes de voz, das suas ações (o que fazem durante uma chamada — enviar email/SMS/WhatsApp, chamar a sua API) e das suas ferramentas (capacidades como pesquisa RAG, marcação de consultas, reencaminhamento de chamadas, integrações de calendário/CRM).
Listar agentes
GET /v1/agent/list
Devolve todos os agentes que pertencem à sua conta.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
customer_id | string | Não | Limita a um cliente. |
workspace_id | string | Não | Limita a um espaço de trabalho. |
Exemplo de pedido
curl "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"agent_name": "Customer Support Agent",
"llm_id": "60d21b4667d0d8992e610c86",
"voice": { "voice_id": "60d21b4667d0d8992e610c87" },
"interruption_sensitivity": 1.0,
"call_settings": { "language": "en-US", "sentiment_analysis": false, "call_summary": false },
"status": "active",
"workspace_id": "60d21b4667d0d8992e610c87",
"knowledge_base": ["60d21b4667d0d8992e610c89"]
}
]
Obter um agente
GET /v1/agent/:id
Devolve um único agente.
Parâmetros de caminho
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do agente. |
Exemplo de pedido
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Devolve o objeto do agente (a mesma forma de um item de Listar agentes), ou 404 se não for encontrado.
Criar um agente
POST /v1/agent
Cria um novo agente. Apenas agent_name e llm_id são obrigatórios — tudo o resto é opcional e recorre a predefinições sensatas.
Parâmetros de consulta — opcionais customer_id, workspace_id para associar o novo agente.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_name | string | Sim | Nome de apresentação. |
llm_id | string | Sim | ID do LLM que suporta o agente. |
voice | object | Não | { "voice_id": "<id>" }. |
interruption_sensitivity | number | Não | Com que facilidade o agente cede quando interrompido (ex.: 0.5). |
call_settings | object | Não | Idioma, lembretes, tempo limite de silêncio, análise de sentimento, resumo de chamada, max_call_duration_minutes (1–15). |
data_retrieval | object[] | Não | Campos que o agente recolhe durante uma chamada. |
webhook_url | string | Não | URL notificado dos eventos do agente. |
is_data_collection_active | boolean | Não | Ativa o formulário de recolha de dados. |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/agent" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "Customer Support Agent",
"llm_id": "507f1f77bcf86cd799439033",
"voice": { "voice_id": "507f1f77bcf86cd799439035" },
"interruption_sensitivity": 0.5,
"call_settings": { "language": "en-US", "max_call_duration_minutes": 10 }
}'
Exemplo de resposta — 201 Created (o objeto do agente criado).
Atualizar um agente
PATCH /v1/agent/:id
Atualiza parcialmente um agente. Todos os campos do corpo são opcionais — envie apenas o que quer alterar.
Parâmetros de caminho — id (ID do agente).
Corpo do pedido — qualquer subconjunto dos campos de criação, mais folder, status (ex.: active), is_customer_memory_active, widget_settings, callback_settings. Dentro de call_settings também pode definir recording_enabled, stt_languages (até 4 códigos BCP-47) e max_call_duration_minutes.
Exemplo de pedido
curl -X PATCH "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_name": "Support Agent v2", "call_settings": { "language": "en-GB", "recording_enabled": false } }'
Exemplo de resposta — 200 OK (o objeto do agente atualizado).
Eliminar um agente
DELETE /v1/agent/:id
Elimina um agente.
Exemplo de pedido
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 204 No Content (corpo vazio).
Estatísticas de chamadas do agente
GET /v1/agent/:id/call-stats
Contagens de chamadas por dia para um agente num intervalo de datas.
Parâmetros de caminho — id (ID do agente).
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_from | string | Sim | Data de início (YYYY-MM-DD). |
date_to | string | Sim | Data de fim (YYYY-MM-DD). |
Exemplo de pedido
curl -G "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/call-stats" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "date_from=2026-05-01" \
--data-urlencode "date_to=2026-05-31"
Exemplo de resposta — 200 OK
[
{ "date": "2026-05-28", "total_calls": 10 },
{ "date": "2026-05-29", "total_calls": 4 }
]
Listar modelos de agente
GET /v1/agent/agent_template/list
Devolve o catálogo de modelos de agente pré-construídos que pode clonar. Sem parâmetros.
Exemplo de pedido
curl "https://api.hanc.ai/v1/agent/agent_template/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"icon_url": "https://example.com/icon.png",
"description": "A ready-made receptionist agent.",
"agent": { "agent_name": "Receptionist", "call_settings": { "language": "en-US" } },
"llm": { "model": "gpt-4o-mini", "begin_message": "Hello, how can I assist you today?" }
}
]
Ações do agente
As ações são coisas que um agente executa durante uma chamada. Valores action_type suportados: send_email, send_sms, send_whatsapp, api_call. A forma do objeto settings depende do tipo.
Listar ações
GET /v1/agent/:id/actions
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions" \
-H "x-api-key: YOUR_API_KEY"
Devolve um array de objetos de ação.
Adicionar uma ação
POST /v1/agent/:id/actions
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
action_type | enum | Sim | send_email, send_sms, send_whatsapp ou api_call. |
settings | object | Sim | Configuração específica do tipo. |
is_active | boolean | Não | Predefinição true. |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action_type": "send_email",
"settings": {
"name": "Welcome Email",
"subject": "Welcome!",
"message": "Thank you for joining us.",
"direct_recipients": ["user@example.com"]
}
}'
Exemplo de resposta — 201 Created
{
"_id": "60f5b1a8d1b9f7c1d0c0a6c6",
"agent_id": "60d21b4667d0d8992e610c85",
"action_type": "send_email",
"settings": { "name": "Welcome Email", "subject": "Welcome!", "message": "Thank you for joining us.", "direct_recipients": ["user@example.com"] },
"is_active": true
}
Atualizar uma ação
PATCH /v1/agent/:id/actions/:agentActionId
Atualiza os settings e/ou is_active de uma ação anexada. Ambos os campos do corpo são opcionais.
curl -X PATCH "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions/60f5b1a8d1b9f7c1d0c0a6c6" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'
Devolve 200 OK com o objeto da ação atualizado.
Eliminar uma ação
DELETE /v1/agent/:id/actions/:agentActionId
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions/60f5b1a8d1b9f7c1d0c0a6c6" \
-H "x-api-key: YOUR_API_KEY"
Devolve 204 No Content.
Ferramentas do agente
As ferramentas dão ao agente capacidades adicionais. Valores tool_type suportados: api_rag, appointment_booking, call_forwarding, end_call, google_calendar, outlook_calendar, etermin, resmio, hubspot_crm, agent_transfer, mcp. A forma do objeto settings depende do tipo.
etermin e resmio são ferramentas de marcação de consultas/reservas em tempo real: o agente verifica a disponibilidade e marca, reagenda ou cancela diretamente na conta eTermin ou resmio ligada. Ambas exigem que a integração correspondente esteja primeiro ligada na conta.
Listar ferramentas
GET /v1/agent/:id/tools
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools" \
-H "x-api-key: YOUR_API_KEY"
Devolve um array de objetos de ferramenta.
Adicionar uma ferramenta
POST /v1/agent/:id/tools
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tool_type | enum | Sim | Um dos tipos de ferramenta suportados acima. |
settings | object | Sim | Configuração específica do tipo. |
is_active | boolean | Não | Predefinição true. |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tool_type": "call_forwarding",
"settings": { "name": "Transfer to human", "phone_number": "+1234567890" }
}'
Exemplo de resposta — 201 Created
{
"_id": "60f5b1a8d1b9f7c1d0c0a6c6",
"agent_id": "60d21b4667d0d8992e610c85",
"tool_type": "call_forwarding",
"settings": { "name": "Transfer to human", "phone_number": "+1234567890" },
"is_active": true
}
Atualizar uma ferramenta
PATCH /v1/agent/:id/tools/:agentToolId
Atualiza os settings e/ou is_active de uma ferramenta anexada (ambos opcionais).
curl -X PATCH "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools/60f5b1a8d1b9f7c1d0c0a6c6" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'
Devolve 200 OK com o objeto da ferramenta atualizado.
Eliminar uma ferramenta
DELETE /v1/agent/:id/tools/:agentToolId
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools/60f5b1a8d1b9f7c1d0c0a6c6" \
-H "x-api-key: YOUR_API_KEY"
Devolve 204 No Content.
Base de Conhecimento
Carregue documentos que os seus agentes podem pesquisar durante uma chamada, e controle que agentes usam cada base de conhecimento. Os carregamentos de ficheiros usam multipart/form-data.
Listar bases de conhecimento
GET /v1/knowledge-base/list
Parâmetros de consulta — opcionais customer_id, workspace_id.
curl "https://api.hanc.ai/v1/knowledge-base/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"knowledge_base_name": "Company Policies",
"knowledge_base_description": "Refund, shipping and warranty policies.",
"files": [
{ "_id": "60d21b4667d0d8992e610c90", "file_name": "policies.pdf", "file_size": 2048000, "uploaded_at": "2026-05-24T07:34:23.980Z" }
],
"agent_names": ["Sales Agent", "Support Bot"]
}
]
Criar uma base de conhecimento
POST /v1/knowledge-base
Cria uma base de conhecimento juntamente com o seu primeiro ficheiro. Este é um pedido multipart/form-data — não existe uma criação "só de corpo".
Parâmetros de consulta — opcionais customer_id, workspace_id.
Campos de formulário
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | file | Sim | O primeiro documento (ex.: um PDF). |
name | string | Sim | Nome da base de conhecimento (1–100 caracteres). |
description | string | Sim | Descrição (1–300 caracteres). |
folder | string | Não | Rótulo de pasta/categoria (0–50 caracteres). |
Exemplo de pedido
curl -X POST "https://api.hanc.ai/v1/knowledge-base" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@./policies.pdf" \
-F "name=Company Policies" \
-F "description=Refund, shipping and warranty policies." \
-F "folder=Sales"
Exemplo de resposta — 200 OK (a base de conhecimento criada, mesma forma que um item da lista).
Adicionar um único ficheiro
POST /v1/knowledge-base/:id/file
Adiciona um ficheiro a uma base de conhecimento existente. Nome do campo multipart: file.
curl -X POST "https://api.hanc.ai/v1/knowledge-base/60d21b4667d0d8992e610c85/file" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@./addendum.pdf"
Devolve 200 OK com a base de conhecimento atualizada.
Adicionar vários ficheiros
POST /v1/knowledge-base/:id/files
Adiciona vários ficheiros de uma vez. Nome do campo multipart: files (repita para cada ficheiro). Parâmetros de consulta opcionais customer_id, workspace_id.
curl -X POST "https://api.hanc.ai/v1/knowledge-base/60d21b4667d0d8992e610c85/files" \
-H "x-api-key: YOUR_API_KEY" \
-F "files=@./doc1.pdf" \
-F "files=@./doc2.pdf"
Devolve 200 OK com a base de conhecimento atualizada.
Eliminar ficheiro(s)
DELETE /v1/knowledge-base/:id/file
Remove um ou mais ficheiros por ID. Apesar do caminho no singular, o corpo recebe um array.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file_ids | string[] | Sim | Array não vazio de IDs de ficheiros a eliminar. |
curl -X DELETE "https://api.hanc.ai/v1/knowledge-base/60d21b4667d0d8992e610c85/file" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "file_ids": ["60c72b2f9b1e8b001c8e4d3a", "60c72b2f9b1e8b001c8e4d3b"] }'
Devolve 200 OK.
Atribuir agentes
PUT /v1/knowledge-base/:id/agents
Define (substitui) a lista completa de agentes que usam esta base de conhecimento.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agent_ids | string[] | Sim | IDs de agentes que devem usar esta base de conhecimento. |
curl -X PUT "https://api.hanc.ai/v1/knowledge-base/60d21b4667d0d8992e610c85/agents" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_ids": ["60d21b4667d0d8992e610c85"] }'
Devolve 200 OK.
Números de Telefone
Liste os seus números, encontre números disponíveis para comprar, adquira um, importe números de uma conta Twilio ligada, ou ligue um número a um SIP trunk.
A compra de números no painel vai além do que estes endpoints expõem. Estão disponíveis números instantâneos e sem papelada na Áustria, Alemanha, Suíça, EUA e Canadá; todos os outros países usam um fluxo guiado de autosserviço onde submete os seus próprios documentos regulatórios (e pode guardá-los como rascunho para retomar mais tarde). O ecrã de compra oferece os tipos local, móvel, nacional e gratuito — mais números avançados (+€2/mês) e números de chamadas WhatsApp. O BYO SIP é neutro em relação ao fornecedor (sipgate, Placetel, TENIOS, easybell, Zadarma, Telnyx, trunks personalizados — não apenas importação do Twilio). Consulte Números de Telefone para o fluxo completo.
Listar números de telefone
GET /v1/phone-number/list
Parâmetros de consulta — todos opcionais: inbound_agent_id, outbound_agent_id, customer_id, workspace_id (e user_id, predefinido como você).
curl "https://api.hanc.ai/v1/phone-number/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"phone_number": "+1234567890",
"formatted_number": "+1 (234) 567-8900",
"country": "US",
"provider": "twilio",
"status": "active",
"inbound_agent_id": "64bfb7b3f3d9ab3f1e2c109c",
"inbound_agent_name": "Receptionist"
}
]
Números disponíveis
GET /v1/phone-number/available
Lista os números disponíveis para compra num país.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
country_code | string | Não | Código de país ISO (predefinição US), ex.: DE, AT, CH. |
area_code | string | Não | Filtro numérico de indicativo de área. |
curl -G "https://api.hanc.ai/v1/phone-number/available" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "country_code=US" \
--data-urlencode "area_code=415"
Exemplo de resposta — 200 OK
[
{ "phone_number": "+14155550100", "formatted_number": "+1 (415) 555-0100", "country": "US", "area_code": "415", "setup_fee": 2, "subscription": 2, "currency": "EUR" }
]
Comprar um número
POST /v1/phone-number/buy
Compra um número específico. Parâmetros de consulta opcionais customer_id, workspace_id.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
phone_number | string | Sim | O número a comprar (E.164). |
country_code | string | Sim | País do número (ex.: US). |
curl -X POST "https://api.hanc.ai/v1/phone-number/buy" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+14155550100", "country_code": "US" }'
Exemplo de resposta — 200 OK
{
"message": "Phone number purchased successfully!",
"phone_number": { "_id": "507f1f77bcf86cd799439011", "phone_number": "+14155550100", "country": "US", "provider": "twilio", "status": "active" }
}
Importar do Twilio
POST /v1/phone-number/import-twilio
Importa números de uma conta Twilio ligada. Parâmetros de consulta opcionais customer_id, workspace_id.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sid | string | Sim | Twilio Account SID (AC…). |
curl -X POST "https://api.hanc.ai/v1/phone-number/import-twilio" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }'
Exemplo de resposta — 200 OK (o registo do número de telefone importado).
Ligar ao SIP
PATCH /v1/phone-number/connect-to-sip
Liga um número existente a um SIP trunk.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
phone_number | string | Sim | O número a ligar (E.164). |
curl -X PATCH "https://api.hanc.ai/v1/phone-number/connect-to-sip" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+1234567890" }'
Devolve 200 OK (corpo vazio).
Vozes
Listar vozes
GET /v1/voice/list
Lista as vozes disponíveis. Filtre por idioma ou fornecedor, e inclua os clones privados de um cliente.
Parâmetros de consulta
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
language | string | Não | Filtra por idioma, ex.: ?language=de. |
provider | string | Não | 11-Labs, openai, qwen ou azure. |
customer_id | string | Não | Inclui também os clones de voz privados deste cliente. |
curl -G "https://api.hanc.ai/v1/voice/list" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "language=de"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"voice_id": "voice_12345",
"name": "Emma",
"gender": "female",
"accent": "British",
"languages": ["english", "spanish"],
"provider": "11-Labs",
"sample_url": "https://example.com/sample.mp3"
}
]
Subscrição
Detalhes da subscrição
GET /v1/subscription
Devolve a sua subscrição atual, incluindo saldos de créditos e definições de recarga.
curl "https://api.hanc.ai/v1/subscription" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
{
"_id": "507f191e810c19729de860ea",
"payment_plan_id": "507f191e810c19729de860ec",
"currency": "EUR",
"package_credits": 1000,
"package_credits_used": 100,
"auto_top_up_enabled": false,
"top_up_amount": 50,
"extra_credits_payed": 1000,
"extra_credits_used": 100,
"billing_cycle": "monthly",
"next_credit_reset": "2026-06-15T03:00:00.000Z",
"is_cancelled": false
}
Devolve 404 se não existir qualquer registo de subscrição.
Configurar recarga automática
PATCH /v1/subscription/auto-top-up
Ativa ou desativa a recarga automática de créditos.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
enabled | boolean | Sim | Liga ou desliga a recarga automática. |
amount | number | Não | Valor de recarga (20–1000). Defina ao ativar. |
curl -X PATCH "https://api.hanc.ai/v1/subscription/auto-top-up" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "enabled": true, "amount": 50 }'
Devolve 200 OK com a subscrição atualizada.
Definir valor de recarga
PATCH /v1/subscription/top-up-amount
Atualiza o valor de recarga configurado.
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
top_up_amount | number | Sim | Novo valor (1–100). |
curl -X PATCH "https://api.hanc.ai/v1/subscription/top-up-amount" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "top_up_amount": 10 }'
Devolve 200 OK com a subscrição atualizada.
Clientes
Faça a gestão dos clientes da sua agência. Estes endpoints exigem que a sua conta pertença a uma agência.
Listar clientes
GET /v1/customer/list
curl "https://api.hanc.ai/v1/customer/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"email": "customer@example.com",
"name": "John Doe",
"account_status": "active",
"agents_count": 3
}
]
Detalhes do cliente
GET /v1/customer/:id
curl "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Devolve o objeto do cliente, ou 404 se não for encontrado.
Criar um cliente
POST /v1/customer
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | Email de início de sessão do cliente. |
initial_password | string | Sim | Palavra-passe inicial (8–128 caracteres). |
name | string | Sim | Nome da conta/empresa. |
user_full_name | string | Sim | Nome completo do utilizador do cliente. |
visibility | object | Não | Sinalizadores de visibilidade por secção. |
opt_out_promotions | boolean | Não | Exclui o cliente das mensagens promocionais. |
curl -X POST "https://api.hanc.ai/v1/customer" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "customer@example.com",
"initial_password": "Password123!",
"name": "Acme Co.",
"user_full_name": "John Doe"
}'
Devolve 201 Created com o novo cliente. Devolve 400 se o email já existir ou se a sua conta não fizer parte de uma agência.
Atualizar um cliente
PATCH /v1/customer/:id
Corpo do pedido — todos opcionais: name, email, phone, address.
curl -X PATCH "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Acme Corporation", "phone": "+1234567890" }'
Devolve 200 OK com o cliente atualizado.
Eliminar um cliente
DELETE /v1/customer/:id
curl -X DELETE "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta
{ "message": "Customer deleted successfully" }
Espaços de Trabalho
Agrupe agentes, números e bases de conhecimento em espaços de trabalho e faça a gestão dos seus membros.
Listar espaços de trabalho
GET /v1/workspaces/list
Parâmetro de consulta opcional customer_id.
curl "https://api.hanc.ai/v1/workspaces/list" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta — 200 OK
[
{
"_id": "64b1f2d2f3d92c5b8c5e1e22",
"name": "Workspace A",
"description": "For the A team.",
"owner_user_id": "64b1f2d2f3d92c5b8c5e1e10",
"members": [
{ "user_id": "64b1f2d2f3d92c5b8c5e1e11", "full_name": "John Doe", "email": "john.doe@example.com" }
]
}
]
Criar um espaço de trabalho
POST /v1/workspaces
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do espaço de trabalho (2–100 caracteres). |
description | string | Não | Descrição (0–500 caracteres). |
curl -X POST "https://api.hanc.ai/v1/workspaces" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Development Team", "description": "For the dev team." }'
Devolve 201 Created com o espaço de trabalho.
Detalhes do espaço de trabalho
GET /v1/workspaces/:id
curl "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Devolve o objeto do espaço de trabalho.
Atualizar um espaço de trabalho
PATCH /v1/workspaces/:id
Corpo do pedido — name (2–100) e/ou description (0–500).
curl -X PATCH "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Renamed Workspace" }'
Devolve 200 OK com o espaço de trabalho atualizado.
Eliminar um espaço de trabalho
DELETE /v1/workspaces/:id
curl -X DELETE "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Exemplo de resposta
{ "message": "Workspace deleted successfully" }
Convidar um membro
POST /v1/workspaces/:workspace_id/invite-member
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | Email do utilizador a convidar. |
curl -X POST "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22/invite-member" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "email": "teammate@example.com" }'
Devolve 201 Created com o espaço de trabalho (o novo membro aparece em members).
Remover um membro
DELETE /v1/workspaces/:workspace_id/remove-member
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | Email do membro a remover. |
curl -X DELETE "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22/remove-member" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "email": "teammate@example.com" }'
Devolve 200 OK com o espaço de trabalho atualizado.
O que não está disponível através da API
Algumas operações só estão disponíveis através do painel:
| Funcionalidade | Motivo |
|---|---|
| Gestão de chaves de API | Segurança — as chaves não podem criar outras chaves |
| Configuração de números de telefone | Requer configuração interativa |
| Integração com o Google Calendar | Requer autorização interativa |
| Faturação e pagamentos | Gerido através do painel |
Precisa de ajuda?
Contacte a nossa equipa de suporte em support@hanc.ai para questões relacionadas com a API.