Skip to main content

Overview

Nova API uses rate limiting to ensure fair usage and maintain service stability. Limits are applied per IP address and reset every minute.

Rate Limit Tiers

Endpoint TypeRequests per MinuteDescription
Normal1,000Standard endpoints (default)
Strict10Sensitive or resource-intensive endpoints
Most endpoints use the normal rate limit. Strict limits apply to specific endpoints documented in the API Reference.

Response Headers

Every API response includes rate limit information in the headers:
HeaderDescription
X-Rate-Limit-LimitMaximum requests allowed per minute
X-Rate-Limit-RemainingRequests remaining in the current window
X-Rate-Limit-ResetUnix timestamp (UTC) when the limit resets

Example Headers

X-Rate-Limit-Limit: 1000
X-Rate-Limit-Remaining: 742
X-Rate-Limit-Reset: 1737388800

Rate Limit Exceeded

When you exceed the rate limit, the API returns a 429 Too Many Requests response:
{
  "error": "Rate limit exceeded"
}
The response headers will show:
X-Rate-Limit-Limit: 1000
X-Rate-Limit-Remaining: 0
X-Rate-Limit-Reset: 1737388800

Handling Rate Limits

1

Monitor Headers

Check X-Rate-Limit-Remaining in responses to track your usage.
2

Implement Backoff

When you receive a 429 response, wait until the X-Rate-Limit-Reset timestamp before retrying.
3

Queue Requests

For bulk operations, implement a request queue to stay within limits.

Code Examples

Handling 429 Responses

import requests
import time

def make_request_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        
        if response.status_code == 429:
            reset_time = int(response.headers.get('X-Rate-Limit-Reset', 0))
            wait_seconds = max(reset_time - time.time(), 1)
            print(f"Rate limited. Waiting {wait_seconds:.0f} seconds...")
            time.sleep(wait_seconds)
            continue
            
        return response
    
    raise Exception("Max retries exceeded")

Monitoring Rate Limit Usage

async function fetchWithRateLimitInfo(url, options) {
  const response = await fetch(url, options);
  
  const rateLimit = {
    limit: response.headers.get('X-Rate-Limit-Limit'),
    remaining: response.headers.get('X-Rate-Limit-Remaining'),
    reset: response.headers.get('X-Rate-Limit-Reset'),
  };
  
  console.log(`Rate limit: ${rateLimit.remaining}/${rateLimit.limit} remaining`);
  
  if (rateLimit.remaining < 10) {
    console.warn('Approaching rate limit!');
  }
  
  return { response, rateLimit };
}

Best Practices

Cache Responses

Cache frequently accessed data to reduce API calls.

Batch Requests

Use bulk endpoints when available instead of multiple single requests.

Implement Retry Logic

Always handle 429 responses gracefully with exponential backoff.

Monitor Usage

Track your rate limit consumption to prevent unexpected throttling.
Need higher rate limits? Contact us to discuss enterprise options.