---
title: "Start a data export"
method: POST
path: "/api/v1/me/export"
tags: ["Settings"]
---

# Start a data export

`POST /api/v1/me/export`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/me/export`
- Auth: API key in cookie `auth_token`

Start a complete export of the account's data (GDPR Articles 15 and 20), prepared in the background: every collection the account owns, with no per-collection limit, as one JSON file. Secrets and key material are never included (API key hashes, webhook signing secrets, DNS provider credentials, encryption key material, proof tokens) — the file's `not_included` names the fields left out of each section. The owner is told when it is ready — by email, or on the login channel when the account has no email — with a link that downloads it only while signed in. One start per 24 hours (`429 export_rate_limited`), lifted while the account is scheduled for deletion; an export already being prepared is answered instead of starting a second. Owner session only; reachable while the account is locked. Replaces the synchronous `GET /me/export` (h-implement-proper-deletion), which returned a capped copy to any API key with `settings:read`.

## Response `202`

The export is being prepared (a new one, or the one already preparing)

- AccountExportJob: One data export of the account — prepared in the background, downloadable only by the signed-in owner
  - `id` string, required
  - `status` 'preparing' | 'ready' | 'failed', required: `preparing` while the job runs; `ready` once the file can be downloaded; `failed` with `error`
  - `error` 'too_large' | 'internal' | 'null', nullable, required: `too_large` — more than one download can carry (no partial file is ever produced; contact support); `internal` — a failure on our side (start a new export at once, the daily limit was given back)
  - `requested_at` string, date-time, required
  - `ready_at` string, date-time, nullable, required
  - `expires_at` string, date-time, required: The export and its file are deleted at this time — 7 days after the request
  - `downloaded_at` string, date-time, nullable, required: The first download, if any
  - `size_bytes` integer, nullable, required: Size of the compressed file as stored
  - `counts` object, required: Rows per section of the file
  - `download_path` string, nullable, required: Path of the download route while `ready`, else null

## Other responses

- `401`: Unauthorized
- `403`: `owner_session_required` — an API key may not export the account; exporting belongs to the signed-in owner (dashboard, or an MCP login session)
- `409`: `deletion_in_progress` — the account is being deleted; its data can no longer be exported
- `429`: `export_rate_limited` — one start per 24 hours; `retry_after_seconds` says when the next one may start
- `503`: `export_unavailable` — the export could not be queued; nothing counts against the daily limit, retry

---

[API](https://skmtc.dev/proof/apis/proof-holdings-api.md) · [All operations](https://skmtc.dev/proof/apis/proof-holdings-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proof/apis/proof-holdings-api/revisions/6b8d61ee354f?raw)
