Référence API
Documentation API complète pour intégrer Hanc.AI dans vos applications. Gérez les agents, récupérez les données d'appels, passez des appels et pilotez chaque partie de la plateforme de manière programmatique.
Chaque section ci-dessous vous donne la méthode et le chemin HTTP, les paramètres (chemin, requête et corps), un exemple de requête prêt à l'emploi et un exemple de réponse représentatif, pour que vous puissiez intégrer sans deviner la forme des payloads.
Aperçu rapide
| URL de base | https://api.hanc.ai |
| Préfixe de version | Toutes les routes sont préfixées par /v1 |
| Authentification | Clé API via l'en-tête x-api-key |
| Format | JSON (requête et réponse) |
Générez une clé API depuis Intégration → Clés API dans le tableau de bord. Vous pouvez avoir jusqu'à 3 clés par utilisateur — voir la section Clés API dans Intégrations pour la configuration, les permissions et les conseils de sécurité.
curl -X GET "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Authentification
Envoyez votre clé dans l'en-tête x-api-key à chaque requête :
x-api-key: YOUR_API_KEY
La clé se résout vers l'utilisateur qui la possède, et chaque requête est automatiquement limitée à cet utilisateur — vous ne passez jamais d'ID utilisateur. Une clé manquante ou invalide est rejetée avec 401 Unauthorized / 403 Forbidden.
Gardez les clés côté serveur. N'intégrez jamais une clé API dans un navigateur, une application mobile ou tout client que l'utilisateur final peut inspecter. Si une clé fuit, révoquez-la dans Intégration → Clés API et émettez-en une nouvelle.
Conventions
Quelques règles s'appliquent à toute l'API. Les lire une fois vous fera gagner du temps de débogage :
- Préfixe de version — chaque chemin commence par
/v1(par ex.https://api.hanc.ai/v1/agent/list). - Les ID sont des ObjectId Mongo — tout
:id(et:agentActionId,:agentToolId, etc.) doit être une chaîne hexadécimale de 24 caractères. Les ID mal formés renvoient400 Bad Request. - Les champs de corps inconnus sont supprimés — l'API valide les corps de requête et supprime silencieusement les propriétés qu'elle ne reconnaît pas ; une faute de frappe dans un nom de champ est donc ignorée plutôt que stockée.
- Dates — les endpoints d'analytics/export prennent
date_from/date_toau formatYYYY-MM-DD.date_toest inclusif jusqu'à la fin de ce jour. - Paramètres de requête en tableau — lorsqu'un filtre accepte plusieurs valeurs (par ex.
agent_ids,direction), vous pouvez répéter la clé (?direction=inbound&direction=outbound) ou les séparer par des virgules (?direction=inbound,outbound). - Les horodatages dans les réponses sont en millisecondes epoch sauf s'ils sont présentés comme une chaîne ISO‑8601.
Index des endpoints
Une carte rapide de tout ce qui est disponible. La documentation détaillée de chacun suit ci-dessous.
Appels
| Action | Méthode | Endpoint |
|---|---|---|
| Lister les appels | GET | /v1/call/list |
| Détails d'un appel (transcription, sentiment, résumé) | GET | /v1/call/:id |
| Analytics générales (totaux sur une plage) | GET | /v1/call/general-metrics |
| Analytics quotidiennes | GET | /v1/call/daily-metrics |
| Statistiques de sentiment | GET | /v1/call/sentiment-stats |
| Répartition des coûts | GET | /v1/call/costs-breakdown |
| Exporter les appels (CSV) | GET | /v1/call/list/export |
| Exporter les coûts (CSV) | GET | /v1/call/costs-breakdown/export |
| Passer un appel téléphonique | POST | /v1/call/make-phone-call |
| Passer un appel web | POST | /v1/call/make-web-call |
Agents
| Action | Méthode | Endpoint |
|---|---|---|
| Lister les agents | GET | /v1/agent/list |
| Détails d'un agent | GET | /v1/agent/:id |
| Créer un agent | POST | /v1/agent |
| Mettre à jour un agent | PATCH | /v1/agent/:id |
| Supprimer un agent | DELETE | /v1/agent/:id |
| Statistiques d'appels d'un agent | GET | /v1/agent/:id/call-stats |
| Lister les modèles d'agent | GET | /v1/agent/agent_template/list |
| Lister les actions | GET | /v1/agent/:id/actions |
| Ajouter une action | POST | /v1/agent/:id/actions |
| Mettre à jour une action | PATCH | /v1/agent/:id/actions/:agentActionId |
| Supprimer une action | DELETE | /v1/agent/:id/actions/:agentActionId |
| Lister les outils | GET | /v1/agent/:id/tools |
| Ajouter un outil | POST | /v1/agent/:id/tools |
| Mettre à jour un outil | PATCH | /v1/agent/:id/tools/:agentToolId |
| Supprimer un outil | DELETE | /v1/agent/:id/tools/:agentToolId |
Base de connaissances
| Action | Méthode | Endpoint |
|---|---|---|
| Lister les bases de connaissances | GET | /v1/knowledge-base/list |
| Créer (avec un premier fichier) | POST | /v1/knowledge-base |
| Ajouter un seul fichier | POST | /v1/knowledge-base/:id/file |
| Ajouter plusieurs fichiers | POST | /v1/knowledge-base/:id/files |
| Supprimer le(s) fichier(s) | DELETE | /v1/knowledge-base/:id/file |
| Assigner des agents | PUT | /v1/knowledge-base/:id/agents |
Numéros de téléphone
| Action | Méthode | Endpoint |
|---|---|---|
| Lister les numéros | GET | /v1/phone-number/list |
| Numéros disponibles (par pays) | GET | /v1/phone-number/available |
| Acheter un numéro | POST | /v1/phone-number/buy |
| Importer depuis Twilio | POST | /v1/phone-number/import-twilio |
| Connecter au SIP | PATCH | /v1/phone-number/connect-to-sip |
Voix · Abonnement · Clients · Espaces de travail
| Action | Méthode | Endpoint |
|---|---|---|
| Lister les voix | GET | /v1/voice/list |
| Détails de l'abonnement | GET | /v1/subscription |
| Configurer la recharge automatique | PATCH | /v1/subscription/auto-top-up |
| Définir le montant de la recharge | PATCH | /v1/subscription/top-up-amount |
| Lister les clients | GET | /v1/customer/list |
| Détails d'un client | GET | /v1/customer/:id |
| Créer un client | POST | /v1/customer |
| Mettre à jour un client | PATCH | /v1/customer/:id |
| Supprimer un client | DELETE | /v1/customer/:id |
| Lister les espaces de travail | GET | /v1/workspaces/list |
| Créer un espace de travail | POST | /v1/workspaces |
| Détails d'un espace de travail | GET | /v1/workspaces/:id |
| Mettre à jour un espace de travail | PATCH | /v1/workspaces/:id |
| Supprimer un espace de travail | DELETE | /v1/workspaces/:id |
| Inviter un membre | POST | /v1/workspaces/:workspace_id/invite-member |
| Retirer un membre | DELETE | /v1/workspaces/:workspace_id/remove-member |
Appels
Gérez et analysez les appels vocaux : listez et inspectez les appels (transcription, sentiment, résumé), tirez des métriques agrégées, exportez des rapports CSV et passez des appels téléphoniques et web sortants.
Lister les appels
GET /v1/call/list
Liste les appels de votre compte avec filtrage, tri et pagination.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
agent_ids | string[] | Non | Filtrer par un ou plusieurs ID d'agent (répéter ou séparer par des virgules). |
agent_id | string | Non | Filtrer par un seul agent (héritage ; préférez agent_ids). |
direction | enum[] | Non | inbound et/ou outbound. |
call_status | enum[] | Non | started, success, failed, pending. |
call_type | enum[] | Non | phone, web. |
customer_id | string | Non | Filtrer par client. |
workspace_id | string | Non | Filtrer par espace de travail. |
date_from / date_to | string | Non | Filtre de plage (YYYY-MM-DD). |
sort_order | enum | Non | asc ou desc. |
limit | number | Non | Nombre max de résultats à renvoyer. |
skip | number | Non | Résultats à ignorer (décalage de pagination). |
Exemple de requête
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"
Exemple de réponse — 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
}
]
Obtenir les détails d'un appel
GET /v1/call/:id
Récupérez tous les détails d'un appel — transcription, sentiment, résumé, crédits et métriques de performance.
Paramètres de chemin
| Nom | Type | Requis | Description |
|---|---|---|---|
id | string | Oui | ID de l'appel. |
Exemple de requête
curl "https://api.hanc.ai/v1/call/507f1f77bcf86cd799439011" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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
}
}
Renvoie 404 si l'appel n'existe pas ou n'appartient pas à votre compte.
Métriques générales
GET /v1/call/general-metrics
Totaux agrégés (nombre d'appels, durée totale et moyenne) sur une plage de dates.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
date_from | string | Oui | Date de début (YYYY-MM-DD). |
date_to | string | Oui | Date de fin (YYYY-MM-DD, inclusive). |
agent_id / agent_ids | string(s) | Non | Restreindre à un ou plusieurs agents. |
customer_id | string | Non | Filtrer par client. |
workspace_id | string | Non | Filtrer par espace de travail. |
direction / call_status / call_type | enum[] | Non | Mêmes filtres que Lister les appels. |
Omettre
date_fromoudate_torenvoie400 Bad Request.
Exemple de requête
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"
Exemple de réponse — 200 OK
{ "total_calls": 128, "total_duration": 45230, "average_duration": 353 }
Métriques quotidiennes
GET /v1/call/daily-metrics
Durée totale d'appel par jour sur une plage de dates — idéal pour tracer des tendances.
Paramètres de requête — identiques à Métriques générales (date_from/date_to requis, plus les filtres optionnels agent/client/espace de travail/sens/statut/type).
Exemple de requête
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"
Exemple de réponse — 200 OK
[
{ "date": "2026-05-01", "total_duration": 5400 },
{ "date": "2026-05-02", "total_duration": 7320 },
{ "date": "2026-05-03", "total_duration": 0 }
]
Statistiques de sentiment
GET /v1/call/sentiment-stats
Nombre d'appels par sentiment pour un agent sur une plage de dates.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
agent_id | string | Oui | Agent sur lequel faire le rapport. |
date_from | string | Oui | Date de début. |
date_to | string | Oui | Date de fin (inclusive). |
Exemple de requête
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"
Exemple de réponse — 200 OK
{ "positive": 84, "negative": 12, "neutral": 32 }
Répartition des coûts
GET /v1/call/costs-breakdown
Répartition des coûts/usage (appels, minutes, crédits, tokens, détail par modèle) regroupée par utilisateur, agent ou espace de travail.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
date_from | string | Oui | Date de début. |
date_to | string | Oui | Date de fin (inclusive). |
group_by | enum | Non | user (par défaut), agent ou workspace. |
customer_id | string | Non | Filtrer par client (accès agence). |
workspace_id | string | Non | Filtrer par espace de travail. |
Exemple de requête
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"
Exemple de réponse — 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 }
}
Exporter les appels (CSV)
GET /v1/call/list/export
Téléchargez chaque appel d'une plage de dates dans un fichier CSV (avec le détail des tokens par appel et par modèle).
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
date_from | string | Oui | Date de début. |
date_to | string | Oui | Date de fin (inclusive). |
Réponse — un fichier CSV (Content-Type: text/csv), servi en pièce jointe nommée call-details_<date_from>_<date_to>.csv.
Exemple de requête
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
Exporter les coûts (CSV)
GET /v1/call/costs-breakdown/export
Téléchargez la répartition des coûts dans un fichier CSV.
Paramètres de requête — identiques à Répartition des coûts (date_from/date_to requis ; group_by, customer_id, workspace_id optionnels).
Réponse — un fichier CSV servi sous le nom costs-breakdown_<date_from>_<date_to>.csv.
Exemple de requête
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
Passer un appel téléphonique
POST /v1/call/make-phone-call
Passez un appel téléphonique sortant depuis l'un de vos agents.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
agent_id | string | Oui | Agent qui passera l'appel. |
from_number | string | Oui | Identifiant de l'appelant au format E.164 (par ex. +1234567890). |
to_number | string | Oui | Numéro de téléphone du destinataire. |
custom_data | object | Non | Données arbitraires attachées à l'appel. |
dynamic_context | object | Non | Contexte transmis à la conversation (par ex. nom du client). |
Exemple de requête
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" }
}'
Exemple de réponse — 201 Created
{
"_id": "507f1f77bcf86cd799439011",
"call_type": "phone",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"call_from": "+1234567890",
"call_to": "+19876543210",
"direction": "outbound",
"start_timestamp": 1703302407333
}
Passer un appel web
POST /v1/call/make-web-call
Créez une session d'appel navigateur/WebRTC pour l'un de vos agents.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
agent_id | string | Oui | Agent qui gérera l'appel web. |
custom_data | object | Non | Données arbitraires attachées à l'appel. |
dynamic_context | object | Non | Contexte transmis à la conversation. |
Exemple de requête
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" } }'
Exemple de réponse — 201 Created
{
"_id": "507f1f77bcf86cd799439077",
"call_type": "web",
"agent_id": "507f1f77bcf86cd799439042",
"call_status": "started",
"start_timestamp": 1703302407333
}
Agents
Créez et gérez des agents vocaux, leurs actions (ce qu'ils font pendant un appel — envoyer un e-mail/SMS/WhatsApp, appeler votre API) et leurs outils (capacités telles que recherche RAG, prise de rendez-vous, transfert d'appel, intégrations calendrier/CRM).
Lister les agents
GET /v1/agent/list
Renvoie tous les agents appartenant à votre compte.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
customer_id | string | Non | Limiter à un client. |
workspace_id | string | Non | Limiter à un espace de travail. |
Exemple de requête
curl "https://api.hanc.ai/v1/agent/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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"]
}
]
Obtenir un agent
GET /v1/agent/:id
Renvoie un seul agent.
Paramètres de chemin
| Nom | Type | Requis | Description |
|---|---|---|---|
id | string | Oui | ID de l'agent. |
Exemple de requête
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Renvoie l'objet agent (même forme qu'un élément de Lister les agents), ou 404 s'il est introuvable.
Créer un agent
POST /v1/agent
Créez un nouvel agent. Seuls agent_name et llm_id sont requis — tout le reste est optionnel et retombe sur des valeurs par défaut raisonnables.
Paramètres de requête — customer_id, workspace_id optionnels pour associer le nouvel agent.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
agent_name | string | Oui | Nom d'affichage. |
llm_id | string | Oui | ID du LLM qui alimente l'agent. |
voice | object | Non | { "voice_id": "<id>" }. |
interruption_sensitivity | number | Non | Facilité avec laquelle l'agent cède lorsqu'il est interrompu (par ex. 0.5). |
call_settings | object | Non | Langue, rappels, délai de silence, analyse de sentiment, résumé d'appel, max_call_duration_minutes (1–15). |
data_retrieval | object[] | Non | Champs que l'agent collecte pendant un appel. |
webhook_url | string | Non | URL notifiée des événements de l'agent. |
is_data_collection_active | boolean | Non | Activer le formulaire de collecte de données. |
Exemple de requête
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 }
}'
Exemple de réponse — 201 Created (l'objet agent créé).
Mettre à jour un agent
PATCH /v1/agent/:id
Mettez partiellement à jour un agent. Tous les champs du corps sont optionnels — n'envoyez que ce que vous voulez changer.
Paramètres de chemin — id (ID de l'agent).
Corps de la requête — tout sous-ensemble des champs de création, plus folder, status (par ex. active), is_customer_memory_active, widget_settings, callback_settings. Dans call_settings, vous pouvez aussi définir recording_enabled, stt_languages (jusqu'à 4 codes BCP‑47) et max_call_duration_minutes.
Exemple de requête
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 } }'
Exemple de réponse — 200 OK (l'objet agent mis à jour).
Supprimer un agent
DELETE /v1/agent/:id
Supprimez un agent.
Exemple de requête
curl -X DELETE "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 204 No Content (corps vide).
Statistiques d'appels d'un agent
GET /v1/agent/:id/call-stats
Nombre d'appels par jour pour un agent sur une plage de dates.
Paramètres de chemin — id (ID de l'agent).
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
date_from | string | Oui | Date de début (YYYY-MM-DD). |
date_to | string | Oui | Date de fin (YYYY-MM-DD). |
Exemple de requête
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"
Exemple de réponse — 200 OK
[
{ "date": "2026-05-28", "total_calls": 10 },
{ "date": "2026-05-29", "total_calls": 4 }
]
Lister les modèles d'agent
GET /v1/agent/agent_template/list
Renvoie le catalogue de modèles d'agent prédéfinis que vous pouvez cloner. Aucun paramètre.
Exemple de requête
curl "https://api.hanc.ai/v1/agent/agent_template/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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?" }
}
]
Actions de l'agent
Les actions sont des choses qu'un agent effectue pendant un appel. Valeurs de action_type prises en charge : send_email, send_sms, send_whatsapp, api_call. La forme de l'objet settings dépend du type.
Lister les actions
GET /v1/agent/:id/actions
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/actions" \
-H "x-api-key: YOUR_API_KEY"
Renvoie un tableau d'objets action.
Ajouter une action
POST /v1/agent/:id/actions
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
action_type | enum | Oui | send_email, send_sms, send_whatsapp ou api_call. |
settings | object | Oui | Configuration propre au type. |
is_active | boolean | Non | Vaut true par défaut. |
Exemple de requête
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"]
}
}'
Exemple de réponse — 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
}
Mettre à jour une action
PATCH /v1/agent/:id/actions/:agentActionId
Met à jour les settings et/ou is_active d'une action attachée. Les deux champs du corps sont optionnels.
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 }'
Renvoie 200 OK avec l'objet action mis à jour.
Supprimer une action
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"
Renvoie 204 No Content.
Outils de l'agent
Les outils donnent à un agent des capacités supplémentaires. Valeurs de tool_type prises en charge : api_rag, appointment_booking, call_forwarding, end_call, google_calendar, outlook_calendar, etermin, resmio, hubspot_crm, agent_transfer, mcp. La forme de l'objet settings dépend du type.
etermin et resmio sont des outils de prise de rendez-vous/réservation en direct : l'agent vérifie la disponibilité et réserve, replanifie ou annule directement dans le compte eTermin ou resmio connecté. Les deux nécessitent que l'intégration correspondante soit d'abord connectée au compte.
Lister les outils
GET /v1/agent/:id/tools
curl "https://api.hanc.ai/v1/agent/60d21b4667d0d8992e610c85/tools" \
-H "x-api-key: YOUR_API_KEY"
Renvoie un tableau d'objets outil.
Ajouter un outil
POST /v1/agent/:id/tools
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
tool_type | enum | Oui | L'un des types d'outil pris en charge ci-dessus. |
settings | object | Oui | Configuration propre au type. |
is_active | boolean | Non | Vaut true par défaut. |
Exemple de requête
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" }
}'
Exemple de réponse — 201 Created
{
"_id": "60f5b1a8d1b9f7c1d0c0a6c6",
"agent_id": "60d21b4667d0d8992e610c85",
"tool_type": "call_forwarding",
"settings": { "name": "Transfer to human", "phone_number": "+1234567890" },
"is_active": true
}
Mettre à jour un outil
PATCH /v1/agent/:id/tools/:agentToolId
Met à jour les settings et/ou is_active d'un outil attaché (les deux optionnels).
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 }'
Renvoie 200 OK avec l'objet outil mis à jour.
Supprimer un outil
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"
Renvoie 204 No Content.
Base de connaissances
Téléversez des documents que vos agents peuvent rechercher pendant un appel, et contrôlez quels agents utilisent chaque base de connaissances. Les téléversements de fichiers utilisent multipart/form-data.
Lister les bases de connaissances
GET /v1/knowledge-base/list
Paramètres de requête — customer_id, workspace_id optionnels.
curl "https://api.hanc.ai/v1/knowledge-base/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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"]
}
]
Créer une base de connaissances
POST /v1/knowledge-base
Créez une base de connaissances avec son premier fichier. Il s'agit d'une requête multipart/form-data — il n'y a pas de « création » avec corps seul.
Paramètres de requête — customer_id, workspace_id optionnels.
Champs de formulaire
| Champ | Type | Requis | Description |
|---|---|---|---|
file | file | Oui | Le premier document (par ex. un PDF). |
name | string | Oui | Nom de la base de connaissances (1–100 caractères). |
description | string | Oui | Description (1–300 caractères). |
folder | string | Non | Étiquette de dossier/catégorie (0–50 caractères). |
Exemple de requête
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"
Exemple de réponse — 200 OK (la base de connaissances créée, même forme qu'un élément de liste).
Ajouter un seul fichier
POST /v1/knowledge-base/:id/file
Ajoutez un fichier à une base de connaissances existante. Nom du champ 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"
Renvoie 200 OK avec la base de connaissances mise à jour.
Ajouter plusieurs fichiers
POST /v1/knowledge-base/:id/files
Ajoutez plusieurs fichiers d'un coup. Nom du champ multipart : files (répéter pour chaque fichier). Paramètres de requête customer_id, workspace_id optionnels.
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"
Renvoie 200 OK avec la base de connaissances mise à jour.
Supprimer le(s) fichier(s)
DELETE /v1/knowledge-base/:id/file
Retirez un ou plusieurs fichiers par ID. Malgré le chemin au singulier, le corps prend un tableau.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
file_ids | string[] | Oui | Tableau non vide d'ID de fichiers à supprimer. |
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"] }'
Renvoie 200 OK.
Assigner des agents
PUT /v1/knowledge-base/:id/agents
Définissez (remplacez) la liste complète des agents qui utilisent cette base de connaissances.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
agent_ids | string[] | Oui | ID des agents qui devraient utiliser cette base de connaissances. |
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"] }'
Renvoie 200 OK.
Numéros de téléphone
Listez vos numéros, trouvez des numéros disponibles à l'achat, achetez-en un, importez des numéros depuis un compte Twilio connecté ou connectez un numéro à un trunk SIP.
L'achat de numéros dans le tableau de bord va au-delà de ce que ces endpoints exposent. Des numéros instantanés et sans paperasse sont disponibles en Autriche, en Allemagne, en Suisse, aux États-Unis et au Canada ; tout autre pays utilise un flux guidé en libre-service où vous soumettez vos propres documents réglementaires (et pouvez les enregistrer en brouillon pour reprendre plus tard). L'écran d'achat propose les types local, mobile, national et numéro vert — plus des numéros avancés (+2 €/mois) et des numéros d'appel WhatsApp. Le BYO SIP est neutre vis-à-vis du fournisseur (sipgate, Placetel, TENIOS, easybell, Zadarma, Telnyx, trunks personnalisés — pas seulement l'import Twilio). Voir Numéros de téléphone pour le flux complet.
Lister les numéros de téléphone
GET /v1/phone-number/list
Paramètres de requête — tous optionnels : inbound_agent_id, outbound_agent_id, customer_id, workspace_id (et user_id, vous-même par défaut).
curl "https://api.hanc.ai/v1/phone-number/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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"
}
]
Numéros disponibles
GET /v1/phone-number/available
Liste les numéros disponibles à l'achat pour un pays.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
country_code | string | Non | Code pays ISO (US par défaut), par ex. DE, AT, CH. |
area_code | string | Non | Filtre par indicatif régional numérique. |
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"
Exemple de réponse — 200 OK
[
{ "phone_number": "+14155550100", "formatted_number": "+1 (415) 555-0100", "country": "US", "area_code": "415", "setup_fee": 2, "subscription": 2, "currency": "EUR" }
]
Acheter un numéro
POST /v1/phone-number/buy
Achetez un numéro précis. Paramètres de requête customer_id, workspace_id optionnels.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
phone_number | string | Oui | Le numéro à acheter (E.164). |
country_code | string | Oui | Pays du numéro (par 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" }'
Exemple de réponse — 200 OK
{
"message": "Phone number purchased successfully!",
"phone_number": { "_id": "507f1f77bcf86cd799439011", "phone_number": "+14155550100", "country": "US", "provider": "twilio", "status": "active" }
}
Importer depuis Twilio
POST /v1/phone-number/import-twilio
Importez des numéros depuis un compte Twilio connecté. Paramètres de requête customer_id, workspace_id optionnels.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
sid | string | Oui | 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" }'
Exemple de réponse — 200 OK (l'enregistrement du numéro de téléphone importé).
Connecter au SIP
PATCH /v1/phone-number/connect-to-sip
Connectez un numéro existant à un trunk SIP.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
phone_number | string | Oui | Le numéro à connecter (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" }'
Renvoie 200 OK (corps vide).
Voix
Lister les voix
GET /v1/voice/list
Liste les voix disponibles. Filtrez par langue ou fournisseur, et incluez les clones privés d'un client.
Paramètres de requête
| Nom | Type | Requis | Description |
|---|---|---|---|
language | string | Non | Filtrer par langue, par ex. ?language=de. |
provider | string | Non | 11-Labs, openai, qwen ou azure. |
customer_id | string | Non | Inclure aussi les clones de voix privés de ce client. |
curl -G "https://api.hanc.ai/v1/voice/list" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "language=de"
Exemple de réponse — 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"
}
]
Abonnement
Détails de l'abonnement
GET /v1/subscription
Renvoie votre abonnement actuel, y compris les soldes de crédits et les paramètres de recharge.
curl "https://api.hanc.ai/v1/subscription" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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
}
Renvoie 404 si aucun enregistrement d'abonnement n'existe.
Configurer la recharge automatique
PATCH /v1/subscription/auto-top-up
Activez ou désactivez la recharge automatique des crédits.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
enabled | boolean | Oui | Activer ou désactiver la recharge automatique. |
amount | number | Non | Montant de la recharge (20–1000). À définir lors de l'activation. |
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 }'
Renvoie 200 OK avec l'abonnement mis à jour.
Définir le montant de la recharge
PATCH /v1/subscription/top-up-amount
Mettez à jour le montant de recharge configuré.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
top_up_amount | number | Oui | Nouveau montant (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 }'
Renvoie 200 OK avec l'abonnement mis à jour.
Clients
Gérez les clients de votre agence. Ces endpoints nécessitent que votre compte appartienne à une agence.
Lister les clients
GET /v1/customer/list
curl "https://api.hanc.ai/v1/customer/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 200 OK
[
{
"_id": "60d21b4667d0d8992e610c85",
"email": "customer@example.com",
"name": "John Doe",
"account_status": "active",
"agents_count": 3
}
]
Détails d'un client
GET /v1/customer/:id
curl "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Renvoie l'objet client, ou 404 s'il est introuvable.
Créer un client
POST /v1/customer
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | E-mail de connexion du client. |
initial_password | string | Oui | Mot de passe initial (8–128 caractères). |
name | string | Oui | Nom du compte/de l'entreprise. |
user_full_name | string | Oui | Nom complet de l'utilisateur client. |
visibility | object | Non | Indicateurs de visibilité par section. |
opt_out_promotions | boolean | Non | Désinscrire le client des messages promotionnels. |
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"
}'
Renvoie 201 Created avec le nouveau client. Renvoie 400 si l'e-mail existe déjà ou si votre compte ne fait pas partie d'une agence.
Mettre à jour un client
PATCH /v1/customer/:id
Corps de la requête — tous optionnels : 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" }'
Renvoie 200 OK avec le client mis à jour.
Supprimer un client
DELETE /v1/customer/:id
curl -X DELETE "https://api.hanc.ai/v1/customer/60d21b4667d0d8992e610c85" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse
{ "message": "Customer deleted successfully" }
Espaces de travail
Regroupez agents, numéros et bases de connaissances en espaces de travail et gérez leurs membres.
Lister les espaces de travail
GET /v1/workspaces/list
Paramètre de requête customer_id optionnel.
curl "https://api.hanc.ai/v1/workspaces/list" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse — 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" }
]
}
]
Créer un espace de travail
POST /v1/workspaces
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom de l'espace de travail (2–100 caractères). |
description | string | Non | Description (0–500 caractères). |
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." }'
Renvoie 201 Created avec l'espace de travail.
Détails d'un espace de travail
GET /v1/workspaces/:id
curl "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Renvoie l'objet espace de travail.
Mettre à jour un espace de travail
PATCH /v1/workspaces/:id
Corps de la requête — name (2–100) et/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" }'
Renvoie 200 OK avec l'espace de travail mis à jour.
Supprimer un espace de travail
DELETE /v1/workspaces/:id
curl -X DELETE "https://api.hanc.ai/v1/workspaces/64b1f2d2f3d92c5b8c5e1e22" \
-H "x-api-key: YOUR_API_KEY"
Exemple de réponse
{ "message": "Workspace deleted successfully" }
Inviter un membre
POST /v1/workspaces/:workspace_id/invite-member
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | E-mail de l'utilisateur à inviter. |
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" }'
Renvoie 201 Created avec l'espace de travail (le nouveau membre apparaît dans members).
Retirer un membre
DELETE /v1/workspaces/:workspace_id/remove-member
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | E-mail du membre à retirer. |
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" }'
Renvoie 200 OK avec l'espace de travail mis à jour.
Ce qui n'est pas disponible via l'API
Certaines opérations ne sont disponibles que via le tableau de bord :
| Fonctionnalité | Raison |
|---|---|
| Gestion des clés API | Sécurité — les clés ne peuvent pas en créer d'autres |
| Configuration des numéros de téléphone | Nécessite une configuration interactive |
| Intégration Google Calendar | Nécessite une autorisation interactive |
| Facturation et paiements | Gérés via le tableau de bord |
Besoin d'aide ?
Contactez notre équipe de support à support@hanc.ai pour toute question liée à l'API.