Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Schnittstelle (API)

Schnittstelle: öffentliche Wege

Registrierung, Anmeldung, Passwort, Status, Kontaktanfrage, Demo, Einladung und Warenkorbabholung: alle Schnittstellenwege ohne Sitzung.

In einfacher Sprache

Die Wege auf dieser Seite brauchen keine Anmeldung. Über sie legen Sie ein Konto an und melden sich an. Sie setzen dort auch ein vergessenes Passwort zurück. Sie nehmen eine Einladung an. Andere Wege zeigen den Zustand des Dienstes und die Änderungen. Auch die Kontaktanfrage und die Demo gehören dazu. Ihr Shop holt über einen dieser Wege einen Warenkorb ab.

Stand

Alle Themen der Dokumentation

Die Wege auf dieser Seite erreichen Sie ohne Sitzung und ohne Widget-Schlüssel. Sie tragen alles, was vor der Anmeldung geschieht – ein Konto anlegen, die Adresse bestätigen, sich anmelden, ein Passwort zurücksetzen, eine Einladung annehmen –, und das, was außerhalb eines Kontos lesbar ist: Betriebszustand, Änderungsprotokoll, Erklärung zur Barrierefreiheit, Kontaktanfrage, Demo und die Abholung eines Warenkorbs durch Ihren Shop. Die Wege des Widgets beschreibt Widget-Wege, die Anmeldung für alle übrigen Wege Anmeldung an der Schnittstelle.

Überblick

MethodePfadZweckGrenze je Herkunft (Zähler)
POST/api/v1/registerKonto und Mandant anlegen5 je Minute, 20 je Stunde (register)
POST/api/v1/verifyAdresse bestätigen30 je Minute (auth-token)
POST/api/v1/loginAnmelden, auch der zweite SchrittFehlversuche: 5 je Minute und 20 je Stunde je Adresse und Herkunft; falsche Zugangsdaten zusätzlich 30 je Minute und 300 je Stunde je Herkunft
POST/api/v1/password/forgotLink für ein neues Passwort anfordern20 je Stunde (password-forgot), dazu 3 je Stunde je Adresse und Herkunft
POST/api/v1/password/resetNeues Passwort setzen30 je Minute (auth-token)
GET/api/v1/public/statusBetriebszustand30 je Minute (status)
GET/api/v1/public/changelogÄnderungsprotokoll30 je Minute (status)
POST/api/v1/public/enquiryKontaktanfrage senden5 je Minute (enquiry)
POST/api/v1/public/demoDemo anlegen2 je Minute (demo), höchstens 3 neue Demos je IP-Adresse in 24 Stunden
GET/api/v1/public/demo/{id}Stand einer Demo30 je Minute (status)
GET/api/v1/public/accessibilityErklärung zur Barrierefreiheit30 je Minute (status)
GET/api/v1/invitation/{token}Einladung ansehen20 je Minute (invitation)
POST/api/v1/invitation/acceptEinladung mit neuem Konto annehmen20 je Minute (invitation)
GET/api/v1/cart/pickup/{token}Warenkorb abholen60 je Minute (cart-pickup)

Gemeinsame Regeln

Alle Pfade beginnen mit https://app.xicbot.de/api/v1/; die App ruft sie von diesem Ursprung aus auf. Senden Sie JSON mit Content-Type: application/json und Accept: application/json. Fehler unter /api/ kommen als JSON zurück, auch für unbekannte Pfade. Die Prüfung der Felder antwortet mit 422, einem Text in message und je Feld einer Liste von Meldungen in errors.

Grenzen

Gezählt wird je Herkunft: eine IPv4-Adresse für sich, eine IPv6-Adresse gekürzt auf ihr /64-Netz. Eine IPv4-Adresse in IPv6-Schreibweise wie ::ffff:192.0.2.10 zählt als IPv4. Minuten- und Stundengrenze sind getrennte Zähler; beide müssen frei sein. Wege mit demselben Zähler teilen ihn: status gilt für Betriebszustand, Änderungsprotokoll, Demo-Abfrage und Barrierefreiheit zusammen, auth-token für Bestätigung und neues Passwort, invitation für beide Einladungswege. Ist eine Grenze erreicht, antwortet der Weg mit 429 und dem Kopf Retry-After in Sekunden.

Anmeldung und Passwortanforderung haben zusätzlich eigene Zähler. Deren 429 trägt {"error": "too_many_attempts", "retry_in": …}; retry_in nennt die Sekunden bis zum nächsten erlaubten Versuch. Die Grenzen der übrigen Wege stehen unter Grenzen der Schnittstelle.

Fehlerantworten

StatusInhaltBedeutung
404{"error": "route_unknown"}Den Pfad gibt es nicht.
405{"error": "method_not_allowed", "allowed": […]}Den Pfad gibt es, die Methode nicht; allowed nennt die erlaubten Methoden.
422message und errors oder {"error": "…"}Felder ungültig, Token nicht gültig oder Anfrage fachlich abgelehnt.
429Kopf Retry-After; bei Anmeldung und Passwort too_many_attempts mit retry_inGrenze erreicht.
ab 500message lautet ServerfehlerUnerwarteter Fehler auf dem Server. Ausnahmeklasse, Datei, Zeile und Aufrufweg werden entfernt. Ersetzt wird nur ein vorhandenes message; eine Antwort ohne message bekommt keines.

Aufrufe aus dem Browser

Aus dem Browser einer anderen Website sind nur die Wege unter /api/v1/public/ lesbar, und nur für die zugelassenen Ursprünge; Ursprünge, Methoden, Köpfe und die Gültigkeit der Vorabfrage stehen unter Schnittstelle: Grundlagen. Registrierung, Anmeldung, Passwort und Einladung sind für fremde Ursprünge nicht freigegeben; die Warenkorbabholung regelt ihre Freigabe selbst, wie weiter unten beschrieben.

Konto anlegen

POST /api/v1/register

Legt ein Konto an, dazu einen neuen Mandanten mit dem Firmennamen, dessen Inhaber das Konto wird, und schickt einen Bestätigungslink an die Adresse. Antwort 201 mit tenant (id, name, slug), user (id, email, role) confirmation_pending: true und mail_sent (liegt die Nachricht mit dem Bestätigungslink in der Schlange). Das Konto erhält die Rolle owner, der slug des Mandanten wird aus dem Firmennamen gebildet.

Anmeldung
Keine
Begrenzung
5 je Minute und 20 je Stunde je Herkunft
FeldPflichtRegel
emailjagültige Adresse nach RFC, höchstens 190 Zeichen
passwordjamindestens 12 Zeichen, darunter Buchstaben und Ziffern
password_confirmationjagleich password
companyjahöchstens 160 Zeichen; wird der Name des Mandanten
nameneinhöchstens 120 Zeichen
localeneinde oder en, ohne Angabe de; bestimmt die Sprache der Bestätigungsmail

Die Adresse wird vor dem Speichern vereinheitlicht: ohne Leerraum am Rand, in Unicode-Normalform C, klein geschrieben und ohne den Zusatz hinter einem Plus. Bei Anbietern, die Punkte im lokalen Teil nicht unterscheiden, fallen auch die Punkte weg. Führt ein Anbieter dasselbe Postfach unter zwei Domains, gilt die Adresse unter beiden als dieselbe. Aus Anna+Test@example.com wird so anna@example.com. Ein lokaler Teil in Anführungszeichen bleibt ungefaltet. Ist die vereinheitlichte Adresse schon vergeben, auch durch ein gelöschtes Konto, antwortet der Weg mit 422 und {"error": "validation", "fields": {"email": ["validation.unique"]}}. In der App heißt dieser Schritt Konto anlegen, die Passwortregel steht dort als Mindestens 12 Zeichen, darunter Buchstaben und Ziffern.

POST /api/v1/verify

Bestätigt die Adresse mit dem Token aus dem Link: {"token": "…"}, höchstens 120 Zeichen. Antwort 200 mit {"confirmed": true}. Ist das Token unbekannt, schon benutzt oder älter als 48 Stunden, antwortet der Weg mit 422 und invalid_token. In der App gehört dazu die Seite Adresse bestätigen.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler auth-token

Anmelden

POST /api/v1/login

Meldet mit Adresse und Passwort an und gibt ein Token zurück, das Sie an die übrigen Wege als Authorization: Bearer … senden. Die Adresse wird wie bei der Registrierung vereinheitlicht. Antwort 200 mit token, expires_at und user.

Anmeldung
Keine
Begrenzung
Fehlversuche: 5 je Minute und 20 je Stunde je Adresse und Herkunft; falsche Zugangsdaten zusätzlich 30 je Minute und 300 je Stunde je Herkunft
FeldPflichtInhalt
emailjaAdresse des Kontos, höchstens 190 Zeichen
passwordja, außer mit challengePasswort des Kontos
totpneinCode aus der Authentifizierungs-App, höchstens 10 Zeichen
challengeim zweiten SchrittAufforderung aus der 428-Antwort, höchstens 80 Zeichen
webauthnneinObjekt mit id (höchstens 1400 Zeichen), client_data_json, authenticator_data und signature (je höchstens 8000 Zeichen)
localeneinde oder en; wird mit einer erfolgreichen Anmeldung zur Sprache des Kontos, in der etwa Einladungen, die Sie verschicken, und die Mail nach einem Passwortwechsel hinausgehen. Ein anderer Wert lässt die bisherige Sprache stehen; die Anmeldung scheitert daran nicht

Zweiter Faktor

  1. Schritt 1

    Passwort senden

    Hat das Konto einen zweiten Faktor und fehlt totp, antwortet der Weg mit 428. error ist totp_required, wenn eine Authentifizierungs-App eingerichtet ist, sonst webauthn_required. Dazu kommen challenge, expires_in mit 600 Sekunden und methods mit den Faktoren, die sich im zweiten Schritt verwenden lassen: totp, webauthn oder beide. Hat das Konto nur Sicherheitsschlüssel und ist die Anmeldung per Schlüssel auf dem Server nicht eingerichtet, kommt statt der 428 schon hier 503 webauthn_unconfigured. Ist eine Authentifizierungs-App eingerichtet, können Sie totp gleich mit dem Passwort senden und sparen den zweiten Schritt; an einem Konto ohne App ergibt ein mitgesendeter Code bad_totp.

  2. Schritt 2

    Sicherheitsschlüssel vorbereiten

    Sind Sicherheitsschlüssel hinterlegt und ist die Anmeldung per Schlüssel auf dem Server eingerichtet, enthält die Antwort ein Objekt webauthn mit challenge, rp_id, allow (die zugelassenen Schlüsselkennungen) und timeout, mindestens 30. Damit fordern Sie im Browser die Bestätigung am Schlüssel an.

  3. Schritt 3

    Nachweis senden

    Senden Sie email, challenge und entweder totp oder webauthn, ohne Passwort und von derselben IP-Adresse wie im ersten Schritt. Die Aufforderung gilt 600 Sekunden und verfällt beim fünften Fehlversuch; als Fehlversuch zählen ein falscher Code, ein abgelehnter Schlüssel und ein Aufruf von einer anderen IP-Adresse. Ein solcher Aufruf ergibt 422 challenge_expired, lässt die Aufforderung für die ursprüngliche Adresse aber bestehen. Ist sie abgelaufen oder schon verbraucht, antwortet der Weg ebenfalls mit 422 challenge_expired, und Sie beginnen wieder mit dem Passwort.

StatuserrorBedeutung
200–angemeldet; token, expires_at und user
422bad_credentialsAdresse oder Passwort falsch
428totp_required, webauthn_requiredzweiter Faktor nötig
422bad_totpCode falsch
422bad_webauthnSchlüssel abgelehnt; reason nennt den Grund, etwa kennung_unbekannt
422challenge_expiredAufforderung abgelaufen oder verbraucht, oder Aufruf von einer anderen IP-Adresse
422webauthn_not_offeredSchlüsselunterschrift auf eine Aufforderung ohne Schlüsselweg (methods ohne webauthn); zählt nicht als Fehlversuch
503webauthn_unconfiguredder Dienst nimmt keine Sicherheitsschlüssel an, weil die Anmeldung per Schlüssel auf dem Server nicht eingerichtet ist; bei einem Konto nur mit Sicherheitsschlüsseln schon auf das Passwort hin
403tenant_paused, tenant_suspended, tenant_deletedMandant pausiert, gesperrt oder gelöscht; gemeldet erst nach richtigen Zugangsdaten und zweitem Faktor
429too_many_attemptszu viele Fehlversuche; retry_in in Sekunden
Feld in userInhalt
id, email, name, role, localeStammdaten des Kontos
totp_activeAuthentifizierungs-App eingerichtet
webauthn_keysZahl der hinterlegten Sicherheitsschlüssel
email_verifiedAdresse bestätigt
operatorKonto des Plattformbetriebs
available, available_atob das Konto gerade Übergaben aus Gesprächen annimmt, und seit wann; nimmt es keine an, ist available_at null

Das Token gilt 30 Tage; der genaue Zeitpunkt steht in expires_at. Als Namen trägt es die Kennung des Browsers aus User-Agent, höchstens 190 Zeichen, oder sitzung, wenn keine gesendet wurde. Auf den Zähler für Adresse und Herkunft geht jeder Fehlversuch: falsche Zugangsdaten, ein falscher Code, ein abgelehnter Schlüssel und eine abgelaufene Aufforderung oder eine von einer anderen IP-Adresse. Der Zähler je Herkunft allein zählt nur falsche Zugangsdaten. Eine erfolgreiche Anmeldung setzt den Zähler für Adresse und Herkunft zurück, den Zähler je Herkunft nicht. Die App zeigt bei 429 Zu viele Versuche. Bitte warten Sie einen Moment. und bei einem gesperrten Mandanten Dieses Konto ist gesperrt. Bitte schreiben Sie an mail@xicbot.de. Mehr zu Sitzungen und zweitem Faktor unter Anmelden und Zugang und Konto und Sicherheit.

Passwort zurücksetzen

POST /api/v1/password/forgot

Fordert einen Link für ein neues Passwort an. Felder: email (Pflicht, höchstens 190 Zeichen) und locale (de oder en; ohne Angabe gilt die Sprache des Kontos). Die Antwort ist 200 mit {"ok": true}, gleich ob es das Konto gibt. Eine Mail erhalten nur Konten, die ein Passwort haben.

Anmeldung
Keine
Begrenzung
20 je Stunde je Herkunft; 3 je Stunde je Adresse und Herkunft; Versand höchstens 10 je Stunde je Postfach

Der Link führt auf https://app.xicbot.de/kennwort/neu?token=…&sprache=de und gilt 60 Minuten. Jeder neu verschickte Link ersetzt den vorigen. Je Postfach gehen höchstens zehn Links in der Stunde hinaus, gleich aus welchem Netz sie angefordert werden; darüber bleibt die Antwort 200, es geht keine Mail hinaus, es entsteht kein neuer Link, und der zuletzt verschickte bleibt gültig. Mit 429 antworten nur die beiden Grenzen je Herkunft: die für Adresse und Herkunft zusammen (3 je Stunde; sie zählt jede Anforderung, gleich ob es das Konto gibt) mit too_many_attempts und retry_in, die für die Herkunft allein (20 je Stunde) mit dem Kopf Retry-After. In der App heißen Einstieg und Schaltfläche Passwort vergessen? und Link anfordern.

POST /api/v1/password/reset

Setzt das neue Passwort. Felder: token (höchstens 120 Zeichen), password und password_confirmation nach denselben Regeln wie bei der Registrierung. Antwort 200 mit {"ok": true, "sessions_ended": true}: der Link ist verbraucht, und alle Token des Kontos aus Anmeldung und Einladung sind gelöscht, laufende Sitzungen damit beendet. API-Schlüssel des Mandanten sind davon getrennt und bleiben bestehen. Ein unbekanntes oder abgelaufenes Token ergibt 422 invalid_token. Die Schaltfläche in der App heißt Passwort speichern.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler auth-token

Betriebszustand und Änderungsprotokoll

GET /api/v1/public/status

Liefert state, measured, parts und time. parts führt im Normalfall neun Teile des Dienstes mit name und state; scheitert die Messung als Ganzes, steht dort nur ein Teil total mit unknown. Die Antwort wird bis zu 20 Sekunden zwischengespeichert. Der HTTP-Status folgt dem Gesamtzustand in state.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler status
stateBedeutungHTTP
operationaljeder Teil gemessen und in Ordnung200
degradedalle Teile gemessen, mindestens einer gestört503
unknownmindestens ein Teil nicht gemessen503

GET /api/v1/public/changelog

Liefert das Änderungsprotokoll mit measured, reason, version (die neueste Fassung) und entries. Jeder Eintrag hat version, date, kind, title und points. kind ist feature, fix, security oder note; andere Werte erscheinen als note. Einträge ohne Fassung, Datum oder Titel fallen weg. Sortiert wird nach Datum absteigend, bei gleichem Datum nach Fassung. Ist das Protokoll nicht lesbar, antwortet der Weg mit 503, measured: false, einem kurzen deutschen Grund in reason und leerem entries.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler status

Kontaktanfrage

POST /api/v1/public/enquiry

Nimmt eine Kontaktanfrage an, wie sie das Formular auf xicbot.de sendet. Die Anfrage wird gespeichert und per Mail zugestellt. Antwort 202 mit {"accepted": true}; mehr erfährt der Absender nicht, weder eine Kennung noch den Stand der Zustellung.

Anmeldung
Keine
Begrenzung
5 je Minute je Herkunft
FeldPflichtRegel
nameja2 bis 120 Zeichen
emailjagültige Adresse nach RFC, höchstens 190 Zeichen
companyneinhöchstens 160 Zeichen
topicneinein Schlüssel aus der Thementabelle
packageneinstart, pro oder custom: das Paket, aus dessen Karte im Preisband die Anfrage kam. Es steht in der Mail als erste Zeile im Block „Projekt“; ein anderer Wert ergibt 422
detailsneinObjekt nur mit den Schlüsseln aus der Detailtabelle; andere Schlüssel ergeben 422
messagenein10 bis 5000 Zeichen
languageneinde oder en, ohne Angabe de
homepageneinFangfeld für Automaten, muss leer bleiben; höchstens 200 Zeichen
topicThema in der Mail
website-assistantWebsite-Assistent
shop-assistantShop-Assistent
booking-assistantTermin-Assistent
lead-assistantLead-Assistent
support-assistantSupport-Assistent
tool-controlTool-Steuerung
chatbot-replacementBestehenden Chatbot ersetzen
otherEtwas anderes
Schlüssel in detailsBezeichnung in der MailRegel
websiteWebsite oder Shophöchstens 190 Zeichen
platformShopsystemhöchstens 120 Zeichen
sourcesQuellen für Antwortenhöchstens 300 Zeichen
calendarTerminvergabe heutehöchstens 300 Zeichen
goalGebraucht vom Interessentenhöchstens 300 Zeichen
ticket_systemSupportanfragen heutehöchstens 300 Zeichen
systemsAnzubindende Systemehöchstens 300 Zeichen
actionsAktionen darinhöchstens 300 Zeichen
gapFehlt am bisherigen Chathöchstens 300 Zeichen
volumeAnfragen im Monatlt-100 (unter 100), 100-500 (100 bis 500), 500-2000 (500 bis 2.000), gt-2000 (über 2.000), unknown (Weiß ich nicht)
timeframeStartasap (So bald wie möglich), quarter (In 1–3 Monaten), half-year (In 3–6 Monaten), open (Noch offen)

Demo

POST /api/v1/public/demo

Legt für eine öffentliche Website einen befristeten Demo-Zugang an: einen Mandanten mit einem Assistenten, der nur aus dem Wissen dieser Website antwortet, und ein Widget, das nur auf dieser Website läuft. Die Website wird im Hintergrund eingelesen. Felder: url (Pflicht, http oder https, höchstens 500 Zeichen), email (höchstens 190 Zeichen, wird zur Demo gespeichert) und language (de oder en, ohne Angabe de; Sprache des Assistenten). Antwort 201 mit dem Objekt demo; läuft für dieselbe Website schon eine Demo, 200.

Anmeldung
Keine
Begrenzung
2 je Minute je Herkunft; höchstens 3 neue Demos je IP-Adresse in 24 Stunden

Maßgeblich ist der Host der Adresse: klein geschrieben, ohne www. und ohne den Standardport des Schemas. https://www.example.com/kontakt und https://example.com/ ergeben also dieselbe Demo für example.com; ein abweichender Port bleibt Teil des Hosts. Läuft für diesen Host schon eine aktive Demo, bekommen Sie diese mit existing: true zurück; es wird keine neue angelegt und nichts auf die Tagesgrenze angerechnet. Das Widget der Demo ist auf den Host ohne Port beschränkt.

StatuserrorBedeutung
201–Demo angelegt
200–für diesen Host lief schon eine Demo (existing: true)
422invalid_urlAdresse ohne auswertbaren Host
422scheme_not_allowed, url_unreadable, name_unresolvable, target_not_allowedSchema nicht http oder https, Adresse nicht lesbar, Name nicht auflösbar oder Ziel nicht zugelassen
429demo_ip_limitvon dieser IP-Adresse schon drei Demos in 24 Stunden
503demo_capacity50 Demos laufen gleichzeitig
500demo_unconfiguredDemo auf dem Server nicht eingerichtet
Feld in demoInhalt
idKennung der Demo für die Abfrage
hostHost, für den die Demo gilt
expires_atAblauf, 72 Stunden nach dem Anlegen
expiredtrue, sobald die Frist vorbei ist
widget_keyöffentlicher Schlüssel des Widgets der Demo
assistantid, name und status des Assistenten
knowledgeStand des Einlesens mit status, documents und chunks; new und running heißen „läuft noch“, nicht „leer“
existingnur beim Anlegen: ob die Demo schon bestand
jobnur beim Anlegen einer neuen Demo: Kennung des Auftrags, der die Website einliest

GET /api/v1/public/demo/{id}

Liefert den aktuellen Stand als demo mit den Feldern oben, ohne existing und job. Eine abgelaufene Demo ist kein Fehler: die Antwort bleibt 200 mit expired: true und nennt weiter die Frist. 404 not_found, wenn die Kennung zu keiner Demo gehört oder die Demo nicht mehr aktiv ist.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler status

Erklärung zur Barrierefreiheit

GET /api/v1/public/accessibility

Liefert die Erklärung zur Barrierefreiheit der App als Objekt accessibility mit den Textfeldern standard, conformance, checked_on, version, method, scope und feedback sowie den Listen measures und limitations. Die Seite https://app.xicbot.de/barrierefreiheit liest sie ohne Anmeldung. Ist keine Erklärung hinterlegt, antwortet der Weg mit 503 accessibility_missing statt mit leerem Text.

Anmeldung
Keine
Begrenzung
30 je Minute je Herkunft, Zähler status

Einladung annehmen

Eine Einladung aus dem Team kommt als Link https://app.xicbot.de/einladung?token=…&sprache=de und gilt 168 Stunden. Das Token hat 48 Zeichen; gespeichert wird nur sein SHA-256-Wert. Wie Einladungen entstehen und welche Rolle was darf, steht unter Team und Rollen.

GET /api/v1/invitation/{token}

Zeigt, was hinter einem Token steht: tenant (Name des Mandanten), email, role (viewer, editor oder admin), expires_at und account_exists, ob es für diese Adresse schon ein Konto gibt; ein gelöschtes Konto zählt dabei nicht mit. Ist die Einladung unbekannt, abgelaufen, angenommen oder zurückgezogen, antwortet der Weg mit 404 invalid_token.

Anmeldung
Keine
Begrenzung
20 je Minute je Herkunft, Zähler invitation

POST /api/v1/invitation/accept

Nimmt die Einladung mit einem neuen Konto an. Felder: token (höchstens 120 Zeichen), password und password_confirmation nach den Regeln der Registrierung, name (höchstens 120 Zeichen) und locale (de oder en, ohne Angabe de). Die Adresse gilt damit als bestätigt. Antwort 201 mit token (30 Tage gültig), expires_at, user (id, email, name, role, locale) und tenant (id, name). 422 invalid_token, wenn die Einladung nicht mehr offen ist oder das einladende Konto gelöscht wurde; 409 login_required mit email, wenn es für die Adresse schon ein Konto gibt, das nicht gelöscht ist. Ein gelöschtes Konto mit dieser Adresse wird wiederhergestellt und beginnt wie ein neues: mit dem Passwort aus dieser Anfrage, ohne zweite Stufe, ohne Sicherheitsschlüssel und ohne frühere Token. Ohne Protokolleintrag entstehen weder Konto noch Mitgliedschaft, die Einladung bleibt offen, und die Antwort ist 500 mit nur {"error":"not_logged"}, ohne message.

Anmeldung
Keine
Begrenzung
20 je Minute je Herkunft, Zähler invitation

Warenkorb abholen

Stellt der Assistent im Gespräch einen Warenkorb zusammen, gibt das Warenkorbwerkzeug dem Besucher als next_url eine Adresse zu Ihrem Shop: die dort eingetragene Übergabeadresse mit angehängtem ?token=…, oder &token=…, wenn die Adresse schon eine Abfrage enthält. Bis dahin liegt der Warenkorb bei XICBOT. Im Widget erscheint dazu der Link Weiter, der next_url in einem neuen Tab öffnet. Ihr Shop liest mit dem Token den Warenkorb ab und legt daraus seinen eigenen an. Ändert der Assistent den offenen Warenkorb, bleibt das Token gleich; stellt er den Warenkorb ganz neu zusammen, entsteht ein neuer mit neuem Token. Die Einrichtung beschreiben Katalog und Shop und Werkzeuge.

GET /api/v1/cart/pickup/{token}

Liefert den Warenkorb zum Token. Das Token besteht aus 40 Buchstaben und Ziffern und ist der einzige Zugang. Der Weg liest nur: er ändert weder den Warenkorb noch dessen Frist und lässt sich wiederholen. Die Antworten 200, 404 und 410 tragen Cache-Control: no-store.

Anmeldung
Keine; das Token im Pfad
Begrenzung
60 je Minute je Herkunft
FeldInhalt
itemsPosten mit external_id, title, amount und unit_price_cents; price_source ist live (eben im Shop gelesen) oder stand (aus dem Katalog) und fehlt bei älteren Warenkörben
subtotal_cents, discount_cents, shipping_cents, total_centsBeträge in Cent
coupon_codeeingelöster Gutscheincode
currencyWährung des Warenkorbs
created_at, updated_atAnlage und letzte Änderung
expires_atEnde der Abholfrist
StatuserrorBedeutung
200–Warenkorb
404unknown_cartToken unbekannt oder falsch geformt, oder der Mandant ist nicht aktiv
410cart_expiredToken war gültig, die Abholfrist ist vorbei

Die Frist beträgt 7 Tage ab der letzten Änderung; ändert der Assistent den Warenkorb im Gespräch, beginnt sie neu. Die Antwort enthält keine Kennung des Mandanten, des Gesprächs oder der Übergabe und nichts über den Besucher: wer das Token hat, hat den Warenkorb, nicht das Gespräch.

Befehl in der Schale bash

curl https://app.xicbot.de/api/v1/cart/pickup/<token> \
  -H 'Accept: application/json'

Häufige Fragen

Warum meldet der Statusweg 503, obwohl die App erreichbar ist?

Der Weg antwortet nur dann mit 200, wenn alle Teile gemessen wurden und in Ordnung sind. Ist einer gestört, lautet state degraded; wurde einer nicht gemessen, unknown. Welcher Teil es ist, steht in parts.

Verrät die Passwortanforderung, ob es ein Konto gibt?

Nein. Die Antwort ist 200 mit {"ok": true}, ob es das Konto gibt oder nicht und ob eine Mail hinausgeht. Die Grenzen, die mit 429 antworten, zählen jede Anforderung, gleich ob es das Konto gibt.

Wie lange gilt ein Token aus Anmeldung oder Einladung?

30 Tage; der Zeitpunkt steht in expires_at. Wer über /api/v1/password/reset ein neues Passwort setzt, löscht alle Token des Kontos auf einmal; API-Schlüssel sind davon nicht betroffen.

Kann eine Seite den Warenkorb direkt im Browser abholen?

Nur vom Ursprung der Übergabeadresse, die im Warenkorbwerkzeug des Assistenten eingetragen ist. Jede andere Seite bekommt keine Freigabe. Vorgesehen ist der Abruf durch den Server des Shops.

Was passiert, wenn dieselbe Website zweimal als Demo angefragt wird?

Läuft für den Host noch eine aktive Demo, kommt sie mit 200 und existing: true zurück. Es entsteht keine zweite, und die Anfrage zählt nicht zur Grenze von drei Demos je IP-Adresse.

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.