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

  1. Allez dans Paramètres → Clés API de votre tableau de bord
  2. Cliquez sur Créer une clé API et donnez-lui un nom
  3. Copiez la clé immédiatement — elle n'est affichée qu'une seule fois
  4. 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/widgets

Toutes 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-api

Tous 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ètreTypeDescription
statusstringFiltrer par statut : open, pending, closed
widgetIdstringFiltrer par UUID de widget
limitintegerRésultats max (défaut 20, max 100)
offsetintegerIgnorer 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ètreTypeDescription
limitintegerMessages 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"
}
ChampTypeDescription
contentstringRequis. Le texte du message.
rolestringsystem (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"
}
ChampTypeDescription
statusstringopen, pending, ou closed
assignedTostring|nullUUID 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 HTTPSignification
401Clé API invalide, expirée ou manquante
400Corps de requête ou paramètres invalides
404Ressource non trouvée (ou appartenant à un autre tenant)
500Erreur 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