429 Too Many Requests response and you must wait before retrying.
Rate Limits by Plan Tier
Rate limits differ between endpoint categories. Standard endpoints that read or write database records are lightweight and carry generous limits. Generation endpoints that trigger GPU-backed AI processing are more computationally expensive and are strictly limited to protect overall service quality.Generation Endpoints
Generation endpoints (for example,POST /v1/brands/generate) trigger the AI engine and require significant compute allocation. These are the limits most backend integrations need to account for when designing request queues or job schedulers.
Standard Endpoints
Standard endpoints (for example,GET /v1/projects, GET /v1/brands, PATCH /v1/projects/{id}) are read/write operations against the Nomiq database and carry much higher limits.
Rate Limit Response Headers
Every API response — whether successful or not — includes three rate limit headers. Reading these headers in your application lets you implement proactive throttling before you hit a429, rather than reacting to one after the fact.
When a
429 is returned, the response also includes a Retry-After header:
A
429 response looks like this:
Handling 429 Errors with Exponential Backoff
The correct response to a429 is to pause and retry — not to retry immediately. Immediate retries during a rate limit window will all fail, wasting requests and potentially triggering secondary limits. Use exponential backoff with jitter: double your wait time on each successive failure, and add a small random delay to prevent a “thundering herd” of clients all retrying at the same instant.
The following implementation reads the Retry-After header when present (for 429 responses) and falls back to exponential backoff for 500 errors:
Node.js
429 Too Many Requests and transient 5xx server errors with a single retry loop. The key behaviors are:
- Only
429and5xxresponses trigger a retry. A400,401,403, or404is thrown immediately because retrying it will never succeed. - The
Retry-Afterheader is honored exactly for429responses so you do not wait longer than necessary. - Jitter prevents synchronized retry storms when many workers are running concurrently.
Proactive Throttling
Rather than waiting to hit a429, you can read X-RateLimit-Remaining after each successful response and slow down your request queue proactively. If X-RateLimit-Remaining drops below a configurable threshold (for example, 10% of your X-RateLimit-Limit), introduce a brief pause before the next request. This technique is especially useful in batch processing jobs that iterate over large lists of projects.
Node.js
Next Steps
Errors
Review the full error response format and the complete list of HTTP status codes returned by the Nomiq API.
Generation API
Learn how to trigger brand generation requests and receive completed assets via webhook.