Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Schnittstelle (API)

Schnittstelle: Paketsperren und Drosseln

Welche Wege der Schnittstelle an Merkmalen und Zahlgrenzen des Pakets hängen, welche Drosseln gelten und wie die Antworten mit 402, 429 und 503 aussehen.

In einfacher Sprache

Die Schnittstelle setzt Anfragen Grenzen. Das gebuchte Paket entscheidet, ob ein Weg offen ist. Es legt auch fest, wie viele Assistenten und Quellen Sie anlegen können. Zähler begrenzen, wie oft Sie einen Weg in einer Zeit aufrufen. Diese Seite nennt jede Grenze. Sie sagt, welche Antwort bei einer Ablehnung kommt. Und sie zeigt, wie Sie damit umgehen.

Stand

Alle Themen der Dokumentation

Die Schnittstelle begrenzt Anfragen auf zwei Arten: über das gebuchte Paket und über Zähler. Das Paket entscheidet, ob ein Weg überhaupt offensteht und welche Zahlgrenzen für Assistenten, Wissensquellen, Dokumente, Abschnitte und Sitzplätze beim Anlegen geprüft werden. Zähler begrenzen, wie oft ein Weg in einem Zeitfenster aufgerufen wird. Diese Seite nennt jede Sperre mit Weg, Wert und Antwort. Den Überblick über Pakete und Kontingent gibt Pakete und Kontingente.

Paketsperre und Paketgrenzen

Wege, die an ein Paketmerkmal, eine Ja/Nein-Grenze des Pakets oder eine Zahlgrenze gebunden sind, prüfen das Paket des Kontos, bevor sie etwas tun. Die Ablehnung trägt den Status 402 und unterscheidet sich damit von einer fehlenden Rolle (403): Eine Rolle kann jemand im Konto vergeben, ein fehlendes Merkmal oder eine höhere Grenze bringt nur ein anderes Paket. Eine Zahlgrenze gilt als erreicht, sobald der Bestand die Grenze erreicht. Bei einer Grenze von 1 scheitert also der zweite Assistent.

StatuserrorWeitere FelderBedeutung
402plan_feature_missingfeature, plan, plan_name und available_inDem Paket fehlt das Merkmal, das der Weg braucht, oder eine Ja/Nein-Grenze des Pakets steht auf Nein; feature nennt dann diese Grenze.
402plan_limit_reachedlimit, allowed, used, plan und plan_nameDie Zahlgrenze ist erreicht, angelegt wird nichts.
503plan_limit_unmeasuredlimit und reasonDer Bestand konnte nicht gezählt werden, angelegt wird nichts.
500plan_gate_misconfiguredkind, feature oder limitDer Weg ist falsch an das Paket gebunden. Das ist ein Fehler auf unserer Seite.
403no_tenant-Die Anfrage gehört zu keinem Konto.

limit und feature nennen die Grenze oder das Merkmal mit dem Schlüssel aus den Tabellen unten. plan ist der Schlüssel des Pakets (etwa start, pro oder custom), plan_name sein Anzeigename (Start, Pro, Individuell). available_in listet die Schlüssel der Pakete, die das Merkmal enthalten. allowed ist die Grenze, used der Bestand. Ein Feld message tragen diese Antworten nicht, auch nicht ab Status 500; maßgeblich ist error.

antwort-402.json json

{
  "error": "plan_limit_reached",
  "limit": "assistants",
  "allowed": 1,
  "used": 1,
  "plan": "start",
  "plan_name": "Start"
}

In der App erscheint bei plan_feature_missing „Der Tarif Start enthält diese Funktion nicht. Die Übersicht steht unter Abrechnung.“, bei plan_limit_reached „Die Grenze des Tarifs Start ist erreicht: 1 von 1. Die Übersicht steht unter Abrechnung.“ und bei jeder anderen 402 „Der gebuchte Tarif deckt das nicht ab. Die Übersicht steht unter Abrechnung.“ Statt „Start“ und der Zahlen stehen Ihr Paket und Ihr Stand. Eine 503 zeigt die App als „Der Dienst hat einen Fehler gemeldet. Bitte versuchen Sie es später erneut.“

Merkmale je Weg

Merkmal (feature)Wege unter /api/v1Enthalten in
tool_and_api_controlPOST keys, POST webhooks, PUT webhooks/{id} und POST webhooks/{id}/test, jeder Weg unter integration/, dazu Werkzeuge der Bauform http und der Bauformen für angebundene SystemeIndividuell
conversation_analyticsanalytics/* außer analytics/subscriptionPro, Individuell
shop_integrationcatalog/*, darunter catalog/shop, catalog/shop/test und catalog/shop/syncPro, Individuell
appointment_and_leadrecords/appointments und records/carts, dazu Werkzeuge der Bauform appointmentPro, Individuell
conversation_exportGET conversations/export und GET conversations/{id}/exportStart, Pro, Individuell

Bei Werkzeugen prüft die Schnittstelle die Bauform beim Anlegen, beim Ändern und bei der Ausführung. Ohne das Merkmal wird ein Werkzeug dieser Bauform weder angelegt noch geändert; die Antwort ist dieselbe 402 mit plan_feature_missing. Die Bauformen für angebundene Systeme sind order_status, order_change, inventory_status, price_lookup, calendar_availability, calendar_booking, crm_lead, crm_activities, callback_note und ticket_create. Termine und Warenkörbe prüfen das Merkmal nur beim Ändern des Status; ihre Listen lassen sich ohne das Merkmal lesen und einzelne Vorgänge löschen. GET records zählt jede Art, und plan_locked nennt die Arten, deren Status sich nicht ändern lässt. conversation_export ist eine Ja/Nein-Grenze des Pakets; fehlt sie, antwortet die Schnittstelle ebenfalls mit 402 plan_feature_missing, feature ist dann conversation_export. Wie die App gesperrte Bereiche zeigt, steht unter Pakete und Kontingente.

Zahlgrenzen je Weg

Weg unter /api/v1Geprüfte Grenzen (limit)
POST assistantsassistants
POST setup/runs/{id}/acceptassistants
POST knowledge/sourcesknowledge_sources, documents und chunks
POST setup/runsknowledge_sources, documents und chunks
POST knowledge/sources/{id}/refreshdocuments und chunks
POST team/invitationsseats

Die Grenzen gelten je Konto. Geprüft wird der vorhandene Bestand, bevor der Weg etwas anlegt; ist eine Grenze erreicht, entsteht nichts Neues. Dokumente und Abschnitte entstehen erst beim Einlesen einer Quelle, die Prüfung vergleicht also den Bestand vor dem Einlesen mit der Grenze. Das Wiederherstellen einer Quelle prüft keine Zahlgrenze. Bei seats zählen Mitglieder und offene Einladungen zusammen. Mehr zu Sitzplätzen steht unter Team und Rollen.

Die Höhe jeder Grenze je Paket nennt Pakete und Kontingente. Bei einer Ablehnung stehen die Grenze Ihres Kontos in allowed und der Bestand in used.

Benannte Drosseln

Neben dem Paket begrenzen benannte Drosseln die Zahl der Aufrufe. Jeder Name hat eigene Zähler, ein erschöpfter Name sperrt also nur die Wege, die ihn tragen. Die Werte gelten je Minute; wo zusätzlich eine Stundenzahl steht, zählt sie getrennt, und die Anfrage wird abgewiesen, sobald einer der beiden Zähler erschöpft ist. Eine Überschreitung ergibt 429, in der App erscheint „Zu viele Versuche. Bitte warten Sie einen Moment.“ Allgemeines zu den Statuscodes steht unter Grundlagen der Schnittstelle.

Je Person

Diese Drosseln zählen je angemeldeter Person. Ohne Anmeldung zählt ersatzweise die Herkunft der Anfrage. Wer mehreren Konten angehört, nutzt denselben Zähler in allen Konten; nur dpa zählt je Konto und Person getrennt. password-change ist ein gemeinsamer Zähler für drei Wege.

NameJe MinuteWege unter /api/v1
knowledge-sources20POST knowledge/sources, Neu einlesen, Wiederherstellen und Einbetten einer Quelle, POST setup/runs
knowledge-search60Suche im Wissen
knowledge-ask30Frage an das Wissen
knowledge-probes6Probefragen ausführen
knowledge-tune2Abstimmung anhand der Probefragen
assistants30Assistent anlegen und ändern, Fassung anlegen und wiederherstellen, POST assistants/{id}/key, Abnahmelauf starten, Prüffragen anlegen und ändern, Werkzeuge anlegen und ändern; Löschen ist nicht gedrosselt
conversations30Gespräche anlegen, gesamt oder einzeln exportieren, bewerten, im Klartext zeigen und Anhänge abrufen; GET analytics/report
conversation-send20POST conversations/{id}/send
catalog20Produkte anlegen, einführen und ändern; Shopanbindung speichern, prüfen und abgleichen
privacy5Datenexport des Kontos, Einwand gegen Unterauftragsverarbeiter, Aufbewahrung und Löschauftrag
dpa10Weg zur Auftragsverarbeitung
key10POST keys, POST webhooks und POST webhooks/{id}/test
confirmation3Bestätigungsmail erneut senden
invitations5POST team/invitations
tenant-switch20Konto wechseln
password-change5Passwort ändern, Code-Verfahren entfernen und Sicherheitsschlüssel entfernen

Je Herkunft

Diese Drosseln gelten für Wege ohne Anmeldung und zählen je Herkunft: bei IPv4 je Adresse, bei IPv6 je /64-Netz. Eine IPv4-Adresse in IPv6-Schreibweise (::ffff:) zählt als IPv4-Adresse. Minuten- und Stundenzähler laufen getrennt.

NameJe MinuteJe StundeWege unter /api/v1
status30-public/status, public/changelog, Abruf einer Demo mit GET public/demo/{id} und public/accessibility
enquiry5-public/enquiry
demo2-POST public/demo
register520POST register
password-forgot-20POST password/forgot
auth-token30-Bestätigung der Adresse mit POST verify und POST password/reset
invitation20-GET invitation/{token} und POST invitation/accept
cart-pickup60-cart/pickup/{token}

Je Besucher

Die Wege des Widgets unter /api/v1/public/widget/{key} zählen je Besucher, gebildet aus Herkunft und Widget-Schlüssel zusammen. Besucher mit derselben Herkunft teilen sich den Zähler also nur innerhalb desselben Widget-Schlüssels. Zusätzlich gelten die Deckel des Widgets.

NameJe MinuteWege unter /api/v1/public/widget/{key}
widget-send12POST send, Bestätigung eines Werkzeugaufrufs und Hochladen eines Anhangs
widget60alle übrigen Wege, darunter der Abruf der Einstellungen

Deckel eines API-Schlüssels

Die Wege unter /api/v1/integration melden sich mit dem Kopf X-Api-Key an, siehe Schnittstelle für Anbindungen. Für sie gelten zwei Deckel, beide gezählt je Schlüssel. Eine aus dem Ruder gelaufene Anbindung hält so die übrigen Schlüssel des Kontos nicht an.

DeckelWertZeitfenster
Je MinuteFeld Anfragen pro Minute beim Anlegen des Schlüssels, 1 bis 6000, ohne Angabe 12060 Sekunden ab dem ersten gezählten Aufruf
Je TagTagesgrenze des Kontos, Vorgabe 2.000; der Wert 0 heißt ohne TagesdeckelKalendertag nach UTC, der Zähler beginnt um 00:00 UTC neu, in Deutschland also um 1 Uhr, während der Sommerzeit um 2 Uhr
  • Beide Deckel werden geprüft, bevor einer von beiden zählt. Eine abgewiesene Anfrage verbraucht also nichts. Gezählt wird aber vor der Prüfung des Bereichs: eine Anfrage, die erst am fehlenden Bereich scheitert, zählt auf beiden Deckeln mit.
  • Seine Minutengrenze meldet ein Schlüssel über GET /api/v1/integration/status im Feld limit_per_min, siehe Schnittstelle: Integration.
  • Einen bestehenden Schlüssel können Sie nicht ändern. Für einen anderen Minutenwert legen Sie einen neuen Schlüssel an und ziehen den alten zurück.
  • Ein Konto hat höchstens 10 gültige Schlüssel; zurückgezogene und abgelaufene zählen nicht mit. Ein weiterer ergibt 422 mit too_many_keys und limit, in der App „Die Höchstzahl gleichzeitiger Schlüssel ist erreicht.“
  • GET /api/v1/keys nennt die Grenze in limit_active. Die Seite Schnittstellen zeigt den Stand unter API-Schlüssel etwa als „3 / 10“.

antwort-429.json json

{
  "error": "too_many_requests",
  "scope": "minute",
  "limit": 120,
  "retry_after": 42,
  "limit_per_min": 120,
  "wait": 42
}

scope ist minute oder day, limit der überschrittene Deckel und limit_per_min der Minutenwert des Schlüssels. retry_after und wait enthalten dieselbe Wartezeit in Sekunden wie der Kopf Retry-After. Beim Tagesdeckel reicht sie bis zum Tagesende nach UTC, mindestens aber 60 Sekunden.

Deckel des Widgets

Neben den benannten Drosseln hat das Widget zwei eigene Deckel, deren Werte am Konto hängen: einen für Aufrufe und einen für Fragen. Jeder Deckel zählt auf dem Besucher und, wenn der Aufruf zu einem Gespräch gehört, zusätzlich auf dieser Sitzung im Chatfenster. Zu einem Gespräch gehört ein Aufruf, wenn die Gesprächskennung im Pfad oder als conversation_id im Rumpf steht. Jeder Träger kann abweisen; gezählt wird erst, wenn keiner abgewiesen hat.

DeckelWegeJe MinuteJe Tag
AufrufeEinstellungen, Start, Verlauf, Bewertung, Widerruf, Auszug und Löschen, dazu Bestätigen, Ablehnen und Rückmeldung eines WerkzeugaufrufsWert Anfragen je Minute des KontosTagesgrenze des Kontos, Vorgabe 2.000
FragenPOST sendVorgabe 10Vorgabe 200
  • Der Minutenwert für Aufrufe ist der Wert Anfragen je Minute des Kontos. Ein Wechsel auf ein Paket setzt ihn auf dessen Wert: 20 bei Start, 60 bei Pro, 120 bei Individuell. Ist das Konto bereits Individuell, bleibt ein dort hinterlegter Wert stehen.
  • Die Tagesgrenze der Aufrufe ist derselbe Wert wie der Tagesdeckel der API-Schlüssel. Für Fragen kann für ein Konto ein anderer Wert als die Vorgabe hinterlegt sein.
  • Hochladen und Abrufen von Anhängen fallen nicht unter diese Deckel, dort gelten nur die benannten Drosseln.
  • Die Zeitfenster laufen ab dem ersten gezählten Aufruf: 60 Sekunden für die Minute und 86.400 Sekunden für den Tag. Der Tag ist hier kein Kalendertag.
  • Ein Deckel unter 1 gilt als abgeschaltet.
  • Die Ablehnung lautet 429 mit too_many_requests, limit_per_min, limit_per_day und wait, dazu der Kopf Retry-After.
  • Wie das Chatfenster darauf reagiert, steht unter Widget-Auslieferung.

Monatskontingent

Ist das Kontingent des Monats erschöpft, erzeugt der Assistent keine Antworten mehr. Wie das sichtbar wird, hängt vom Weg ab. Das Kontingent selbst beschreibt Pakete und Kontingente.

Schon ab 80 % des Kontingents antwortet der Assistent gedrosselt: eine Antwort ist dann auf 300 Einheiten begrenzt und dreht höchstens eine Werkzeugrunde. Ist das Kontingent aufgebraucht, lehnt der Dienst die Frage ab, bevor eine Antwort erzeugt wird.

WegAntwort
POST /api/v1/integration/chat429 mit quota_exhausted, scope gleich month, month, budget, used und retry_after, dazu der Kopf Retry-After. Die Wartezeit reicht bis zum Monatswechsel, mindestens 60 Sekunden.
Widget und Probierdialog in der AppEin Fehlerereignis mit code gleich quota_exhausted, scope gleich month und retry_after, danach die hinterlegte Notfallantwort des Assistenten.
Abnahmelauf422 mit quota_exhausted. Die App meldet „Das Kontingent dieses Monats ist aufgebraucht. Ein Lauf würde jede Zeile als nicht messbar verbuchen.“ Siehe Probieren und abnehmen.

Weitere Zähler

Einige Wege zählen zusätzlich selbst. Ihre Ablehnungen tragen eigene Fehlerkennungen.

Weg unter /api/v1GrenzeGezählt jeAntwort
POST login5 Fehlversuche je Minute, 20 je StundeE-Mail-Adresse und Herkunft429 too_many_attempts mit retry_in
POST login30 Fehlversuche je Minute, 300 je StundeHerkunft429 too_many_attempts mit retry_in
POST password/forgot3 Anforderungen je StundeE-Mail-Adresse und Herkunft429 too_many_attempts mit retry_in
POST password/forgot10 Mails je StundeE-Mail-Adresse200 mit {"ok":true}, versandt wird dann nichts
POST catalog/shop/test3 Prüfungen je MinuteKonto429 too_many_tests mit retry_after und Kopf Retry-After
POST catalog/shop/syncein Abgleich je 900 SekundenShopanbindung429 sync_too_soon mit retry_after, connection und Kopf Retry-After
POST public/demo3 bestehende Demos, angelegt innerhalb von 24 StundenIP-Adresse429 demo_ip_limit
POST public/demofreie Kapazität für Demos-503 demo_capacity
POST public/widget/{key}/send, POST integration/chat und POST conversations/{id}/sendFragen je Gespräch, vom Betreiber für jedes Konto einzeln eingestellt: 0 bis 1.000, Vorgabe 60; 0 heißt ohne HöchstzahlGesprächim Ereignisstrom error mit conversation_limit und limit, danach ein Hinweistext und handoff

Bei der Anmeldung zählen nur Fehlversuche. Eine erfolgreiche Anmeldung gibt den Zähler aus E-Mail-Adresse und Herkunft frei, der Zähler je Herkunft läuft weiter. retry_in nennt die Wartezeit in Sekunden; einen Kopf Retry-After senden Anmeldung und Passwort-Anforderung nicht. Die Grenze von 10 Mails je E-Mail-Adresse ändert die Antwort nicht, die Anfrage endet mit 200. Wartet oder läuft für das Konto schon ein Abgleich, prüft POST catalog/shop/sync die Sperrzeit nicht und antwortet mit 202; already_pending ist dann true.

Umgang mit Ablehnungen

  • Unterscheiden Sie nach Status: 402 verlangt ein anderes Paket, 403 eine andere Rolle, 429 eine Pause und 503 mit plan_limit_unmeasured einen späteren Versuch.
  • Liegt der Kopf Retry-After vor, warten Sie mindestens so viele Sekunden. Sonst werten Sie retry_after, wait oder retry_in aus.
  • Wiederholen Sie eine 402 nicht in einer Schleife. Sie ändert sich erst mit einem anderen Paket oder einem kleineren Bestand, etwa nach dem Löschen eines Assistenten.
  • Geben Sie jeder Anbindung einen eigenen Schlüssel. Minuten- und Tagesdeckel zählen je Schlüssel.
  • Der Tagesdeckel eines Schlüssels beginnt um 00:00 UTC neu, der Tagesdeckel des Widgets 86.400 Sekunden nach dem ersten gezählten Aufruf.

Häufige Fragen

Warum antwortet die Schnittstelle mit 402 statt 403?

402 heißt, dass das Paket den Weg nicht abdeckt oder eine Zahlgrenze erreicht ist. 403 steht für eine fehlende Rolle. So erkennen Sie, ob ein anderes Paket oder eine andere Rolle nötig ist.

Teilen sich mehrere API-Schlüssel eines Kontos einen Zähler?

Nein. Minuten- und Tagesdeckel zählen je Schlüssel. Der Wert des Tagesdeckels kommt vom Konto und ist für alle Schlüssel gleich, gezählt wird aber getrennt.

Wann beginnt der Tagesdeckel eines Schlüssels neu?

Um 00:00 UTC. Der Zähler gehört zum Kalendertag nach UTC und verfällt mit dessen Ende.

Gelten die Drosseln je Person über mehrere Konten hinweg?

Ja. Sie zählen je Person, auch wenn diese Person mehreren Konten angehört. Nur dpa zählt je Konto und Person getrennt.

Zählt eine abgewiesene Anfrage mit?

Bei den Deckeln von Schlüssel und Widget nicht. Beide prüfen zuerst alle Zähler und zählen nur, wenn keiner abgewiesen hat.

Eine Stelle ist unklar geblieben?

Schreiben Sie uns, welche Seite und welcher Schritt gemeint ist. Wir antworten persönlich.

Anfrage in drei Schritten

  1. 1. Anliegen
  2. 2. Ihr Fall
  3. 3. Kontakt

Worum geht es?

Ein Klick genügt, alles Weitere ist freiwillig.

Erzählen Sie kurz von Ihrem Fall

Alle Angaben in diesem Schritt sind freiwillig. Sie helfen uns, gleich mit etwas Konkretem zu antworten statt mit Rückfragen.

Anfragen im Monat, ungefähr (optional)
Wann soll es losgehen? (optional)
Wie erreichen wir Sie?

Name und E-Mail-Adresse genügen. Wir antworten persönlich.

Wir verwenden Ihre Angaben, um Ihre Anfrage zu bearbeiten. Mehr dazu in der Datenschutzerklärung.