Base URL
GET /health) are prefixed with /v1/.
API-direct transcript storage uses the existing artifact metadata and content-type fields,
not a new REST field. See the multipart, JSON-body, and list recipes in the
session transcript guide.
Model provenance likewise uses existing metadata keys (model, model_source,
models_used) — there is no new REST field. See
model capture.
Authentication
Every request requires a Bearer token:GET /v1/whoami to verify your key.
Endpoints
Artifacts
Presigned uploads
Artifact Pages (authenticated)
Artifact Pages (public — no auth)
The three
/v1/public/pages/ endpoints require no Bearer token. They are called by the public viewer and by end users’ browsers. The “Every request requires a Bearer token” rule applies only to authenticated endpoints.Sessions
Account
Content upload paths
Pagination
All list endpoints use cursor-based pagination.- Response includes
next_cursor(nullif no more results) - Pass
cursor=<value>for the next page - Max
limit: 200, default: 50
Sort order guarantee: Results are always ordered by
created_at DESC, artifact_id DESC. This is a V1 API contract and will not change without a new API version.Rate limiting
Per-tenant: 100 requests/second sustained, 200 requests/second burst (sliding window). Headers on every response:
When exceeded:
429 Too Many Requests with Retry-After header and retry_after_seconds in the body.
Error response shape
All errors return:error.code (stable). Never parse error.message. See the full error reference.
The page field on artifact responses
GET /v1/artifacts/{id} includes a page sub-object when the artifact has a live published page:
page is null when no live page exists (never published, or unpublished). It is present only on the single-artifact GET /v1/artifacts/{id} response — list results always return page: null.
API guarantees
- Read-after-write consistency: An artifact written via
POST /v1/artifactsis immediately visible to all read endpoints. - Backward compatibility: Additive changes (new fields, new optional parameters, new endpoints) are non-breaking. Removals and type changes require a new API version. V1 remains available for 12 months after V2 launches.
Coming in V1.1:
POST /v1/artifacts/batch/download-urls — batch download URLs for up to 20 artifacts in a single request.