The manifest schema, in full.
Every collection is delivered with one row per asset and one column per field. This is that schema — all of it, with what each column means and what an empty cell signifies. The worked example in the field kit is these columns in this order, and so is the live export.
Manifest columns
Identity
| Column | Type | Meaning |
|---|---|---|
| asset_id | string | Stable public identifier. Never reissued, never reused after withdrawal. |
| filename | string | Delivered file name. Matches the asset ID, so a row and a file cannot be separated. |
| modality | enum | video · audio · document · records |
Media
| Column | Type | Meaning |
|---|---|---|
| duration_sec | integer | Whole seconds. Documents and records carry 0. |
| resolution | stringMay be empty | Pixel dimensions as delivered, e.g. 3840x2160. |
| fps | decimalMay be empty | Frame rate as captured. 30 standard, 60 on motion lines. |
| video_codec | stringMay be empty | H.264 throughout. No HDR. |
| audio_channels | integerMay be empty | Channel count as delivered. 2 where capture was channel-separated. |
| audio_sample_rate | integerMay be empty | Hertz. 48000 on originated capture; archive reports its source rate. |
| file_size_bytes | integer | Master file size, not the proxy. |
Capture
| Column | Type | Meaning |
|---|---|---|
| capture_date | date | ISO 8601 date, YYYY-MM-DD. The date of capture, not of ingest. |
| capture_time_local | string | 24-hour local start time, HH:MM. Time of day changes light, noise floor and who is present. |
| timezone | string | Capture-local zone. WAT (UTC+1) across the corridor. |
| country | string | Country of capture. |
| city | string | City or nearest town of capture. |
| location_type | enum | market · roadside · workshop · household · studio · archive |
| environment_tag | string | Free tag for the specific setting, e.g. open-air-market. |
| camera_position | enumMay be empty | head · chest · fixed · handheld |
| camera_model | stringMay be empty | Body and rig as used. Locked settings are identical within a lot. |
Content
| Column | Type | Meaning |
|---|---|---|
| languages | string | Semicolon-separated. Every language present, not only the dominant one. |
| primary_task | string | What the operator was doing, in the vocabulary of the trade. |
| intent | string | What they were trying to achieve — the layer a pixel cannot carry. |
| objects_handled | stringMay be empty | Semicolon-separated objects touched during the clip. |
| hands_visible | enumMay be empty | yes · partial · no |
| failure_retry_events | integer | Count of points where the task failed and method changed. The field robotics buyers filter on first. |
| motion_level | enum | static · low · moderate · high |
| lighting | enum | daylight · overcast · mixed · artificial · low |
Rights
| Column | Type | Meaning |
|---|---|---|
| subject_ids | string | Semicolon-separated subject references. Each resolves to a consent record. |
| identifiable_persons | integer | Count of identifiable people carrying an appearance release. 0 means nobody in frame is identifiable — the field a rights reviewer checks first. |
| consent_doc_ref | string | Resolves to a signed consent instrument. Never blank on a published asset. |
| contributor_licence_ref | string | Resolves to the contributor's licence. Never blank on a published asset. |
| rights_holder | string | The party warranting the grant. |
| exclusivity | enum | non-exclusive · category · territory · term |
| ai_training_grant | enum | granted · not_granted. Only granted rows are deliverable. |
| sublicensable | enum | yes · no. Aggregators reselling onward filter on this. |
Settlement
| Column | Type | Meaning |
|---|---|---|
| payment_ref | string | Resolves to a payment record. A cleared asset has a paid contributor. |
| payment_status | enum | paid · pending |
| notes | stringMay be empty | Anything a buyer should know that no other column carries. |
An empty cell means the field does not apply to the asset's modality — an audio asset has no frame rate. It never means the value was unavailable.
The rights columns are the point
Six of these columns exist so a reviewer never has to take a sentence on trust. Every published asset resolves through them to a signed instrument, a named rights holder and a paid contributor — and identifiable_persons states, per asset, whether an appearance release was required at all.

Manifest export
Every published collection exports its manifest as CSV at a stable path. No key, no account, no sales conversation — a buyer evaluating provenance should be able to read the record before speaking to anyone.
- Endpoint
- /api/manifest/{slug}
- Method
- GET
- Returns
- text/csv; charset=utf-8, as a file attachment
- Status codes
- 200 on a published collection. 404 where the slug is unknown or the collection is unpublished.
Live exports
These are the real endpoints, not examples.
Name any asset ID in a manifest.
We will send you the signed agreement behind it.