Integrationen
API-Referenz
REST-API für das HelpStack-Dashboard, Widget und Webhooks.
Kurzüberblick#
| Basispfad | Endpunkte befinden sich unter https://helpstack.eu/api/… — ein Pfadpräfix, keine direkt aufrufbare URL |
| Authentifizierung (Dashboard-API) | NextAuth-Sitzungs-Cookie (angemeldeter Benutzer) |
| Authentifizierung (Widget-API) | Keine (öffentlich, rate-limitiert) |
| Authentifizierung (Webhooks) | Verify-Token-Handshake + HMAC-SHA256-Signatur |
| Content-Type | application/json (Datei-Uploads verwenden multipart/form-data) |
| Mandantenfähigkeit | Jede Dashboard-Anfrage ist auf die Organisation des Sitzungsbenutzers beschränkt |
Erwarten Sie eine 404-Antwort auf
/apiselbst und eine 401-Antwort auf authentifizierte Endpunkte. Unter der blanken URLhttps://helpstack.eu/apigibt es keine Route — sie gibt 404 by design zurück, da die API aus Unterpfaden besteht (/api/conversations,/api/channels, …), kein durchsuchbares Stammverzeichnis. Wenn Sie einen echten Endpunkt wie/api/conversationsim Browser öffnen, erhalten Sie 401 (kein Sitzungs-Cookie), was bestätigt, dass er existiert und authentifizierungsgeschützt ist. Keiner dieser Statuswerte ist ein Fehler.
Authentifizierungsmodell — bitte zuerst lesen#
Derzeit gibt es kein öffentliches API-Schlüssel- oder Bearer-Token-System für externe Aufrufer. Suchen Sie nicht nach einem „API-Schlüssel" — es gibt keinen. Die Dashboard-/interne API wird mit dem NextAuth-Sitzungs-Cookie eines angemeldeten Benutzers authentifiziert, und jede Anfrage wird durch Middleware automatisch auf die Organisation dieses Benutzers beschränkt (
withOrganization/withAdmin/withAgent). Diese Endpunkte werden von der HelpStack-Dashboard-Benutzeroberfläche genutzt.
Um Dashboard-Endpunkte von außerhalb des Browsers aufzurufen, müssen Sie ein authentifiziertes Sitzungs-Cookie wiederverwenden. Wenn Sie Machine-to-Machine-Zugriff benötigen, sind die unterstützten öffentlichen Oberflächen:
- Widget-Endpunkte — öffentlich, IP/Besucher rate-limitiert (siehe Widget-Einbettung).
- Webhook-Endpunkte — öffentlich, durch Token + HMAC-Signatur verifiziert (siehe Webhooks).
Behandeln Sie alles, was ein Sitzungs-Cookie erfordert, bei programmatischer Nutzung als „gegen Ihre Deployment verifizieren".
Antwort-Envelope#
Alle API-Routen geben einen Standard-Envelope zurück.
Erfolg
{ "success": true, "data": { } }
Fehler
{
"success": false,
"error": {
"message": "Human-readable message",
"code": "OPTIONAL_CODE",
"fields": { "fieldName": ["error 1"] }
}
}
code und fields sind optional. fields wird bei Validierungsfehlern (Zod) mit feldspezifischen Meldungen befüllt.
Fehlercodes & HTTP-Status#
Fehler werden durch typisierte Fehlerklassen und einen zentralen Handler erzeugt. Übergeordnete Zuordnung:
| HTTP | Wann | Beispiel-code |
|---|---|---|
| 400 | Ungültige Eingabe / Validierungsfehler | VALIDATION_ERROR |
| 401 | Fehlende oder abgelaufene Authentifizierung | — |
| 402 | Unzureichende Token zur Durchführung der Aktion | INSUFFICIENT_TOKENS |
| 403 | Unzureichende Rolle/Berechtigung | — |
| 404 | Ressource nicht gefunden | — |
| 409 | Duplikat/Konflikt | — |
| 429 | Rate-Limit erreicht | — |
| 502 | Drittanbieter-API-Fehler | — |
| 500 | Unerwarteter/interner Fehler (Meldung ist maskiert) | — |
Zod-Validierungsfehler geben 400 mit code: "VALIDATION_ERROR" und einem fields-Objekt zurück. Unerwartete Fehler geben 500 mit einer generischen Meldung zurück ("An unexpected error occurred"); das tatsächliche Detail wird nur serverseitig protokolliert.
Endpunkt-Katalog#
Rollen: Ein mit ADMIN markierter Endpunkt erfordert Admin-Rechte (withAdmin), AGENT erfordert Mitarbeiter-Rechte oder höher (withAgent), Sitzung erfordert ein authentifiziertes Organisationsmitglied (withOrganization).
Kanäle
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET | /api/channels | Kanäle auflisten | Sitzung |
POST | /api/channels | Kanal erstellen | ADMIN |
GET | /api/channels/[id] | Einen Kanal abrufen | Sitzung |
PATCH | /api/channels/[id] | Kanal aktualisieren | ADMIN |
DELETE | /api/channels/[id] | Kanal löschen | ADMIN |
GET | /api/channels/[id]/widget-script | Einbettungs-Script für einen WEBSITE_CHAT-Kanal abrufen | Sitzung |
GET | /api/channels/[id]/widget-config | Erscheinungsbild-Konfiguration des Widgets abrufen | Sitzung |
GET/POST | /api/channels/[id]/agent-tools | Kanalspezifische Agent-Tools auflisten/anhängen | Sitzung |
Kanal erstellen — POST /api/channels (validierter Body, createChannelSchema):
{
"type": "WEBSITE_CHAT",
"name": "Website Chat",
"region": "eu",
"defaultLanguage": "en",
"autoTranslate": true,
"translateToLanguage": "en",
"fallbackLanguage": "sl",
"aiProviderId": "PROVIDER_ID",
"credentials": {},
"responseTemplate": {},
"autoReply": false,
"autoApprove": false,
"autoEnhance": false
}
| Feld | Typ | Erforderlich | Hinweise |
|---|---|---|---|
type | Aufzählung | ja | EMAIL | FACEBOOK | INSTAGRAM | WHATSAPP | TELEGRAM | WEBSITE_CHAT |
name | string | ja | Mindestlänge 1 |
region | string | nein | |
defaultLanguage | string | nein | Standard en (Mitarbeitersprache) |
autoTranslate | boolean | nein | Standard true |
translateToLanguage | string | nein | Mitarbeitersprache, in die übersetzt werden soll |
fallbackLanguage | string | nein | Vermutete Kundensprache für kurze/mehrdeutige Nachrichten |
aiProviderId | string | nein | Fällt auf den Standardanbieter der Organisation zurück |
credentials | Objekt | ja | Kanalspezifische Anmeldedaten (z. B. IMAP/SMTP, Seitentoken) |
responseTemplate | Objekt | nein | |
autoReply | boolean | nein | Standard false |
autoApprove | boolean | nein | Standard false |
autoEnhance | boolean | nein | Standard false |
Die Strukturen der Anmeldedaten (credentials) werden je nach Kanaltyp separat validiert — z. B. erfordert E-Mail { host, port, username, password, from, secure?, imapHost?, imapPort?, imapSecure?, imapAllowSelfSigned? }; Facebook erfordert { pageId, accessToken, appSecret? }; Instagram erfordert { accountId, accessToken }. Anmeldedaten werden verschlüsselt gespeichert (AES-256-GCM).
Gespräche
| Methode | Pfad | Zweck | Authentifizierung | Wichtige Parameter |
|---|---|---|---|---|
GET | /api/conversations | Gespräche auflisten | Sitzung | page, pageSize, status, channelId, unread, assignedToId, language, search |
POST | /api/conversations | Gespräch erstellen | AGENT | |
GET | /api/conversations/[id] | Eines abrufen | Sitzung | |
PATCH | /api/conversations/[id] | Aktualisieren (Status, Priorität, Zuweisung, Sprache, Notizen) | Sitzung | |
DELETE | /api/conversations/[id] | Löschen | Sitzung | |
GET | /api/conversations/[id]/messages | Nachrichten auflisten | Sitzung | |
POST | /api/conversations/[id]/messages | Mitarbeiterantwort senden | AGENT | |
POST | /api/conversations/[id]/read | Als gelesen markieren | Sitzung | |
POST | /api/conversations/[id]/unread | Als ungelesen markieren | Sitzung | |
POST | /api/conversations/bulk-read | Mehrere als gelesen markieren | Sitzung |
status-Filterwerte: OPEN | PENDING | CLOSED | ARCHIVED. pageSize ist auf 100 begrenzt (Standard 20).
Nachricht senden — POST /api/conversations/[id]/messages (validierter Body, sendMessageSchema):
{
"conversationId": "CONVERSATION_ID",
"content": "Thanks for reaching out — here's how to fix that.",
"attachments": ["storage/path/file.png"]
}
| Feld | Typ | Erforderlich | Hinweise |
|---|---|---|---|
conversationId | string | ja | Muss dem [id]-Routenparameter entsprechen, sonst 400 VALIDATION_ERROR |
content | string | ja | Mindestlänge 1 |
attachments | string[] | nein | Speicherpfade |
Verhalten: Die Nachricht wird als OUTBOUND erstellt. Wenn der Kanal autoTranslate aktiviert hat und eine Kundensprache bekannt ist, wird die Nachricht nicht freigegeben erstellt und im Hintergrund übersetzt (der Mitarbeiter genehmigt sie vor dem Senden). Das Senden verbraucht Plan-Token; wenn der Organisation die Token ausgegangen sind, gibt die Route 402 mit code: "INSUFFICIENT_TOKENS" zurück. Bei Erfolg gibt die Route die erstellte Nachricht mit HTTP 201 zurück.
Nachrichten
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
POST | /api/messages/[id]/approve | Eine in der Warteschlange befindliche/übersetzte Antwort zum Senden freigeben | Sitzung |
POST | /api/messages/[id]/generate-reply | Einen KI-Antwortvorschlag generieren | Sitzung |
POST | /api/messages/[id]/retranslate | Übersetzung der Nachricht erneut ausführen | Sitzung |
FAQs
| Methode | Pfad | Zweck | Authentifizierung | Wichtige Parameter |
|---|---|---|---|---|
GET | /api/faqs | FAQs auflisten | Sitzung | channelId |
POST | /api/faqs | FAQ erstellen | ADMIN | |
PATCH | /api/faqs/[id] | FAQ aktualisieren | Sitzung | |
DELETE | /api/faqs/[id] | FAQ löschen | Sitzung | |
POST | /api/faqs/reorder | FAQs neu anordnen | Sitzung | |
POST | /api/faqs/generate | KI-generierte FAQ-Vorschläge erstellen | Sitzung |
Medien
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
POST | /api/media/upload | Datei hochladen (multipart/form-data) | Sitzung |
GET | /api/media/[id] | Medien-Metadaten/Datei abrufen | Sitzung |
DELETE | /api/media/[id] | Medien löschen | Sitzung |
Benachrichtigungen
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET/PUT | /api/notifications/preferences | Benachrichtigungseinstellungen abrufen/aktualisieren | Sitzung |
GET/POST | /api/notifications/integrations | Benachrichtigungsintegrationen auflisten/konfigurieren | Sitzung |
POST | /api/notifications/push-subscription | Ein Web-Push-Abonnement registrieren | Sitzung |
KI-Anbieter
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET | /api/ai-providers | Konfigurierte Anbieter auflisten | Sitzung |
POST | /api/ai-providers | Anbieter hinzufügen | Sitzung |
PATCH | /api/ai-providers/[id] | Anbieter aktualisieren | Sitzung |
DELETE | /api/ai-providers/[id] | Anbieter entfernen | Sitzung |
Agent-Tools
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET | /api/agent-tools | Agent-Tools auf Organisationsebene auflisten | Sitzung |
POST | /api/agent-tools | Agent-Tool erstellen | Sitzung |
PATCH | /api/agent-tools/[id] | Agent-Tool aktualisieren | Sitzung |
DELETE | /api/agent-tools/[id] | Agent-Tool löschen | Sitzung |
GET | /api/agent-tools/[id]/logs | Tool-Aufrufprotokolle anzeigen | Sitzung |
Die vollständige Tool-Anatomie finden Sie unter Benutzerdefinierte Agent-Tools.
Widget (öffentlich)
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET | /api/widget/[channelId]/config | Widget-Konfiguration | Öffentlich, ~30/Min./IP |
GET | /api/widget/[channelId]/faqs | Bis zu 5 FAQ-Chips | Öffentlich, ~30/Min./IP |
GET | /api/widget/[channelId]/status | Online-Status | Öffentlich |
POST | /api/widget/[channelId]/upload | Datei-Upload | Öffentlich |
POST | /api/widget/message | Nachricht senden (WebSocket-Fallback) | Öffentlich, ~20/Min./Besucher |
Payloads finden Sie unter Widget-Einbettung.
Webhooks (öffentlich)
| Methode | Pfad | Zweck | Authentifizierung |
|---|---|---|---|
GET | /api/webhooks/facebook | Verifizierungs-Handshake | Verify-Token |
POST | /api/webhooks/facebook | Messenger-Ereignisse empfangen | HMAC-Signatur |
GET/POST | /api/webhooks/instagram | Instagram-Ereignisse verifizieren/empfangen | Verify-Token / HMAC |
GET/POST | /api/webhooks/whatsapp | WhatsApp-Ereignisse verifizieren/empfangen | Verify-Token / HMAC |
Handshake- und Signaturdetails finden Sie unter Webhooks.