missing_api_key | No Authorization header | Add Bearer token |
invalid_api_key | Unknown or revoked key | Create a new key |
expired_api_key | Key has passed its expiry | Rotate |
model_not_found | Slug doesn’t exist | GET /v1/models to list available |
model_not_supported | Plan doesn’t include this model | Upgrade or pick another |
file_too_large | Exceeds plan or provider limit | Upload smaller |
file_count_quota_exceeded | Too many stored files on plan | Delete old ones or upgrade |
storage_quota_exceeded | Storage bytes cap | Same |
unsupported_file_type | MIME not allowed | Check supported list |
mime_mismatch | File content doesn’t match declared MIME | Usually an upload bug in client |
file_not_found | file_id doesn’t exist in workspace | Check id, ensure same workspace |
captcha_required / captcha_failed | Contact form protection | Complete Turnstile challenge |
rate_limit_exceeded | 429 | Back off, retry with jitter |
insufficient_credits | Balance too low | Top up or wait for monthly renewal |
audio_not_supported_by_model | e.g. Claude + audio | Transcribe first |