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

# Rate limiting

> How limits are enforced and how to back off.

The REST API enforces limits at three levels so one account can't starve
another and the platform stays within OnlyFans' tolerances.

| Level                 | What it limits                                                                |
| --------------------- | ----------------------------------------------------------------------------- |
| **Org**               | Sustained calls per minute and calls per month across the whole org.          |
| **Per-account read**  | Read calls per minute against a single connected account.                     |
| **Per-account write** | Write calls per minute against a single connected account (lower than reads). |
| **Connect attempts**  | New connect/login attempts per hour, per org.                                 |

Your exact limits depend on your plan. Read them live:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://api.onlyfanskit.dev/v1/me/usage \
  -H "Authorization: Bearer $OFK_KEY"
```

The response includes current usage plus each window's `limit`, `remaining`,
and `reset` (Unix seconds):

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "rateLimits": {
    "org": { "limit": 600, "remaining": 591, "reset": 1700000060 },
    "accountDefaults": { "readPerMinute": 60, "writePerMinute": 20, "reset": 1700000060 }
  }
}
```

## When you hit a limit

You receive a `429` with an RFC 9457 problem body and a `Retry-After` header:

```jsonc theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 429 Too Many Requests
content-type: application/problem+json
retry-after: 12

{
  "type": "https://onlyfanskit.dev/problems/quota-exceeded",
  "title": "Rate limit exceeded",
  "status": 429,
  "detail": "Org calls-per-minute limit reached.",
  "code": "quota-exceeded",
  "retryable": true,
  "retryAfterSec": 12,
  "reason": "org_rpm",
  "limit": 600,
  "current": 600
}
```

Branch on `retryable` and wait `retryAfterSec` before retrying. The `reason`
field tells you which limit you hit (`org_rpm`, `account_write_rpm`, …).

## Upstream rate limits

OnlyFans itself may rate-limit a busy account. When it does, the platform
relays it as a `429` problem with `code: "upstream/rate-limited"` and a
`retryAfterSec`. Treat it the same way — back off and retry.

<Tip>
  Spread bursty work (mass DMs, bulk fetches) over time and honor
  `retryAfterSec`. A steady call rate is both faster overall and safer for the
  connected account.
</Tip>
