# Rate limits

Source: https://finchreach.com/docs/rate-limits

Three layers of limits apply: per client IP, per API key (or OAuth grant), and per LinkedIn account. A refusal is HTTP 429 with code `rate_limited` and a `retryAt` time; the API also sends `Retry-After`.

## Per IP

| Requests | Burst | Sustained |
| --- | --- | --- |
| All API and MCP requests | 120 | 300 per minute |
| OAuth endpoints (`/register`, `/authorize`, `/token`) | 10 | 20 per minute |

## Per API key

Counted per API key (per OAuth grant for MCP clients), shared between the MCP server and the REST API.

| Limit | Default |
| --- | --- |
| Requests and tool calls | 120 per minute |
| Writes submitted or queued | 20 per hour |
| Writes submitted or queued | 200 per UTC day |

Running an approved action does not count again: it was counted when proposed.

## Per LinkedIn account

Each LinkedIn account has a daily budget per kind of action and a minimum gap between two actions of a kind, plus random jitter, so it never acts on a fixed cadence. The defaults stay well below what LinkedIn tolerates for a real member.

| Kind | Per day | Minimum gap | Plus random jitter up to |
| --- | --- | --- | --- |
| `invitation` | 20 | 3 min | 4 min |
| `invitation_accept` | 25 | 1 min | 2 min |
| `dm` | 40 | 1 min | 2 min |
| `post` | 3 | 30 min | 20 min |
| `comment` | 30 | 1 min | 2 min |
| `reaction` | 80 | 20 s | 40 s |
| `read` | 600 | 2 s | 3 s |
| `profile_view` | 80 | 20 s | 40 s |
| `health` | 24 | 1 min | 30 s |

> If LinkedIn pushes back (a checkpoint or repeated errors), a safety breaker pauses the account and calls fail with `account_paused` until it resumes.

## Related

- [Errors](https://finchreach.com/docs/errors)
- [Approvals](https://finchreach.com/docs/approvals)
