Rate Limits
Rate limits use a sliding 1-hour window per API key.
Limits by tier
Section titled “Limits by tier”| Tier | Requests/hour |
|---|---|
| Free | 50 |
| Basic ($19/mo) | 500 |
| Growth ($49/mo) | 5,000 |
| Pro ($99/mo) | 25,000 |
| Business ($249/mo) | 100,000 |
Response headers
Section titled “Response headers”Responses from rate-limited routes include:
| Header | Description |
|---|---|
X-RateLimit-Limit | Your hourly budget |
X-RateLimit-Remaining | Requests left in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Handling 429 responses
Section titled “Handling 429 responses”When rate limited, you get 429 Too Many Requests with a Retry-After header (in seconds). Wait that long before retrying.
{ "success": false, "error": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded. Try again in 60 seconds."}- Watch
X-RateLimit-Remainingto throttle proactively - Use
POST /links/bulkinstead of individual create calls - Cache analytics responses on your side
Rate-limit-exempt endpoints
Section titled “Rate-limit-exempt endpoints”Journey event ingestion (POST /journey/events, relative to the base URL) is exempt from the hourly API rate limit, and its responses do not carry X-RateLimit-* headers. It is separately volume-capped per month: past 150% of your monthly journey event limit, ingestion returns 429 with error code JOURNEY_LIMIT_EXCEEDED. See Journey Tracking.