Limits
| Limit | Value | Over the limit |
|---|---|---|
| Request body | 25 MB | 413 payload_too_large. The SDK checks before uploading |
| Pictures per request | 16, video frames included | InvalidRequest naming the limit |
| Frames kept per video | 16, spread evenly | Extra frames are dropped evenly |
Frames sampled by video_file() |
32 at most (SDK) | Sampling stops |
Options in a Choice |
2 to 256 | InvalidRequest |
Fill max_tokens |
1 to 256 (default 16) | InvalidRequest |
Extract max_tokens |
1 to 512 (default 64) | InvalidRequest |
| API keys per account | 10 active | Revoke one in the console first |
| Request timeout (SDK) | 120 s by default | SimoTimeout; raise timeout for large media |
Rate limits
When the service is busy it answers 429. The SDK retries 429, 502, 503 and 504 automatically (3 extra attempts by default, honoring Retry-After), and none of those failures are charged. If you call the HTTP API directly, retry with backoff.
Making requests smaller
- Images are sent as PNG at their natural size. Crop to the region that matters rather than downscaling, so small text stays legible.
- For video, sample fewer frames per second: the model keeps 16 at most anyway.
- Ask all questions about one input in one request instead of re-sending it.