Errors & limits
Stable error codes and rate-limit defaults.
JSON errors:
{
"error": "slug_taken",
"message": "That slug is taken"
} error | HTTP | When |
|---|---|---|
unauthorized | 401 | Missing or invalid OAuth access token |
insufficient_scope | 403 | Token missing a required scope |
upgrade_required | 403 | Plan too low (API and MCP are Growth+) |
slug_taken | 409 | Custom slug in use |
validation | 400 | Bad URL, expiry, CSV row |
not_found | 404 | Unknown link or webhook |
rate_limited | 429 | Burst exceeded |
payload_too_large | 413 | CSV over 5000 rows or body too big |
Rate limits
| Surface | Limit |
|---|---|
| Dashboard | Comfortable interactive use |
REST /v1 (Growth) | Generous; Retry-After on 429 |
REST /v1 (Premium) | Higher than Growth |
| MCP | Same class as the org’s REST tier |
message is human; error codes stay English.