Limits
Hard and soft limits across plans, regions, and the API.
Limits
Per-plan resource limits
See Pricing for the full matrix.
Per-request limits
| Resource | Limit |
|---|---|
| Monitor URL length | 2048 chars |
| Monitor name | 200 chars |
| Custom headers | 25 per monitor, 8 KB total |
| Request body | 64 KB |
| Response assertion regex | 4 KB |
| Status page components | 100 per page |
| Status page subscribers | 10,000 per page |
| Incident updates | 100 per incident |
| Bulk monitor create | 50 per request |
| Bulk component create | 50 per request |
| API key scopes | 8 per key |
| Webhook payload | 256 KB |
Rate limits
Per-API-key, sliding 1-minute window:
| Plan | Reads/min | Writes/min |
|---|---|---|
| Free | 60 | 30 |
| Pro | 300 | 150 |
| Team | 1,000 | 500 |
| Enterprise | 5,000 | 2,500 |
Rate limit responses include:
textHTTP/1.1 429 Too Many RequestsX-RateLimit-Limit: 300X-RateLimit-Remaining: 0X-RateLimit-Reset: 1734567890Retry-After: 17
Public endpoints (status pages, badges, heartbeats, speed-test) have separate per-IP limits documented on each endpoint page.
Check timeouts
| Type | Default | Max |
|---|---|---|
| HTTP/keyword | 30s | 60s |
| TCP | 10s | 30s |
| DNS | 5s | 15s |
| Ping | 10s | 30s |
Heartbeats have no execution timeout — they're inbound. The grace period before alerting is configurable per monitor.
Retention
| Data | Free | Pro | Team |
|---|---|---|---|
| Raw check results | 7d | 30d | 90d |
| Hourly rollups | 30d | 1y | 2y |
| Daily rollups | 1y | 5y | Forever |
| Incident history | Forever | Forever | Forever |
| Failure screenshots | 30d | 30d | 90d |
| Alert log | 30d | 90d | 1y |
| Audit log | — | 30d | 1y |