Annotation Export Format¶
Reference for the CSV and JSONL files exported from an annotation queue. To run an export, see Export Annotations.
Both formats show each reviewer's answers side by side and list fields in the queue's field order. For why and when to export, see Exporting Results. For the schema that defines these fields, see Annotation Schema.
| Format | Structure |
|---|---|
| CSV | Spreadsheet-friendly. One row per (item, schema field), with a column for each reviewer. |
| JSONL | One JSON object per item, suitable for programmatic processing. Each field holds its reviewers' values, keyed by email. |
The export covers every item's submitted annotations. Flagged items are always included, even when they have no annotations, so every flagged item appears regardless of review status.
Shared Fields¶
Each exported item carries these fields:
| Field | Description |
|---|---|
item_id |
ID of the annotation item |
item_type |
session or message |
session_id |
External UUID of the linked session (for message items, the session of the message's chat) |
flagged |
Whether the item is flagged |
flags |
List of flag entries recorded on the item (empty when not flagged). See Flag an Item. |
authoritative_annotator |
Email of the reviewer whose annotation was picked as authoritative for the item; blank if none has been picked. Auto-set on single-reviewer queues; chosen during resolution on multi-reviewer queues. See Resolving Multi-Reviewer Conflicts. |
annotated_at |
ISO 8601 creation timestamp of the item's most recent annotation. For a flagged item with no annotations, this is an empty string in both CSV and JSONL. |
Reviewer Answers¶
Each reviewer's answers to the schema fields are added differently in each format:
- CSV adds a
fieldcolumn (the schema field name) and one column per reviewer email. Each row is one item/field combination; the reviewer columns hold that reviewer's value, blank where they did not answer. - JSONL adds a
fieldsobject shaped{field: {reviewer_email: value}}. A field a reviewer did not answer isnull, and values keep their JSON types (numbers stay numbers).
Example JSONL record:
{
"item_id": 67, "item_type": "session", "session_id": "d99c...",
"flagged": false, "flags": [],
"authoritative_annotator": "marcus@example.com", "annotated_at": "2026-07-15T13:17:02Z",
"fields": {
"tone": {"fatima@example.com": "friendly", "marcus@example.com": "too casual"},
"accuracy": {"fatima@example.com": "accurate", "marcus@example.com": "missed grammar"}
}
}
Note
In CSV exports, flags is serialized as JSON in a single cell. Use JSONL if you need to process flag entries or field values programmatically without parsing JSON from within a column.