Référence API
Intégrez enuchat dans vos systèmes avec l'API Tenant. Gérez les conversations, envoyez des messages et accédez aux données de facturation de manière programmatique.
Authentification
Toutes les requêtes API sont authentifiées à l'aide d'une clé API envoyée dans l'en-tête X-Api-Key.
Obtenir votre clé API
- Allez dans Paramètres → Clés API de votre tableau de bord
- Cliquez sur Créer une clé API et donnez-lui un nom
- Copiez la clé immédiatement — elle n'est affichée qu'une seule fois
- Stockez-la en sécurité (variable d'environnement, gestionnaire de secrets)
Effectuer des requêtes
Incluez la clé dans chaque requête :
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsToutes les réponses sont en JSON. Les réponses réussies ont un champ data. Les erreurs ont un champ error avec code et message.
Sécurité : les clés API sont hashées (SHA-256) dans notre base de données. Nous ne stockons jamais la clé brute. Traitez votre clé comme un mot de passe — ne la commit pas dans le code et ne la partagez pas publiquement.
URL de base
https://api.enuchat.com/api/v1/tenant-apiTous les endpoints ci-dessous sont relatifs à cette URL de base.
Endpoints
GET /widgets
Liste tous les widgets de votre compte.
Réponse
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Liste les conversations, classées par message le plus récent.
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
status | string | Filtrer par statut : open, pending, closed |
widgetId | string | Filtrer par UUID de widget |
limit | integer | Résultats max (défaut 20, max 100) |
offset | integer | Ignorer N résultats |
Exemple
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Réponse
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
Obtient une conversation avec tous les messages.
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
limit | integer | Messages max (défaut 50, max 200) |
Réponse
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Envoie un message à une conversation. Le message sera livré au visiteur en temps réel via le widget de chat.
Corps de la requête
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| Champ | Type | Description |
|---|---|---|
content | string | Requis. Le texte du message. |
role | string | system (défaut) ou operator |
Réponse (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Met à jour le statut ou l'assignation d'une conversation.
Corps de la requête
{'{'}
"status": "closed"
}| Champ | Type | Description |
|---|---|---|
status | string | open, pending, ou closed |
assignedTo | string|null | UUID d'opérateur à assigner, ou null pour désassigner |
GET /billing/balance
Obtient votre plan actuel et votre solde de crédits.
Réponse
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Gestion des erreurs
Les erreurs retournent un code de statut non-2xx avec un corps JSON :
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| Statut HTTP | Signification |
|---|---|
401 | Clé API invalide, expirée ou manquante |
400 | Corps de requête ou paramètres invalides |
404 | Ressource non trouvée (ou appartenant à un autre tenant) |
500 | Erreur serveur |
Cas d'usage courants
Intégration CRM
Interrogez les nouvelles conversations et synchronisez les données des visiteurs (nom, e-mail, langue) vers votre CRM. Utilisez l'ID de conversation comme référence externe.
Suivis automatisés
Après la fermeture d'une conversation, envoyez un message de suivi via l'API : "Merci pour la discussion ! Y a-t-il autre chose pour lequel nous pouvons vous aider ?"
Alternative aux webhooks
Jusqu'à ce que les webhooks sortants soient disponibles, interrogez périodiquement l'endpoint des conversations pour détecter les nouveaux messages ou les changements de statut.
Opérations en masse
Fermez toutes les conversations de plus de 7 jours, assignez des conversations à des opérateurs selon une logique externe, ou exportez l'historique des conversations pour analyse.
Limites de débit
L'API autorise jusqu'à 60 requêtes par minute par clé API. Si vous dépassez cette limite, vous recevrez une réponse 429 Too Many Requests. Attendez et réessayez avec un backoff exponentiel.
Prêt à intégrer ?
Créez votre compte gratuit et générez une clé API en quelques minutes.
Commencer gratuitement