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
| Limit | Value |
|---|---|
query length | 4000 runes |
| Message text length | 2000 runes |
| Cancel reason length | 1000 runes |
| Request body size | 1 MiB (413 above it) |
page_size on /v1/builds | at most 100, refused above it |