Bulk export (data contracts)
On the Enterprise plan, owners set up scheduled exports of the organization's data to the organization's own S3-compatible bucket (AWS S3, Cloudflare R2, MinIO, Google Cloud Storage interoperability). Each dataset's shape is published as a JSON Schema: the data contract.
Setting up an export
Enterprise → Bulk export: name the export, give the bucket, region, and for services other than AWS the endpoint (and Path-style URLs for MinIO), an optional key prefix, and an access key pair that may write to that bucket only. Choose the datasets and the schedule: daily or weekly, at an hour in UTC. The secret key is stored encrypted and never shown again.
Test the connection writes a small test object. Run now queues a run at once; scheduled runs follow the schedule. Runs lists each run's state and where its files are. A failed run is retried twice, five and ten minutes apart.
What a run writes
Under <prefix>/<yyyy>/<mm>/<dd>/<run id>/:
<dataset>.ndjson.gz: one JSON object per line, gzipped, field names as in the schema (snake_case), timestamps in ISO 8601 UTC;schemas/<dataset>.schema.json: the JSON Schema (2020-12) of one row;manifest.json, written last: the contract version, the run, and each file's key, row count, size and SHA-256.
Read a run only once its manifest exists. All files in a run come from one consistent snapshot.
Datasets
Projects, issues, initiatives, positions, links between records, the audit log, and the event feed (the same events that webhooks deliver). Enterprise → Bulk export lists each with its description, and every run writes each dataset's schema beside its data.
Contract versions
The contract version (in every manifest) changes only when a dataset loses or renames a field or changes a field's type. New fields are added without a version change, so readers should ignore fields they do not know.