Dokumentation

Datenexport & Löschung

Ein DSGVO-Art.-20-Datenpaket über die API anfordern sowie die Kontolöschung planen oder abbrechen.


Zwei Betroffenenrechte haben Endpunkte in der öffentlichen API: die Datenübertragbarkeit (Art. 20), die ein JSON-Archiv Ihrer personenbezogenen Daten erzeugt, und die Löschung (Art. 17), die das Konto zur Löschung vormerkt.

Der Datenexport hat keine Oberfläche im Dashboard. Er ist ausschließlich über die API verfügbar.

Es gibt in der Parsurai-App weder Button noch Seite noch Download-Link für das Art.-20-Archiv. Die drei folgenden Endpunkte sind die gesamte Funktion — Archiv anfordern, Status abfragen und herunterladen laufen alle über die API mit Ihrem API-Schlüssel. Der Abschnitt Datenexport unter Einstellungen → Sicherheit ist der DATEV-CSV-Export und damit eine andere Funktion.

Bei der Löschung ist es anders: Sie ist zusätzlich zu den weiter unten beschriebenen Endpunkten auch im Dashboard erreichbar.

Keine dieser Routen ist an einen Tarif gebunden, und keine ist an die Zustimmung zu einer neuen Fassung der Rechtstexte geknüpft — ein Betroffenenrecht von der Annahme eines Dokuments abhängig zu machen, würde das Recht aushöhlen.

Archiv anfordern

POST/v1/me/data-export
curl -X POST "https://api.parsurai.com/v1/me/data-export" \
  -H "X-API-Key: $PARSURAI_API_KEY"
{
  "export_id": "3c8a1d52-7e04-4b91-bd6f-5a2c7f0e9b31",
  "status": "pending"
}

Die Antwort ist ein 202 Accepted: Das Archiv wird im Hintergrund erzeugt, nicht innerhalb der Anfrage.

Dieser Endpunkt ist auf 5 Anfragen pro Stunde und Konto begrenzt, also deutlich unterhalb der allgemeinen Limits aus Ratenbegrenzungen & Fehler. Ein Archiv ist die dichteste Sammlung Ihrer personenbezogenen Daten im System und deshalb bewusst teuer angefordert. Fragen Sie den Status ab, statt ein zweites Archiv anzufordern.

Status abfragen

GET/v1/me/data-export/{export_id}
curl "https://api.parsurai.com/v1/me/data-export/3c8a1d52-7e04-4b91-bd6f-5a2c7f0e9b31" \
  -H "X-API-Key: $PARSURAI_API_KEY"
{
  "export_id": "3c8a1d52-7e04-4b91-bd6f-5a2c7f0e9b31",
  "status": "ready",
  "download_url": "https://api.parsurai.com/v1/me/data-export/3c8a1d52-7e04-4b91-bd6f-5a2c7f0e9b31/download?token=...",
  "expires_at": "2026-06-14T10:12:44Z"
}
FeldTypBeschreibung
export_idUUIDDas beschriebene Archiv
statusstringpending, ready, failed oder expired
download_urlstring | nullDer einmalige Link, nur solange das Archiv ready und ungenutzt ist
expires_attimestamp | nullWann das Download-Token ungültig wird

Eine fremde export_id liefert 404, niemals 403 — ein 403 würde bestätigen, dass unter dieser ID ein fremdes Archiv existiert.

download_url verschwindet, sobald das Archiv einmal heruntergeladen wurde. Ein erneuter Statusabruf nach erfolgreichem Download liefert download_url: null, während der Status weiterhin ready lautet.

Herunterladen

GET/v1/me/data-export/{export_id}/download

Das signierte token im Query-String ist die einzige Berechtigung, die diese Route akzeptiert — Browser folgen einem Download-Link ohne X-API-Key-Header. Das Token ist an genau ein Archiv und ein Konto gebunden, läuft ab und wird bei der ersten Nutzung verbraucht.

curl -L "$DOWNLOAD_URL" -o data-export.json

Die Antwort streamt das Archiv als Anhang:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Disposition: attachment; filename="data-export-3c8a1d52-7e04-4b91-bd6f-5a2c7f0e9b31.json"
Cache-Control: no-store
Referrer-Policy: no-referrer

Jede Ablehnung — abgelaufenes Token, falsches Archiv, falscher Eigentümer, Archiv nicht bereit, bereits heruntergeladen — liefert denselben 403 mit derselben Meldung:

{ "detail": "download link is not valid" }

Die Fälle sind bewusst nicht unterscheidbar, damit niemand aus einem entwendeten Link ableiten kann, welcher Teil davon zu ändern wäre.

Der Download-Link ist einmalig nutzbar. Bricht die Übertragung ab, nachdem der Server das Archiv als heruntergeladen vermerkt hat, lässt sie sich mit demselben Link nicht wiederholen — fordern Sie dann einen neuen Export an.

Gültigkeit von Token und Archiv

Beides sind Deployment-Einstellungen, klären Sie sie also mit dem Betreiber Ihres Deployments. Die ausgelieferten Standardwerte sind:

EinstellungStandard
Gültigkeit des Download-Tokens60 Minuten ab dem Zeitpunkt, zu dem das Archiv bereitsteht
Aufbewahrung des Archivs7 Tage, danach werden die gespeicherten Daten gelöscht und der Datensatz entfernt

Das Archiv existiert, um heruntergeladen zu werden, nicht um gespeichert zu bleiben — deshalb hat es die kürzeste Aufbewahrungsfrist aller Datenkategorien.

Inhalt des Archivs

Das Archiv ist ein einzelnes JSON-Dokument: ein manifest, das den Export beschreibt, gefolgt von einem Abschnitt je Datenkategorie.

AbschnittInhalt
accountKonto-ID, E-Mail, Anzeigename, Tarif, Erstellungsdatum
settingsIhre Kontoeinstellungen
webhooksDie Konfiguration Ihrer Webhook-Endpunkte
legal_acceptancesWelchen Fassungen der Rechtstexte Sie wann zugestimmt haben
business_detailsDie hinterlegten Unternehmensangaben
billingStripe-Kunden-ID und Abonnementstatus
extraction_historyIhre Extraktionshistorie

manifest enthält schema_version, generated_at, user_id und unter categories eine Anzahl je Abschnitt.

Zugangsdaten sind strukturell ausgeschlossen: Passwort-Hashes, API-Schlüssel-Hashes und Webhook-Signaturgeheimnisse stehen nie im Archiv. Sie sind keine übertragbaren personenbezogenen Daten, und ihr Export würde ein neues Offenlegungsrisiko schaffen.

Überschreitet das fertige Archiv die maximale Archivgröße des Deployments (standardmäßig 64 MB), scheitert die Erzeugung und der Export endet mit status: "failed".

Löschung

Die Löschung merkt das Konto nach einer Karenzzeit zur Löschung vor; innerhalb dieser Frist können Sie es sich noch anders überlegen.

DELETE/v1/me
curl -X DELETE "https://api.parsurai.com/v1/me" \
  -H "X-API-Key: $PARSURAI_API_KEY"
{ "scheduled_for": "2026-07-14T09:12:44Z" }

Beim Vormerken der Löschung passiert Folgendes:

  • Das Löschdatum wird auf 30 Tage in der Zukunft gesetzt,
  • ein aktives Stripe-Abonnement wird zum Ende der laufenden Abrechnungsperiode gekündigt und
  • eine Bestätigungs-E-Mail geht an die Kontoadresse.

Bis zum Löschdatum funktioniert das Konto weiter. API-Schlüssel bleiben gültig, Extraktionen laufen weiter; erst nach Ablauf des Löschdatums werden Anfragen abgelehnt. Nach der Karenzzeit entfernt ein geplanter Bereinigungslauf das Konto samt Daten.

POST/v1/me/cancel-deletion
curl -X POST "https://api.parsurai.com/v1/me/cancel-deletion" \
  -H "X-API-Key: $PARSURAI_API_KEY"

Der Abbruch liefert die aktuellen Kontodaten zurück, in derselben Struktur wie GET /v1/me. Ist keine Löschung vorgemerkt, antwortet der Endpunkt mit 409.

Die Löschung ist auch im Dashboard verfügbar, unter Einstellungen → Gefahrenzone, mit demselben Ablauf aus Vormerken und Abbrechen. Anders als für das Art.-20-Archiv brauchen Sie dafür die API nicht.