Rate Limits & Errors
The U2L API enforces rate limits per plan and returns consistent error responses across all endpoints.
Rate Limits
Rate limits are applied per API key on a per-minute basis. Limits vary by plan:
| Plan | Requests / Minute | Requests / Day |
|---|---|---|
| Pro | 60 | 10,000 |
| Advanced | 120 | 50,000 |
| Team | 300 | 200,000 |
| Enterprise | 600 | 1,000,000 |
Rate Limit Headers
Every API response includes headers to help you track your rate limit usage:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute for your plan |
| X-RateLimit-Remaining | Remaining requests in the current minute window |
| X-RateLimit-Reset | Unix timestamp (seconds) when the rate limit resets |
Example response headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 54
X-RateLimit-Reset: 1707600060
Rate Limit Exceeded
When you exceed the rate limit, the API returns a 429 Too Many Requests response with a retryAfter value indicating how many seconds to wait:
429 Too Many Requests
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 45 seconds.",
"retryAfter": 45
}
}Error Response Format
All errors follow a consistent format with a machine-readable code and a human-readable message:
Error format
{
"error": {
"code": "error_code",
"message": "Human-readable error message"
}
}Validation errors may include a details object with per-field error messages:
422 Validation Error
{
"error": {
"code": "validation_error",
"message": "Invalid request body",
"details": {
"url": "Must be a valid URL",
"tags": "Tags feature requires Pro plan or higher"
}
}
}Error Codes
| Status | Code | Description |
|---|---|---|
| 400 | bad_request | Invalid or missing request parameters |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | Feature not available on your plan |
| 404 | not_found | Resource not found |
| 409 | conflict | Resource already exists (e.g., slug taken) |
| 422 | validation_error | Request body validation failed |
| 429 | rate_limit_exceeded | Too many requests |
| 500 | internal_error | Unexpected server error |