Limits
Rate limits, your queue, the daily cap and file sizes.
| Limit | Value |
|---|---|
| New generations | 60 a minute per key |
| Other requests | 300 a minute per key |
| Jobs running at the same time | 5 per account and environment |
| Jobs waiting in your queue | 500 per account and environment |
| Live jobs per day (the daily cap) | 300 per account (test keys: 1,000), reset at 00:00 UTC |
| Photo | 512 px or more on the short side, up to 100 megapixels |
Photo by image_url | Up to 20 MB |
| Request body | Up to 10 MB, about 7 MB of photo in image_base64 |
instruction | Up to 10,000 characters |
metadata | Up to 10 keys; keys and values up to 200 characters |
| Result link | Works for 24 hours |
| Result file | Kept for 30 days |
GET /v1/generations | The last 90 days |
Over a limit, you get 429 with a Retry-After header: wait that many seconds, then retry with the same Idempotency-Key and body. Your limits and today's usage are in GET /v1/account.
Over the daily cap, new jobs get 429 daily_limit_reached until 00:00 UTC; jobs you already created keep running. The cap limits what runaway code or a leaked key can use. Before a large import, such as every menu photo at launch, email hello@foodshot.ai with your expected volume: we can raise limits as your volume grows.
Many photos at once
- Jobs run 5 at a time per account. The rest wait in your queue and start in the order you sent them. Sending more requests in parallel doesn't make them faster.
- A batch of 50 photos runs in about 10 rounds of 5. At our objective of about 30-40 seconds per job, that is roughly 5 to 7 minutes.
Use webhooks for batches, or poll the list once every 5 to 10 seconds, with created_gte set to when the batch started:
GET /v1/generations?created_gte=2026-10-18T10:00:00Z&limit=100Polling each job separately reaches the limit of 300 requests a minute at about 25 open jobs.