Overview
The Nouvel API enforces rate limits to ensure fair usage and system stability. All API keys are subject to a 60 requests per minute limit, regardless of your plan tier.Rate limits are enforced at the infrastructure level by Unkey, our key management provider. This ensures consistent, reliable rate limiting across all API endpoints.
Rate Limit Details
Maximum number of requests allowed per minute per API key
Time window for rate limit calculations (sliding window)
Rate limits are applied per API key, not per user or organization
Rate Limit Headers
Every API response includes standard rate limit headers to help you track your usage:| Header | Description | Example |
|---|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window | 60 |
X-RateLimit-Remaining | Number of requests remaining in the current window | 42 |
X-RateLimit-Reset | Unix timestamp when the rate limit window resets | 1678901234 |
When You Exceed the Limit
When you exceed the rate limit, the API returns a 429 Too Many Requests status code:error: Error message indicating rate limit exceededreason: Human-readable explanationretryAfter: Seconds until you can retry (optional)
Retry-After header indicates how many seconds to wait before retrying.
Endpoint Resource Costs
While all endpoints share the same 60 requests/minute limit, they consume different amounts of system resources:Video Generation (POST /api/v1/generate)
High resource cost - Triggers AI models, video rendering, and long-running background jobs. Each generation uses significant compute resources.
Status Polling (GET /api/v1/jobs/:id)
Low resource cost - Simple database lookup. You can poll frequently within your rate limit.
Project Listing (GET /api/v1/projects)
Low resource cost - Database query with pagination. Efficient for monitoring multiple jobs.
Best Practices
1. Implement Exponential Backoff
When you receive a 429 error, implement exponential backoff to avoid repeatedly hitting the rate limit:2. Cache Responses
Avoid unnecessary API calls by caching responses that don’t change frequently:- Cache completed project data (projects in
completedorfailedstatus won’t change) - Store project metadata locally after the initial fetch
- Use ETags or Last-Modified headers when available (future enhancement)
3. Batch Operations
When checking status for multiple jobs, use the list endpoint instead of individual status checks:4. Smart Polling Intervals
Adjust your polling frequency based on the project status:- Generating status: Poll every 15-30 seconds
- Post-processing status: Poll every 10-15 seconds
- Completed/failed status: Stop polling (cache the result)
5. Monitor Rate Limit Headers
Track your rate limit usage to avoid hitting the limit:Webhook Delivery
Webhook deliveries do not count toward your rate limit. Webhooks are initiated by Nouvel’s servers, not your API key, and are not subject to the 60/minute restriction.
webhookUrl with your generation request, Nouvel will POST to your URL when the job reaches a terminal state. These outbound deliveries are separate from your rate-limited API calls. See the Webhooks guide for full details.

