SilentChat

REST-API-Referenz

Die SilentChat REST-API ermöglicht den programmatischen Zugriff auf und die Verwaltung aller Plattformressourcen. Alle Endpunkte sind versioniert und geben JSON zurück.

Übersicht

Basis-URL

https://api.silentchat.de/api

Versionierung

Alle Endpunkte liegen unter /api/v1/. Wenn Breaking Changes eingeführt werden, wird ein neues Versionspräfix veröffentlicht und die alte Version mit sechs Monaten Vorlaufzeit abgekündigt.

Content-Type

Senden Sie alle Anfrage-Bodies als JSON mit dem Header Content-Type: application/json.

Authentifizierung

Vollständige Details finden Sie im Authentifizierungshandbuch. Jeder Endpunkt (sofern nicht als öffentlich markiert) erfordert entweder ein gültiges JWT-Bearer-Token oder einen X-API-Key-Header.

Authentifizierung

MethodPathDescription
POST/v1/auth/registerAuthentifizierung mit E-Mail und Passwort. Gibt Access- und Refresh-Token zurück.
POST/v1/auth/loginAuthentifizierung mit E-Mail und Passwort. Gibt Access- und Refresh-Token zurück.
POST/v1/auth/refreshTauscht ein Refresh-Token gegen ein neues Access-Token.
POST/v1/auth/logoutInvalidiert das aktuelle Refresh-Token.
POST/v1/auth/verify-emailGibt das Profil des authentifizierten Benutzers zurück.
POST/v1/auth/forgot-passwordGibt das Profil des authentifizierten Benutzers zurück.
POST/v1/auth/reset-passwordGibt das Profil des authentifizierten Benutzers zurück.

Tenants

MethodPathDescription
POST/v1/tenantsGibt die Tenant-Details des authentifizierten Benutzers zurück.
GET/v1/tenants/:idGibt die Tenant-Details des authentifizierten Benutzers zurück.
PATCH/v1/tenants/:idAktualisiert Tenant-Einstellungen (Name, Zeitzone usw.).
GET/v1/tenants/:id/membersGibt die Tenant-Details des authentifizierten Benutzers zurück.
POST/v1/tenants/:id/membersAktualisiert Tenant-Einstellungen (Name, Zeitzone usw.).
DELETE/v1/tenants/:id/members/:userIdAktualisiert Tenant-Einstellungen (Name, Zeitzone usw.).

Unterhaltungen

MethodPathDescription
GET/v1/conversationsListet Unterhaltungen für den Tenant mit optionalen Filtern und Cursor-Paginierung auf.
GET/v1/conversations/:idGibt eine einzelne Unterhaltung anhand der ID zurück.
PUT/v1/conversations/:idÄndert Status, Priorität oder Betreff. Status „closed“ schließt die Unterhaltung wie /close, „open“ öffnet eine geschlossene wieder wie /reopen.
POST/v1/conversations/:id/assignWeist die Unterhaltung einem Mitglied Ihres Teams zu.
POST/v1/conversations/:id/transferÜbergibt eine offene Unterhaltung an eine Kollegin, einen Kollegen oder eine Abteilung.
POST/v1/conversations/:id/closeSchließt eine Unterhaltung (Systemnachricht, Zufriedenheitsabfrage, Workflows). Nachrichten bleiben erhalten.
POST/v1/conversations/:id/reopenÖffnet eine geschlossene Unterhaltung wieder — offen und nicht zugewiesen.

Übergeben und wieder öffnen

Beide Aktionen brauchen ein Nutzer-Token (JWT) mit Schreibrecht auf Unterhaltungen. Mit einem API-Schlüssel werden sie abgewiesen, ebenso für Lite-Sitze.

Übergeben

Im Body genau ein Ziel: user_id (Person) oder department_id (Abteilung). Bei einer Abteilung wählt SilentChat ein aktives Mitglied, bevorzugt eines, das gerade online ist. note ist optional (höchstens 2.000 Zeichen) und wird als interne Notiz gespeichert. Die Unterhaltung steht danach auf „assigned“; die Empfängerin oder der Empfänger wird benachrichtigt, der Besucher erhält einen kurzen Hinweis ohne Namen.

POST /api/v1/conversations/:id/transfer
Authorization: Bearer <token>
Content-Type: application/json

{ "user_id": "<uuid>", "note": "…" }
// oder / or: { "department_id": "<uuid>" }

200 → { "message": "Conversation transferred", "conversation": { … } }

Wieder öffnen

Ohne Body. Die Unterhaltung steht danach auf „open“ und ist nicht zugewiesen; der Zustand des KI-Bots bleibt unverändert. Der Besucher erhält einen kurzen Hinweis.

POST /api/v1/conversations/:id/reopen
Authorization: Bearer <token>

200 → { "conversation": { "status": "open", "assigned_user_id": null, … } }

Fehlercodes

CodeDescription
ERR_TRANSFER_TARGETKein oder mehr als ein Ziel angegeben.
ERR_USER_NOT_IN_TENANTDie Person ist kein aktives Mitglied Ihres Teams.
ERR_ASSIGNEE_LITE_SEATDie gewählte Person hat einen Lite-Zugang und darf keine Gespräche bearbeiten (assign und transfer).
ERR_INVALID_DEPARTMENTDie Abteilung gehört nicht zu Ihrem Konto.
ERR_DEPARTMENT_NO_AGENTSIn der Abteilung ist niemand, der übernehmen kann (409).
ERR_CONVERSATION_CLOSEDDie Unterhaltung ist geschlossen — erst wieder öffnen (409).
ERR_CONVERSATION_NOT_CLOSEDNur eine geschlossene Unterhaltung kann wieder geöffnet werden (409).

Echtzeit-Ereignisse über den WebSocket: conversation.transferred (conversation_id, assigned_user_id, department_id) und conversation.reopened (conversation_id). Für eine Auswahlliste liefert GET /api/v1/team/members?include=presence je Mitglied zusätzlich presence (online, away, offline) und open_conversations.

Nachrichten

MethodPathDescription
GET/v1/messages/:conversation_idListet die Nachrichten einer Unterhaltung auf (seitenweise).
POST/v1/messagesSendet eine Nachricht in eine Unterhaltung (conversation_id und content im Body).
POST/v1/messages/:conversation_id/readMarkiert die Nachrichten einer Unterhaltung als gelesen.

Besucher

MethodPathDescription
GET/v1/visitorsListet Besucher auf, die sich aktuell auf überwachten Domains befinden.
GET/v1/visitors/:idGibt Details zu einem einzelnen Besucher zurück.

Kontakte

MethodPathDescription
GET/v1/contactsListet Kontakte mit optionaler Suche und Cursor-Paginierung auf.
POST/v1/contactsErstellt einen neuen Kontakt.
GET/v1/contacts/:idGibt einen einzelnen Kontakt anhand der ID zurück.
PATCH/v1/contacts/:idAktualisiert Kontaktdaten.
DELETE/v1/contacts/:idLöscht einen Kontakt.

Widgets

MethodPathDescription
GET/v1/widgetsListet alle Widgets des Tenants auf.
POST/v1/widgetsErstellt ein neues Widget.
GET/v1/widgets/:idGibt ein einzelnes Widget anhand der ID zurück.
PATCH/v1/widgets/:idAktualisiert Widget-Einstellungen.
DELETE/v1/widgets/:idLöscht ein Widget.

Domains

MethodPathDescription
GET/v1/domainsListet die für ein Widget erlaubten Domains auf.
POST/v1/domainsFügt eine neue erlaubte Domain zu einem Widget hinzu.
DELETE/v1/domains/:idEntfernt eine erlaubte Domain von einem Widget.

Gespeicherte Antworten

MethodPathDescription
GET/v1/canned-responsesListet gespeicherte Antworten auf.
POST/v1/canned-responsesErstellt eine neue gespeicherte Antwort.
PATCH/v1/canned-responses/:idAktualisiert eine gespeicherte Antwort.
DELETE/v1/canned-responses/:idLöscht eine gespeicherte Antwort.

Dateien

MethodPathDescription
POST/v1/filesLädt einen Dateianhang hoch (max. 20 MB).
GET/v1/files/:idGibt eine vorausgehend signierte Download-URL für eine Datei zurück.

Abrechnung

MethodPathDescription
GET/v1/billing/subscriptionGibt das aktuelle Abonnement und die Nutzung zurück.
POST/v1/billing/checkoutErstellt eine Stripe-Abrechnungsportal-Sitzungs-URL.
POST/v1/billing/portalErstellt eine Stripe-Abrechnungsportal-Sitzungs-URL.
GET/v1/billing/invoicesGibt das aktuelle Abonnement und die Nutzung zurück.
GET/v1/billing/usageGibt das aktuelle Abonnement und die Nutzung zurück.

Beispielanfrage & Antwort

Die SilentChat REST-API ermöglicht den programmatischen Zugriff auf und die Verwaltung aller Plattformressourcen. Alle Endpunkte sind versioniert und geben JSON zurück.

Anfrage

GET /v1/conversations?status=open&limit=10 HTTP/1.1
Host: api.silentchat.de
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json
X-Tenant-ID: tn_abc123

Antwort

{
"data": [
{
"id": "conv_01HXYZ",
"status": "open",
"visitor_id": "vis_9f2c4e1a",
"assigned_to": "usr_d4e5f6",
"last_message": "Hi, I have a question about pricing.",
"last_message_at": "2025-10-12T14:32:00Z",
"created_at": "2025-10-12T14:30:00Z"
}
],
"pagination": {
"total": 42,
"limit": 10,
"offset": 0,
"has_more": true
}
}
REST-API-Referenz | SilentChat