Other

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 account on a per-minute and per-day basis. Every plan has API access; limits vary by plan:

PlanRequests / MinuteRequests / Day
Free10500
Pro6010,000
Advanced12050,000
Team300200,000
Enterprise6001,000,000

Daily windows reset at midnight UTC.

Creation Limits

Independent of request rates, new links and QR codes are capped per day. This pool is shared with your dashboard — creations from the U2L app and the API count against the same daily allowance:

PlanNew Links & QR Codes / Day
Free50
Pro500
Advanced5,000
Team5,000
Enterprise10,000

Plans with unlimited links are subject to these fair-use velocity limits; total storage is not capped.

Rate Limit Headers

Every API response includes headers to help you track your rate limit usage:

HeaderDescription
X-RateLimit-LimitMaximum requests per minute for your plan
X-RateLimit-RemainingRemaining requests in the current minute window
X-RateLimit-ResetUnix timestamp (seconds) when the rate limit resets
X-RateLimit-Daily-LimitMaximum requests per day for your plan
X-RateLimit-Daily-RemainingRemaining requests in the current UTC day

Example response headers

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 54
X-RateLimit-Reset: 1707600060
X-RateLimit-Daily-Limit: 10000
X-RateLimit-Daily-Remaining: 9946

Rate Limit Exceeded

When you exceed a limit, the API returns a 429 Too Many Requests response with a Retry-After header and a machine-readable code — rate_limit_exceeded (minute window), daily_limit_exceeded (day window), or creation_limit_exceeded (daily creation cap):

{
  "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": {
    "code": "error_code",
    "message": "Human-readable error message"
  }
}

Validation errors may include a details object with per-field error messages:

{
  "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

StatusCodeDescription
400bad_requestInvalid or missing request parameters
401unauthorizedMissing or invalid API key
403forbiddenFeature not available on your plan
404not_foundResource not found
409conflictResource already exists (e.g., slug taken)
422validation_errorRequest body validation failed
429rate_limit_exceededToo many requests this minute
429daily_limit_exceededDaily request limit reached
429creation_limit_exceededDaily link/QR creation limit reached
500internal_errorUnexpected server error