> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Limits

Hard and soft limits across plans, regions, and the API.

# Limits

## Per-plan resource limits

See [Pricing](/reference/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:

```
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1734567890
Retry-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 |