Skip to main content
The Percify API answers errors with a standard HTTP status and a short message that says what went wrong, such as 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:
Rate limit errors (429) return the message as a plain JSON string instead:
Handle both: if the parsed body is a string, it is the message; otherwise read 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

  1. Retry 429, 500 and 503 with exponential backoff, starting around 5 seconds and waiting about 60 seconds after a 429.
  2. Do not retry 400, 401, 403 or 404 unchanged.
  3. Send the same Idempotency-Key on every retry of POST /v1/run, so a request that did start is returned instead of charged twice.
  4. Poll with GET /v1/generations/{id}?wait=45 instead of many short polls, to stay under 60 requests a minute.

When to contact support

Email support@percify.io if you get 403 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.

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.
Last modified on September 16, 2026