People
Data exports
export-service
A person's copy of their own data: asking for one, seeing how it is getting on, fetching it and giving it up (data-export.md). Optional: an installation may not run it.
The viewer's exports
/exportsAnd how often they may ask, how long an archive is kept, and when they may next ask.
Who: Somebody signed in
Answers
- 200OKexport.ExportList application/json
- 401no token, or one that has expired
Request
curl "https://api.example.org/exports" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/exports', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/exports",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Answer · 200
{
"data": [
{
"created_at": "2026-10-27T09:30:00Z",
"download_url": "https://example.org/",
"error": "string",
"expires_at": "2026-10-27T09:30:00Z",
"id": "string",
"ready_at": "2026-10-27T09:30:00Z",
"size_bytes": 1,
"status": "string"
}
],
"every_days": 1,
"keep_days": 1,
"next_at": "2026-10-27T09:30:00Z"
}
Ask for a copy of the viewer's data
/exportsEverything they wrote, as a zip archive made in the background: GET /exports/:id says when it is ready, with where to fetch it. One at a time, and one a week unless the installation says otherwise (EXPORT_EVERY_DAYS).
Who: Somebody signed in, who has just proved who they are again
Answers
- 201Createdexport.ExportItem application/json
- 401no token, or one that has expired
- 403
step_up_required: the viewer must prove who they are again first (/reauth)Refusal application/json - 409
active: one is being madeRefusal application/json - 429
too_soon: it is not yet time to ask again, and it says whenexport.TooSoon application/json
Request
curl -X POST "https://api.example.org/exports" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/exports', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.post(
"https://api.example.org/exports",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Answer · 201
{
"created_at": "2026-10-27T09:30:00Z",
"download_url": "https://example.org/",
"error": "string",
"expires_at": "2026-10-27T09:30:00Z",
"id": "string",
"ready_at": "2026-10-27T09:30:00Z",
"size_bytes": 1,
"status": "string"
}
How an export is getting on
/exports/{id}Once it is ready, with an address to fetch it from, good for a few minutes and made afresh each time this is read.
Who: Somebody signed in
Parameters
idstringrequiredin pathThe export's id: a UUID.
Answers
- 200OKexport.ExportItem application/json
- 401no token, or one that has expired
- 404the viewer has no such export
Request
curl "https://api.example.org/exports/<id>" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/exports/<id>', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/exports/<id>",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Answer · 200
{
"created_at": "2026-10-27T09:30:00Z",
"download_url": "https://example.org/",
"error": "string",
"expires_at": "2026-10-27T09:30:00Z",
"id": "string",
"ready_at": "2026-10-27T09:30:00Z",
"size_bytes": 1,
"status": "string"
}
Give an export up
/exports/{id}Stops it being made, or deletes its archive once it is.
Who: Somebody signed in
Parameters
idstringrequiredin pathThe export's id: a UUID.
Answers
- 204given up, or it was over already
- 401no token, or one that has expired
- 404the viewer has no such export
Request
curl -X DELETE "https://api.example.org/exports/<id>" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/exports/<id>', {
method: 'DELETE',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.delete(
"https://api.example.org/exports/<id>",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Written by Claude, reviewed by Rastin Mehr · About this