Missing required field: audio or Not enough credits. Each API key can make 60 requests a minute, each account can start 60 generations a minute, and a key can also have a monthly credit cap. Requests refused for any of these reasons are not charged.
Error body
Most errors return a JSON object:429) return the message as a plain JSON string instead:
message.
Status codes
Check
response.ok (any 2xx) rather than one exact success code.
Common error messages
A generation can also start fine and fail later. Then
GET /v1/generations/{id} returns status: "failed" with the reason in error, for example Generation timed out, and the credits are refunded.
Rate limits
The limits use a rolling 60-second window. Responses do not include
Retry-After or rate limit headers, so after a 429 wait about a minute before sending more requests on that key or account. The public catalog endpoints (/v1/models, /v1/openapi.json, /v1/llms.txt) need no key and do not count toward a key’s limit.
Retry strategy
- Retry
429,500and503with exponential backoff, starting around 5 seconds and waiting about 60 seconds after a429. - Do not retry
400,401,403or404unchanged. - Send the same
Idempotency-Keyon every retry ofPOST /v1/run, so a request that did start is returned instead of charged twice. - Poll with
GET /v1/generations/{id}?wait=45instead of many short polls, to stay under 60 requests a minute.
When to contact support
Email support@percify.io if you get403 Your account has been suspended., if 500 errors continue after retries, or if a failed generation’s credits did not come back. Include the generation id and the time of the request.
Related
Authentication
Fix 401 errors and manage keys.
Async jobs and polling
Statuses, timeouts and refunds.
Credits and usage
Balance, spend and key caps.
Code examples
Error handling in Node.js and Python.