Referencia de la API
Documentación completa de la API para integrar Hanc.AI en tus aplicaciones. Gestiona agentes, obtén datos de llamadas, realiza llamadas y opera cada parte de la plataforma de forma programática.
Cada sección de abajo te ofrece el método y la ruta HTTP, los parámetros (de ruta, de consulta y de cuerpo), una petición de ejemplo lista para ejecutar y una respuesta de ejemplo representativa para que puedas integrar sin tener que adivinar la forma de las cargas útiles.
Resumen rápido
| URL base | https://api.hanc.ai |
| Prefijo de versión | Todas las rutas llevan el prefijo /v1 |
| Autenticación | Clave de API mediante la cabecera x-api-key |
| Formato | JSON (petición y respuesta) |
Genera una clave de API desde Integración → Claves de API en el panel. Puedes tener hasta 3 claves por usuario — consulta la sección Claves de API en Integraciones para la configuración, los permisos y las recomendaciones de seguridad.
curl -X GET "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Autenticación
Envía tu clave en la cabecera x-api-key en cada petición:
x-api-key: YOUR_API_KEY
La clave se resuelve al usuario que la posee, y cada petición se acota automáticamente a ese usuario — nunca pasas un ID de usuario. Una clave ausente o inválida se rechaza con 401 Unauthorized / 403 Forbidden.
Mantén las claves en el lado del servidor. Nunca incrustes una clave de API en un navegador, una aplicación móvil o cualquier cliente que el usuario final pueda inspeccionar. Si una clave se filtra, revócala en Integración → Claves de API y emite una nueva.
Convenciones
Unas cuantas reglas se aplican a toda la API. Leerlas una vez te ahorrará tiempo de depuración:
- Prefijo de versión — cada ruta empieza por
/v1(p. ej.https://api.hanc.ai/v1/agent/list). - Los ID son ObjectIds de Mongo — cualquier
:id(y:agentActionId,:agentToolId, etc.) debe ser una cadena hexadecimal de 24 caracteres. Los ID mal formados devuelven400 Bad Request. - Los campos de cuerpo desconocidos se descartan — la API valida los cuerpos de las peticiones y descarta silenciosamente las propiedades que no reconoce, de modo que un error tipográfico en el nombre de un campo se ignora en lugar de almacenarse.
- Fechas — los endpoints de analíticas/exportación toman
date_from/date_tocomoYYYY-MM-DD.date_toes inclusivo hasta el final de ese día. - Parámetros de consulta de tipo array — cuando un filtro admite varios valores (p. ej.
agent_ids,direction), puedes repetir la clave (?direction=inbound&direction=outbound) o separarla por comas (?direction=inbound,outbound). - Las marcas de tiempo en las respuestas son milisegundos epoch salvo que se muestren como una cadena ISO‑8601.
Índice de endpoints
Un mapa rápido de todo lo disponible. La documentación detallada de cada uno sigue a continuación.
Llamadas
| Acción | Método | Endpoint |
|---|---|---|
| Listar llamadas | GET | /v1/call/list |
| Detalles de la llamada (transcripción, sentimiento, resumen) | GET | /v1/call/:id |
| Analíticas generales (totales en un rango) | GET | /v1/call/general-metrics |
| Analíticas diarias | GET | /v1/call/daily-metrics |
| Estadísticas de sentimiento | GET | /v1/call/sentiment-stats |
| Desglose de costes | GET | /v1/call/costs-breakdown |
| Exportar llamadas (CSV) | GET | /v1/call/list/export |
| Exportar costes (CSV) | GET | /v1/call/costs-breakdown/export |
| Realizar una llamada telefónica | POST | /v1/call/make-phone-call |
| Realizar una llamada web | POST | /v1/call/make-web-call |
Agentes
| Acción | Método | Endpoint |
|---|---|---|
| Listar agentes | GET | /v1/agent/list |
| Detalles del agente | GET | /v1/agent/:id |
| Crear agente | POST | /v1/agent |
| Actualizar agente | PATCH | /v1/agent/:id |
| Eliminar agente | DELETE | /v1/agent/:id |
| Estadísticas de llamadas del agente | GET | /v1/agent/:id/call-stats |
| Listar plantillas de agente | GET | /v1/agent/agent_template/list |
| Listar acciones | GET | /v1/agent/:id/actions |
| Añadir acción | POST | /v1/agent/:id/actions |
| Actualizar acción | PATCH | /v1/agent/:id/actions/:agentActionId |
| Eliminar acción | DELETE | /v1/agent/:id/actions/:agentActionId |
| Listar herramientas | GET | /v1/agent/:id/tools |
| Añadir herramienta | POST | /v1/agent/:id/tools |
| Actualizar herramienta | PATCH | /v1/agent/:id/tools/:agentToolId |
| Eliminar herramienta | DELETE | /v1/agent/:id/tools/:agentToolId |
Base de conocimiento
| Acción | Método | Endpoint |
|---|---|---|
| Listar bases de conocimiento | GET | /v1/knowledge-base/list |
| Crear (con el primer archivo) | POST | /v1/knowledge-base |
| Añadir un solo archivo | POST | /v1/knowledge-base/:id/file |
| Añadir varios archivos | POST | /v1/knowledge-base/:id/files |
| Eliminar archivo(s) | DELETE | /v1/knowledge-base/:id/file |
| Asignar agentes | PUT | /v1/knowledge-base/:id/agents |
Números de teléfono
| Acción | Método | Endpoint |
|---|---|---|
| Listar números | GET | /v1/phone-number/list |
| Números disponibles (por país) | GET | /v1/phone-number/available |
| Comprar un número | POST | /v1/phone-number/buy |
| Importar desde Twilio | POST | /v1/phone-number/import-twilio |
| Conectar a SIP | PATCH | /v1/phone-number/connect-to-sip |
Voces · Suscripción · Clientes · Espacios de trabajo
| Acción | Método | Endpoint |
|---|---|---|
| Listar voces | GET | /v1/voice/list |
| Detalles de la suscripción | GET | /v1/subscription |
| Configurar recarga automática | PATCH | /v1/subscription/auto-top-up |
| Establecer importe de recarga | PATCH | /v1/subscription/top-up-amount |
| Listar clientes | GET | /v1/customer/list |
| Detalles del cliente | GET | /v1/customer/:id |
| Crear cliente | POST | /v1/customer |
| Actualizar cliente | PATCH | /v1/customer/:id |
| Eliminar cliente | DELETE | /v1/customer/:id |
| Listar espacios de trabajo | GET | /v1/workspaces/list |
| Crear espacio de trabajo | POST | /v1/workspaces |
| Detalles del espacio de trabajo | GET | /v1/workspaces/:id |
| Actualizar espacio de trabajo | PATCH | /v1/workspaces/:id |
| Eliminar espacio de trabajo | DELETE | /v1/workspaces/:id |
| Invitar miembro | POST | /v1/workspaces/:workspace_id/invite-member |
| Eliminar miembro | DELETE | /v1/workspaces/:workspace_id/remove-member |
Llamadas
Gestiona y analiza las llamadas de voz: lista e inspecciona llamadas (transcripción, sentimiento, resumen), extrae métricas agregadas, exporta informes CSV y realiza llamadas telefónicas y web salientes.
Listar llamadas
GET /v1/call/list
Lista las llamadas de tu cuenta con filtrado, ordenación y paginación.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_ids | string[] | No | Filtra por uno o varios ID de agente (repite o separa por comas). |
agent_id | string | No | Filtra por un solo agente (heredado; prefiere agent_ids). |
direction | enum[] | No | inbound y/o outbound. |
call_status | enum[] | No | started, success, failed, pending. |
call_type | enum[] | No | phone, web. |
customer_id | string | No | Filtra por cliente. |
workspace_id | string | No | Filtra por espacio de trabajo. |
date_from / date_to | string | No | Filtro de rango (YYYY-MM-DD). |
sort_order | enum | No | asc o desc. |
limit | number | No | Máximo de resultados a devolver. |
skip | number | No | Resultados a omitir (desplazamiento de paginación). |
Petición de ejemplo
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"
Respuesta de ejemplo — 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
}
]
Obtener detalles de la llamada
GET /v1/call/:id
Recupera todos los detalles de una llamada — transcripción, sentimiento, resumen, créditos y métricas de rendimiento.
Parámetros de ruta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | ID de la llamada. |
Petición de ejemplo
curl "https://api.hanc.ai/v1/call/507f1f77bcf86cd799439011" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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
}
}
Devuelve 404 si la llamada no existe o no pertenece a tu cuenta.
Métricas generales
GET /v1/call/general-metrics
Totales agregados (número de llamadas, duración total y media) en un rango de fechas.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date_from | string | Sí | Fecha de inicio (YYYY-MM-DD). |
date_to | string | Sí | Fecha de fin (YYYY-MM-DD, inclusive). |
agent_id / agent_ids | string(s) | No | Restringe a uno o varios agentes. |
customer_id | string | No | Filtra por cliente. |
workspace_id | string | No | Filtra por espacio de trabajo. |
direction / call_status / call_type | enum[] | No | Los mismos filtros que en Listar llamadas. |
Omitir
date_fromodate_todevuelve400 Bad Request.
Petición de ejemplo
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"
Respuesta de ejemplo — 200 OK
{ "total_calls": 128, "total_duration": 45230, "average_duration": 353 }
Métricas diarias
GET /v1/call/daily-metrics
Duración total de llamada por día en un rango de fechas — ideal para graficar tendencias.
Parámetros de consulta — los mismos que Métricas generales (date_from/date_to obligatorios, más los filtros opcionales de agente/cliente/espacio de trabajo/dirección/estado/tipo).
Petición de ejemplo
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"
Respuesta de ejemplo — 200 OK
[
{ "date": "2026-05-01", "total_duration": 5400 },
{ "date": "2026-05-02", "total_duration": 7320 },
{ "date": "2026-05-03", "total_duration": 0 }
]
Estadísticas de sentimiento
GET /v1/call/sentiment-stats
Recuentos de llamadas por sentimiento para un agente en un rango de fechas.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_id | string | Sí | Agente sobre el que informar. |
date_from | string | Sí | Fecha de inicio. |
date_to | string | Sí | Fecha de fin (inclusive). |
Petición de ejemplo
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"
Respuesta de ejemplo — 200 OK
{ "positive": 84, "negative": 12, "neutral": 32 }
Desglose de costes
GET /v1/call/costs-breakdown
Desglose de coste/uso (llamadas, minutos, créditos, tokens, detalle por modelo) agrupado por usuario, agente o espacio de trabajo.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date_from | string | Sí | Fecha de inicio. |
date_to | string | Sí | Fecha de fin (inclusive). |
group_by | enum | No | user (por defecto), agent o workspace. |
customer_id | string | No | Filtra por cliente (acceso de agencia). |
workspace_id | string | No | Filtra por espacio de trabajo. |
Petición de ejemplo
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"
Respuesta de ejemplo — 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 llamadas (CSV)
GET /v1/call/list/export
Descarga todas las llamadas de un rango de fechas como archivo CSV (con detalle de tokens por llamada y por modelo).
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date_from | string | Sí | Fecha de inicio. |
date_to | string | Sí | Fecha de fin (inclusive). |
Respuesta — un archivo CSV (Content-Type: text/csv), servido como adjunto llamado call-details_<date_from>_<date_to>.csv.
Petición de ejemplo
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 costes (CSV)
GET /v1/call/costs-breakdown/export
Descarga el desglose de costes como archivo CSV.
Parámetros de consulta — los mismos que Desglose de costes (date_from/date_to obligatorios; opcionales group_by, customer_id, workspace_id).
Respuesta — un archivo CSV servido como costs-breakdown_<date_from>_<date_to>.csv.
Petición de ejemplo
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
Realizar una llamada telefónica
POST /v1/call/make-phone-call
Realiza una llamada telefónica saliente desde uno de tus agentes.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_id | string | Sí | Agente que realizará la llamada. |
from_number | string | Sí | ID de llamante en formato E.164 (p. ej. +1234567890). |
to_number | string | Sí | Número de teléfono del destinatario. |
custom_data | object | No | Datos arbitrarios adjuntos a la llamada. |
dynamic_context | object | No | Contexto que se pasa a la conversación (p. ej. el nombre del cliente). |
Petición de ejemplo
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" }
}'
Respuesta de ejemplo — 201 Created
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"call_from": "+1234567890",
"call_to": "+19876543210",
"direction": "outbound",
"start_timestamp": 1703302407333
}
Realizar una llamada web
POST /v1/call/make-web-call
Crea una sesión de llamada de navegador/WebRTC para uno de tus agentes.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_id | string | Sí | Agente que atenderá la llamada web. |
custom_data | object | No | Datos arbitrarios adjuntos a la llamada. |
dynamic_context | object | No | Contexto que se pasa a la conversación. |
Petición de ejemplo
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" } }'
Respuesta de ejemplo — 201 Created
{
"_id": "507f1f77bcf86cd799439077",
"call_type": "web",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"start_timestamp": 1703302407333
}
Agentes
Crea y gestiona agentes de voz, sus acciones (lo que hacen durante una llamada — enviar correo/SMS/WhatsApp, llamar a tu API) y sus herramientas (capacidades como búsqueda RAG, reserva de citas, desvío de llamadas, integraciones de calendario/CRM).
Listar agentes
GET /v1/agent/list
Devuelve todos los agentes que posee tu cuenta.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
customer_id | string | No | Acota a un cliente. |
workspace_id | string | No | Acota a un espacio de trabajo. |
Petición de ejemplo
curl "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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"]
}
]
Obtener un agente
GET /v1/agent/:id
Devuelve un único agente.
Parámetros de ruta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | ID del agente. |
Petición de ejemplo
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Devuelve el objeto del agente (con la misma forma que un elemento de Listar agentes), o 404 si no se encuentra.
Crear un agente
POST /v1/agent
Crea un nuevo agente. Solo agent_name y llm_id son obligatorios — todo lo demás es opcional y recurre a valores por defecto razonables.
Parámetros de consulta — opcionales customer_id, workspace_id para asociar el nuevo agente.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_name | string | Sí | Nombre visible. |
llm_id | string | Sí | ID del LLM que respalda al agente. |
voice | object | No | { "voice_id": "<id>" }. |
interruption_sensitivity | number | No | Con qué facilidad cede el agente al ser interrumpido (p. ej. 0.5). |
call_settings | object | No | Idioma, recordatorios, tiempo de espera por silencio, análisis de sentimiento, resumen de llamada, max_call_duration_minutes (1–15). |
data_retrieval | object[] | No | Campos que el agente recopila durante una llamada. |
webhook_url | string | No | URL notificada de los eventos del agente. |
is_data_collection_active | boolean | No | Habilita el formulario de recopilación de datos. |
Petición de ejemplo
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 }
}'
Respuesta de ejemplo — 201 Created (el objeto del agente creado).
Actualizar un agente
PATCH /v1/agent/:id
Actualiza parcialmente un agente. Todos los campos del cuerpo son opcionales — envía solo lo que quieras cambiar.
Parámetros de ruta — id (ID del agente).
Cuerpo de la petición — cualquier subconjunto de los campos de creación, más folder, status (p. ej. active), is_customer_memory_active, widget_settings, callback_settings. Dentro de call_settings también puedes establecer recording_enabled, stt_languages (hasta 4 códigos BCP‑47) y max_call_duration_minutes.
Petición de ejemplo
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 } }'
Respuesta de ejemplo — 200 OK (el objeto del agente actualizado).
Eliminar un agente
DELETE /v1/agent/:id
Elimina un agente.
Petición de ejemplo
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 204 No Content (cuerpo vacío).
Estadísticas de llamadas del agente
GET /v1/agent/:id/call-stats
Recuentos de llamadas por día para un agente en un rango de fechas.
Parámetros de ruta — id (ID del agente).
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date_from | string | Sí | Fecha de inicio (YYYY-MM-DD). |
date_to | string | Sí | Fecha de fin (YYYY-MM-DD). |
Petición de ejemplo
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"
Respuesta de ejemplo — 200 OK
[
{ "date": "2026-05-28", "total_calls": 10 },
{ "date": "2026-05-29", "total_calls": 4 }
]
Listar plantillas de agente
GET /v1/agent/agent_template/list
Devuelve el catálogo de plantillas de agente preconstruidas que puedes clonar. Sin parámetros.
Petición de ejemplo
curl "https://api.hanc.ai/v1/agent/agent_template/list" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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?" }
}
]
Acciones del agente
Las acciones son cosas que un agente realiza durante una llamada. Valores de action_type admitidos: send_email, send_sms, send_whatsapp, api_call. La forma del objeto settings depende del tipo.
Listar acciones
GET /v1/agent/:id/actions
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions" \
-H "x-api-key: YOUR_API_KEY"
Devuelve un array de objetos de acción.
Añadir una acción
POST /v1/agent/:id/actions
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action_type | enum | Sí | send_email, send_sms, send_whatsapp o api_call. |
settings | object | Sí | Configuración específica del tipo. |
is_active | boolean | No | Por defecto true. |
Petición de ejemplo
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"]
}
}'
Respuesta de ejemplo — 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
}
Actualizar una acción
PATCH /v1/agent/:id/actions/:agentActionId
Actualiza los settings y/o is_active de una acción adjunta. Ambos campos del cuerpo son opcionales.
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 }'
Devuelve 200 OK con el objeto de acción actualizado.
Eliminar una acción
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"
Devuelve 204 No Content.
Herramientas del agente
Las herramientas dan al agente capacidades adicionales. Valores de tool_type admitidos: api_rag, appointment_booking, call_forwarding, end_call, google_calendar, outlook_calendar, etermin, resmio, hubspot_crm, agent_transfer, mcp. La forma del objeto settings depende del tipo.
etermin y resmio son herramientas activas de reserva de citas/mesas: el agente comprueba la disponibilidad y reserva, reprograma o cancela directamente en la cuenta conectada de eTermin o resmio. Ambas requieren que la integración correspondiente esté conectada en la cuenta primero.
Listar herramientas
GET /v1/agent/:id/tools
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools" \
-H "x-api-key: YOUR_API_KEY"
Devuelve un array de objetos de herramienta.
Añadir una herramienta
POST /v1/agent/:id/tools
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tool_type | enum | Sí | Uno de los tipos de herramienta admitidos anteriores. |
settings | object | Sí | Configuración específica del tipo. |
is_active | boolean | No | Por defecto true. |
Petición de ejemplo
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" }
}'
Respuesta de ejemplo — 201 Created
{
"_id": "60f5b1a8d1b9f7c1d0c0a6c6",
"agent_id": "60d21b4667d0d8992e610c85",
"tool_type": "call_forwarding",
"settings": { "name": "Transfer to human", "phone_number": "+1234567890" },
"is_active": true
}
Actualizar una herramienta
PATCH /v1/agent/:id/tools/:agentToolId
Actualiza los settings y/o is_active de una herramienta adjunta (ambos opcionales).
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 }'
Devuelve 200 OK con el objeto de herramienta actualizado.
Eliminar una herramienta
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"
Devuelve 204 No Content.
Base de conocimiento
Sube documentos que tus agentes pueden buscar durante una llamada y controla qué agentes usan cada base de conocimiento. Las subidas de archivos usan multipart/form-data.
Listar bases de conocimiento
GET /v1/knowledge-base/list
Parámetros de consulta — opcionales customer_id, workspace_id.
curl "https://api.hanc.ai/v1/knowledge-base/list" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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"]
}
]
Crear una base de conocimiento
POST /v1/knowledge-base
Crea una base de conocimiento junto con su primer archivo. Se trata de una petición multipart/form-data — no existe una creación "solo con cuerpo".
Parámetros de consulta — opcionales customer_id, workspace_id.
Campos del formulario
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
file | file | Sí | El primer documento (p. ej. un PDF). |
name | string | Sí | Nombre de la base de conocimiento (1–100 caracteres). |
description | string | Sí | Descripción (1–300 caracteres). |
folder | string | No | Etiqueta de carpeta/categoría (0–50 caracteres). |
Petición de ejemplo
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"
Respuesta de ejemplo — 200 OK (la base de conocimiento creada, con la misma forma que un elemento de la lista).
Añadir un solo archivo
POST /v1/knowledge-base/:id/file
Añade un archivo a una base de conocimiento existente. Nombre del 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"
Devuelve 200 OK con la base de conocimiento actualizada.
Añadir varios archivos
POST /v1/knowledge-base/:id/files
Añade varios archivos a la vez. Nombre del campo multipart: files (repite por cada archivo). Parámetros de consulta opcionales 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"
Devuelve 200 OK con la base de conocimiento actualizada.
Eliminar archivo(s)
DELETE /v1/knowledge-base/:id/file
Elimina uno o varios archivos por ID. A pesar de la ruta en singular, el cuerpo toma un array.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
file_ids | string[] | Sí | Array no vacío de ID de archivos 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"] }'
Devuelve 200 OK.
Asignar agentes
PUT /v1/knowledge-base/:id/agents
Establece (reemplaza) la lista completa de agentes que usan esta base de conocimiento.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
agent_ids | string[] | Sí | ID de agentes que deben usar esta base de conocimiento. |
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"] }'
Devuelve 200 OK.
Números de teléfono
Lista tus números, busca números disponibles para comprar, adquiere uno, importa números desde una cuenta de Twilio conectada o conecta un número a un trunk SIP.
La compra de números en el panel va más allá de lo que exponen estos endpoints. Hay números instantáneos y sin papeleo disponibles en Austria, Alemania, Suiza, EE. UU. y Canadá; cualquier otro país usa un flujo guiado de autoservicio en el que envías tus propios documentos regulatorios (y puedes guardarlos como borrador para retomarlos más tarde). La pantalla de compra ofrece los tipos local, móvil, nacional y gratuito — además de números avanzados (+€2/mes) y números de llamada de WhatsApp. El BYO SIP es neutral respecto al proveedor (sipgate, Placetel, TENIOS, easybell, Zadarma, Telnyx, trunks personalizados — no solo importación de Twilio). Consulta Números de teléfono para el flujo completo.
Listar números de teléfono
GET /v1/phone-number/list
Parámetros de consulta — todos opcionales: inbound_agent_id, outbound_agent_id, customer_id, workspace_id (y user_id, que por defecto eres tú).
curl "https://api.hanc.ai/v1/phone-number/list" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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 disponibles
GET /v1/phone-number/available
Lista los números disponibles para comprar en un país.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
country_code | string | No | Código de país ISO (por defecto US), p. ej. DE, AT, CH. |
area_code | string | No | Filtro numérico de prefijo de zona. |
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"
Respuesta de ejemplo — 200 OK
[
{ "phone_number": "+14155550100", "formatted_number": "+1 (415) 555-0100", "country": "US", "area_code": "415", "setup_fee": 2, "subscription": 2, "currency": "EUR" }
]
Comprar un número
POST /v1/phone-number/buy
Compra un número concreto. Parámetros de consulta opcionales customer_id, workspace_id.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
phone_number | string | Sí | El número a comprar (E.164). |
country_code | string | Sí | País del número (p. ej. 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" }'
Respuesta de ejemplo — 200 OK
{
"message": "Phone number purchased successfully!",
"phone_number": { "_id": "507f1f77bcf86cd799439011", "phone_number": "+14155550100", "country": "US", "provider": "twilio", "status": "active" }
}
Importar desde Twilio
POST /v1/phone-number/import-twilio
Importa números desde una cuenta de Twilio conectada. Parámetros de consulta opcionales customer_id, workspace_id.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
sid | string | Sí | Account SID de Twilio (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" }'
Respuesta de ejemplo — 200 OK (el registro del número de teléfono importado).
Conectar a SIP
PATCH /v1/phone-number/connect-to-sip
Conecta un número existente a un trunk SIP.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
phone_number | string | Sí | El número a conectar (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" }'
Devuelve 200 OK (cuerpo vacío).
Voces
Listar voces
GET /v1/voice/list
Lista las voces disponibles. Filtra por idioma o proveedor e incluye los clones privados de un cliente.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
language | string | No | Filtra por idioma, p. ej. ?language=de. |
provider | string | No | 11-Labs, openai, qwen o azure. |
customer_id | string | No | Incluye también los clones de voz privados de este cliente. |
curl -G "https://api.hanc.ai/v1/voice/list" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "language=de"
Respuesta de ejemplo — 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"
}
]
Suscripción
Detalles de la suscripción
GET /v1/subscription
Devuelve tu suscripción actual, incluidos los saldos de créditos y los ajustes de recarga.
curl "https://api.hanc.ai/v1/subscription" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 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
}
Devuelve 404 si no existe ningún registro de suscripción.
Configurar recarga automática
PATCH /v1/subscription/auto-top-up
Habilita o deshabilita la recarga automática de créditos.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
enabled | boolean | Sí | Activa o desactiva la recarga automática. |
amount | number | No | Importe con el que recargar (20–1000). Se establece al habilitar. |
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 }'
Devuelve 200 OK con la suscripción actualizada.
Establecer importe de recarga
PATCH /v1/subscription/top-up-amount
Actualiza el importe de recarga configurado.
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
top_up_amount | number | Sí | Nuevo importe (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 }'
Devuelve 200 OK con la suscripción actualizada.
Clientes
Gestiona los clientes de tu agencia. Estos endpoints requieren que tu cuenta pertenezca a una agencia.
Listar clientes
GET /v1/customer/list
curl "https://api.hanc.ai/v1/customer/list" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"email": "customer@example.com",
"name": "John Doe",
"account_status": "active",
"agents_count": 3
}
]
Detalles del cliente
GET /v1/customer/:id
curl "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Devuelve el objeto del cliente, o 404 si no se encuentra.
Crear un cliente
POST /v1/customer
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email | string | Sí | Correo de inicio de sesión del cliente. |
initial_password | string | Sí | Contraseña inicial (8–128 caracteres). |
name | string | Sí | Nombre de la cuenta/empresa. |
user_full_name | string | Sí | Nombre completo del usuario cliente. |
visibility | object | No | Indicadores de visibilidad por sección. |
opt_out_promotions | boolean | No | Excluye al cliente de la mensajería promocional. |
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"
}'
Devuelve 201 Created con el nuevo cliente. Devuelve 400 si el correo ya existe o tu cuenta no forma parte de una agencia.
Actualizar un cliente
PATCH /v1/customer/:id
Cuerpo de la petición — todos opcionales: 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" }'
Devuelve 200 OK con el cliente actualizado.
Eliminar un cliente
DELETE /v1/customer/:id
curl -X DELETE "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo
{ "message": "Customer deleted successfully" }
Espacios de trabajo
Agrupa agentes, números y bases de conocimiento en espacios de trabajo y gestiona sus miembros.
Listar espacios de trabajo
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"
Respuesta de ejemplo — 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" }
]
}
]
Crear un espacio de trabajo
POST /v1/workspaces
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del espacio de trabajo (2–100 caracteres). |
description | string | No | Descripción (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." }'
Devuelve 201 Created con el espacio de trabajo.
Detalles del espacio de trabajo
GET /v1/workspaces/:id
curl "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Devuelve el objeto del espacio de trabajo.
Actualizar un espacio de trabajo
PATCH /v1/workspaces/:id
Cuerpo de la petición — name (2–100) y/o 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" }'
Devuelve 200 OK con el espacio de trabajo actualizado.
Eliminar un espacio de trabajo
DELETE /v1/workspaces/:id
curl -X DELETE "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Respuesta de ejemplo
{ "message": "Workspace deleted successfully" }
Invitar a un miembro
POST /v1/workspaces/:workspace_id/invite-member
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email | string | Sí | Correo del usuario a invitar. |
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" }'
Devuelve 201 Created con el espacio de trabajo (el nuevo miembro aparece en members).
Eliminar a un miembro
DELETE /v1/workspaces/:workspace_id/remove-member
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email | string | Sí | Correo del miembro a eliminar. |
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" }'
Devuelve 200 OK con el espacio de trabajo actualizado.
Qué no está disponible a través de la API
Algunas operaciones solo están disponibles a través del panel:
| Función | Motivo |
|---|---|
| Gestión de claves de API | Seguridad — las claves no pueden crear otras claves |
| Configuración de números de teléfono | Requiere configuración interactiva |
| Integración con Google Calendar | Requiere autorización interactiva |
| Facturación y pagos | Se gestionan a través del panel |
¿Necesitas ayuda?
Contacta con nuestro equipo de soporte en support@hanc.ai para preguntas relacionadas con la API.