Errors and limits
Tinyping error codes and how to fix them, plus rate limits, monthly limits and what happens when you reach one.
A failed request returns a JSON body with an error message and a stable code. Check the code, not the message.
Error codes
| Status | Code | Fix |
|---|---|---|
| 400 | invalid_json | Send valid JSON, or send form fields with curl -d. |
| 401 | missing_token | Add the header Authorization: Bearer followed by your token. |
| 401 | invalid_token | Check that you copied the whole token, or create a new one. |
| 401 | token_revoked | Create a new token on the project page and deploy it. |
| 404 | project_not_found | The token's project was deleted. Create a new project. |
| 413 | payload_too_large | Send less text. The limit is 16,384 bytes. |
| 422 | validation_failed | Fix the fields listed in issues, then send again. |
| 429 | rate_limited | Wait the seconds in Retry-After, then try again. |
| 429 | monthly_limit_reached | Wait for resetsAt, or upgrade your plan. |
Rate limits
Each token can send up to 60 events every 60 seconds. Each IP address can send up to 1,000 requests every 60 seconds. After that, requests fail with 429 and rate_limited.
The Retry-After header and the retryAfter field tell you how many seconds to wait. Send fewer events, or group several into one.
Monthly limits
Your whole workspace shares one monthly count across all projects. The count starts over at the beginning of each month, in UTC.
| Plan | Events per month | History |
|---|---|---|
| Free | 1,000 | 7 days |
| Pro | 50,000 | 1 year |
When you hit a limit
New events are turned away with 429 and monthly_limit_reached. The response has limit (your plan allowance) and resetsAt (when the count restarts).
Events already in your inbox stay there. Upgrade to Pro to raise the limit right away. See Billing.
Events older than your plan history are removed from your account.
Your app should treat a failed alert as normal. Catch the error and keep going.
