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

  1. Gehen Sie zu Einstellungen → API-Schlüssel in Ihrem Dashboard
  2. Klicken Sie auf API-Schlüssel erstellen und geben Sie ihm einen Namen
  3. Kopieren Sie den Schlüssel sofort – er wird nur einmal angezeigt
  4. 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/widgets

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

Alle 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

ParameterTypBeschreibung
statusstringFiltern nach Status: open, pending, closed
widgetIdstringFiltern nach Widget-UUID
limitintegerMaximale Ergebnisse (Standard 20, max. 100)
offsetintegerN 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

ParameterTypBeschreibung
limitintegerMaximale 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"
}
FeldTypBeschreibung
contentstringErforderlich. Der Nachrichtentext.
rolestringsystem (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"
}
FeldTypBeschreibung
statusstringopen, pending oder closed
assignedTostring|nullOperator-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-StatusBedeutung
401Ungültiger, abgelaufener oder fehlender API-Schlüssel
400Ungültiger Request-Body oder ungültige Parameter
404Ressource nicht gefunden (oder gehört zu einem anderen Mandanten)
500Server-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