Errors & limits
Every error is JSON with a stable machine-readable code — switch on the code, not the message. Rate limits are per account, not per key.
The error envelope
{
"error": {
"code": "insufficient_credits",
"message": "This render costs 200 credits; balance is 40."
},
"needed": 200,
"balance": 40
}Some codes carry extra top-level fields alongside the envelope, like needed / balance above or retryAfterSeconds on rate limits.
Status codes
| Field | Type | Description |
|---|---|---|
401 unauthorized | — | Missing, malformed, or revoked API key. |
402 insufficient_credits | — | Not enough render credits; includes needed and balance. |
403 plan_required | — | The key's account is on the free plan, or the requested model/resolution sits behind a higher tier. |
404 not_found | — | No render with that id on this account. |
422 invalid_request | — | Validation failure; the message names the field. |
429 rate_limited | — | Too many requests — respect the Retry-After header. |
Rate limits
- Renders: 10/min per account
- Status polls: 60/min per account
- Uploads: 20/min per account
- Account checks: 60/min per account
Limits are per account, not per key — multiple keys share the same budget. If you need more, contact support@janusly.com.