All errors follow this format:
"message": "Human-readable description",
"type": "error_category",
"code": "machine_readable_code"
| Code | HTTP | Meaning | Solution |
|---|
invalid_api_key | 401 | Key is missing, wrong, or revoked | Verify your API key |
insufficient_balance | 402 | Not enough credit | Top up in Wallet |
token_expired | 401 | Key has expired | Create a new key |
token_disabled | 403 | Key has been disabled | Re-enable in dashboard |
| Code | HTTP | Meaning | Solution |
|---|
invalid_model | 400 | Unknown model ID | Check Models |
invalid_duration | 400 | Duration out of range | Check model’s allowed range |
invalid_resolution | 400 | Resolution not supported | Check model’s supported resolutions |
invalid_ratio | 400 | Aspect ratio not supported | Use one of the valid ratios |
invalid_media | 400 | Media URL invalid or unreachable | Verify URL is public HTTPS |
invalid_prompt | 400 | Prompt missing or empty | Provide a prompt |
content_policy | 400 | Content violates policy | Rephrase your prompt |
rate_limit_exceeded | 429 | Too many requests | Wait and retry |
model_price_error | 400 | Model pricing not configured | Contact support |
These appear in the polling response when status: "failed":
| Code | Meaning | Solution |
|---|
generation_failed | Model failed to generate | Check message; often content-related |
timeout | Task exceeded time limit | Check if result exists; don’t resubmit |
upstream_error | Upstream service issue | Wait and retry |
media_download_failed | Reference media couldn’t be downloaded | Verify URL accessibility |
| Header | Description |
|---|
X-RateLimit-Limit | Maximum requests per window |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |