Skip to main content
To maintain high availability and consistent performance for all users, the Nomiq API enforces per-minute request limits at the workspace level. Rate limits are shared across all API keys within a single workspace — if you have multiple keys active under one workspace, their combined usage counts toward the same quota. When you exceed a limit, the API returns an HTTP 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 a 429, 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 a 429 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
This pattern handles both 429 Too Many Requests and transient 5xx server errors with a single retry loop. The key behaviors are:
  • Only 429 and 5xx responses trigger a retry. A 400, 401, 403, or 404 is thrown immediately because retrying it will never succeed.
  • The Retry-After header is honored exactly for 429 responses so you do not wait longer than necessary.
  • Jitter prevents synchronized retry storms when many workers are running concurrently.
The most effective way to reduce generation rate limit pressure is to use webhooks instead of polling. There is no status-polling endpoint — when you register a webhook URL on your project, Nomiq pushes the completed generation payload to your server the moment it is ready. A single webhook delivery costs zero additional requests against your quota. See the Webhooks guide to set one up.

Proactive Throttling

Rather than waiting to hit a 429, 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.