String API
Composer API

Limits

What v1 does not do, stated plainly, so you find out here rather than in production.

Read this before you design an integration.

There is no bulk data download

GET /v1/builds/{id}/sample returns the field schema and sample rows. It is not an export, and there is no other endpoint that is one.

The finished dataset is delivered through the subscription that approving the publish_review gate registers. If your integration needs the full rows, that delivery is the route — not this API.

Last-Event-ID suppresses, it does not replay

The SSE stream cannot resend frames you missed. A resubscribe gets a fresh full-state snapshot, and the header is used only to drop frames you demonstrably already have. Progress ticks that elapsed during the gap are gone; gate raises and activity items survive only because the snapshot re-carries them. See Streaming.

approve is never inferred

A body that omits approve on a schema_review or publish_review answer is a 400 approve_required — never a decline. See Gates. This is the limit most likely to bite a generated client, because many of them serialize an unset boolean as false.

There is no usage endpoint

Balance, spend and in-flight counts are not available on this API. Take them from your billing records.

There are no webhooks

Nothing calls you back, and no endpoint accepts a callback URL. See Noticing a gate for what to do instead.

Revocation is not instant

Revoking a key takes effect within 60 seconds rather than immediately, fleet-wide. Treat those 60 seconds as the exposure window for a leaked key.

Request ceilings

LimitValue
query length4000 runes
Message text length2000 runes
Cancel reason length1000 runes
Request body size1 MiB (413 above it)
page_size on /v1/buildsat most 100, refused above it