Référence de l’API Entagl
L’API Entagl permet à votre propre logiciel de travailler avec un workspace Entagl : contacts, conversations, messages, réservations, rappels, commandes, produits, appels AI et campagnes. Les webhooks avertissent vos systèmes dès que quelque chose se passe. C’est la même API que celle de l’application Entagl pour Make.
URL de base
https://api.entagl.com/api/v1Les requêtes et les réponses sont en JSON sur HTTPS. Les noms de champ sont en snake_case. Les ID sont des entiers, sauf indication contraire d’un endpoint. Les dates et heures sont des chaînes ISO 8601 ; les réponses utilisent UTC.
Authentification
Envoyez un jeton avec chaque requête dans l’en-tête Authorization : Authorization: Bearer <token>. Deux types de jeton fonctionnent :
Clé API
Pour le code de votre propre serveur. Créez-en une dans l’application Entagl sous Paramètres → Clés API. Les clés commencent par ai_. Une clé fonctionne sur le workspace où elle a été créée et y dispose des droits de propriétaire : gardez-la secrète et ne la mettez jamais dans un navigateur ni dans une application mobile.
Jeton d’accès OAuth 2.0
Utilisé par des connecteurs comme l’application Entagl pour Make. La personne se connecte avec son compte Entagl, et le connecteur agit en son nom avec son rôle dans le workspace. Pour créer votre propre intégration OAuth, contactez support@entagl.com.
curl "https://api.entagl.com/api/v1/contacts?limit=2" \
-H "Authorization: Bearer ai_your_api_key"Un en-tête manquant renvoie 401 unauthenticated. Une clé incorrecte ou révoquée renvoie 401 invalid_api_key. Un jeton OAuth expiré renvoie 401 invalid_token : renouvelez-le et réessayez.
Workspaces et permissions
Chaque requête agit sur un seul workspace. Une clé API utilise toujours son propre workspace. Une connexion OAuth peut appartenir à plusieurs workspaces (dont vous êtes propriétaire, ou que vous avez rejoints comme membre de l’équipe) : envoyez l’en-tête X-Entagl-Workspace avec l’ID du workspace pour en choisir un. Avec un seul workspace, l’en-tête est facultatif. GET /me fonctionne sans l’en-tête et liste tous les workspaces que la connexion peut utiliser.
curl "https://api.entagl.com/api/v1/me" \
-H "Authorization: Bearer <oauth_access_token>"
curl "https://api.entagl.com/api/v1/contacts" \
-H "Authorization: Bearer <oauth_access_token>" \
-H "X-Entagl-Workspace: <workspace_id from /me>"Sans l’en-tête, une connexion à plusieurs workspaces reçoit 400 workspace_required ; un workspace auquel la connexion n’a pas accès renvoie 403 workspace_forbidden. Un ID qui appartient à un autre workspace renvoie toujours 404 not_found, jamais 403.
Chaque endpoint ci-dessous indique la permission requise. Les propriétaires, les admins et les clés API passent toutes les vérifications. Les membres de l’équipe passent quand leur rôle a cette permission cochée dans les paramètres de l’équipe : contacts, inbox, calendar, orders, business_pages, call_agent, campaigns ou integrations. Sans elle, l’API renvoie 403 insufficient_permissions.
Requêtes et erreurs
Envoyez les corps en JSON avec Content-Type: application/json. La plupart des endpoints rejettent avec 422 les champs inconnus du corps : une faute de frappe ne passe donc jamais inaperçue. Chaque erreur a la même forme : un code stable sur lequel brancher votre logique, un message lisible et, pour les erreurs de validation, une liste details qui désigne chaque champ incorrect.
{
"error": {
"code": "validation_failed",
"message": "Invalid email address",
"details": [
{ "path": "email", "message": "Invalid email address" }
]
}
}- 400Requête mal formée : ID invalide, curseur invalide, en-tête de workspace manquant.
- 401Jeton manquant, invalide ou expiré.
- 402Pas assez de crédits pour l’action (par exemple l’envoi d’une campagne).
- 403Authentifié, mais non autorisé : permission ou accès au workspace manquant.
- 404Introuvable, y compris pour les ID d’un autre workspace.
- 409Conflit : nom en double, mauvais état ou conflit d’Idempotency-Key.
- 422Validation échouée, ou une règle métier a refusé le changement.
- 429Limite de débit atteinte. Voir Retry-After.
- 500 / 502Entagl ou le canal de messagerie a échoué. Vérifiez le résultat avant de réessayer une écriture.
Les routes marquées Ancien format de réponse sont antérieures à ces conventions : elles renvoient de simples objets ou tableaux JSON et répondent à la plupart des erreurs sous la forme { "message": "…" }.
Pagination
Les endpoints marqués Paginé renvoient d’abord les éléments les plus récents, dans une enveloppe de liste. Demandez jusqu’à 100 éléments avec limit (25 par défaut). Quand has_more vaut true, passez next_cursor comme starting_after pour obtenir la page suivante. Les autres listes renvoient tout d’un coup avec has_more: false.
{
"object": "list",
"data": [
{
"object": "contact",
"id": 6789,
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+15551234567",
"tags": ["vip"]
}
],
"has_more": true,
"next_cursor": "6789"
}curl "https://api.entagl.com/api/v1/contacts?limit=100&starting_after=6789" \
-H "Authorization: Bearer ai_your_api_key"Idempotence
Chaque endpoint POST au format standard accepte l'en-tête Idempotency-Key (200 caractères maximum). Utilisez une valeur unique par opération, par exemple un UUID. Entagl conserve la première réponse pendant 24 heures : une nouvelle tentative avec la même clé et le même corps renvoie cette réponse avec Idempotent-Replayed: true, et rien ne s'exécute deux fois. Les routes marquées Ancien format de réponse fonctionnent autrement, voir ci-dessous.
curl -X POST "https://api.entagl.com/api/v1/contacts" \
-H "Authorization: Bearer ai_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f9c1d2e-order-7781" \
-d '{ "first_name": "Jane", "phone": "+15551234567", "tags": ["vip"] }'- La même clé avec un corps différent renvoie
409 idempotency_key_reused. - Tant que la première requête est en cours, ou si elle ne s’est jamais terminée, une nouvelle tentative renvoie
409 request_in_progress. Vérifiez le résultat, puis réessayez avec une nouvelle clé. - Chaque résultat est conservé, erreurs comprises. Pour relancer une requête échouée, utilisez une nouvelle clé.
- Les clés sont propres au workspace et à l’identifiant d’accès.
Anciennes routes. POST /messages accepte aussi Idempotency-Key (ou un message_id dans le corps) : une nouvelle tentative pour un message déjà accepté répond 202 avec le même conversationId et n'est pas traitée deux fois, et la même clé avec un autre corps répond 409. POST /chat n'a aucune protection contre les doublons : une nouvelle tentative relance l'IA, vérifiez donc le résultat avant de réessayer.
Limites de débit
Chaque workspace peut faire 120 requêtes par minute, partagées entre toutes ses clés API et connexions. Les réponses contiennent RateLimit-Limit, RateLimit-Remaining et RateLimit-Reset (secondes avant la réinitialisation de la fenêtre). Au-delà de la limite, vous recevez 429 rate_limited avec un en-tête Retry-After : attendez ce nombre de secondes, puis réessayez. Les anciennes routes du canal API ne comptent pas dans cette limite.