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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse201 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éponse201 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éponse200 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êtecustomer_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éponse201 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 cheminid (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éponse200 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éponse204 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 cheminid (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éponse200 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éponse200 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éponse201 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éponse201 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êtecustomer_id, workspace_id optionnels.

curl "https://api.hanc.ai/v1/knowledge-base/list" \
-H "x-api-key: YOUR_API_KEY"

Exemple de réponse200 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êtecustomer_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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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éponse200 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êtename (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.