Errors and limits
Handle authentication, validation, locale, filter, cursor, and Preview failures.
Branch on HTTP status, never message text. Delivery REST errors use a small JSON envelope:
{ "error": "Unknown type: missing" }
Error map
| Condition | HTTP status |
|---|---|
| Missing or invalid delivery key | 401 |
| Invalid, expired, or revoked Preview Bearer | 401 |
| Missing or disallowed Backend scope | 403 |
| Disabled, failed, or unverified Preview target | 403 |
| Invalid Preview context | 403 |
| Delivery key plus Preview Bearer | 400 |
| Unknown locale | 400 |
| Invalid filter, sort, or cursor | 400 |
| Preview locale outside authorization | 404 |
| Unknown REST type, Vocabulary, or ID | 404 |
| Published materialization temporarily unavailable | 503 |
Preview exchange has its own { "error": { "code", "message" } } envelope. Malformed input is 400; invalid, replayed, expired, or revoked codes are 401; disabled targets and invalid context are 403.
Verified ceilings
| Constraint | Value |
|---|---|
| Default page size | 25 |
| Page-size cap | 100 |
| Unique IDs per batch | 100 |
| Content sort plans | 3 |
| Filter predicates | 32 |
| Filter depth | 6 |
OR breadth |
16 |
| Relation hops in filters | 3 |
| Component depth in filters | 5 |
Jetrepo does not publish a Delivery API rate limit, response-size limit, cursor lifetime, SLA, or capacity guarantee. Operators must size and monitor their own deployment.