Getting Started
Rate Limits & Errors
Every key has a daily request cap, bucketed per UTC day and enforced before any other work happens on the request.
Daily request cap
New keys default to 500 requests/day. This counts every call — catalog reads, uploads, generations, and status polls all count against the same number. Need a higher cap for a production integration? Ask via Support.
429 · cap reached
{ "success": false, "error": "Daily request cap (500) reached for this key." }Polling budget
Polling GET /v1/generations/:id counts toward your daily cap like any other request.
Poll every 2–3 seconds, not tighter — most jobs finish in 10–60 seconds, so even a
slow-finishing job costs well under 30 requests.
Error status codes
| Status | Meaning | Where it comes from |
|---|---|---|
| 400 | Bad request — unknown toolId, or a required image field is missing/unresolvable. | Any endpoint |
| 401 | Missing, malformed, invalid, or revoked API key. | Every endpoint — see Authentication |
| 402 | Insufficient diamonds for this tool's price. | POST /v1/generations |
| 404 | Generation not found — either it doesn't exist, or it belongs to a different account. | GET /v1/generations/:id |
| 413 | Upload larger than 8 MB. | POST /v1/uploads |
| 415 | Upload isn't a JPEG, PNG or WebP. | POST /v1/uploads |
| 429 | Daily request cap reached for this key. | Every endpoint |
| 500 | Generation failed to start — diamonds are auto-refunded. | POST /v1/generations |
Every error response has the same shape:
{ "success": false, "error": "human-readable message" }