API-Referenz
Integrieren Sie enuchat mit der Tenant-API in Ihre Systeme. Verwalten Sie Konversationen, senden Sie Nachrichten und greifen Sie programmatisch auf Abrechnungsdaten zu.
Authentifizierung
Alle API-Anfragen werden mit einem API-Schlüssel authentifiziert, der im X-Api-Key-Header gesendet wird.
Ihren API-Schlüssel erhalten
- Gehen Sie zu Einstellungen → API-Schlüssel in Ihrem Dashboard
- Klicken Sie auf API-Schlüssel erstellen und geben Sie ihm einen Namen
- Kopieren Sie den Schlüssel sofort – er wird nur einmal angezeigt
- Speichern Sie ihn sicher (Umgebungsvariable, Secrets-Manager)
Anfragen stellen
Fügen Sie den Schlüssel in jede Anfrage ein:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsAlle Antworten sind JSON. Erfolgreiche Antworten haben ein data-Feld. Fehler haben ein error-Feld mit code und message.
Sicherheit: API-Schlüssel werden in unserer Datenbank gehasht (SHA-256). Wir speichern den Rohschlüssel niemals. Behandeln Sie Ihren Schlüssel wie ein Passwort – committen Sie ihn nicht in Code und teilen Sie ihn nicht öffentlich.
Basis-URL
https://api.enuchat.com/api/v1/tenant-apiAlle unten aufgeführten Endpunkte sind relativ zu dieser Basis-URL.
Endpunkte
GET /widgets
Listet alle Widgets für Ihr Konto auf.
Antwort
{
"data": [
{
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Listet Konversationen auf, sortiert nach der neuesten Nachricht.
Query-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Filtern nach Status: open, pending, closed |
widgetId | string | Filtern nach Widget-UUID |
limit | integer | Maximale Ergebnisse (Standard 20, max. 100) |
offset | integer | N Ergebnisse überspringen |
Beispiel
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Antwort
{
"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}
Ruft eine Konversation mit allen Nachrichten ab.
Query-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
limit | integer | Maximale Nachrichten (Standard 50, max. 200) |
Antwort
{
"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
Sendet eine Nachricht an eine Konversation. Die Nachricht wird dem Besucher in Echtzeit über das Chat-Widget zugestellt.
Request-Body
{
"content": "Thanks for reaching out! We will process your request.",
"role": "system"
}| Feld | Typ | Beschreibung |
|---|---|---|
content | string | Erforderlich. Der Nachrichtentext. |
role | string | system (Standard) oder operator |
Antwort (201 Created)
{
"data": {
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{id}
Aktualisiert den Status oder die Zuweisung einer Konversation.
Request-Body
{
"status": "closed"
}| Feld | Typ | Beschreibung |
|---|---|---|
status | string | open, pending oder closed |
assignedTo | string|null | Operator-UUID zum Zuweisen oder null zum Aufheben der Zuweisung |
GET /billing/balance
Ruft Ihren aktuellen Tarif und Ihr Guthaben ab.
Antwort
{
"data": {
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Fehlerbehandlung
Fehler geben einen Nicht-2xx-Statuscode mit einem JSON-Body zurück:
{
"error": {
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| HTTP-Status | Bedeutung |
|---|---|
401 | Ungültiger, abgelaufener oder fehlender API-Schlüssel |
400 | Ungültiger Request-Body oder ungültige Parameter |
404 | Ressource nicht gefunden (oder gehört zu einem anderen Mandanten) |
500 | Server-Fehler |
Häufige Anwendungsfälle
CRM-Integration
Pollen Sie nach neuen Konversationen und synchronisieren Sie Besucherdaten (Name, E-Mail, Sprache) mit Ihrem CRM. Verwenden Sie die Konversations-ID als externe Referenz.
Automatisierte Follow-ups
Nachdem eine Konversation geschlossen wurde, senden Sie eine Folgenachricht über die API: „Danke für das Gespräch! Können wir Ihnen sonst noch helfen?"
Webhook-Alternative
Bis ausgehende Webhooks verfügbar sind, pollen Sie den Conversations-Endpunkt regelmäßig, um neue Nachrichten oder Statusänderungen zu erkennen.
Bulk-Operationen
Schließen Sie alle Konversationen, die älter als 7 Tage sind, weisen Sie Konversationen Operatoren basierend auf externer Logik zu oder exportieren Sie den Konversationsverlauf für Analysen.
Rate-Limits
Die API erlaubt bis zu 60 Anfragen pro Minute pro API-Schlüssel. Wenn Sie dieses Limit überschreiten, erhalten Sie eine 429 Too Many Requests-Antwort. Warten Sie und versuchen Sie es mit exponentiellem Backoff erneut.
Bereit zu integrieren?
Erstellen Sie Ihr kostenloses Konto und generieren Sie in Minuten einen API-Schlüssel.
Kostenlos starten