Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Schnittstelle (API)

Schnittstelle: Konto, Sicherheit, Abrechnung und Datenschutz

Endpunkte für Profil, Kontowechsel, Passwort, zweite Stufe, Sicherheitsschlüssel, Sitzungen, Abrechnung, Datenexport, Fristen und Kontolöschung.

In einfacher Sprache

Diese Seite beschreibt die Wege für Ihr eigenes Konto. Dazu gehören Ihr Profil und Ihr Passwort. Auch die zweite Stufe beim Anmelden gehört dazu. Sie sehen dort Ihre Sitzungen und wann sich jemand angemeldet hat. Andere Wege gelten für Rechnungen und Datenschutz. Sie brauchen dafür die Marke aus der Anmeldung. Ein Schlüssel für eigene Systeme reicht nicht.

Stand

Alle Themen der Dokumentation

Diese Seite beschreibt die Endpunkte für das eigene Konto: Abmelden, Profil, Kontowechsel, Bestätigungsmail, Passwort, zweite Stufe, Sicherheitsschlüssel, Sitzungen und Anmeldeverlauf, dazu Abrechnung und Datenschutz. Alle Pfade beginnen mit /api/v1/ und verlangen die Sitzungsmarke aus der Anmeldung, keinen API-Schlüssel. In der Anwendung finden Sie dieselben Funktionen unter Konto, Abrechnung und Recht und Daten.

Voraussetzungen

Ohne gültige Sitzungsmarke antwortet jeder Endpunkt dieser Seite mit 401. Wie Sie eine Marke erhalten, steht unter Anmeldung an der Schnittstelle. Danach greifen je nach Endpunkt diese Schranken:

SchrankeGilt fürAntwort bei Verstoß
Konto aktivalle Endpunkte dieser Seite außer POST /api/v1/tenant/switch und POST /api/v1/logout403 no_tenant oder tenant_paused, tenant_suspended, tenant_deleted mit dem Text „Das Konto ist derzeit nicht aktiv.“ in message
E-Mail-Adresse bestätigtalle Pfade unter /api/v1/billing und /api/v1/privacy/403 email_unverified
Rollewo beim Endpunkt angegeben403 role_too_low, in required die verlangte Rolle
Keine Übernahmewo beim Endpunkt angegeben403 in_impersonation

Die Rollen bauen aufeinander auf: Lesen, Bearbeiten, Verwaltung, Inhaber. Verlangt ein Endpunkt eine Rolle, genügt sie oder eine höhere. Was die Rollen in der Anwendung unterscheidet, steht unter Team und Rollen.

Übernimmt der Betreiber Ihr Konto, um Ihnen zu helfen, steht diese Sitzung in der Sitzungsliste mit kind support, in der Anwendung als Übernahme durch den Betreiber. Aus einer Übernahme heraus lassen sich Passwort, zweite Stufe und Sicherheitsschlüssel nicht ändern, nicht alle anderen Sitzungen auf einmal beenden und das Konto nicht wechseln.

Drosselung

Einige Endpunkte zählen Anfragen je Person und Minute. Endpunkte mit demselben Deckel teilen sich einen Zähler: fünf Passwortversuche in einer Minute verbrauchen auch die Versuche für das Abschalten der zweiten Stufe. Was beim Überschreiten geschieht, steht unter Grenzen der Schnittstelle.

DeckelEndpunkteAnfragen je Minute
tenant-switchPOST /api/v1/tenant/switch20
confirmationPOST /api/v1/confirmation/resend3
password-changePUT /api/v1/password, DELETE /api/v1/totp, DELETE /api/v1/webauthn/{id}5, ein gemeinsamer Zähler
privacyGET /api/v1/privacy/export, POST /api/v1/privacy/subprocessors/object, PUT /api/v1/privacy/retention, POST /api/v1/privacy/deletion5, ein gemeinsamer Zähler
dpaPOST /api/v1/privacy/dpa10, gezählt je Konto und Person

Konto und Profil

POST /api/v1/logout

Beendet die Sitzung, mit der Sie die Anfrage stellen: die Marke wird gelöscht und gilt danach nicht mehr. Andere Sitzungen bleiben bestehen. Das gelingt auch, wenn das Konto inzwischen nicht mehr aktiv ist. Mit der Marke einer Übernahme beendet der Aufruf die Übernahme wie POST /api/v1/impersonation/stop; im Protokoll steht dann impersonation.end. Die Antwort lautet {"logged_out": true}.

Anmeldung
Sitzungsmarke, jede Rolle

GET /api/v1/me

Liefert die angemeldete Person in user, das Konto, in dem sie gerade arbeitet, in tenant und alle Konten, zu denen sie gehört, in tenants. Während einer Übernahme stehen in impersonation die Adresse der übernehmenden Person (operator) und das Ende der Übernahme (expires_at), sonst null.

Anmeldung
Sitzungsmarke, jede Rolle
Feld in userInhalt
id, email, nameKennung, Adresse und Name der Person
roleRolle im aktuellen Konto: viewer, editor, admin oder owner
localede, en oder leer; jede erfolgreiche Anmeldung, die de oder en als locale mitschickt, setzt den Wert, ebenso PUT /api/v1/locale mit de oder en, das der Sprachknopf der Anwendung ruft (unter einer Übernahme 403). Er bestimmt die Sprache der Bestätigungsmail, der Mail nach einer Passwortänderung und der Einladungen, die die Person verschickt, ohne Angabe Deutsch
totp_activetrue, wenn die zweite Stufe per Code eingerichtet und bestätigt ist
webauthn_keysZahl der hinterlegten Sicherheitsschlüssel
email_verifiedtrue, wenn die Adresse bestätigt ist
operatortrue nur bei Zugängen des Betreibers, bei Kundenkonten false
available, available_atob die Person gerade Übergaben annimmt und seit wann
FeldInhalt
tenantunter anderem id, name, slug, status, das Paket in plan und plan_name und seine Merkmale in features
tenantsje Konto id, name, slug, die eigene Rolle in role, status, eine Kennfarbe in color und in active, ob es das aktuelle Konto ist. Gelöschte Konten fehlen, pausierte und gesperrte stehen mit ihrem Zustand darin.

POST /api/v1/tenant/switch

Wechselt in ein anderes Konto, zu dem Sie gehören, in der Anwendung über Konto wechseln. Im Feld tenant steht die Kennung des Zielkontos (Pflicht, höchstens 64 Zeichen). Sie arbeiten danach mit der Rolle, die Sie in diesem Konto haben. Der Wechsel ist auch möglich, wenn das bisherige Konto nicht aktiv ist; das Ziel muss aktiv sein. Die Antwort enthält user, tenant und tenants wie bei GET /api/v1/me.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
Begrenzung
20 je Minute
StatusFehlerBedeutung
403in_impersonationAnfrage aus einer Übernahme
404not_foundSie gehören nicht zu diesem Konto, oder es besteht nicht
403tenant_paused, tenant_suspended, tenant_deleteddas Zielkonto ist nicht aktiv; message nennt den Grund

PUT /api/v1/tenant/name

Ändert den Namen des Kontos, den Firmen- oder Projektnamen aus der Registrierung; in der Anwendung unter Konto in der Karte Name des Kontos. Im Feld name steht der neue Name (Pflicht, höchstens 160 Zeichen, Leerzeichen am Rand fallen weg). Die Kennung des Kontos (slug) bleibt unverändert. Ändert sich der Name, steht das im Protokoll mit altem und neuem Namen. Die Antwort enthält tenant mit id und name.

Anmeldung
Sitzungsmarke, Rolle Inhaber, bestätigte E-Mail-Adresse, nicht aus einer Übernahme
StatusFehlerBedeutung
403role_too_lowdie Rolle ist nicht Inhaber; required ist owner
403in_impersonationAnfrage aus einer Übernahme
403email_unverifieddie E-Mail-Adresse ist noch nicht bestätigt
422validationname fehlt, ist leer oder länger als 160 Zeichen

POST /api/v1/confirmation/resend

Schickt den Bestätigungslink für die E-Mail-Adresse erneut, in der Sprache aus locale; in der Anwendung heißt das Nachricht erneut schicken. Der Endpunkt verlangt keine bestätigte Adresse, sonst wäre er für unbestätigte Konten unerreichbar. Ist die Adresse schon bestätigt, geht nichts hinaus und die Antwort lautet {"confirmed": true, "sent": false}. Sonst verlieren frühere, noch nicht benutzte Links ihre Gültigkeit, der neue gilt 48 Stunden, und die Antwort lautet {"confirmed": false, "sent": true}.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
3 je Minute

Passwort und zweite Stufe

PUT /api/v1/password

Ändert das Passwort, in der Anwendung unter Konto mit Passwort ändern. Mit dem Ändern enden alle anderen Anmeldesitzungen der Person; die Sitzung, aus der die Anfrage kommt, und eine laufende Übernahme durch den Betreiber bleiben bestehen. API-Schlüssel sind keine Sitzungen und bleiben gültig. Danach geht eine Mail an die Adresse des Kontos, die Zeitpunkt und Zahl der beendeten Sitzungen nennt.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
Begrenzung
5 je Minute, gemeinsam mit dem Abschalten der zweiten Stufe und dem Entfernen von Schlüsseln
FeldRegel
current_passwordPflicht, höchstens 200 Zeichen; in der Anwendung Bisheriges Passwort
passwordPflicht, mindestens 12 Zeichen, darunter Buchstaben und Ziffern, anders als das bisherige; in der Anwendung Neues Passwort
password_confirmationPflicht, gleich password; in der Anwendung Passwort wiederholen
StatusAntwortBedeutung
200{"ok": true, "sessions_ended": 2}geändert; sessions_ended zählt die beendeten Sitzungen
403in_impersonationAnfrage aus einer Übernahme
422bad_credentialsdas bisherige Passwort stimmt nicht

Zweite Stufe per Code

Die zweite Stufe per Code heißt in der Anwendung Zweite Stufe und wird in zwei Schritten eingeschaltet: Einrichten erzeugt ein Geheimnis, Bestätigen aktiviert es mit dem ersten Code aus der Authentifizierungs-App. Solange die Bestätigung fehlt, gilt die zweite Stufe nicht. Wie der Code bei der Anmeldung abgefragt wird, steht unter Anmeldung an der Schnittstelle.

POST /api/v1/totp

Erzeugt ein neues Geheimnis aus 20 Zufallsbytes und liefert es Base32-kodiert in secret sowie als otpauth://-Adresse in url für die Authentifizierungs-App: Verfahren nach RFC 6238, Aussteller XICBOT, SHA1, sechs Ziffern, 30 Sekunden je Code. In der Anwendung steht der Wert unter Geheimnis. Ein erneuter Aufruf ersetzt ein noch nicht bestätigtes Geheimnis. Ist die zweite Stufe schon aktiv, antwortet der Endpunkt mit 409 totp_already_active.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme

POST /api/v1/totp/confirm

Bestätigt das Geheimnis mit einem Code im Feld totp (Pflicht, höchstens 10 Zeichen; in der Anwendung Sechsstelliger Code). Leerzeichen werden entfernt, danach müssen genau sechs Ziffern übrig bleiben. Angenommen wird der Code des laufenden 30-Sekunden-Abschnitts und der des vorigen und des folgenden. Die Antwort lautet {"is_active": true}. Ohne Protokolleintrag wird die zweite Stufe nicht eingeschaltet, die Antwort ist dann 500 mit not_logged.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme

DELETE /api/v1/totp

Schaltet die zweite Stufe ab (Abschalten) und verlangt dafür das Passwort im Feld password des Anfragekörpers. Geheimnis und Bestätigung werden gelöscht. Die Antwort lautet {"is_active": false}. Ohne Protokolleintrag bleibt die zweite Stufe eingeschaltet, die Antwort ist dann 500 mit not_logged.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
Begrenzung
5 je Minute, gemeinsam mit Passwortänderung und Entfernen von Schlüsseln
StatusFehlerBedeutung
403in_impersonationAnfrage aus einer Übernahme
409totp_already_activeEinrichten, obwohl die zweite Stufe schon aktiv ist
409no_secretBestätigen ohne vorheriges Einrichten
422bad_totpder Code stimmt nicht
422bad_credentialsbeim Abschalten: das Passwort stimmt nicht
500not_loggeddie Änderung ließ sich nicht protokollieren und wurde darum nicht gespeichert; ausgenommen sind Zugänge des Betreibers ohne eigenes Konto, bei ihnen gilt die Änderung auch ohne Protokolleintrag

Sicherheitsschlüssel

Neben dem Code lässt sich ein Sicherheitsschlüssel nach WebAuthn als zweite Stufe hinterlegen, in der Anwendung unter Sicherheitsschlüssel mit Schlüssel hinzufügen. Ist ein Schlüssel hinterlegt, nennt die Anmeldung ihn in methods als webauthn; den Ablauf beschreibt Anmeldung an der Schnittstelle. Das Anlegen hat zwei Schritte: POST /api/v1/webauthn/options holt die Aufforderung, der Browser lässt den Schlüssel sie mit navigator.credentials.create unterschreiben, und POST /api/v1/webauthn reicht das Ergebnis ein. Binäre Werte stehen in beiden Richtungen base64url-kodiert ohne Auffüllzeichen.

GET /api/v1/webauthn

Listet die hinterlegten Schlüssel der angemeldeten Person in keys, die ältesten zuerst.

Anmeldung
Sitzungsmarke, jede Rolle
FeldInhalt
idKennung des Schlüssels, für das Entfernen
nameder Name, den Sie beim Anlegen vergeben haben
algorithmSignaturverfahren: ES256, EdDSA oder RS256
user_verifiedtrue, wenn der Schlüssel beim Anlegen die Person geprüft hat, etwa per PIN oder Fingerabdruck
created, last_used_atAnlage und letzte Verwendung bei einer Anmeldung

POST /api/v1/webauthn/options

Erzeugt eine Aufforderung aus 32 Zufallsbytes und merkt sie sich für die angemeldete Person; je Person gilt nur die zuletzt geholte. Die Antwort enthält, was der Browser für navigator.credentials.create braucht.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
FeldInhalt
challengedie Aufforderung
rp_id, rp_nameBereichskennung und Anzeigename des Dienstes, ohne eigene Einstellung XICBOT
userid (Ihre Kennung, kodiert), name (Ihre Adresse) und display_name (Ihr Name, ohne Namen die Adresse)
excludeKennungen der schon hinterlegten Schlüssel, damit derselbe Schlüssel nicht zweimal angelegt wird
algorithmszulässige Verfahren als Zahlen: -7, -8, -257
timeoutGültigkeit der Aufforderung in Sekunden, mindestens 30, ohne eigene Einstellung 120

POST /api/v1/webauthn

Reicht das Ergebnis von navigator.credentials.create ein. Der Server prüft Aufforderung, Herkunft der Seite und Unterschrift selbst. Nach einer erfolgreichen Prüfung ist die Aufforderung verbraucht; für einen weiteren Versuch holen Sie eine neue. Die Antwort (201) enthält den neuen Schlüssel in key und die ganze Liste in keys. Ohne Protokolleintrag wird der Schlüssel nicht gespeichert, die Antwort ist dann 500 mit not_logged.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
FeldRegel
namePflicht, höchstens 80 Zeichen; in der Anwendung Name des Schlüssels
client_data_jsonPflicht, höchstens 8000 Zeichen, base64url
attestation_objectPflicht, höchstens 20000 Zeichen, base64url

DELETE /api/v1/webauthn/{id}

Entfernt einen Schlüssel (Entfernen) und verlangt dafür das Passwort im Feld password des Anfragekörpers, wie das Abschalten der Codestufe. Die Antwort enthält die verbliebenen Schlüssel in keys. Ohne Protokolleintrag bleibt der Schlüssel bestehen, die Antwort ist dann 500 mit not_logged.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme
Begrenzung
5 je Minute, gemeinsam mit Passwortänderung und Abschalten der zweiten Stufe
StatusFehlerBedeutung
403in_impersonationAnfrage aus einer Übernahme
404not_foundbeim Entfernen: kein Schlüssel dieser Person mit dieser Kennung
409webauthn_limitdie Höchstzahl an Schlüsseln ist erreicht, ohne eigene Einstellung 10 je Person
409webauthn_knowndieser Schlüssel ist bereits hinterlegt
422challenge_expiredkeine gültige Aufforderung, etwa weil die Frist abgelaufen ist
422bad_attestationdie Prüfung ist gescheitert; reason nennt die Stelle
422bad_credentialsbeim Entfernen: das Passwort stimmt nicht
500not_loggeddie Änderung ließ sich nicht protokollieren und wurde darum nicht gespeichert; ausgenommen sind Zugänge des Betreibers ohne eigenes Konto, bei ihnen gilt die Änderung auch ohne Protokolleintrag
503webauthn_unconfiguredSicherheitsschlüssel sind für diesen Dienst nicht eingerichtet

Sitzungen und Anmeldeverlauf

Jede Anmeldung erhält eine eigene Sitzungsmarke, die 30 Tage gilt. Als Name trägt sie die Kennung, die der Browser von sich angibt, auf 190 Zeichen gekürzt, ohne Angabe sitzung. API-Schlüssel sind keine Sitzungen und erscheinen hier nicht; sie verwalten Sie unter API-Schlüssel und Webhooks.

GET /api/v1/sessions

Listet in sessions die noch gültigen Sitzungen der angemeldeten Person, in der Anwendung Angemeldete Geräte, höchstens 50, die zuletzt benutzten zuerst. Abgelaufene Sitzungen fehlen.

Anmeldung
Sitzungsmarke, jede Rolle
FeldInhalt
idKennung der Sitzung, für das Beenden
nameBrowserkennung der Anmeldung
last, created, expires_atletzte Nutzung, Anmeldung und Ablauf
currenttrue bei der Sitzung, aus der die Anfrage kommt; in der Anwendung dieses Gerät
kindlogin bei einer eigenen Anmeldung, support bei einer Übernahme durch den Betreiber

DELETE /api/v1/sessions

Beendet alle anderen Sitzungen der angemeldeten Person (Alle anderen beenden). Die Sitzung, aus der die Anfrage kommt, und Übernahmen durch den Betreiber bleiben bestehen, API-Schlüssel ebenso. Die Antwort nennt in ended die Zahl der beendeten Sitzungen und in kept die Zahl der stehen gebliebenen: support für Übernahmen, die noch laufen (abgelaufene zählen nicht mit), api_keys für die gültigen API-Schlüssel des Kontos. Der Protokolleintrag account.sessions_ended nennt dieselben Zahlen in count, kept_support und kept_api_keys.

Anmeldung
Sitzungsmarke, nicht aus einer Übernahme

DELETE /api/v1/sessions/{id}

Beendet eine einzelne eigene Sitzung (Beenden). Eine Kennung, die nicht zu einer laufenden Sitzung der angemeldeten Person gehört, ergibt 404 not_found, auch die einer schon abgelaufenen. Aus einer Übernahme durch den Betreiber lässt sich nur die Übernahme selbst beenden, jede andere Sitzung ergibt 403 in_impersonation. Die Antwort lautet {"ended": true}.

Anmeldung
Sitzungsmarke, jede Rolle

GET /api/v1/logins

Liefert in logins die 50 jüngsten Anmeldeversuche für die angemeldete Person, in der Anwendung Letzte Anmeldungen, gescheiterte eingeschlossen. Jeder Eintrag hat time, result und in device die Browserkennung, auf 240 Zeichen gekürzt. Die IP-Adresse wird nur als Prüfwert gespeichert und nicht ausgegeben.

Anmeldung
Sitzungsmarke, jede Rolle
resultBedeutung
successangemeldet
bad_passwordfalsches Passwort
unknownzu der eingegebenen Adresse gibt es keinen Zugang
bad_totpfalscher Code der zweiten Stufe
bad_webauthnSicherheitsschlüssel abgewiesen
lockedZugangsdaten richtig, das Konto ist aber nicht aktiv

Abrechnung

GET /api/v1/billing

Liefert Verbrauch und Positionen des laufenden Monats für das aktuelle Konto, in der Anwendung unter Abrechnung auf der Seite Verbrauch und Abrechnung. Beträge stehen in Cent, netto. Preise der Pakete stehen unter Preise, die Kontingente unter Pakete und Kontingente.

Anmeldung
Sitzungsmarke, jede Rolle
FeldInhalt
periodfrom und to als Datum, month als Monat
tenantid, name, E-Mail-Adresse für Rechnungen in billing_email, Umsatzsteuer-Identifikationsnummer in vat_id
packagekey, name und scope des Pakets, known ist false, wenn der Paketschlüssel unbekannt ist
limitsdie Grenzen des Pakets, in der Anwendung Grenzen des Pakets, etwa monthly_token_budget und requests_per_minute; sind für das Konto eigene Werte hinterlegt, gelten diese, bei jedem Paket
usageVerbrauch des Monats, siehe unten
itemsdie Positionen, in der Anwendung Positionen
price_basisnetto
total_cents, total_completeSumme der Positionen (Summe); fehlt einer Position der Betrag, steht total_cents auf null und total_complete auf false
payment_providernull: es ist keine Zahlung ausgelöst worden
Position (kind)Inhalt
base_feedas Paket als eine Position mit Monatsbetrag in unit_cents und total_cents. Hat das Paket keinen festen Monatsbetrag, stehen beide auf null, measured auf false, reason nennt den Grund als Satz und reason_code als festen Code.
overageerscheint nur, wenn der Verbrauch das Kontingent übersteigt: amount nennt die Token darüber, die Beträge stehen auf null, measured auf false, reason und reason_code nennen den Grund
Feld in usageInhalt
month, used, budget, remainingMonat, verbrauchte Token (Eingang und Ausgang), Kontingent und Rest
messagesZahl der Antworten im Monat
warn_at, shareWarnschwelle in Token und verbrauchter Anteil, abgeschnitten auf vier Nachkommastellen
warning, exhausted, levelWarnstufe erreicht, Kontingent aufgebraucht; level fasst beides als ok, warning oder exhausted zusammen
throttled, reply_tokens, tool_roundsab der Warnschwelle fallen Antworten kürzer aus; die beiden Zahlen nennen die dann geltende Antwortlänge in Token und die Zahl der Werkzeugrunden
warningsje Größe (token, messages) ein Eintrag mit used, limit, warn_share, warn_at, share, state (ok, warning, exhausted), measured, reason und reason_code

Gewarnt wird ab einem festen Anteil des Kontingents, warn_share, derzeit 0.8. Für Antworten ist kein monatliches Kontingent vereinbart: der Eintrag messages in warnings zählt sie in used, steht aber auf measured false, und limit, warn_share, warn_at, share und state bleiben leer. measured gilt dort der Warnung, nicht dem Zählen.

GET /api/v1/billing/history

Liefert in months den Verbrauch je Monat, in der Anwendung Verlauf, höchstens 24 Monate, der jüngste zuerst. Jeder Eintrag hat month, tokens_in, tokens_out, die Summe beider in token und die Zahl der Antworten in messages.

Anmeldung
Sitzungsmarke, jede Rolle

Datenschutz und Recht

Diese Endpunkte stehen in der Anwendung unter Recht und Daten. Alle verlangen eine bestätigte E-Mail-Adresse; Lesen ist jeder Rolle erlaubt, Ändern je nach Endpunkt der Verwaltung oder dem Inhaber. Was die Angaben inhaltlich bedeuten, beschreibt Datenschutz und Recht.

Überblick über den Datenbestand

GET /api/v1/privacy/overview

Liefert den Überblick, den die Anwendung unter Gespeicherte Daten und in den Abschnitten darunter zeigt.

Anmeldung
Sitzungsmarke, jede Rolle
FeldInhalt
categoriesZahl der gespeicherten Einträge je Kategorie
categories_unmeasuredje Kategorie, die sich nicht zählen ließ, der Grund; ihre Zahl in categories steht dann auf null, in der Anwendung Nicht gemessen
catalogPrüfstand des Datenkatalogs, nach dem Export und Löschung arbeiten: complete ist true, wenn jede Tabelle mit Kontobezug im Katalog steht und die Reihenfolge stimmt; ließ sich das nicht prüfen, steht complete auf null und measured auf false
retentionFristen in Tagen für Gespräche (general), Testgespräche (test), Gespräche über die Schnittstelle (api) und Protokolle (logs)
retention_objectsalle Objektarten mit ihrer Frist, wie bei PUT /api/v1/privacy/retention
dpaStand der Auftragsverarbeitung, wie bei GET /api/v1/privacy/dpa
deletion_worddas Wort, mit dem eine Kontolöschung bestätigt wird
versionsgeltende Fassungen der Nutzungsbedingungen (terms), der Datenschutzerklärung (privacy) und des Vertrags zur Auftragsverarbeitung (dpa)

GET /api/v1/privacy/legal

Liefert die Anlage Technische und organisatorische Maßnahmen in tom, mit ihrer Fassung in version, der Vertragsfassung in contract_version und den Gruppen in groups; jede Gruppe hat key, title und Punkte mit key, title, text und state. In accessibility steht die Erklärung zur Barrierefreiheit.

Anmeldung
Sitzungsmarke, jede Rolle

Datenexport

GET /api/v1/privacy/export

Liefert die Daten des Kontos als JSON-Datei, in der Anwendung unter Datenexport mit Daten exportieren. Der Export enthält Gespräche im Klartext und steht darum nur dem Inhaber zu. Die Datei heißt xicbot-ausfuhr-<Kontokennung>-<Datum>.json. Lässt sich der Export nicht protokollieren, wird keine Datei ausgeliefert, und die Antwort ist 500 mit not_logged.

Anmeldung
Sitzungsmarke, Rolle Inhaber
Begrenzung
5 je Minute, gemeinsam mit den übrigen ändernden Datenschutz-Endpunkten
FeldInhalt
generated, tenantZeitpunkt des Exports und Kennung des Kontos
sectionsje Abschnitt ok, bei Erfolg die Daten in data, sonst null und der Grund in reason; ein gescheiterter Abschnitt leert die übrigen nicht. Dazu withheld mit den bewusst weggelassenen Feldern als Tabelle.Feld und truncated mit den gekürzten Tabellen, je mit table, exported, stored, measured und reason
failed_sectionsNamen der gescheiterten Abschnitte
unexported_tablesTabellen des Datenkatalogs, die kein Abschnitt abdeckt
catalogPrüfstand des Datenkatalogs wie im Überblick
completetrue, wenn kein Abschnitt gescheitert ist, jede Katalogtabelle abgedeckt ist, catalog.complete auf true steht und kein Abschnitt gekürzt ist
files_completetrue nur ohne Dateien von Besuchern; die Dateien stehen nicht im Export
filesvisitor_attachments mit count, bytes, measured, reason und dem Abruf download für das ZIP-Archiv

Die Kopfzeilen x-sections, x-failed, x-unexported und x-truncated nennen die Zahl der Abschnitte, der gescheiterten Abschnitte, der nicht abgedeckten Tabellen und der gekürzten Tabellen, x-files-not-included die Zahl der Dateien von Besuchern, die nicht in der Datei stehen. Der Abschnitt account enthält die Personen des Kontos mit Rolle, Sprache, Stand der zweiten Stufe und Namen, Anlage und letzter Verwendung ihrer Sicherheitsschlüssel, nicht aber deren credential_id, credential_hash und public_key. Spalten, die im Katalog als geheim oder als abgeleitet geführt sind, und die Kontokennung je Zeile fehlen; liegt ein Geheimnis in einer JSON-Spalte, steht dort __set__, wenn ein Wert gesetzt ist, sonst ein leerer Wert. Einige Abschnitte sind in der Zeilenzahl begrenzt, jeweils mit den ältesten Einträgen zuerst: activities auf 5000, logins auf 2000 und die Abschnitte aus einzelnen Tabellen auf 20000 Zeilen. Enthält activities, logins oder ein Abschnitt aus einer einzelnen Tabelle weniger Einträge, als für das Konto gespeichert sind, nennt sein truncated die Tabelle mit exported und stored, und complete ist false. Lässt sich die gespeicherte Zahl nicht zählen, ist stored gleich null und measured gleich false; auch dann gilt der Abschnitt als gekürzt.

GET /api/v1/privacy/export/attachments

Liefert die Dateien, die Besucher angehängt haben, als ZIP-Archiv: je Datei <Gespräch>/<Kennung>.<Endung> und dazu manifest.json mit Kennung, Gespräch, Anfrage, Name, Art, Größe und Prüfsumme, eine fehlende Datei mit missing: true. Die Kopfzeilen x-files und x-files-missing nennen die Zahlen. Lässt sich der Abruf nicht protokollieren, wird nichts ausgeliefert, und die Antwort ist 500 mit not_logged.

Anmeldung
Sitzungsmarke, Rolle Inhaber
Begrenzung
5 je Minute, gemeinsam mit den übrigen ändernden Datenschutz-Endpunkten

Aufbewahrungsfristen

PUT /api/v1/privacy/retention

Setzt die Fristen je Objektart in Tagen, in der Anwendung unter Aufbewahrungsfristen mit Speichern. Jedes Feld ist optional: ein fehlendes Feld lässt die Frist unverändert, null setzt sie auf „es wird nichts gelöscht“. Erlaubt sind ganze Zahlen von 1 bis 3650; 0 ist nicht zulässig, weil es etwas anderes bedeutet als null. Die Antwort enthält den neuen Stand in retention_objects. Ohne Protokolleintrag bleiben die bisherigen Fristen stehen, die Antwort ist dann 500 mit not_logged. Was die Fristen bewirken, beschreibt Aufbewahrung und Löschung.

Anmeldung
Sitzungsmarke, ab Rolle Verwaltung
Begrenzung
5 je Minute, gemeinsam mit den übrigen ändernden Datenschutz-Endpunkten
FeldObjektart
conversationsGespräche
conversations_testTestgespräche; ohne eigenen Wert gilt die Frist von conversations
conversations_apiGespräche über die Schnittstelle; ohne eigenen Wert gilt die Frist von conversations
leadsAnfragen; die Frist gilt auch für appointments (Termine) und cart_handoffs (Warenkorbübergaben)
attachmentshochgeladene Dateien
visitor_attachmentsAnhänge der Besucher
logsProtokolle; die Frist gilt auch für login_events (Anmeldeereignisse)
Feld je Eintrag in retention_objectsInhalt
key, daysObjektart und eigene Frist in Tagen, null ohne eigene Frist
follows, effective_daysObjektart, deren Frist ohne eigenen Wert gilt, und die daraus wirksame Frist
deletesfalse, wenn keine Frist gilt
settable, nullableob sich die Frist über diesen Endpunkt setzen und auf null stellen lässt
table, column, date_column, filter, cascadeworan die Frist hängt: Tabelle, Spalte der Frist, maßgebliches Datum und Auswahl
StatusFehlerBedeutung
422Prüffehler je FeldWert außerhalb von 1 bis 3650 oder keine ganze Zahl; in der Anwendung „Erlaubt sind 1 bis 3650 Tage.“
500not_loggeddie Änderung ließ sich nicht protokollieren und wurde darum nicht gespeichert
500no_settable_retentionkeine Objektart ist einstellbar

Auftragsverarbeitung und Unterauftragsverarbeiter

GET /api/v1/privacy/dpa

Liefert den Stand der Auftragsverarbeitung: die geltende Vertragsfassung in contract_version, den Vertragstext in contract, die Annahme in accepted_at, accepted_version und accepted_by (Name der annehmenden Person; accepted_by_gone ist true, wenn sie nicht mehr auffindbar ist) und in contract_pending, ob eine Annahme der geltenden Fassung aussteht. In subprocessors stehen die aktuelle Fassung der Liste (version), die bestätigte Fassung (confirmed_version), ob eine Bestätigung aussteht (change_pending), und das Verzeichnis (directory).

Anmeldung
Sitzungsmarke, jede Rolle

POST /api/v1/privacy/dpa

Nimmt den Vertrag an (Auftragsverarbeitung annehmen) und bestätigt den Stand der Liste (Stand bestätigen). Beide Felder müssen im Anfragekörper stehen: contract als true oder false, subprocessor_version als Fassung der Liste (höchstens 20 Zeichen) oder null. Mit contract: true wird die geltende Fassung mit Zeitpunkt und Person gespeichert, wenn noch keine Annahme besteht oder eine andere als die geltende Fassung angenommen ist; die bisherige Annahme wird dann ersetzt. Ist die geltende Fassung bereits angenommen, bleibt diese Annahme bei einer erneuten Annahme unverändert. Eine Fassung in subprocessor_version wird nur angenommen, wenn sie der aktuellen entspricht. Die Antwort entspricht GET /api/v1/privacy/dpa. Ohne Protokolleintrag werden weder Annahme noch Listenstand gespeichert, die Antwort ist dann 500 mit not_logged.

Anmeldung
Sitzungsmarke, Rolle Inhaber
Begrenzung
10 je Minute je Konto und Person
StatusFehlerBedeutung
409contract_version_mismatchder Vertragstext passt nicht zur geltenden Fassung; contract und expected nennen beide
409stale_statedie Liste hat inzwischen eine neue Fassung; current nennt sie
500not_loggeddie Zustimmung ließ sich nicht protokollieren und wurde darum nicht gespeichert

POST /api/v1/privacy/subprocessors/object

Legt Widerspruch gegen die aktuelle Fassung der Liste der Unterauftragsverarbeiter ein (Widerspruch einlegen). Im Feld reason steht der Grund (Pflicht, 5 bis 1000 Zeichen; in der Anwendung Grund des Widerspruchs). Die Antwort nennt in version die Fassung, gegen die widersprochen wurde, trägt ingested mit true und in objection den festgehaltenen Widerspruch mit id, version, created_at und answered_at. Er steht als eigener Datensatz, verfällt nicht mit der Frist des Protokolls und geht in den Export (subprocessor_objections); der Betreiber erhält eine Meldung mit Konto, Stand und Grund. Kommt die Zeile im Protokoll nicht zustande, wird auch der Datensatz nicht angelegt: die Antwort ist dann 500 mit not_logged, und die Anwendung zeigt Nicht gespeichert: Der Eintrag ins Protokoll kam nicht zustande. Bitte versuchen Sie es erneut. und lässt den Grund im Feld stehen. Ihr Widerspruch ist aufgenommen. Wir melden uns dazu. erscheint nur nach einer Antwort mit ingested true.

Anmeldung
Sitzungsmarke, ab Rolle Verwaltung
Begrenzung
5 je Minute, gemeinsam mit den übrigen ändernden Datenschutz-Endpunkten

Konto löschen

POST /api/v1/privacy/deletion

Löscht das aktuelle Konto, in der Anwendung unter Konto löschen. Im Feld confirmation (Pflicht, höchstens 40 Zeichen) steht das Wort aus deletion_word des Überblicks, derzeit LOESCHEN; die Anwendung fragt es mit Zum Bestätigen dieses Wort eingeben ab. Die Löschung arbeitet nach dem Datenkatalog und beginnt nicht, solange catalog.complete nicht auf true steht.

Anmeldung
Sitzungsmarke, Rolle Inhaber
Begrenzung
5 je Minute, gemeinsam mit den übrigen ändernden Datenschutz-Endpunkten
StatusAntwortBedeutung
200deleted, log_id, count_before, count_after, unmeasured_before, unmeasured_after, cataloggelöscht; die Zahlen je Kategorie vor und nach der Löschung, nicht zählbare Kategorien mit Grund und der Katalogstand
422bad_confirmationdas Wort stimmt nicht; expected nennt das erwartete
409already_deleteddas Konto ist inzwischen schon gelöscht, etwa durch eine zweite, gleichzeitige Anfrage
500catalog_emptyder Datenkatalog ist leer, es wird nichts gelöscht
500catalog_incompletecatalog.complete steht nicht auf true: Tabellen fehlen im Katalog, sind ihm unbekannt oder stehen in falscher Reihenfolge, oder der Katalog ließ sich nicht prüfen; missing_tables, unknown_tables und order_violations nennen die Befunde, es wird nichts gelöscht
500not_loggeddie Löschung ließ sich nicht protokollieren, es wird nichts gelöscht

Personen, die außerdem zu einem anderen, nicht gelöschten Konto gehören, behalten ihren Zugang und wechseln dorthin, bevorzugt in ein Konto, dessen Inhaber sie sind; ihre Sitzungen enden. Die übrigen Personen werden unkenntlich gemacht: Name und E-Mail-Adresse werden ersetzt, das Passwort wird durch einen Zufallswert ersetzt, die zweite Stufe entfällt. Das Konto erhält den Zustand deleted, die Rechnungs-E-Mail-Adresse und die Umsatzsteuer-Identifikationsnummer werden entfernt.

Häufige Fragen

Warum erhalte ich 429, obwohl ich das Passwort erst zweimal geändert habe?

Passwortänderung, Abschalten der zweiten Stufe und Entfernen eines Sicherheitsschlüssels teilen sich einen Zähler von 5 Anfragen je Minute und Person. Warten Sie die Frist aus Retry-After ab; mehr unter Grenzen der Schnittstelle.

Bleiben API-Schlüssel gültig, wenn ich das Passwort ändere oder alle anderen Sitzungen beende?

Ja. API-Schlüssel sind keine Sitzungen und bleiben bestehen; DELETE /api/v1/sessions nennt ihre Zahl in kept.api_keys. Einen Schlüssel ziehen Sie unter API-Schlüssel und Webhooks zurück.

Wer darf die Daten exportieren oder das Konto löschen?

Nur die Rolle Inhaber. Fristen setzen und der Widerspruch gegen die Liste der Unterauftragsverarbeiter sind ab Verwaltung erlaubt, lesen darf jede Rolle. Die Rollen beschreibt Team und Rollen.

Warum steht bei einer Kategorie Nicht gemessen statt einer Zahl?

Die Zählung dieser Kategorie ist gescheitert. Ihre Zahl in categories steht dann auf null und der Grund in categories_unmeasured. null heißt nicht, dass keine Einträge vorhanden sind.

Was ist während einer Übernahme durch den Betreiber gesperrt?

Passwortänderung, Einrichten, Bestätigen und Abschalten der zweiten Stufe, Anlegen und Entfernen von Sicherheitsschlüsseln, das Beenden aller anderen Sitzungen, das Beenden einer einzelnen Sitzung außer der Übernahme selbst und der Kontowechsel. Diese Endpunkte antworten mit 403 in_impersonation.

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.