Riferimento API
Documentazione API completa per integrare Hanc.AI nelle tue applicazioni. Gestisci agenti, recupera dati delle chiamate, effettua chiamate e opera ogni parte della piattaforma in modo programmatico.
Ogni sezione qui sotto ti fornisce il metodo HTTP e il percorso, i parametri (percorso, query e body), un esempio di richiesta pronto all'uso e un esempio di risposta rappresentativo, così puoi integrare senza dover indovinare la forma dei payload.
Panoramica rapida
| Base URL | https://api.hanc.ai |
| Prefisso di versione | Tutte le route sono precedute da /v1 |
| Autenticazione | Chiave API tramite l'header x-api-key |
| Formato | JSON (richiesta e risposta) |
Genera una chiave API da Integrazione → Chiavi API nella dashboard. Puoi avere fino a 3 chiavi per utente — vedi la sezione Chiavi API in Integrazioni per configurazione, permessi e indicazioni sulla sicurezza.
curl -X GET "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Autenticazione
Invia la tua chiave nell'header x-api-key in ogni richiesta:
x-api-key: YOUR_API_KEY
La chiave si risolve nell'utente che la possiede, e ogni richiesta è automaticamente limitata a quell'utente — non devi mai passare un ID utente. Una chiave mancante o non valida viene rifiutata con 401 Unauthorized / 403 Forbidden.
Mantieni le chiavi lato server. Non incorporare mai una chiave API in un browser, in un'app mobile o in qualsiasi client che l'utente finale possa ispezionare. Se una chiave viene compromessa, revocala in Integrazione → Chiavi API ed emettine una nuova.
Convenzioni
Alcune regole si applicano all'intera API. Leggerle una volta ti farà risparmiare tempo di debug:
- Prefisso di versione — ogni percorso inizia con
/v1(es.https://api.hanc.ai/v1/agent/list). - Gli ID sono ObjectId di Mongo — qualsiasi
:id(e:agentActionId,:agentToolId, ecc.) deve essere una stringa esadecimale di 24 caratteri. Gli ID malformati restituiscono400 Bad Request. - I campi del body sconosciuti vengono rimossi — l'API valida i body delle richieste e scarta silenziosamente le proprietà che non riconosce, quindi un errore di battitura nel nome di un campo viene ignorato anziché memorizzato.
- Date — gli endpoint di analytics/esportazione accettano
date_from/date_tonel formatoYYYY-MM-DD.date_toè inclusivo fino alla fine di quel giorno. - Parametri query di tipo array — dove un filtro accetta più valori (es.
agent_ids,direction), puoi ripetere la chiave (?direction=inbound&direction=outbound) o separare i valori con virgole (?direction=inbound,outbound). - I timestamp nelle risposte sono in millisecondi epoch, salvo che siano mostrati come stringa ISO‑8601.
Indice degli endpoint
Una mappa rapida di tutto ciò che è disponibile. La documentazione dettagliata di ciascuno segue qui sotto.
Chiamate
| Azione | Metodo | Endpoint |
|---|---|---|
| Elenca chiamate | GET | /v1/call/list |
| Dettagli chiamata (trascrizione, sentiment, riepilogo) | GET | /v1/call/:id |
| Analytics generali (totali su un intervallo) | GET | /v1/call/general-metrics |
| Analytics giornaliere | GET | /v1/call/daily-metrics |
| Statistiche di sentiment | GET | /v1/call/sentiment-stats |
| Ripartizione dei costi | GET | /v1/call/costs-breakdown |
| Esporta chiamate (CSV) | GET | /v1/call/list/export |
| Esporta costi (CSV) | GET | /v1/call/costs-breakdown/export |
| Effettua una chiamata telefonica | POST | /v1/call/make-phone-call |
| Effettua una chiamata web | POST | /v1/call/make-web-call |
Agenti
| Azione | Metodo | Endpoint |
|---|---|---|
| Elenca agenti | GET | /v1/agent/list |
| Dettagli agente | GET | /v1/agent/:id |
| Crea agente | POST | /v1/agent |
| Aggiorna agente | PATCH | /v1/agent/:id |
| Elimina agente | DELETE | /v1/agent/:id |
| Statistiche delle chiamate dell'agente | GET | /v1/agent/:id/call-stats |
| Elenca template di agenti | GET | /v1/agent/agent_template/list |
| Elenca azioni | GET | /v1/agent/:id/actions |
| Aggiungi azione | POST | /v1/agent/:id/actions |
| Aggiorna azione | PATCH | /v1/agent/:id/actions/:agentActionId |
| Elimina azione | DELETE | /v1/agent/:id/actions/:agentActionId |
| Elenca tool | GET | /v1/agent/:id/tools |
| Aggiungi tool | POST | /v1/agent/:id/tools |
| Aggiorna tool | PATCH | /v1/agent/:id/tools/:agentToolId |
| Elimina tool | DELETE | /v1/agent/:id/tools/:agentToolId |
Knowledge Base
| Azione | Metodo | Endpoint |
|---|---|---|
| Elenca knowledge base | GET | /v1/knowledge-base/list |
| Crea (con il primo file) | POST | /v1/knowledge-base |
| Aggiungi un singolo file | POST | /v1/knowledge-base/:id/file |
| Aggiungi più file | POST | /v1/knowledge-base/:id/files |
| Elimina file | DELETE | /v1/knowledge-base/:id/file |
| Assegna agenti | PUT | /v1/knowledge-base/:id/agents |
Numeri di telefono
| Azione | Metodo | Endpoint |
|---|---|---|
| Elenca numeri | GET | /v1/phone-number/list |
| Numeri disponibili (per paese) | GET | /v1/phone-number/available |
| Acquista un numero | POST | /v1/phone-number/buy |
| Importa da Twilio | POST | /v1/phone-number/import-twilio |
| Connetti a SIP | PATCH | /v1/phone-number/connect-to-sip |
Voci · Abbonamento · Clienti · Workspace
| Azione | Metodo | Endpoint |
|---|---|---|
| Elenca voci | GET | /v1/voice/list |
| Dettagli abbonamento | GET | /v1/subscription |
| Configura ricarica automatica | PATCH | /v1/subscription/auto-top-up |
| Imposta importo di ricarica | PATCH | /v1/subscription/top-up-amount |
| Elenca clienti | GET | /v1/customer/list |
| Dettagli cliente | GET | /v1/customer/:id |
| Crea cliente | POST | /v1/customer |
| Aggiorna cliente | PATCH | /v1/customer/:id |
| Elimina cliente | DELETE | /v1/customer/:id |
| Elenca workspace | GET | /v1/workspaces/list |
| Crea workspace | POST | /v1/workspaces |
| Dettagli workspace | GET | /v1/workspaces/:id |
| Aggiorna workspace | PATCH | /v1/workspaces/:id |
| Elimina workspace | DELETE | /v1/workspaces/:id |
| Invita membro | POST | /v1/workspaces/:workspace_id/invite-member |
| Rimuovi membro | DELETE | /v1/workspaces/:workspace_id/remove-member |
Chiamate
Gestisci e analizza le chiamate vocali: elenca e ispeziona le chiamate (trascrizione, sentiment, riepilogo), estrai metriche aggregate, esporta report CSV ed effettua chiamate telefoniche e web in uscita.
Elenca chiamate
GET /v1/call/list
Elenca le chiamate del tuo account con filtri, ordinamento e paginazione.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_ids | string[] | No | Filtra per uno o più ID agente (ripeti o separa con virgole). |
agent_id | string | No | Filtra per un singolo agente (legacy; preferisci agent_ids). |
direction | enum[] | No | inbound e/o outbound. |
call_status | enum[] | No | started, success, failed, pending. |
call_type | enum[] | No | phone, web. |
customer_id | string | No | Filtra per cliente. |
workspace_id | string | No | Filtra per workspace. |
date_from / date_to | string | No | Filtro per intervallo (YYYY-MM-DD). |
sort_order | enum | No | asc o desc. |
limit | number | No | Numero massimo di risultati da restituire. |
skip | number | No | Risultati da saltare (offset di paginazione). |
Esempio di richiesta
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"
Esempio di risposta — 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
}
]
Ottieni i dettagli di una chiamata
GET /v1/call/:id
Recupera i dettagli completi di una chiamata — trascrizione, sentiment, riepilogo, crediti e metriche di prestazione.
Parametri di percorso
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id | string | Sì | ID della chiamata. |
Esempio di richiesta
curl "https://api.hanc.ai/v1/call/507f1f77bcf86cd799439011" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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
}
}
Restituisce 404 se la chiamata non esiste o non appartiene al tuo account.
Metriche generali
GET /v1/call/general-metrics
Totali aggregati (conteggio chiamate, durata totale e media) su un intervallo di date.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_from | string | Sì | Data di inizio (YYYY-MM-DD). |
date_to | string | Sì | Data di fine (YYYY-MM-DD, inclusiva). |
agent_id / agent_ids | string(s) | No | Limita a uno o più agenti. |
customer_id | string | No | Filtra per cliente. |
workspace_id | string | No | Filtra per workspace. |
direction / call_status / call_type | enum[] | No | Stessi filtri di Elenca chiamate. |
Omettere
date_fromodate_torestituisce400 Bad Request.
Esempio di richiesta
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"
Esempio di risposta — 200 OK
{ "total_calls": 128, "total_duration": 45230, "average_duration": 353 }
Metriche giornaliere
GET /v1/call/daily-metrics
Durata totale delle chiamate per giorno su un intervallo di date — ideale per creare grafici delle tendenze.
Parametri query — gli stessi di Metriche generali (date_from/date_to obbligatori, più i filtri opzionali agente/cliente/workspace/direzione/stato/tipo).
Esempio di richiesta
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"
Esempio di risposta — 200 OK
[
{ "date": "2026-05-01", "total_duration": 5400 },
{ "date": "2026-05-02", "total_duration": 7320 },
{ "date": "2026-05-03", "total_duration": 0 }
]
Statistiche di sentiment
GET /v1/call/sentiment-stats
Conteggi delle chiamate per sentiment per un agente su un intervallo di date.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_id | string | Sì | Agente su cui produrre il report. |
date_from | string | Sì | Data di inizio. |
date_to | string | Sì | Data di fine (inclusiva). |
Esempio di richiesta
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"
Esempio di risposta — 200 OK
{ "positive": 84, "negative": 12, "neutral": 32 }
Ripartizione dei costi
GET /v1/call/costs-breakdown
Ripartizione di costi/utilizzo (chiamate, minuti, crediti, token, dettaglio per modello) raggruppata per utente, agente o workspace.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_from | string | Sì | Data di inizio. |
date_to | string | Sì | Data di fine (inclusiva). |
group_by | enum | No | user (predefinito), agent o workspace. |
customer_id | string | No | Filtra per cliente (accesso agenzia). |
workspace_id | string | No | Filtra per workspace. |
Esempio di richiesta
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"
Esempio di risposta — 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 }
}
Esporta chiamate (CSV)
GET /v1/call/list/export
Scarica ogni chiamata di un intervallo di date come file CSV (con dettaglio dei token per chiamata e per modello).
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_from | string | Sì | Data di inizio. |
date_to | string | Sì | Data di fine (inclusiva). |
Risposta — un file CSV (Content-Type: text/csv), servito come allegato chiamato call-details_<date_from>_<date_to>.csv.
Esempio di richiesta
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
Esporta costi (CSV)
GET /v1/call/costs-breakdown/export
Scarica la ripartizione dei costi come file CSV.
Parametri query — gli stessi di Ripartizione dei costi (date_from/date_to obbligatori; opzionali group_by, customer_id, workspace_id).
Risposta — un file CSV servito come costs-breakdown_<date_from>_<date_to>.csv.
Esempio di richiesta
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
Effettua una chiamata telefonica
POST /v1/call/make-phone-call
Effettua una chiamata telefonica in uscita da uno dei tuoi agenti.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_id | string | Sì | Agente che effettuerà la chiamata. |
from_number | string | Sì | ID chiamante in formato E.164 (es. +1234567890). |
to_number | string | Sì | Numero di telefono del destinatario. |
custom_data | object | No | Dati arbitrari allegati alla chiamata. |
dynamic_context | object | No | Contesto passato alla conversazione (es. nome del cliente). |
Esempio di richiesta
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" }
}'
Esempio di risposta — 201 Created
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"call_from": "+1234567890",
"call_to": "+19876543210",
"direction": "outbound",
"start_timestamp": 1703302407333
}
Effettua una chiamata web
POST /v1/call/make-web-call
Crea una sessione di chiamata browser/WebRTC per uno dei tuoi agenti.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_id | string | Sì | Agente che gestirà la chiamata web. |
custom_data | object | No | Dati arbitrari allegati alla chiamata. |
dynamic_context | object | No | Contesto passato alla conversazione. |
Esempio di richiesta
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" } }'
Esempio di risposta — 201 Created
{
"_id": "507f1f77bcf86cd799439077",
"call_type": "web",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"start_timestamp": 1703302407333
}
Agenti
Crea e gestisci agenti vocali, le loro azioni (ciò che fanno durante una chiamata — inviare email/SMS/WhatsApp, chiamare la tua API) e i loro tool (capacità come ricerca RAG, prenotazione di appuntamenti, inoltro chiamate, integrazioni calendario/CRM).
Elenca agenti
GET /v1/agent/list
Restituisce tutti gli agenti posseduti dal tuo account.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
customer_id | string | No | Limita a un cliente. |
workspace_id | string | No | Limita a un workspace. |
Esempio di richiesta
curl "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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"]
}
]
Ottieni un agente
GET /v1/agent/:id
Restituisce un singolo agente.
Parametri di percorso
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id | string | Sì | ID dell'agente. |
Esempio di richiesta
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Restituisce l'oggetto agente (stessa forma di un elemento di Elenca agenti), oppure 404 se non trovato.
Crea un agente
POST /v1/agent
Crea un nuovo agente. Solo agent_name e llm_id sono obbligatori — tutto il resto è opzionale e ricade su valori predefiniti sensati.
Parametri query — customer_id, workspace_id opzionali per associare il nuovo agente.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_name | string | Sì | Nome visualizzato. |
llm_id | string | Sì | ID dell'LLM che alimenta l'agente. |
voice | object | No | { "voice_id": "<id>" }. |
interruption_sensitivity | number | No | Con quanta facilità l'agente cede quando viene interrotto (es. 0.5). |
call_settings | object | No | Lingua, promemoria, timeout di silenzio, analisi del sentiment, riepilogo chiamata, max_call_duration_minutes (1–15). |
data_retrieval | object[] | No | Campi che l'agente raccoglie durante una chiamata. |
webhook_url | string | No | URL notificato degli eventi dell'agente. |
is_data_collection_active | boolean | No | Abilita il modulo di raccolta dati. |
Esempio di richiesta
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 }
}'
Esempio di risposta — 201 Created (l'oggetto agente creato).
Aggiorna un agente
PATCH /v1/agent/:id
Aggiorna parzialmente un agente. Tutti i campi del body sono opzionali — invia solo ciò che vuoi modificare.
Parametri di percorso — id (ID dell'agente).
Body della richiesta — qualsiasi sottoinsieme dei campi di creazione, più folder, status (es. active), is_customer_memory_active, widget_settings, callback_settings. All'interno di call_settings puoi anche impostare recording_enabled, stt_languages (fino a 4 codici BCP‑47) e max_call_duration_minutes.
Esempio di richiesta
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 } }'
Esempio di risposta — 200 OK (l'oggetto agente aggiornato).
Elimina un agente
DELETE /v1/agent/:id
Elimina un agente.
Esempio di richiesta
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 204 No Content (body vuoto).
Statistiche delle chiamate dell'agente
GET /v1/agent/:id/call-stats
Conteggi delle chiamate per giorno per un agente su un intervallo di date.
Parametri di percorso — id (ID dell'agente).
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_from | string | Sì | Data di inizio (YYYY-MM-DD). |
date_to | string | Sì | Data di fine (YYYY-MM-DD). |
Esempio di richiesta
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"
Esempio di risposta — 200 OK
[
{ "date": "2026-05-28", "total_calls": 10 },
{ "date": "2026-05-29", "total_calls": 4 }
]
Elenca template di agenti
GET /v1/agent/agent_template/list
Restituisce il catalogo di template di agenti predefiniti che puoi clonare. Nessun parametro.
Esempio di richiesta
curl "https://api.hanc.ai/v1/agent/agent_template/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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?" }
}
]
Azioni dell'agente
Le azioni sono cose che un agente esegue durante una chiamata. Valori action_type supportati: send_email, send_sms, send_whatsapp, api_call. La forma dell'oggetto settings dipende dal tipo.
Elenca azioni
GET /v1/agent/:id/actions
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions" \
-H "x-api-key: YOUR_API_KEY"
Restituisce un array di oggetti azione.
Aggiungi un'azione
POST /v1/agent/:id/actions
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
action_type | enum | Sì | send_email, send_sms, send_whatsapp o api_call. |
settings | object | Sì | Configurazione specifica del tipo. |
is_active | boolean | No | Predefinito a true. |
Esempio di richiesta
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"]
}
}'
Esempio di risposta — 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
}
Aggiorna un'azione
PATCH /v1/agent/:id/actions/:agentActionId
Aggiorna i settings e/o is_active di un'azione collegata. Entrambi i campi del body sono opzionali.
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 }'
Restituisce 200 OK con l'oggetto azione aggiornato.
Elimina un'azione
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"
Restituisce 204 No Content.
Tool dell'agente
I tool danno a un agente capacità aggiuntive. Valori tool_type supportati: api_rag, appointment_booking, call_forwarding, end_call, google_calendar, outlook_calendar, etermin, resmio, hubspot_crm, agent_transfer, mcp. La forma dell'oggetto settings dipende dal tipo.
etermin e resmio sono tool di prenotazione di appuntamenti/prenotazioni in tempo reale: l'agente verifica la disponibilità e prenota, riprogramma o cancella direttamente nell'account eTermin o resmio collegato. Entrambi richiedono che la relativa integrazione sia prima collegata all'account.
Elenca tool
GET /v1/agent/:id/tools
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools" \
-H "x-api-key: YOUR_API_KEY"
Restituisce un array di oggetti tool.
Aggiungi un tool
POST /v1/agent/:id/tools
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
tool_type | enum | Sì | Uno dei tipi di tool supportati sopra. |
settings | object | Sì | Configurazione specifica del tipo. |
is_active | boolean | No | Predefinito a true. |
Esempio di richiesta
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" }
}'
Esempio di risposta — 201 Created
{
"_id": "60f5b1a8d1b9f7c1d0c0a6c6",
"agent_id": "60d21b4667d0d8992e610c85",
"tool_type": "call_forwarding",
"settings": { "name": "Transfer to human", "phone_number": "+1234567890" },
"is_active": true
}
Aggiorna un tool
PATCH /v1/agent/:id/tools/:agentToolId
Aggiorna i settings e/o is_active di un tool collegato (entrambi opzionali).
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 }'
Restituisce 200 OK con l'oggetto tool aggiornato.
Elimina un tool
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"
Restituisce 204 No Content.
Knowledge Base
Carica documenti che i tuoi agenti possono cercare durante una chiamata e controlla quali agenti usano ciascuna knowledge base. I caricamenti di file usano multipart/form-data.
Elenca knowledge base
GET /v1/knowledge-base/list
Parametri query — customer_id, workspace_id opzionali.
curl "https://api.hanc.ai/v1/knowledge-base/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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"]
}
]
Crea una knowledge base
POST /v1/knowledge-base
Crea una knowledge base insieme al suo primo file. Questa è una richiesta multipart/form-data — non esiste una creazione con il solo body.
Parametri query — customer_id, workspace_id opzionali.
Campi del modulo
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
file | file | Sì | Il primo documento (es. un PDF). |
name | string | Sì | Nome della knowledge base (1–100 caratteri). |
description | string | Sì | Descrizione (1–300 caratteri). |
folder | string | No | Etichetta di cartella/categoria (0–50 caratteri). |
Esempio di richiesta
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"
Esempio di risposta — 200 OK (la knowledge base creata, stessa forma di un elemento della lista).
Aggiungi un singolo file
POST /v1/knowledge-base/:id/file
Aggiungi un file a una knowledge base esistente. Nome 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"
Restituisce 200 OK con la knowledge base aggiornata.
Aggiungi più file
POST /v1/knowledge-base/:id/files
Aggiungi diversi file in una volta. Nome del campo multipart: files (ripeti per ogni file). Parametri query opzionali 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"
Restituisce 200 OK con la knowledge base aggiornata.
Elimina file
DELETE /v1/knowledge-base/:id/file
Rimuovi uno o più file per ID. Nonostante il percorso al singolare, il body accetta un array.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
file_ids | string[] | Sì | Array non vuoto di ID dei file da eliminare. |
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"] }'
Restituisce 200 OK.
Assegna agenti
PUT /v1/knowledge-base/:id/agents
Imposta (sostituisce) l'intero elenco di agenti che usano questa knowledge base.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
agent_ids | string[] | Sì | ID degli agenti che dovrebbero usare questa knowledge base. |
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"] }'
Restituisce 200 OK.
Numeri di telefono
Elenca i tuoi numeri, trova numeri disponibili per l'acquisto, acquistane uno, importa numeri da un account Twilio collegato o connetti un numero a un trunk SIP.
L'acquisto di numeri nella dashboard va oltre ciò che questi endpoint espongono. Numeri istantanei senza pratiche burocratiche sono disponibili in Austria, Germania, Svizzera, Stati Uniti e Canada; ogni altro paese usa un flusso self-service guidato in cui invii i tuoi documenti normativi (e puoi salvarli come bozza per riprenderli più tardi). La schermata di acquisto offre i tipi locale, mobile, nazionale e numero verde — più numeri avanzati (+€2/mese) e numeri per le chiamate WhatsApp. Il BYO SIP è neutrale rispetto al fornitore (sipgate, Placetel, TENIOS, easybell, Zadarma, Telnyx, trunk personalizzati — non solo importazione da Twilio). Vedi Numeri di telefono per il flusso completo.
Elenca numeri di telefono
GET /v1/phone-number/list
Parametri query — tutti opzionali: inbound_agent_id, outbound_agent_id, customer_id, workspace_id (e user_id, che ha come predefinito te stesso).
curl "https://api.hanc.ai/v1/phone-number/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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"
}
]
Numeri disponibili
GET /v1/phone-number/available
Elenca i numeri disponibili per l'acquisto per un paese.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
country_code | string | No | Codice paese ISO (predefinito US), es. DE, AT, CH. |
area_code | string | No | Filtro per prefisso numerico. |
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"
Esempio di risposta — 200 OK
[
{ "phone_number": "+14155550100", "formatted_number": "+1 (415) 555-0100", "country": "US", "area_code": "415", "setup_fee": 2, "subscription": 2, "currency": "EUR" }
]
Acquista un numero
POST /v1/phone-number/buy
Acquista un numero specifico. Parametri query opzionali customer_id, workspace_id.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
phone_number | string | Sì | Il numero da acquistare (E.164). |
country_code | string | Sì | Paese del numero (es. 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" }'
Esempio di risposta — 200 OK
{
"message": "Phone number purchased successfully!",
"phone_number": { "_id": "507f1f77bcf86cd799439011", "phone_number": "+14155550100", "country": "US", "provider": "twilio", "status": "active" }
}
Importa da Twilio
POST /v1/phone-number/import-twilio
Importa numeri da un account Twilio collegato. Parametri query opzionali customer_id, workspace_id.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
sid | string | Sì | 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" }'
Esempio di risposta — 200 OK (il record del numero di telefono importato).
Connetti a SIP
PATCH /v1/phone-number/connect-to-sip
Connette un numero esistente a un trunk SIP.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
phone_number | string | Sì | Il numero da connettere (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" }'
Restituisce 200 OK (body vuoto).
Voci
Elenca voci
GET /v1/voice/list
Elenca le voci disponibili. Filtra per lingua o provider e includi i cloni privati di un cliente.
Parametri query
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
language | string | No | Filtra per lingua, es. ?language=de. |
provider | string | No | 11-Labs, openai, qwen o azure. |
customer_id | string | No | Includi anche i cloni vocali privati di questo cliente. |
curl -G "https://api.hanc.ai/v1/voice/list" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "language=de"
Esempio di risposta — 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"
}
]
Abbonamento
Dettagli abbonamento
GET /v1/subscription
Restituisce il tuo abbonamento attuale, inclusi i saldi crediti e le impostazioni di ricarica.
curl "https://api.hanc.ai/v1/subscription" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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
}
Restituisce 404 se non esiste alcun record di abbonamento.
Configura la ricarica automatica
PATCH /v1/subscription/auto-top-up
Abilita o disabilita la ricarica automatica dei crediti.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
enabled | boolean | Sì | Attiva o disattiva la ricarica automatica. |
amount | number | No | Importo di cui ricaricare (20–1000). Impostalo quando abiliti. |
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 }'
Restituisce 200 OK con l'abbonamento aggiornato.
Imposta l'importo di ricarica
PATCH /v1/subscription/top-up-amount
Aggiorna l'importo di ricarica configurato.
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
top_up_amount | number | Sì | Nuovo importo (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 }'
Restituisce 200 OK con l'abbonamento aggiornato.
Clienti
Gestisci i clienti sotto la tua agenzia. Questi endpoint richiedono che il tuo account appartenga a un'agenzia.
Elenca clienti
GET /v1/customer/list
curl "https://api.hanc.ai/v1/customer/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"email": "customer@example.com",
"name": "John Doe",
"account_status": "active",
"agents_count": 3
}
]
Dettagli cliente
GET /v1/customer/:id
curl "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Restituisce l'oggetto cliente, oppure 404 se non trovato.
Crea un cliente
POST /v1/customer
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | Sì | Email di accesso del cliente. |
initial_password | string | Sì | Password iniziale (8–128 caratteri). |
name | string | Sì | Nome dell'account/azienda. |
user_full_name | string | Sì | Nome completo dell'utente cliente. |
visibility | object | No | Flag di visibilità per sezione. |
opt_out_promotions | boolean | No | Esclude il cliente dai messaggi promozionali. |
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"
}'
Restituisce 201 Created con il nuovo cliente. Restituisce 400 se l'email esiste già o se il tuo account non fa parte di un'agenzia.
Aggiorna un cliente
PATCH /v1/customer/:id
Body della richiesta — tutti opzionali: 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" }'
Restituisce 200 OK con il cliente aggiornato.
Elimina un cliente
DELETE /v1/customer/:id
curl -X DELETE "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta
{ "message": "Customer deleted successfully" }
Workspace
Raggruppa agenti, numeri e knowledge base in workspace e gestisci i loro membri.
Elenca workspace
GET /v1/workspaces/list
Parametro query opzionale customer_id.
curl "https://api.hanc.ai/v1/workspaces/list" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta — 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" }
]
}
]
Crea un workspace
POST /v1/workspaces
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | Sì | Nome del workspace (2–100 caratteri). |
description | string | No | Descrizione (0–500 caratteri). |
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." }'
Restituisce 201 Created con il workspace.
Dettagli workspace
GET /v1/workspaces/:id
curl "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Restituisce l'oggetto workspace.
Aggiorna un workspace
PATCH /v1/workspaces/:id
Body della richiesta — name (2–100) e/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" }'
Restituisce 200 OK con il workspace aggiornato.
Elimina un workspace
DELETE /v1/workspaces/:id
curl -X DELETE "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Esempio di risposta
{ "message": "Workspace deleted successfully" }
Invita un membro
POST /v1/workspaces/:workspace_id/invite-member
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | Sì | Email dell'utente da invitare. |
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" }'
Restituisce 201 Created con il workspace (il nuovo membro compare in members).
Rimuovi un membro
DELETE /v1/workspaces/:workspace_id/remove-member
Body della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | Sì | Email del membro da rimuovere. |
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" }'
Restituisce 200 OK con il workspace aggiornato.
Cosa non è disponibile tramite API
Alcune operazioni sono disponibili solo tramite la dashboard:
| Funzionalità | Motivo |
|---|---|
| Gestione delle chiavi API | Sicurezza — le chiavi non possono creare altre chiavi |
| Configurazione dei numeri di telefono | Richiede una configurazione interattiva |
| Integrazione con Google Calendar | Richiede un'autorizzazione interattiva |
| Fatturazione e pagamenti | Gestiti tramite la dashboard |
Hai bisogno di aiuto?
Contatta il nostro team di supporto all'indirizzo support@hanc.ai per domande relative all'API.