Skip to content

The archive

What an export's OS part holds and how it is laid out, for whoever reads it with a program. What an export is is in Exports; how to take one is in Exports through the API.

Layout

An OS part is a zip. Every file but manifest.json, organisation.json and the photos under files/ holds one JSON object per line.

File Holds In
organisation.json the organisation: its id, name, the organisation above it, status, labels, audit retention, created and status changed an organisation's export
control/membership.jsonl memberships: id, organisation, person, status, created and status changed every export
control/person.jsonl the people of the memberships: id, address, name, status and photo (its address with every size, and file where the archive holds the photo itself); in your own, also whether your address is verified every export
files/photo/<id> a person's photo, the fullest image kept, without an extension: its type is in the manifest; their row in control/person.jsonl names it in photo.file, and only what the manifest lists is in the zip every export, for the people the requester may see
control/invitation.jsonl invitations: id, membership, address, purpose, who invited, status, expiry every export; in your own, those you accepted
control/coresubject.jsonl the id the AI features know each person by in each organisation: how to join this archive to the AI features' part every export
control/personpreference.jsonl your language, landing page, navigation, notification choices and what you have already seen (such as the tour) your own account part
control/controlevent.jsonl, control/organisationplan.jsonl, control/serviceexception.jsonl the organisation's lifecycle, its plans and exceptions an organisation's export
tables/member.jsonl, tables/groupmember.jsonl, tables/memberattribute.jsonl, tables/roleassignment.jsonl members, their groups, values and roles every export but your account part
tables/group.jsonl, tables/role.jsonl, tables/policy.jsonl, tables/attributedefinition.jsonl, tables/groupattribute.jsonl, tables/invitationgrant.jsonl groups, custom roles, the rules document, attributes and what invitations give an organisation's export
tables/auditevent.jsonl the audit trail; in a member's or your own export, what that person did every export but your account part
tables/notification.jsonl, tables/notificationitem.jsonl, tables/notificationdefault.jsonl notifications, the items members saw, the organisation's defaults; a member's and your own export hold their items as said
tables/event.jsonl, tables/webhooksubscription.jsonl, tables/webhookdelivery.jsonl events, webhooks without their secrets, deliveries an organisation's export
tables/slackwebhook.jsonl Slack channels the organisation connected, without their addresses an organisation's export
tables/handover.jsonl, tables/handoverstep.jsonl the Direct Chat desk: every request for an employee with its state, how it started and its moments, and every step of it; never a word of the conversation an organisation's export
manifest.json what the archive is, last in the zip every export

Times are ISO 8601 in UTC (2026-10-17T09:14:03Z), and ids are the ones the API answers, so a row in the archive and the same thing from the API name the same things.

The manifest

{"format": "artific-os/export", "format_version": 1, "export_id": "xpt_...",
 "scope": "organisation", "organisation_id": "org_...", "membership_id": null,
 "created_at": "2026-10-17T09:14:03Z", "completed_at": "2026-10-17T09:21:40Z",
 "requested_by": "mem_...", "consistency": "per_table_batch",
 "files": {"tables/auditevent.jsonl": {"rows": 48211, "sha256": "...", "withheld": 0},
           "files/photo/per_...": {"bytes": 48113, "sha256": "...", "media_type": "image/webp"}},
 "not_contained": {"corekey": "a key OS holds at Core, a secret"},
 "core": {"export_id": "exp_...", "status": "running"}}
  • files gives each file's rows, the SHA-256 of its content and how many rows were left out because the requester may not see them. A photo is listed with its size in bytes (bytes), its SHA-256 and its type (media_type, such as image/webp).
  • not_contained names what is left out on purpose, and why.
  • consistency: per_table_batch: OS reads a file a batch at a time, so a row changed while the export ran can be in its old or its new state.
  • core names the AI features' part when it was asked for; its size and digest are on the export itself (core in the API's answer).
  • The SHA-256 of the whole zip is on the export (sha256) and in the download's Digest, never in the zip.

Versions

format_version is 1. Fields and files are added, never removed or renamed; a change that would break your reader raises format_version.