Aller au contenu principal

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 basehttps://api.hanc.ai
Préfixe de versionToutes les routes sont préfixées par /v1
AuthentificationClé API via l'en-tête x-api-key
FormatJSON (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.

astuce

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 renvoient 400 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_to au format YYYY-MM-DD. date_to est 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​

ActionMéthodeEndpoint
Lister les appelsGET/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 quotidiennesGET/v1/call/daily-metrics
Statistiques de sentimentGET/v1/call/sentiment-stats
Répartition des coûtsGET/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éphoniquePOST/v1/call/make-phone-call
Passer un appel webPOST/v1/call/make-web-call

Agents​

ActionMéthodeEndpoint
Lister les agentsGET/v1/agent/list
Détails d'un agentGET/v1/agent/:id
Créer un agentPOST/v1/agent
Mettre à jour un agentPATCH/v1/agent/:id
Supprimer un agentDELETE/v1/agent/:id
Statistiques d'appels d'un agentGET/v1/agent/:id/call-stats
Lister les modèles d'agentGET/v1/agent/agent_template/list
Lister les actionsGET/v1/agent/:id/actions
Ajouter une actionPOST/v1/agent/:id/actions
Mettre à jour une actionPATCH/v1/agent/:id/actions/:agentActionId
Supprimer une actionDELETE/v1/agent/:id/actions/:agentActionId
Lister les outilsGET/v1/agent/:id/tools
Ajouter un outilPOST/v1/agent/:id/tools
Mettre à jour un outilPATCH/v1/agent/:id/tools/:agentToolId
Supprimer un outilDELETE/v1/agent/:id/tools/:agentToolId

Base de connaissances​

ActionMéthodeEndpoint
Lister les bases de connaissancesGET/v1/knowledge-base/list
Créer (avec un premier fichier)POST/v1/knowledge-base
Ajouter un seul fichierPOST/v1/knowledge-base/:id/file
Ajouter plusieurs fichiersPOST/v1/knowledge-base/:id/files
Supprimer le(s) fichier(s)DELETE/v1/knowledge-base/:id/file
Assigner des agentsPUT/v1/knowledge-base/:id/agents

Numéros de téléphone​

ActionMéthodeEndpoint
Lister les numérosGET/v1/phone-number/list
Numéros disponibles (par pays)GET/v1/phone-number/available
Acheter un numéroPOST/v1/phone-number/buy
Importer depuis TwilioPOST/v1/phone-number/import-twilio
Connecter au SIPPATCH/v1/phone-number/connect-to-sip

Voix · Abonnement · Clients · Espaces de travail​

ActionMéthodeEndpoint
Lister les voixGET/v1/voice/list
Détails de l'abonnementGET/v1/subscription
Configurer la recharge automatiquePATCH/v1/subscription/auto-top-up
Définir le montant de la rechargePATCH/v1/subscription/top-up-amount
Lister les clientsGET/v1/customer/list
Détails d'un clientGET/v1/customer/:id
Créer un clientPOST/v1/customer
Mettre à jour un clientPATCH/v1/customer/:id
Supprimer un clientDELETE/v1/customer/:id
Lister les espaces de travailGET/v1/workspaces/list
Créer un espace de travailPOST/v1/workspaces
Détails d'un espace de travailGET/v1/workspaces/:id
Mettre à jour un espace de travailPATCH/v1/workspaces/:id
Supprimer un espace de travailDELETE/v1/workspaces/:id
Inviter un membrePOST/v1/workspaces/:workspace_id/invite-member
Retirer un membreDELETE/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

NomTypeRequisDescription
agent_idsstring[]NonFiltrer par un ou plusieurs ID d'agent (répéter ou séparer par des virgules).
agent_idstringNonFiltrer par un seul agent (héritage ; préférez agent_ids).
directionenum[]Noninbound et/ou outbound.
call_statusenum[]Nonstarted, success, failed, pending.
call_typeenum[]Nonphone, web.
customer_idstringNonFiltrer par client.
workspace_idstringNonFiltrer par espace de travail.
date_from / date_tostringNonFiltre de plage (YYYY-MM-DD).
sort_orderenumNonasc ou desc.
limitnumberNonNombre max de résultats à renvoyer.
skipnumberNonRé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

NomTypeRequisDescription
idstringOuiID 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

NomTypeRequisDescription
date_fromstringOuiDate de début (YYYY-MM-DD).
date_tostringOuiDate de fin (YYYY-MM-DD, inclusive).
agent_id / agent_idsstring(s)NonRestreindre à un ou plusieurs agents.
customer_idstringNonFiltrer par client.
workspace_idstringNonFiltrer par espace de travail.
direction / call_status / call_typeenum[]NonMêmes filtres que Lister les appels.

Omettre date_from ou date_to renvoie 400 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

NomTypeRequisDescription
agent_idstringOuiAgent sur lequel faire le rapport.
date_fromstringOuiDate de début.
date_tostringOuiDate 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

NomTypeRequisDescription
date_fromstringOuiDate de début.
date_tostringOuiDate de fin (inclusive).
group_byenumNonuser (par défaut), agent ou workspace.
customer_idstringNonFiltrer par client (accès agence).
workspace_idstringNonFiltrer 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

NomTypeRequisDescription
date_fromstringOuiDate de début.
date_tostringOuiDate 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

ChampTypeRequisDescription
agent_idstringOuiAgent qui passera l'appel.
from_numberstringOuiIdentifiant de l'appelant au format E.164 (par ex. +1234567890).
to_numberstringOuiNuméro de téléphone du destinataire.
custom_dataobjectNonDonnées arbitraires attachées à l'appel.
dynamic_contextobjectNonContexte 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

ChampTypeRequisDescription
agent_idstringOuiAgent qui gérera l'appel web.
custom_dataobjectNonDonnées arbitraires attachées à l'appel.
dynamic_contextobjectNonContexte 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

NomTypeRequisDescription
customer_idstringNonLimiter à un client.
workspace_idstringNonLimiter à 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

NomTypeRequisDescription
idstringOuiID 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

ChampTypeRequisDescription
agent_namestringOuiNom d'affichage.
llm_idstringOuiID du LLM qui alimente l'agent.
voiceobjectNon{ "voice_id": "<id>" }.
interruption_sensitivitynumberNonFacilité avec laquelle l'agent cède lorsqu'il est interrompu (par ex. 0.5).
call_settingsobjectNonLangue, rappels, délai de silence, analyse de sentiment, résumé d'appel, max_call_duration_minutes (1–15).
data_retrievalobject[]NonChamps que l'agent collecte pendant un appel.
webhook_urlstringNonURL notifiée des événements de l'agent.
is_data_collection_activebooleanNonActiver 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

NomTypeRequisDescription
date_fromstringOuiDate de début (YYYY-MM-DD).
date_tostringOuiDate 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

ChampTypeRequisDescription
action_typeenumOuisend_email, send_sms, send_whatsapp ou api_call.
settingsobjectOuiConfiguration propre au type.
is_activebooleanNonVaut 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

ChampTypeRequisDescription
tool_typeenumOuiL'un des types d'outil pris en charge ci-dessus.
settingsobjectOuiConfiguration propre au type.
is_activebooleanNonVaut 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

ChampTypeRequisDescription
filefileOuiLe premier document (par ex. un PDF).
namestringOuiNom de la base de connaissances (1–100 caractères).
descriptionstringOuiDescription (1–300 caractères).
folderstringNonÉ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

ChampTypeRequisDescription
file_idsstring[]OuiTableau 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

ChampTypeRequisDescription
agent_idsstring[]OuiID 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.

Acheter des numéros dans le tableau de bord

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

NomTypeRequisDescription
country_codestringNonCode pays ISO (US par défaut), par ex. DE, AT, CH.
area_codestringNonFiltre 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

ChampTypeRequisDescription
phone_numberstringOuiLe numéro à acheter (E.164).
country_codestringOuiPays 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

ChampTypeRequisDescription
sidstringOuiTwilio 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

ChampTypeRequisDescription
phone_numberstringOuiLe 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

NomTypeRequisDescription
languagestringNonFiltrer par langue, par ex. ?language=de.
providerstringNon11-Labs, openai, qwen ou azure.
customer_idstringNonInclure 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

ChampTypeRequisDescription
enabledbooleanOuiActiver ou désactiver la recharge automatique.
amountnumberNonMontant 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

ChampTypeRequisDescription
top_up_amountnumberOuiNouveau 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

ChampTypeRequisDescription
emailstringOuiE-mail de connexion du client.
initial_passwordstringOuiMot de passe initial (8–128 caractères).
namestringOuiNom du compte/de l'entreprise.
user_full_namestringOuiNom complet de l'utilisateur client.
visibilityobjectNonIndicateurs de visibilité par section.
opt_out_promotionsbooleanNonDé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

ChampTypeRequisDescription
namestringOuiNom de l'espace de travail (2–100 caractères).
descriptionstringNonDescription (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

ChampTypeRequisDescription
emailstringOuiE-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

ChampTypeRequisDescription
emailstringOuiE-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 APISécurité — les clés ne peuvent pas en créer d'autres
Configuration des numéros de téléphoneNécessite une configuration interactive
Intégration Google CalendarNécessite une autorisation interactive
Facturation et paiementsGé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.