Skip to main content
The Userplane API enforces rate limits to ensure fair usage and platform stability.

Default limits

WindowLimit
Per minute120 requests
Per day10,000 requests

How limits are applied

Rate limits are applied per-user, shared across all API keys belonging to that user. If you have multiple API keys, they all count toward the same limits. Rate limits are not per-workspace. A single request to any endpoint consumes from the same quota regardless of which workspace is being accessed.

Handling rate limit errors

When you exceed the rate limit, the API returns a 429 status code:
{
  "error": "RATE_LIMITED",
  "message": "Rate limit exceeded. Wait and retry with exponential backoff. See https://docs.userplane.io/api/rate-limits"
}

Retry with backoff

Implement exponential backoff when you receive a 429 response:
async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status !== 429) return response;

    const delay = Math.pow(2, attempt) * 1000;
    await new Promise((resolve) => setTimeout(resolve, delay));

}

throw new Error("Rate limit exceeded after retries");
}

Rate limits are subject to change. Design your integration with retry logic from the start.

Error Handling

Full error code reference including rate limit errors

Best Practices

Build reliable integrations with retry logic

Authentication

API key authentication and scoping

Pagination

Efficiently paginate through large result sets