Identifiers

On live keys every public id is a UUID. The API never exposes numeric database primary keys.

Test keys are different: abr_test_… responses carry opaque prefixed ids such as proj_test_…, deliv_test_… and file_test_…. Treat every id as an opaque string. Code that parses or validates ids as UUIDs works against live and fails in test mode. See Test mode.

Use the id from a response in the next path. Do not guess sequential numbers (/projects/124 after seeing /projects/123).

GET /v1/projects/3f2a9c1e-4b7d-4c8a-9f10-2d6e5b7c8a91
GET /v1/projects/{project_id}/deliverables/{deliverable_id}

What to copy

Field What it is Use it for
id on a project Project UUID All /v1/projects/{id}… routes
id on a deliverable Deliverable UUID Single-deliverable metadata and bytes
org_id Organisation UUID Read only — sent for you
created_by User UUID Read only
created_by_api_key_id Key that created the project Audit; null for UI-created projects
file_id on a deliverable Opaque asset id Not a path parameter
source_file_id Source asset id Not a path parameter
batch_id Internal batch, when present Not a path parameter

The JSON field is always id, never obj_id.

Deliverables

  1. GET /v1/projects/{project_id}/deliverables — each row has id

  2. GET /v1/projects/{project_id}/deliverables/{id} — that same id

  3. Or …/deliverables?format=zip for every file

Do not put file_id in the deliverable path.

Languages

Languages are identified by lowercase bcp47 tags, not by an id. See Language codes.