Skip to content

Exports through the API

This page is for whoever takes an export with their own program or from the command line: asking for one, waiting until it is ready, downloading its parts and resuming a broken download. What an export is and what it holds is in Exports. How to make a request to OS (address, sign-in, pages, errors) is in The access API.

Asking for an export of your organisation

curl -s -X POST "$OS/api/v1/organisations/$ORG/exports" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{}'
{"id": "xpt_...", "scope": "organisation", "membership_id": null, "include_core": false,
 "status": "queued", "size_bytes": null, "sha256": null, "counts": {}, "withheld": {},
 "core": null, "downloads": 0, "created_at": "2026-10-17T09:14:03Z", "completed_at": null,
 "expires_at": null, "allowed_actions": ["see", "use", "write"], "...": "..."}
  • Name "membership_id": "mem_..." for an export of one member.
  • "include_core": true asks for the AI features' part as well; only Artific may, so for anyone else OS answers 403.
Answer Meaning
202 Asked for, or the same one still running; Location points at it.
404 You may not see exports here, or the member is not of this organisation.
409 The organisation is being set up or deleted.
429 Five exports were asked for in the last day.

Waiting until it is ready

curl -s "$OS/api/v1/organisations/$ORG/exports/$EXPORT" -H "Authorization: Bearer $TOKEN"

Ask again every minute or so until status is ready. The requester also gets a notification. A failed export says why in error, such as too_large (ask Artific) or requester_lost_access; ask for a new one. GET .../exports lists the organisation's exports, newest first.

Downloading a part

curl -s -o export-os.zip "$OS/api/v1/organisations/$ORG/exports/$EXPORT/parts/os" \
  -H "Authorization: Bearer $TOKEN" -D headers.txt
  • The parts are os and, when it was asked for, core.
  • Digest: sha-256=<hex> is the SHA-256 of the whole part: compare it with your file's.
  • You need use on export; without it OS answers 403.
Answer Meaning
200 The whole part.
206 The part from the byte you named.
409 Not ready yet, or expired.
416 The byte you named is past the end; Content-Range gives the length.

Resuming a broken download

size=$(wc -c < export-os.zip)
curl -s "$OS/api/v1/organisations/$ORG/exports/$EXPORT/parts/os" \
  -H "Authorization: Bearer $TOKEN" -H "Range: bytes=$size-" >> export-os.zip

A download can last up to six hours, and stops when a minute passes without a byte. Resume it as often as you need until the export expires.

Your own export

curl -s -X POST "$OS/api/v1/me/exports" -H "Authorization: Bearer $TOKEN"
curl -s "$OS/api/v1/me/exports/$EXPORT" -H "Authorization: Bearer $TOKEN"
{"id": "pxp_...", "status": "ready", "size_bytes": 18230, "sha256": "...",
 "parts": [{"organisation_id": "org_...", "include_core": true, "ready": true}],
 "expires_at": "2026-10-20T09:21:40Z", "...": "..."}
Part Download
your account GET /api/v1/me/exports/$EXPORT/parts/account
OS's records of you in one organisation GET /api/v1/me/exports/$EXPORT/parts/os/$ORG
your work in the AI features there GET /api/v1/me/exports/$EXPORT/parts/core/$ORG, where include_core is true

While you are being erased OS answers 409, and you ask for no new export.