FunktionenKIArmaturenbrettAPIPreiseHerunterladenHilfe
Aussehen (Auto: light)
Kostenlos testen
Zuhause / API
API und Entwickler

Drücken Sie die Eingabetaste.
Holen Sie sich Ihre Daten.

REST‑API /api/v1, 53 Bereiche, 239 Endpunkte, 11 Webhook‑Ereignisse und eine JS‑API für das Widget. Chats, Kontakte, KI, Wissensdatenbank, Tickets und Abrechnung – was auch immer das Dashboard leistet, Ihr Code kann es auch.

smartbtn.me/api/v1
# Drücken Sie die Eingabetaste oder die Markierung rechts
$ curl -H "Authorization: Bearer sb_••••" \
    https://smartbtn.me/api/v1/chats?limit=1 
01

Schnellstart

Drei Schritte von Null zur ersten Antwort. Jede Anfrage ist an ein Widget gebunden und mit einem Bearer‑Token authentifiziert.

  1. Geben Sie einen Token ausDashboard → API‑Tokens: ein Name, ein optionaler Ablauf und die von Ihnen benötigten Bereiche. Ein Token gehört zu genau einem Widget. Das Klartext‑Token wird einmal angezeigt; Smartbtn speichert nur einen Einweg‑Hash, sodass ein verlorenes Token nicht wiederhergestellt, sondern nur widerrufen und erneut ausgestellt werden kann.
  2. Aktivieren Sie die Widget‑APIAktivieren Sie in den Widget‑Einstellungen „Widget‑API zulassen (JS und REST)“. Durch die Ausgabe eines Tokens wird dieser Schalter für Sie nicht umgelegt.
  3. Senden Sie die erste AnfrageDas Token geht nur in den Header Authorization – niemals in die URL.
# Listen Sie die Chats des Widgets auf
curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \
     https://smartbtn.me/api/v1/chats
// 200 OK · Cursor-Paginierung
{
  "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ],
  "next_cursor": "eyJpZCI6NDgyMTB9"   // null — auf der letzten Seite
}
Verifizierte Basis‑URL. https://smartbtn.me/api/v1 ist der primäre API‑Endpunkt für alle Projektdaten. Senden Sie Anfragen immer über HTTPS und leiten Sie das Token niemals bei Weiterleitungen weiter.
Fehlendes, ungültiges oder unterbewertetes Token? Sie erhalten 401 oder 403 mit einem RFC‑7807 application/problem+json-Body – siehe Fehler.
02

Authentifizierung

Drei Wege, je nachdem, wer wen anruft. Der Zugriff wird standardmäßig verweigert: kein Bereich – kein Aufruf.

Sie → Smartbtn
REST‑Aufrufe

Jede Anfrage trägt Authorization: Bearer . Auf dem Server wird das Token in ein Widget und seine Bereiche aufgelöst.

Smartbtn → Sie
Webhooks, externer KI‑Operator

Ausgehende Anfragen werden mit einem mandantenspezifischen Geheimnis signiert: X‑Smartbtn‑Signature. Ein zusätzlicher Inhaberausweis kann hinzugefügt werden, wenn Ihre Seite einen benötigt.

Ihr KI‑Betreiber → Smartbtn
Asynchrone Antworten

POST /v1/ai/replies verwendet einen eigenen signierten Frame, der an Ihren KI‑Operator und Ihr Widget angeheftet und durch eine dauerhafte causation_id verschlüsselt ist.

Den Schalter vergessen die Leute

„Widget‑API zulassen (JS und REST)“ in den Widget‑Einstellungen öffnet sowohl die REST‑API als auch die Widget‑JS‑API. Durch die Ausgabe eines Tokens wird dieser nicht aktiviert. Die Bereiche eines vorhandenen Schlüssels können im Dashboard (API‑Tokens → Schlüssel → Bereiche bearbeiten) ohne erneute Ausstellung bearbeitet werden – Integrationen funktionieren weiterhin.

Voreinstellungen

VoreingestelltBereicheWann
KI‑Setup 9widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:readIhre KI‑App konfiguriert das Widget: Assistent, Wissensdatenbank, Texte. Ersetzt die gesamte Scope‑Auswahl.
Schreibgeschützt (Beispielsatz)chats:read · messages:read · contacts:read · stats:readDashboards, BI, Exporte.
Helpdesk‑Brücke (Beispielset)chats:read · messages:read · messages:write · webhooks:write · support:readSpiegeln Sie Dialoge und Tickets in Ihr CRM.
Anbieterschlüssel sind getrennt. Gewähren Sie ai:credentials:write nur, wenn der Eigentümer die Einrichtung des Anbieterschlüssels autorisiert. Konto-, Abrechnungs- und Partnerrechte sind für die KI‑Einrichtung nicht erforderlich. Der Schlüssel wird einmal angezeigt – widerrufen Sie ihn, wenn die Einrichtung abgeschlossen ist.
03

Bereiche

53 Routenbereiche, plus ein bedingter und ein reservierter. Eine Anfrage ist nur dann erfolgreich, wenn das Token den Routenbereich (oder eine aufgelistete Alternative) enthält.

53 + 1 bedingt + 1 reserviert
empfindlichbedingtreserviert
UmfangZuschüsse
chats · 2
chats:readLesen Sie Chats und ihre Metadaten
chats:writeSchließen Sie einen Chat, fordern Sie eine Bewertung an, übertragen Sie, fordern Sie einen Agenten an oder trennen Sie ihn
messages · 2
messages:readLesen Sie den Nachrichtenverlauf eines Chats
messages:writeSenden Sie als Agent Nachrichten, geben Sie Indikatoren ein und lesen Sie Empfangsbestätigungen
contacts · 2
contacts:readKontakte lesen
contacts:writeAktualisieren Sie Kontaktfelder und -attribute
agents · 3
agents:readLesen Sie Agenten und ihre Anwesenheit
agents:writeempfindlichAgenten einladen, aktualisieren, suspendieren, wiederherstellen oder entfernen; Ein Eingeladener sieht jeden Chat des Widgets
agents:events:readLesen Sie das Ereignisprotokoll eines Agenten und die Metriken pro Agent
tags · 2
tags:readTags lesen
tags:writeFügen Sie einem Kontakt Tags hinzu
files · 2
files:readLaden Sie eine hochgeladene Datei herunter
files:writeLaden Sie eine neue Datei hoch
stats · 1
stats:readLesen Sie die zusammengefassten Chat-, Nachrichten- und Bewertungsstatistiken
channels · 3
channels:readLesen Sie den Online‑Status eines benutzerdefinierten Kanals
channels:writeÜbermitteln Sie eine eingehende Nachricht über einen benutzerdefinierten Kanal
channels:registerRegistrieren Sie einen neuen benutzerdefinierten Kanal (nur installierte Apps)
webhooks · 2
webhooks:readWebhook‑Abonnements auflisten
webhooks:writeEin Abonnement erstellen, löschen oder erneut bereitstellen
quick_phrases · 2
quick_phrases:readLesen Sie die kurzen Sätze eines Agenten
quick_phrases:writeErstellen, bearbeiten oder löschen Sie schnelle Phrasen
ratings · 1
ratings:readLesen Sie die Besucherbewertungen und erfahren Sie, welcher Agent jeweils punktet
responder · 2
responder:injectempfindlichGeben Sie als externer KI‑Operator oder Bot eine Antwort in einen Live‑Chat ein
responder:escalatebedingtFür POST /v1/ai/replies: Anrufergesteuerte Übergabe über escalate=true
widget · 2
widget:readLesen Sie das Erscheinungsbild, das Verhalten und die Einbettungseinstellungen des Widgets
widget:writeAktualisieren Sie die Widget‑Einstellungen und leeren Sie den Widget‑Cache
departments · 2
departments:readLesen Sie Abteilungen, ihre Agenten und Zeitpläne
departments:writeErstellen, aktualisieren oder löschen Sie Abteilungen und Zeitpläne
messengers · 2
messengers:readLesen Sie, welche Messenger verbunden sind (niemals Anmeldeinformationen)
messengers:writeempfindlichEinen Messenger verbinden oder trennen; schreibt Provider‑Anmeldeinformationen
ai · 4
ai:readLesen Sie KI‑Assistenten, ihre Konfiguration und Warnungen
ai:writeErstellen und aktualisieren Sie Assistenten, KI‑Einstellungen und KI‑Operatoren, einschließlich Persona und Eingabeaufforderung
ai:credentials:writeempfindlichAnmeldeinformationen von LLM‑Anbietern von Drittanbietern speichern (BYOK)
ai:applyGenehmigen Sie eine Verbesserung, die die Persönlichkeit eines Live‑Assistenten neu schreibt
kb · 2
kb:readLesen Sie Wissensdatenbankregeln und aufgenommene Quellen
kb:writeErstellen, aktualisieren oder löschen Sie KB‑Regeln und -Quellen
transcripts · 1
transcripts:readExportieren Sie ein Chat‑Transkript
account · 2
account:readLesen Sie das Kontoprofil und alle seine juristischen Personen
account:writeAktualisieren Sie nur den Namen, Nachnamen und die Telefonnummer des Kontos
billing · 2
billing:readLesen Sie die Rechnungsdatensätze und juristischen Personen des Widgets
billing:writeJuristische Personen erstellen, aktualisieren, löschen; stellt keine Rechnungen aus, bewegt kein Geld
partners · 2
partners:readPartner- und Empfehlungsdaten lesen
partners:withdrawreserviertReserviert: Es wird heute von keinem Auszahlungsvorgang verwendet
support · 4
support:readLesen Sie Tickets, aktive Chats, deren Nachrichten und eigene geprüfte Aktionen
support:replyempfindlichBeantworten Sie als Supportmitarbeiter einen Kunden
support:writeBeanspruchen Sie einen Chat oder geben Sie ihn frei, schließen Sie ihn ohne Antwort und öffnen Sie ihn erneut
support:tickets:closeSchließen Sie nur ein Ticket – sonst nichts
marketing · 2
marketing:readLesen Sie Marketingkampagnen: Banner, Popups, E‑Mail
marketing:writeKampagnen erstellen und bearbeiten, Status ändern, E‑Mail‑Versand starten
broadcasts · 2
broadcasts:readMessenger‑Sendungen lesen (WhatsApp, Telegram, Messenger, Viber, VK, MAX)
broadcasts:writeErstellen, bearbeiten und starten Sie eine Übertragung
problems · 2
problems:readLesen Sie Kundenproblemcluster und -einstellungen
problems:writeEinstellungen und Clusterstatus ändern: neu, in Bearbeitung, gelöst, wiederkehrend
invitations · 2
invitations:readLesen Sie Einladungsregeln, A/B‑Varianten, Vorlagen und Trichter
invitations:writeErstellen, bearbeiten, aktivieren oder löschen Sie Regeln und Vorlagen
04

Endpunkte

Die gesamte öffentliche Oberfläche in einer Liste. Filtern Sie nach Ressource, suchen Sie nach Pfad, klicken Sie auf eine Zeile, um eine fertige Locke zu kopieren.

Es werden 245 von 245 angezeigt
GETPOSTPUTPATCHDELETE

ai Assistenten, Operatoren, Schlüssel, Lernen, Marktplatz54

chats Dialoge, Nachrichten, Übertragung, Bewertungen18

kb Wissensdatenbank: Regeln, Crawler, Dateien, Suche16

agents Agenten, Einladungen, Metriken14

messengers Messenger, soziale Netzwerke und Marktplatzkanäle13

billing Saldo, Abonnements, Rechnungen, Einheiten12

support Supportmitarbeiter: Tickets und Chats12

widget Einstellungen, Sprache, Übersetzungen, Skins, Cache12

channels Benutzerdefinierte Kanäle8

external‑operators Ihr Bot als Operator8

webhook‑subscriptions Webhook‑Abonnements8

broadcasts Messenger-Übertragungen7

departments Abteilungen und Zeitplan7

invitations Intelligente Einladungen7

marketing Marketingkampagnen7

partner Partnerprogramm7

wishes Wünsche für die KI7

contacts Kontakte und Tags5

problems Analyse von Kundenproblemen4

quick‑phrases Schnelle Sätze4

compat Migrationskompatibilität3

stats Statistiken3

account Konto2

files Dateien2

ratings Bewertungen1

tags Schlagworte1

v1 1

webhook‑events Veranstaltungskatalog1

Pfade sind relativ zu https://smartbtn.me/api. Für Schreibvorgänge sind Content‑Type: application/json und X‑Smartbtn‑Idempotency‑Key erforderlich. Die Gruppe compat ist eine Kompatibilitätsebene für Teams, die von einer anderen Chat‑Plattform wechseln.

05

Webhooks

Ein signierter JSON-POST an Ihre URL, wann immer ein abonniertes Ereignis stattfindet. Verwalten Sie Abonnements über /v1/webhook‑subscriptions oder im Dashboard.

POST Ihre URL · X‑Smartbtn‑Event: ticket.created
{
  "id": "evt_01JAB3K9Q7",
  "type": "ticket.created",
  "data": {
    "button_guid": "b_3f9c2e",
    "ticket_number": 10482,
    "chat_id": 48211,
    "client_id": 9134,
    "reason": "human_request",
    "priority": "high",
    "sla_hours": 4,
    "source": "chat",
    "created_at": "2026-10-17T10:15:00+03:00"
  }
}

Grund: human_request | Abrechnung | ai_unresolved | action_request | …; Priorität: hoch | Normal; Quelle: Chat | App | Website. Lesen Sie das Ticket und seinen Dialog mit GET /v1/support/tickets/{number}.

Lieferkopfzeilen

X‑Smartbtn‑EventEreignistyp, z.B. message.created.
X‑Smartbtn‑Signaturesha256=v1: des Rohkörpers.
X‑Smartbtn‑Idempotency‑KeyEin Wert pro Ereignis, stabil über Wiederholungsversuche hinweg. Dedupliziere es.
X‑Smartbtn‑DeliveryEin Wert pro Zustellversuch – für Ihre Protokolle.
X‑Smartbtn‑TimestampUnix‑Zeitpunkt des Sendens. Zur Information, nicht signiert.

Signaturüberprüfung

HMAC‑SHA256 des Rohkörpers (Bytes wie empfangen, vor der JSON‑Analyse) mit Ihrem Endpunktgeheimnis; in konstanter Zeit vergleichen. Das Geheimnis wird einmalig angezeigt, wenn das Abonnement erstellt wird; Drehen Sie es mit POST /v1/webhook‑subscriptions/{id}/rotate‑secret.

// Node.js · Beispielsweise ist das Geheimnis ein Platzhalter
import crypto from 'node:crypto';

function verify(rawBody, header, secret) {
  const expected = 'sha256=v1:' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(header || '');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
// PHP
$expected = 'sha256=v1:' . hash_hmac('sha256', file_get_contents('php://input'), $secret);
if (!hash_equals($expected, $_SERVER['HTTP_X_SMARTBTN_SIGNATURE'] ?? '')) { http_response_code(401); exit; }

Wiederholungen und Bestellung

  • Bis zu 4 Versuche (der erste Versand plus 3 Wiederholungsversuche), Backoff min(60, 2^attempt × 5) s – etwa 10, 20, 40 s.
  • Nicht‑2xx oder ein Timeout gelten als Fehlversuch. Fehlgeschlagene Zustellungen können mit POST /v1/webhook‑subscriptions/{id}/redeliver erneut gesendet werden – gleicher Idempotenzschlüssel, neue Zustellungs‑ID.
  • Die Lieferung erfolgt mindestens einmal und ist nicht bestellt. Die Nutzlasten sind minimal – IDs, keine vollständigen Datensätze; Details über die REST‑API abrufen.
06

JS API

Geben Sie das, was Sie bereits über den Besucher wissen, direkt an den Agenten weiter. Anrufe werden nur von der in den Widget‑Einstellungen festgelegten Domäne angenommen.

smartbtn_widget_api.setContactInfo(info)

Legt die Kontaktdaten des Besuchers fest. Der Agent sieht es so, als ob der Besucher das Einführungsformular ausgefüllt hätte. Name, Telefon und E‑Mail spielen bei Smartbtn eine besondere Rolle – daher eine separate Methode.

NameTypBeschreibung
namestringBesuchername
emailstringBesucher‑E‑Mail
phonestringBesuchertelefon
descriptionstringAlle zusätzlichen Informationen über den Kunden
Smartbtn_api.setClientInfo({
  name: „Alex Morgan“,
  email: "email@example.com",
  phone: "+17584987855",
  description: "Description text"
});

smartbtn_widget_api.setCustomData(fields)

Alle zusätzlichen Daten für das Infofeld rechts in der Agent‑App. Rufen Sie es so oft auf, wie Sie möchten – im offenen Dialog aktualisiert sich das Panel in Echtzeit. Felder werden in Array‑Reihenfolge angezeigt.

NameTypBeschreibung
fieldsarrayListe der Datenfelder
field.titlestringÜber dem Feld unterwegs
field.contentstringFeldinhalt; Tags werden maskiert
field.linkstringBeim Klicken geöffnete URL
Smartbtn_api.setClientCustomData([
  { title: "Order", content: "#10482 · 3 items", link: "https://shop.example/orders/10482" },
  { title: "Actions", content: "Open customer profile", link: "https://crm.example/c/9134" }
]);

smartbtn_widget_api.setSkin(skin, opts) · open() · close()

Wechseln Sie das Widget‑Thema im Handumdrehen, ohne die Seite neu zu laden (classic, minimal, capsule, liquid) oder steuern Sie das Chat‑Fenster programmgesteuert. Für eine permanente projektspezifische Anpassung übergeben Sie dieselben Felder an PATCH /v1/widget/settings.

// JS API · Wechseln Sie den Skin auf der Seite in Echtzeit
smartbtn_widget_api.setSkin("minimal");
smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: „Antworten in ~1 s“ });

// REST API · PATCH /v1/widget/settings (Umfang widget:write)
{
  "skin": "minimal",
  "widget_header_align": "center",
  "widget_show_operator_avatars": false,
  "widget_show_tabs_bar": false,
  "chat_bg": "#FAF8F5",
  "capsule_title": "Smartbtn AI",
  "capsule_subtitle": „Online rund um die Uhr“
}
Wenn widget_api_contact_sync aktiviert ist, lösen diese Aufrufe auch den Webhook contact.updated aus.
07

Support‑agent API

Ein automatisierter Supportmitarbeiter bearbeitet die Ticketwarteschlange und Kundenchats: Er nimmt einen Chat auf, antwortet als Ihr menschlicher Supportmitarbeiter und schließt das Ticket. Aus, bis der Widget‑Besitzer es einschaltet.

  1. Der Eigentümer ermöglicht esListet die Token auf, die als Support‑Agenten fungieren dürfen, und die IPs, von denen aus sie anrufen dürfen.
  2. Lesen Sie die WarteschlangeGET /v1/support/tickets · GET /v1/support/chats
  3. Mieten Sie einen ChatPOST …/chats/{id}/claim · …/release
  4. AntwortEinfacher Text, Links nur zu den zulässigen Hosts des Widgets. 201 erst, wenn die Nachricht gespeichert ist.
  5. Schließen oder erneut öffnenPOST …/tickets/{number}/close · …/reopen
UmfangErmöglicht
support:readTickets, aktive Chats, Nachrichten mit der Bezeichnung „Client/AI/Support/System“, eigene geprüfte Aktionen
support:writeEinen Chat beanspruchen/freigeben, ohne Antwort schließen, erneut öffnen
support:replyDem Kunden als Supportmitarbeiter antworten (sensibel)
support:tickets:closeSchließen Sie ein Ticket nur – für eine Schaltfläche „Frage gelöst“ in Ihrem Backend
curl -X POST https://smartbtn.me/api/v1/support/chats/48211/reply \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Smartbtn-Idempotency-Key: $(uuidgen)" \
  -d '{"text":"Fertig, der Zugriff wurde wiederhergestellt."}'
Der Besitzer kann Support‑Agent‑Tokens ein eigenes Minutenlimit geben – oder gar keins. Jede andere Route behält das allgemeine Limit bei.
08

KI‑API

Alles, was der KI‑Bereich des Dashboards macht: Assistenten, Ihre eigenen Anbieterschlüssel, Wissensdatenbank, Selbstlernen mit Rollback, Wünsche, Probleme, Bedarfssignale und ein Assistent in Ihrer App.

Assistenten und KI‑Operatoren

Mehrere Assistenten mit eigener Rolle und Sprache, ein Test vor dem Go‑Live, nach Sprache benannte Operatoren.

  • GET/v1/ai/assistants
  • POST/v1/ai/assistants/{id}/test
  • PATCH/v1/ai/operators/{id}
  • POST/v1/ai/handoff
Bereiche: ai:read · ai:write
Bringen Sie Ihren eigenen Schlüssel mit

Claude, ChatGPT, DeepSeek, Gemini, Mistral, regionale LLMs oder alle OpenAI‑kompatiblen. Die Modelle werden pro Schlüssel aufgelistet.

  • GET/v1/ai/credentials
  • POST/v1/ai/credentials
  • GET/v1/ai/credentials/{id}/models
Bereiche: ai:read · ai:credentials:write
Wissensdatenbank

Ein Crawler für Ihre Website, PDF- und DOCX‑Uploads, Regeln, Such- und Indexierungsstatus.

  • PUT/v1/kb/crawler
  • POST/v1/kb/uploads
  • POST/v1/kb/rules
  • GET/v1/kb/search
Bereiche: kb:read · kb:write · files:write
Selbstlernend

Optimieren von Läufen, Zyklen, Verlauf, Persona‑Versionen mit Rollback und einem Kill‑Schalter.

  • POST/v1/ai/learning/tune
  • GET/v1/ai/learning/cycles
  • POST/v1/ai/learning/persona‑versions/{version}/revert
  • GET/v1/ai/learning/kill‑switch
Bereiche: ai:read · ai:write · ai:apply
Wünsche für die KI

Ein Wunsch im Klartext → eine nebenwirkungsfreie Vorschau → genehmigen, ablehnen oder rückgängig machen.

  • POST/v1/wishes
  • GET/v1/wishes/{id}/preview
  • POST/v1/wishes/{id}/approve
  • POST/v1/wishes/{id}/revert
Bereiche: ai:write · ai:apply
Probleme und Nachfragesignale

Problemcluster mit Status und einer monatlichen Ausgabenobergrenze; Was Kunden gefragt haben, was Sie nicht anbieten.

  • GET/v1/problems
  • PATCH/v1/problems/settings
  • POST/v1/problems/{id}/status
  • GET/v1/ai/demand‑signals
Bereiche: problems:read · problems:write · ai:read
Kundenstatus

Ihr Backend übermittelt den Kundenstatus (registriert, bezahlt, Kunde seit, Servicestatus) in einer HMAC‑signierten Anfrage – die KI gewichtet ihn bei der Beantwortung und Eskalation.

  • POST/v1/ai/customer‑status
  • POST/v1/ai/tickets
  • GET/v1/ai/alerts
Bereiche: ai:write · ai:read
Assistent in Ihrer App

Gesprächsrunden, Kontoverknüpfung, Speech‑to‑Text und Text‑to‑Speech, App‑Tickets – über eine signierte Integration.

  • POST/v1/ai/assistant/turn
  • POST/v1/ai/assistant/account‑link
  • POST/v1/ai/assistant/speech‑to‑text
  • POST/v1/ai/assistant/text‑to‑speech
Bereiche: Integrationssignatur (HMAC)
Lösungsmarktplatz

Bereite Assistenten nach Nischen: Café, Klinik, Geschäft, Autoservice. Bewerben Sie sich in einer Anfrage.

  • GET/v1/ai/marketplace/templates
  • POST/v1/ai/marketplace/templates/{slug}/apply
Bereiche: ai:read · ai:write
Externer KI‑Betreiber

Ihr eigener Bot beantwortet Chats: asynchrone Antworten, Übergabe, Tests und Lebenszyklus.

  • POST/v1/ai/replies
  • POST/v1/external‑operators/{public_id}/tests
  • POST/v1/external‑operators/{public_id}/lifecycle
Bereiche: responder:inject · responder:escalate
09

Tarifbegrenzungen

Pro Token zwei Zähler: Lese- und Schreibvorgänge werden getrennt gezählt, sodass das Abfragen niemals das Schreibbudget verschlingt.

600 / minlautet: GET, HEAD
120 / minschreibt: POST, PATCH, PUT, DELETE
429über dem Limit – warten Sie auf „Retry‑After“.
X‑RateLimit‑LimitGröße des Zählers, in dem diese Anfrage gezählt wurde (600 oder 120)
X‑RateLimit‑RemainingIm aktuellen Fenster verbleibende Anfragen
X‑RateLimit‑ResetWenn das Fenster zurückgesetzt wird
Retry‑AfterAuf 429: Sekunden warten
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 12
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0

{ "status": 429, "title": "Too Many Requests", "reason": "rate_limited" }

/v1/ai/assistant/tickets/status und /v1/ai/assistant/account‑link haben ihre eigenen Zähler; Die Support‑Agent‑API kann über eine Widget-Überschreibung verfügen.

10

Fehler

Jeder Fehler ist RFC‑7807 application/problem+json: ein maschinenlesbarer Status und Grund, ein für Menschen lesbares Detail.

HTTP/1.1 403 · Content-Type: application/problem+json
{
  "type": "https://smartbtn.me/problems/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "Token lacks scope chats:write.",
  "required_scopes": [
    "chats:write"
  ],
  "hint": "Dashboard → API tokens → key → Edit scopes"
}

Der Hauptteil nennt „required_scopes“ und gibt an, wo sie gewährt werden sollen. Eine erneute Schlüsselausgabe ist nicht erforderlich.

StatusBedeutung
400Fehlerhafte Anfrage oder ein erforderlicher Idempotenzschlüssel fehlt
401Kein Token, ungültiger oder widerrufener Token
403Dem Token fehlt der Umfang; Der Hauptteil fügt required_scopes hinzu und gibt an, wo es gewährt werden soll
404In diesem Widget nicht gefunden
405Methode nicht zulässig – anhalten und melden; Suchen Sie nicht nach alternativen Schreibvorgängen
409Idempotenzschlüssel innerhalb von 24 Stunden wiederverwendet oder ein Zustandskonflikt
422Die Validierung ist fehlgeschlagen (z. B. wurde ein schreibgeschütztes Feld gesendet)
429Tarifbegrenzung; Respekt Retry‑After
11

Idempotenz

Netzwerke scheitern. Ein Schlüssel macht einen wiederholten Schreibversuch sicher: Derselbe Vorgang wird nie zweimal angewendet.

  • Senden Sie X‑Smartbtn‑Idempotency‑Key bei jedem POST / PATCH / PUT / DELETE: eine neue UUID für einen neuen Vorgang, den gleichen Schlüssel für einen Wiederholungsversuch desselben.
  • Vorgänge, die in OpenAPI mit x‑idempotency: erforderlich gekennzeichnet sind: kein Schlüssel → 400, der Schlüssel wurde innerhalb von 24 Stunden wiederverwendet → 409 (kein zwischengespeicherter Erfolg).
  • Nicht sicher, ob es durchgegangen ist? Lesen Sie zuerst den Zustand. Ändern Sie den Schlüssel niemals automatisch; Respekt Retry‑After.
  • Ein 502 von einem Upstream‑Anbieter gibt den Schlüssel frei – versuchen Sie es erneut mit demselben Schlüssel.
KEY=$(uuidgen)
curl -X PATCH https://smartbtn.me/api/v1/widget/settings \
  -H "Authorization: Bearer $SMARTBTN_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Smartbtn-Idempotency-Key: $KEY" \
  -d '{"language":"ru"}'
# Netzwerkfehler? Wiederholen Sie den Vorgang mit demselben $KEY
12

Changelog

Änderungen an der öffentlichen API und den Webhooks im Jahr 2026. Alles unten ist additiv und bleibt in v1.

NeuTickets: Ticket.created Webhook, Warteschlange liest mit support:read, 403‑Hinweis

Neues Live‑Event‑Ticket.erstellt. GET /v1/support/tickets beantwortet jeden Schlüssel mit support:read, bis ein Support‑Agent konfiguriert ist. Wichtige Bereiche können ohne erneute Ausgabe bearbeitet werden. 403 Gewinne erforderliche_Bereiche.

NeuName des KI‑Betreibers pro Sprache

POST/PATCH /v1/ai/operators akzeptieren name_i18n; Standardnamen werden in die Widget‑Sprache übersetzt; vorhersehbare Wahl der Begrüßung.

VeränderungRatenbegrenzung: Lese- und Schreibvorgänge werden getrennt gezählt

Lesevorgänge: 600 pro Minute, Schreibvorgänge: 120. Abfragen verschlingen nicht mehr das Schreibbudget. X‑RateLimit-* beschreibt den verwendeten Zähler.

NeuGET /v1/chats: Filter „update_since“.

Chats mit Aktivität seit einem Moment, egal wie alt sie sind. Jeder Chat trägt jetzt last_message_at.

NeuSupport‑API: Der Chat hat nach dem Postfach gefragt

chat.account.email_requested – der Chat wartet auf die Adresse; Agenten dürfen keinen weiteren Codefluss starten.

NeuGeltungsbereich support:tickets:close

Schließen Sie ein Ticket und nichts anderes – für einen „Frage gelöst“-Button in Ihrem Backend.

NeuGET /v1/chats: Textsuche und Client‑Nachrichten

Filtert has_client_messages=1 und q (2–100 Zeichen).

NeuKontoverknüpfung von Ihrem Backend

POST /v1/ai/assistant/account‑link und /revoke. Aus, bis der Eigentümer es aktiviert.

BehebenWissensdatenbank: schreibt mit einem assistentengebundenen Schlüssel

Regeln werden mit der Widget‑Taste oder einer aktivierten Assistententaste eingebettet; a 502 gibt den Idempotenzschlüssel frei.

VeränderungSupport‑Agent‑API: Lebensdauer des App‑Ticket‑Kontos

Das Konto ist sichtbar, solange das Ticket geöffnet ist und 7 Tage danach.

NeuSupport‑Agent‑API

Neue /v1/support‑Gruppe: Warteschlange, Chats, Leases, Antworten, Schließen und erneutes Öffnen von Tickets. Aus, bis der Eigentümer es aktiviert.

NeuSupport‑Agent‑API: E‑Mail‑Codefenster

Felder code_pending, code_expires_at, last_code_result und last_code_at.

13

WordPress‑Plugin

Das Widget auf einer WordPress‑Site, ohne den Theme‑Code zu berühren.

  1. HerunterladenLaden Sie das Plugin‑Archiv auf Ihren Computer herunter.
  2. InstallierenLegen Sie den entpackten Ordner in wp‑content/plugins/ ab – oder laden Sie ihn im WordPress‑Admin hoch.
  3. AktivierenEin Smartbtn-Element erscheint im Menü.
  4. Fügen Sie das Token einKopieren Sie das Sicherheitstoken aus den Widget‑Einstellungen in Ihrem Dashboard.
Gut zu wissen

Wenn Sie Ihr Passwort ändern, ändert sich auch das Sicherheitstoken und das alte funktioniert nicht mehr – fügen Sie das neue in das Plugin ein.

14

Codebeispiele

Listen Sie jeden Chat mit Aktivität seit Ihrer letzten Umfrage auf – indem Sie dem Cursor bis zum Ende folgen.

# erste Seite
curl -G https://smartbtn.me/api/v1/chats \
  -H "Authorization: Bearer $SMARTBTN_TOKEN" \
  --data-urlencode "updated_since=2026-10-17T09:00:00+03:00"

# next – mit next_cursor aus der Antwort
curl -G https://smartbtn.me/api/v1/chats \
  -H "Authorization: Bearer $SMARTBTN_TOKEN" \
  --data-urlencode "cursor=eyJpZCI6NDgyMDd9"
Bereit

Geben Sie einen Token aus – und drücken Sie die Eingabetaste.