Skip to content

Limits and retries

Check active plan and usage limits through the account or GET /v1/billing/limits. Plan allowances, AI usage, storage and request rates are different constraints.

LimitValueSet by
AI requests per wallet600 a minute, 32 at onceExepad
AI requests per app or target300 a minute, 16 at onceExepad
Reading scanned pages (OCR) per wallet60 calls a minute, 6 at onceExepad
Reading scanned pages (OCR), all apps together60 calls a minute, 6 at once; a refusal answers 429 ocr_rate_limitedExepad
AI a build session uses to check its preview20 requests and $0.25 of provider cost, for 1 hourExepad
In-app AI across all wallets$5,000 of provider cost a monthExepad
Builds running at once2 per account, on every planExepad
AI provider rate and capacity limitsSet by each provider and applied before oursThe provider

Exepad can change the limits it sets, and this table changes with them. A provider’s own limits apply before ours and can change without notice. The shared limits are capacity every app draws on, so a request can be refused for reasons outside one wallet.

Read the HTTP status and the response body. For a 429 response, wait for the Retry-After header when it is supplied, then retry with bounded exponential backoff and jitter. A 402 means the wallet or a plan limit refused the work, and retrying will not help until credit, funds or the plan change. A 403 permission error or a missing route needs a different correction.

Set a maximum retry count and a deadline in your client. Keep read polling infrequent enough for the task. Before retrying a mutation, establish whether the original operation succeeded and whether that endpoint supports the idempotency behavior you need.

Errors · Usage