Reference
Limits
Every size limit of a decide request, the error each one returns, and the model limits from the models endpoint.
This page lists every size limit of a decide request and the error you get when you pass it. Rate limits are on their own page: Rate limits.
Request size limits
| Limit | Value | Error |
|---|---|---|
| Request body | 256 KiB | 413 body_too_large |
| State tokens, after rendering | 16,384 | 413 state_too_long |
| Tokens per rendered question | 4,096 | 413 question_too_long |
| Billable tokens per request | 16,384 | 413 request_too_long |
| Billable tokens of all questions together | 4,096 | 413 request_too_long, with param questions |
| Questions per request | 32 (at least 1) | 422 too_many_questions |
| Options per pick | 255 (at least 1) | 422 too_many_options |
| Levels per rate | 2 to 10 | 422 invalid_levels |
Token limits are counted after rendering and tokenizing, with the tokenizer of the requested model family. They match the billed counts exactly: state_tokens, the tokens of each question, and input_tokens for the whole request.
On 26 September 2026 the request limits went down from 32,768 billable tokens (with no limit on the questions together) to the values above, so that every allowed request is answered on the GPU in time. The slowest request they allow, a 12,288-token state with one 4,096-token question, takes about 3 seconds on the GPU. Questions cost more per token than the state, because the model reads all of them in one pass that attends to the whole state.
State
| Limit | Value |
|---|---|
| A string state | 1 to 65,536 characters, not only whitespace |
| A JSON object state | At least 1 field |
| JSON nesting | At most 32 levels deep |
| JSON keys | 1 to 256 characters each |
| A JSON array state | At least 1 item |
A state that breaks one of these gives 422 invalid_value; a state of the wrong JSON type, such as a number, gives 422 invalid_type. A key repeated inside the same JSON object gives 400 duplicate_key. See State.
Questions
| Field | Limit | Error |
|---|---|---|
| Question id | Matches ^[A-Za-z][A-Za-z0-9_-]{0,63}$ |
422 invalid_question_id |
instructions |
1 to 4,000 characters, not only whitespace | 422 invalid_value |
criteria as a string |
1 to 4,000 characters, not only whitespace | 422 invalid_value |
criteria as a list |
1 to 20 strings, each 1 to 500 characters and not only whitespace | 422 invalid_value |
| Pick option label | 1 to 100 characters, no leading or trailing whitespace | 422 invalid_value |
| Pick option labels | Unique: a label repeated character for character gives 400 duplicate_key; labels equal only after Unicode NFC normalization or ignoring case (Billing and billing) give 422 duplicate_label |
400 duplicate_key, 422 duplicate_label |
| Pick option description | null, or 1 to 1,000 characters, not only whitespace |
422 invalid_value |
| Rate level | 1 to 200 characters, no leading or trailing whitespace | 422 invalid_value |
| Rate levels | 2 to 10 strings, unique after Unicode NFC normalization and ignoring case | 422 invalid_levels |
min_confidence |
0 to 1 | 422 invalid_min_confidence |
Where the table shows only the type validation, the error code names the rule that failed, and param names the field.
Headers
| Header | Limit | Error |
|---|---|---|
idempotency-key |
1 to 255 printable ASCII characters, without spaces | 400 invalid_header |
x-client-request-id |
1 to 128 printable ASCII characters, without spaces | 400 invalid_header |
Model limits
Each model version reports its limits in GET /v1/models. The values below are the ones in the contract. Read them from the endpoint rather than hard-coding them: limits may change within v1, as they did on 26 September 2026. The limit on all questions together (4,096 tokens) is not in the endpoint yet.
| Field | Value | Meaning |
|---|---|---|
max_state_tokens |
16384 | State tokens after rendering. |
max_question_tokens |
4096 | Tokens per rendered question. |
max_total_tokens |
16384 | Billable tokens per request. |
max_questions |
32 | Questions per request. |
max_options |
255 | Options per pick. |
max_levels |
10 | Levels per rate. |
exact_option_probabilities |
255 on GPU versions, 20 on fallback versions | How many options of a pick get exact probabilities. See Fallback and served_by. |
Other limits
| Limit | Value |
|---|---|
GET /v1/usage range |
Up to 93 days by day, up to 7 days by hour |
| Top-up amount | EUR 10 to EUR 2,500 per top-up |
| Top-ups in an account's first 30 days | EUR 500 in total (422 top_up_limit_exceeded) |
| Opt-in content logging | 1 to 30 days of retention |
| API key name | 1 to 64 characters |