API Documentation
Rate Limiting & Quotas
To guarantee high availability and prevent platform degradation, all v2 API endpoints enforce both per-minute burst limits and monthly resource quotas based on your account tier.
Limits by Plan
| Plan | Per-Minute Rate Limit | Monthly API Calls | Monthly Links Created | Monthly QR Codes |
|---|---|---|---|---|
| FREE | 60 / min | 2,000 | 35 | 35 |
| HOBBY | 300 / min | 25,000 | 350 | 350 |
| INDIE | 1,000 / min | 150,000 | 1,800 | 1,800 |
| PRO | 5,000 / min | 500,000 | 3,000 | 3,000 |
Response Telemetry Headers
Every API response includes real-time telemetry headers so your application can monitor remaining quotas without spending API calls:
| Header | Example | Description |
|---|---|---|
| x-plan | FREE | The active billing plan associated with the API key owner. |
| x-ratelimit-limit | 60 | Maximum allowed requests in the current 60-second sliding window. |
| x-ratelimit-remaining | 59 | Number of requests remaining in the current 60-second window. |
| x-ratelimit-reset | 1790689080 | Unix epoch timestamp when the 60-second rate limit window resets. |
| x-usage-apicalls-used | 1 | Cumulative API calls used in the current calendar month. |
| x-usage-apicalls-limit | 2000 | Total monthly API call allowance on your plan. |
| x-usage-apicalls-remaining | 1999 | Remaining API calls available until monthly quota resets. |
| x-usage-reset | 2026-10-01T00:00:00.000Z | ISO timestamp for when monthly resource quotas refresh (00:00 UTC on the 1st). |
| x-api-key-name | prod | The human-readable label assigned to the authenticated API key. |
Rate Limit Exceeded (429 Too Many Requests)
If your application exceeds its per-minute burst rate, the API returns HTTP 429:
json
{
"statusCode": 429,
"message": "Rate limit exceeded. Try again in the next minute."
}If your monthly quota (links, QR codes, or API calls) has been exhausted, the API returns a structured quota rejection:
json
{
"statusCode": 429,
"message": "Monthly API call limit reached.",
"error": "Too Many Requests"
}Best Practice: Inspect the
x-ratelimit-remaining header on each response. If it drops to zero, pause outgoing requests until x-ratelimit-reset or implement exponential backoff with jitter.