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.
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:
| Schranke | Gilt für | Antwort bei Verstoß |
|---|---|---|
| Konto aktiv | alle Endpunkte dieser Seite außer POST /api/v1/tenant/switch und POST /api/v1/logout | 403 no_tenant oder tenant_paused, tenant_suspended, tenant_deleted mit dem Text „Das Konto ist derzeit nicht aktiv.“ in message |
| E-Mail-Adresse bestätigt | alle Pfade unter /api/v1/billing und /api/v1/privacy/ | 403 email_unverified |
| Rolle | wo beim Endpunkt angegeben | 403 role_too_low, in required die verlangte Rolle |
| Keine Übernahme | wo beim Endpunkt angegeben | 403 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.
| Deckel | Endpunkte | Anfragen je Minute |
|---|---|---|
tenant-switch | POST /api/v1/tenant/switch | 20 |
confirmation | POST /api/v1/confirmation/resend | 3 |
password-change | PUT /api/v1/password, DELETE /api/v1/totp, DELETE /api/v1/webauthn/{id} | 5, ein gemeinsamer Zähler |
privacy | GET /api/v1/privacy/export, POST /api/v1/privacy/subprocessors/object, PUT /api/v1/privacy/retention, POST /api/v1/privacy/deletion | 5, ein gemeinsamer Zähler |
dpa | POST /api/v1/privacy/dpa | 10, 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 user | Inhalt |
|---|---|
id, email, name | Kennung, Adresse und Name der Person |
role | Rolle im aktuellen Konto: viewer, editor, admin oder owner |
locale | de, 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_active | true, wenn die zweite Stufe per Code eingerichtet und bestätigt ist |
webauthn_keys | Zahl der hinterlegten Sicherheitsschlüssel |
email_verified | true, wenn die Adresse bestätigt ist |
operator | true nur bei Zugängen des Betreibers, bei Kundenkonten false |
available, available_at | ob die Person gerade Übergaben annimmt und seit wann |
| Feld | Inhalt |
|---|---|
tenant | unter anderem id, name, slug, status, das Paket in plan und plan_name und seine Merkmale in features |
tenants | je 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
| Status | Fehler | Bedeutung |
|---|---|---|
| 403 | in_impersonation | Anfrage aus einer Übernahme |
| 404 | not_found | Sie gehören nicht zu diesem Konto, oder es besteht nicht |
| 403 | tenant_paused, tenant_suspended, tenant_deleted | das 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
| Status | Fehler | Bedeutung |
|---|---|---|
| 403 | role_too_low | die Rolle ist nicht Inhaber; required ist owner |
| 403 | in_impersonation | Anfrage aus einer Übernahme |
| 403 | email_unverified | die E-Mail-Adresse ist noch nicht bestätigt |
| 422 | validation | name 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
| Feld | Regel |
|---|---|
current_password | Pflicht, höchstens 200 Zeichen; in der Anwendung Bisheriges Passwort |
password | Pflicht, mindestens 12 Zeichen, darunter Buchstaben und Ziffern, anders als das bisherige; in der Anwendung Neues Passwort |
password_confirmation | Pflicht, gleich password; in der Anwendung Passwort wiederholen |
| Status | Antwort | Bedeutung |
|---|---|---|
| 200 | {"ok": true, "sessions_ended": 2} | geändert; sessions_ended zählt die beendeten Sitzungen |
| 403 | in_impersonation | Anfrage aus einer Übernahme |
| 422 | bad_credentials | das 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
| Status | Fehler | Bedeutung |
|---|---|---|
| 403 | in_impersonation | Anfrage aus einer Übernahme |
| 409 | totp_already_active | Einrichten, obwohl die zweite Stufe schon aktiv ist |
| 409 | no_secret | Bestätigen ohne vorheriges Einrichten |
| 422 | bad_totp | der Code stimmt nicht |
| 422 | bad_credentials | beim Abschalten: das Passwort stimmt nicht |
| 500 | not_logged | die Ä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
| Feld | Inhalt |
|---|---|
id | Kennung des Schlüssels, für das Entfernen |
name | der Name, den Sie beim Anlegen vergeben haben |
algorithm | Signaturverfahren: ES256, EdDSA oder RS256 |
user_verified | true, wenn der Schlüssel beim Anlegen die Person geprüft hat, etwa per PIN oder Fingerabdruck |
created, last_used_at | Anlage 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
| Feld | Inhalt |
|---|---|
challenge | die Aufforderung |
rp_id, rp_name | Bereichskennung und Anzeigename des Dienstes, ohne eigene Einstellung XICBOT |
user | id (Ihre Kennung, kodiert), name (Ihre Adresse) und display_name (Ihr Name, ohne Namen die Adresse) |
exclude | Kennungen der schon hinterlegten Schlüssel, damit derselbe Schlüssel nicht zweimal angelegt wird |
algorithms | zulässige Verfahren als Zahlen: -7, -8, -257 |
timeout | Gü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
| Feld | Regel |
|---|---|
name | Pflicht, höchstens 80 Zeichen; in der Anwendung Name des Schlüssels |
client_data_json | Pflicht, höchstens 8000 Zeichen, base64url |
attestation_object | Pflicht, 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
| Status | Fehler | Bedeutung |
|---|---|---|
| 403 | in_impersonation | Anfrage aus einer Übernahme |
| 404 | not_found | beim Entfernen: kein Schlüssel dieser Person mit dieser Kennung |
| 409 | webauthn_limit | die Höchstzahl an Schlüsseln ist erreicht, ohne eigene Einstellung 10 je Person |
| 409 | webauthn_known | dieser Schlüssel ist bereits hinterlegt |
| 422 | challenge_expired | keine gültige Aufforderung, etwa weil die Frist abgelaufen ist |
| 422 | bad_attestation | die Prüfung ist gescheitert; reason nennt die Stelle |
| 422 | bad_credentials | beim Entfernen: das Passwort stimmt nicht |
| 500 | not_logged | die Ä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 |
| 503 | webauthn_unconfigured | Sicherheitsschlü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
| Feld | Inhalt |
|---|---|
id | Kennung der Sitzung, für das Beenden |
name | Browserkennung der Anmeldung |
last, created, expires_at | letzte Nutzung, Anmeldung und Ablauf |
current | true bei der Sitzung, aus der die Anfrage kommt; in der Anwendung dieses Gerät |
kind | login 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
result | Bedeutung |
|---|---|
success | angemeldet |
bad_password | falsches Passwort |
unknown | zu der eingegebenen Adresse gibt es keinen Zugang |
bad_totp | falscher Code der zweiten Stufe |
bad_webauthn | Sicherheitsschlüssel abgewiesen |
locked | Zugangsdaten 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
| Feld | Inhalt |
|---|---|
period | from und to als Datum, month als Monat |
tenant | id, name, E-Mail-Adresse für Rechnungen in billing_email, Umsatzsteuer-Identifikationsnummer in vat_id |
package | key, name und scope des Pakets, known ist false, wenn der Paketschlüssel unbekannt ist |
limits | die 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 |
usage | Verbrauch des Monats, siehe unten |
items | die Positionen, in der Anwendung Positionen |
price_basis | netto |
total_cents, total_complete | Summe der Positionen (Summe); fehlt einer Position der Betrag, steht total_cents auf null und total_complete auf false |
payment_provider | null: es ist keine Zahlung ausgelöst worden |
Position (kind) | Inhalt |
|---|---|
base_fee | das 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. |
overage | erscheint 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 usage | Inhalt |
|---|---|
month, used, budget, remaining | Monat, verbrauchte Token (Eingang und Ausgang), Kontingent und Rest |
messages | Zahl der Antworten im Monat |
warn_at, share | Warnschwelle in Token und verbrauchter Anteil, abgeschnitten auf vier Nachkommastellen |
warning, exhausted, level | Warnstufe erreicht, Kontingent aufgebraucht; level fasst beides als ok, warning oder exhausted zusammen |
throttled, reply_tokens, tool_rounds | ab der Warnschwelle fallen Antworten kürzer aus; die beiden Zahlen nennen die dann geltende Antwortlänge in Token und die Zahl der Werkzeugrunden |
warnings | je 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
| Feld | Inhalt |
|---|---|
categories | Zahl der gespeicherten Einträge je Kategorie |
categories_unmeasured | je Kategorie, die sich nicht zählen ließ, der Grund; ihre Zahl in categories steht dann auf null, in der Anwendung Nicht gemessen |
catalog | Prü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 |
retention | Fristen in Tagen für Gespräche (general), Testgespräche (test), Gespräche über die Schnittstelle (api) und Protokolle (logs) |
retention_objects | alle Objektarten mit ihrer Frist, wie bei PUT /api/v1/privacy/retention |
dpa | Stand der Auftragsverarbeitung, wie bei GET /api/v1/privacy/dpa |
deletion_word | das Wort, mit dem eine Kontolöschung bestätigt wird |
versions | geltende 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
| Feld | Inhalt |
|---|---|
generated, tenant | Zeitpunkt des Exports und Kennung des Kontos |
sections | je 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_sections | Namen der gescheiterten Abschnitte |
unexported_tables | Tabellen des Datenkatalogs, die kein Abschnitt abdeckt |
catalog | Prüfstand des Datenkatalogs wie im Überblick |
complete | true, wenn kein Abschnitt gescheitert ist, jede Katalogtabelle abgedeckt ist, catalog.complete auf true steht und kein Abschnitt gekürzt ist |
files_complete | true nur ohne Dateien von Besuchern; die Dateien stehen nicht im Export |
files | visitor_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
| Feld | Objektart |
|---|---|
conversations | Gespräche |
conversations_test | Testgespräche; ohne eigenen Wert gilt die Frist von conversations |
conversations_api | Gespräche über die Schnittstelle; ohne eigenen Wert gilt die Frist von conversations |
leads | Anfragen; die Frist gilt auch für appointments (Termine) und cart_handoffs (Warenkorbübergaben) |
attachments | hochgeladene Dateien |
visitor_attachments | Anhänge der Besucher |
logs | Protokolle; die Frist gilt auch für login_events (Anmeldeereignisse) |
Feld je Eintrag in retention_objects | Inhalt |
|---|---|
key, days | Objektart und eigene Frist in Tagen, null ohne eigene Frist |
follows, effective_days | Objektart, deren Frist ohne eigenen Wert gilt, und die daraus wirksame Frist |
deletes | false, wenn keine Frist gilt |
settable, nullable | ob sich die Frist über diesen Endpunkt setzen und auf null stellen lässt |
table, column, date_column, filter, cascade | woran die Frist hängt: Tabelle, Spalte der Frist, maßgebliches Datum und Auswahl |
| Status | Fehler | Bedeutung |
|---|---|---|
| 422 | Prüffehler je Feld | Wert außerhalb von 1 bis 3650 oder keine ganze Zahl; in der Anwendung „Erlaubt sind 1 bis 3650 Tage.“ |
| 500 | not_logged | die Änderung ließ sich nicht protokollieren und wurde darum nicht gespeichert |
| 500 | no_settable_retention | keine 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
| Status | Fehler | Bedeutung |
|---|---|---|
| 409 | contract_version_mismatch | der Vertragstext passt nicht zur geltenden Fassung; contract und expected nennen beide |
| 409 | stale_state | die Liste hat inzwischen eine neue Fassung; current nennt sie |
| 500 | not_logged | die 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
| Status | Antwort | Bedeutung |
|---|---|---|
| 200 | deleted, log_id, count_before, count_after, unmeasured_before, unmeasured_after, catalog | gelöscht; die Zahlen je Kategorie vor und nach der Löschung, nicht zählbare Kategorien mit Grund und der Katalogstand |
| 422 | bad_confirmation | das Wort stimmt nicht; expected nennt das erwartete |
| 409 | already_deleted | das Konto ist inzwischen schon gelöscht, etwa durch eine zweite, gleichzeitige Anfrage |
| 500 | catalog_empty | der Datenkatalog ist leer, es wird nichts gelöscht |
| 500 | catalog_incomplete | catalog.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 |
| 500 | not_logged | die 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.
Selbst fragen, Assistent dieser Website
Automatischer Assistent