Pular para o conteúdo principal

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 basehttps://api.hanc.ai
Prefixo de versãoTodas as rotas têm o prefixo /v1
AutenticaçãoChave de API através do cabeçalho x-api-key
FormatoJSON (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.

dica

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 devolvem 400 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_to no formato YYYY-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çãoMétodoEndpoint
Listar chamadasGET/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áriasGET/v1/call/daily-metrics
Estatísticas de sentimentoGET/v1/call/sentiment-stats
Detalhe de custosGET/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ónicaPOST/v1/call/make-phone-call
Fazer uma chamada webPOST/v1/call/make-web-call

Agentes

AçãoMétodoEndpoint
Listar agentesGET/v1/agent/list
Detalhes do agenteGET/v1/agent/:id
Criar agentePOST/v1/agent
Atualizar agentePATCH/v1/agent/:id
Eliminar agenteDELETE/v1/agent/:id
Estatísticas de chamadas do agenteGET/v1/agent/:id/call-stats
Listar modelos de agenteGET/v1/agent/agent_template/list
Listar açõesGET/v1/agent/:id/actions
Adicionar açãoPOST/v1/agent/:id/actions
Atualizar açãoPATCH/v1/agent/:id/actions/:agentActionId
Eliminar açãoDELETE/v1/agent/:id/actions/:agentActionId
Listar ferramentasGET/v1/agent/:id/tools
Adicionar ferramentaPOST/v1/agent/:id/tools
Atualizar ferramentaPATCH/v1/agent/:id/tools/:agentToolId
Eliminar ferramentaDELETE/v1/agent/:id/tools/:agentToolId

Base de Conhecimento

AçãoMétodoEndpoint
Listar bases de conhecimentoGET/v1/knowledge-base/list
Criar (com o primeiro ficheiro)POST/v1/knowledge-base
Adicionar um único ficheiroPOST/v1/knowledge-base/:id/file
Adicionar vários ficheirosPOST/v1/knowledge-base/:id/files
Eliminar ficheiro(s)DELETE/v1/knowledge-base/:id/file
Atribuir agentesPUT/v1/knowledge-base/:id/agents

Números de Telefone

AçãoMétodoEndpoint
Listar númerosGET/v1/phone-number/list
Números disponíveis (por país)GET/v1/phone-number/available
Comprar um númeroPOST/v1/phone-number/buy
Importar do TwilioPOST/v1/phone-number/import-twilio
Ligar ao SIPPATCH/v1/phone-number/connect-to-sip

Vozes · Subscrição · Clientes · Espaços de Trabalho

AçãoMétodoEndpoint
Listar vozesGET/v1/voice/list
Detalhes da subscriçãoGET/v1/subscription
Configurar recarga automáticaPATCH/v1/subscription/auto-top-up
Definir valor de recargaPATCH/v1/subscription/top-up-amount
Listar clientesGET/v1/customer/list
Detalhes do clienteGET/v1/customer/:id
Criar clientePOST/v1/customer
Atualizar clientePATCH/v1/customer/:id
Eliminar clienteDELETE/v1/customer/:id
Listar espaços de trabalhoGET/v1/workspaces/list
Criar espaço de trabalhoPOST/v1/workspaces
Detalhes do espaço de trabalhoGET/v1/workspaces/:id
Atualizar espaço de trabalhoPATCH/v1/workspaces/:id
Eliminar espaço de trabalhoDELETE/v1/workspaces/:id
Convidar membroPOST/v1/workspaces/:workspace_id/invite-member
Remover membroDELETE/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

NomeTipoObrigatórioDescrição
agent_idsstring[]NãoFiltra por um ou mais IDs de agente (repita ou separe por vírgulas).
agent_idstringNãoFiltra por um único agente (legado; prefira agent_ids).
directionenum[]Nãoinbound e/ou outbound.
call_statusenum[]Nãostarted, success, failed, pending.
call_typeenum[]Nãophone, web.
customer_idstringNãoFiltra por cliente.
workspace_idstringNãoFiltra por espaço de trabalho.
date_from / date_tostringNãoFiltro de intervalo (YYYY-MM-DD).
sort_orderenumNãoasc ou desc.
limitnumberNãoMáximo de resultados a devolver.
skipnumberNãoResultados 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 resposta200 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

NomeTipoObrigatórioDescrição
idstringSimID da chamada.

Exemplo de pedido

curl "https://api.hanc.ai/v1/call/507f1f77bcf86cd799439011" \
-H "x-api-key: YOUR_API_KEY"

Exemplo de resposta200 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

NomeTipoObrigatórioDescrição
date_fromstringSimData de início (YYYY-MM-DD).
date_tostringSimData de fim (YYYY-MM-DD, inclusiva).
agent_id / agent_idsstring(s)NãoRestringe a um ou mais agentes.
customer_idstringNãoFiltra por cliente.
workspace_idstringNãoFiltra por espaço de trabalho.
direction / call_status / call_typeenum[]NãoOs mesmos filtros que em Listar chamadas.

Omitir date_from ou date_to devolve 400 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 resposta200 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 resposta200 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

NomeTipoObrigatórioDescrição
agent_idstringSimAgente sobre o qual reportar.
date_fromstringSimData de início.
date_tostringSimData 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 resposta200 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

NomeTipoObrigatórioDescrição
date_fromstringSimData de início.
date_tostringSimData de fim (inclusiva).
group_byenumNãouser (predefinição), agent ou workspace.
customer_idstringNãoFiltra por cliente (acesso de agência).
workspace_idstringNãoFiltra 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 resposta200 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

NomeTipoObrigatórioDescrição
date_fromstringSimData de início.
date_tostringSimData 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

CampoTipoObrigatórioDescrição
agent_idstringSimAgente que vai colocar a chamada.
from_numberstringSimIdentificação do autor da chamada no formato E.164 (ex.: +1234567890).
to_numberstringSimNúmero de telefone do destinatário.
custom_dataobjectNãoDados arbitrários anexados à chamada.
dynamic_contextobjectNãoContexto 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 resposta201 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

CampoTipoObrigatórioDescrição
agent_idstringSimAgente que vai tratar a chamada web.
custom_dataobjectNãoDados arbitrários anexados à chamada.
dynamic_contextobjectNãoContexto 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 resposta201 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

NomeTipoObrigatórioDescrição
customer_idstringNãoLimita a um cliente.
workspace_idstringNãoLimita 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 resposta200 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

NomeTipoObrigatórioDescrição
idstringSimID 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

CampoTipoObrigatórioDescrição
agent_namestringSimNome de apresentação.
llm_idstringSimID do LLM que suporta o agente.
voiceobjectNão{ "voice_id": "<id>" }.
interruption_sensitivitynumberNãoCom que facilidade o agente cede quando interrompido (ex.: 0.5).
call_settingsobjectNãoIdioma, lembretes, tempo limite de silêncio, análise de sentimento, resumo de chamada, max_call_duration_minutes (1–15).
data_retrievalobject[]NãoCampos que o agente recolhe durante uma chamada.
webhook_urlstringNãoURL notificado dos eventos do agente.
is_data_collection_activebooleanNãoAtiva 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 resposta201 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 caminhoid (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 resposta200 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 resposta204 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 caminhoid (ID do agente).

Parâmetros de consulta

NomeTipoObrigatórioDescrição
date_fromstringSimData de início (YYYY-MM-DD).
date_tostringSimData 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 resposta200 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 resposta200 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

CampoTipoObrigatórioDescrição
action_typeenumSimsend_email, send_sms, send_whatsapp ou api_call.
settingsobjectSimConfiguração específica do tipo.
is_activebooleanNãoPredefiniçã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 resposta201 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

CampoTipoObrigatórioDescrição
tool_typeenumSimUm dos tipos de ferramenta suportados acima.
settingsobjectSimConfiguração específica do tipo.
is_activebooleanNãoPredefiniçã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 resposta201 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 resposta200 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

CampoTipoObrigatórioDescrição
filefileSimO primeiro documento (ex.: um PDF).
namestringSimNome da base de conhecimento (1–100 caracteres).
descriptionstringSimDescrição (1–300 caracteres).
folderstringNãoRó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 resposta200 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

CampoTipoObrigatórioDescrição
file_idsstring[]SimArray 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

CampoTipoObrigatórioDescrição
agent_idsstring[]SimIDs 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.

Comprar números no painel

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 resposta200 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

NomeTipoObrigatórioDescrição
country_codestringNãoCódigo de país ISO (predefinição US), ex.: DE, AT, CH.
area_codestringNãoFiltro 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 resposta200 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

CampoTipoObrigatórioDescrição
phone_numberstringSimO número a comprar (E.164).
country_codestringSimPaí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 resposta200 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

CampoTipoObrigatórioDescrição
sidstringSimTwilio 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 resposta200 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

CampoTipoObrigatórioDescrição
phone_numberstringSimO 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

NomeTipoObrigatórioDescrição
languagestringNãoFiltra por idioma, ex.: ?language=de.
providerstringNão11-Labs, openai, qwen ou azure.
customer_idstringNãoInclui 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 resposta200 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 resposta200 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

CampoTipoObrigatórioDescrição
enabledbooleanSimLiga ou desliga a recarga automática.
amountnumberNãoValor 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

CampoTipoObrigatórioDescrição
top_up_amountnumberSimNovo 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 resposta200 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

CampoTipoObrigatórioDescrição
emailstringSimEmail de início de sessão do cliente.
initial_passwordstringSimPalavra-passe inicial (8–128 caracteres).
namestringSimNome da conta/empresa.
user_full_namestringSimNome completo do utilizador do cliente.
visibilityobjectNãoSinalizadores de visibilidade por secção.
opt_out_promotionsbooleanNãoExclui 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 resposta200 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

CampoTipoObrigatórioDescrição
namestringSimNome do espaço de trabalho (2–100 caracteres).
descriptionstringNãoDescriçã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 pedidoname (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

CampoTipoObrigatórioDescrição
emailstringSimEmail 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

CampoTipoObrigatórioDescrição
emailstringSimEmail 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:

FuncionalidadeMotivo
Gestão de chaves de APISegurança — as chaves não podem criar outras chaves
Configuração de números de telefoneRequer configuração interativa
Integração com o Google CalendarRequer autorização interativa
Faturação e pagamentosGerido através do painel

Precisa de ajuda?

Contacte a nossa equipa de suporte em support@hanc.ai para questões relacionadas com a API.