> For the complete documentation index, see [llms.txt](https://docs.luganodes.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.luganodes.com/rpc/rate-limits-and-errors.md).

# Rate limits and errors

Throughput limits, error codes and how to handle rejections

### Rate limits

Throughput is limited per organization: 25 requests per second on Free, 200 on Growth and 500 on Pro. Requests over the limit receive HTTP 429. Requests under it are unaffected. Two related limits can also stop traffic:

* An optional per app RPS cap, set in the app's security settings, rejects that app's excess requests with 429 before they touch the organization budget.
* On Free, reaching the monthly CU cap blocks all requests with HTTP 402 until the next cycle. Growth and Pro bill overage instead of blocking.

Each sub call in a batch counts toward the rate limit individually.

### Handling 429 responses

Treat 429 as a signal to slow down, not an outage. Retry with exponential backoff and jitter, smooth bursts on your side rather than sending spikes, and prefer batch requests over rapid sequential calls when fetching related data. If you hit the limit routinely, an upgrade raises it. Sustained 429s are visible as throttled requests on the [Statistics](/rpc/platform-guide/statistics-and-ai-insights.md) page.

### Error codes

Platform level rejections use HTTP status codes with a machine readable code in the response body:

| Code                    | HTTP | Meaning                                                           |
| ----------------------- | ---- | ----------------------------------------------------------------- |
| `plan_upgrade_required` | 402  | The method, alert type or feature needs a higher plan             |
| `quota_exceeded`        | 402  | The monthly CU cap is reached on a hard capped plan               |
| `app_limit_exceeded`    | 402  | Endpoints are suspended because active apps exceed the plan limit |
| `org_locked`            | 403  | The organization is locked for non payment                        |
| `forbidden`             | 403  | Your role does not permit this action                             |
| `app_limit_reached`     | 409  | Creating or enabling an app is blocked at the active app limit    |
| `team_not_empty`        | 409  | A team cannot be deleted while it still has members               |
| `owner_required`        | 409  | The sole Owner cannot be removed or demoted                       |
| `rate_limited`          | 429  | The requests per second limit is exceeded                         |

For 402 codes, the fix is a plan action: upgrade, reduce active apps, or wait for the cycle. For `org_locked`, settle the outstanding invoice on the Billing page. See [plan changes and overage](/rpc/billing-and-plans/plan-changes-and-overage.md).

### JSON-RPC errors

Errors inside a method call, such as invalid parameters or an unknown method, come back with HTTP 200 and a JSON-RPC error object:

```
{"jsonrpc":"2.0","id":1,"error":{"code":-32602,"message":"invalid params"}}
```

Check both the HTTP status and the response body: platform rejections live in the status code, method problems live in the error object.
