Limits
Every size and count limit in one place — request body, state and token budget, decision schema, destinations and deliveries, identifiers, workspace, team and sign-in limits.
API requests
| Limit | Value | When exceeded |
|---|---|---|
| Request body | 128 KB | 413 PAYLOAD_TOO_LARGE — "Request body is too large." |
| State, serialized | 128 KB and about 32,000 tokens (characters ÷ 4, so about 128,000 characters of JSON) | 422 INVALID_STATE — "Field state is too large (…)" |
| Token budget per call | about 32,000 tokens for the state plus the longest question, 64,000 for the state plus all questions | 422 INVALID_STATE — "The state plus … is too large …" |
| Items in a list state | 1 to 500 | 422 INVALID_STATE — "Field state has too many items (…)" |
| Requests per minute | 60 / 300 / 2,000 / 10,000 by plan, per workspace — decisions and reads (GET /v1/decisions, /v1/me, /v1/executions) counted separately | 429 RATE_LIMITED — see Rate limits |
| Included volume | 1M a month on Genesis, more on paid plans; past it, decisions are paid with prepaid credits, up to the optional spend cap per billing cycle | 402 CREDITS_EXHAUSTED without credits, 402 SPEND_CAP_REACHED at the spend cap — 402 QUOTA_EXCEEDED on a plan with a hard cap. See Plans |
| Engine deadline | the decision's timeoutMs: 5,000 ms by default, 500 to 30,000, retries included | 504 ENGINE_TIMEOUT |
GET /v1/executions page size | 1 to 100, default 20 | 400 INVALID_REQUEST |
Idempotency-Key | 1–128 characters from A–Z a–z 0–9 . _ : - | 400 INVALID_REQUEST |
X-Request-ID | 1–128 characters from the same set | Replaced by a generated req_… ID (no error) |
| Idempotent replays | 24 hours | Treated as a new request |
Tokens are estimated as characters ÷ 4 of the serialized JSON. The token budget is Jev's: the questions count with their instructions, options, levels and criteria.
Decision schema
| Item | Limit |
|---|---|
| Questions per decision | 1 to 64 |
| Policy rules per decision | up to 50 |
| Extra AND conditions per rule | up to 5 |
| Composites per decision | up to 20 |
| Terms per composite | 1 to 20 |
| Composite term weight | −100 to 100, not 0 |
| State fields (object state) | up to 50 |
| Items in a list state | 1 to 500 |
| Options per choice question | 2 to 254, plus other |
| Levels per score question | 2 to 10 |
| Instructions | 1 to 8,000 characters |
context | up to 8,000 characters |
| Option description, score level, probability criterion | up to 2,000 characters |
| State field description | up to 255 characters |
Policy string value, structured level label | up to 255 characters |
| Composite description | up to 500 characters |
| Keys (fields, questions, composites, option values) | snake_case, up to 48 characters |
minConfidence | 0 to 1 |
timeoutMs | 500 to 30,000 |
Instructions, option descriptions, score levels and criteria can be text or JSON; JSON is measured on its serialized length. See Decision schema.
Decisions
| Item | Limit |
|---|---|
| Name | 1 to 80 characters |
| Description | up to 500 characters |
| Slug | up to 64 characters: lowercase letters, digits and single dashes; locked after the first deploy |
| Decisions per workspace | Genesis 2, Developer 10, Growth and Enterprise unlimited (402 PLAN_LIMIT_REACHED) |
Workspace
| Item | Limit |
|---|---|
| Active API keys | 50 per workspace (409 CONFLICT — revoke an unused key first) |
| API key name | 1 to 80 characters |
| Provider (BYOK) key | 8 to 512 characters |
| Execution log retention | Genesis 7, Developer 14, Growth 30, Enterprise 365 days — or less, per workspace setting |
| Playground | 30 runs per minute and 2,000 per day |
| Sign-in codes | 6 digits, valid 10 minutes, 5 attempts, 3 codes per e-mail every 10 minutes and 10 per day |
| Password sign-in | 5 wrong attempts per e-mail, then a 15-minute wait |
| Password | 10 to 128 characters, letters and numbers |
Team
| Item | Limit |
|---|---|
| Workspaces you own | 10 (409 CONFLICT) |
| Invitations | valid 7 days; 30 per hour per workspace and per person (429 RATE_LIMITED) |
| Pending invitations | 50 per workspace (409 CONFLICT) |
Destinations
| Limit | Value |
|---|---|
| Destinations per decision | 20 |
| Destinations that fire per execution | 10 |
LLM answers and sync agents per execution | 3 |
| Conditions per destination | 5 |
| Params per destination | 30 |
| Fixed param value | up to 500 characters |
| Headers per destination | 20 |
| Header value | up to 2,048 characters |
| URL | up to 2,048 characters |
http body template | up to 10,000 characters |
| Destination description | up to 2,000 characters |
| Reply text | up to 4,000 characters |
| Reply buttons | up to 10, up to 80 characters each |
| LLM prompt, LLM input, agent instructions | up to 8,000 characters each |
| Agent tools | up to 50 |
LLM and sync agent timeout | 1,000 to 25,000 ms, default 20,000 |
LLM maxTokens | 16 to 2,048, default 512 |
LLM temperature | 0 to 2, default 0.3 |
Agent answer returned in response | up to 16,000 characters |
| Delivery attempts | 6, over about 7 hours |
| Delivery attempt timeout | 10 seconds |
| Deliveries per workspace | 600 per minute |
| Delivery retention | 30 days |
| Workspace secrets | 50, values up to 4,096 characters |
Beyond these, a destination that matches is skipped with "reason": "limit", and an invalid destination makes the schema invalid (422 INVALID_SCHEMA). See Destination security and limits.
Idempotency
Retry safely with the Idempotency-Key header — keys reserved before the run, replays of successful calls for 24 hours, the Idempotent-Replayed header and IDEMPOTENCY_CONFLICT.
SDKs overview
The official TypeScript and Python SDKs — what they add over plain HTTPS, how they compare, and how to build them from source until they are published on npm and PyPI.