> This page is for Developers.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.emnify.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.emnify.com/_mcp/server.

> Learn about API rate limits including the 2,000 calls per 5 minutes per IP limit, 10 million monthly calls per account, and specific endpoint limits.

An API rate limit and threshold are assigned per organization.
There's a general limit and also lower limits for specific calls.
These API rate limits are in place to ensure service availability and prevent the system from overloading.

## General limits

### 2,000 calls per IP within 5 minutes

The emnify REST API has rate limiting enforced at **2,000 requests per IP in a 5-minute window**.

When this threshold is reached, the system returns the HTTP response status code `429 Too Many Requests` until the average request rate is within the specified limit.

> **Note**
>
> **Example**:
> You might reach this limit when using the API to create 3,000 endpoints simultaneously.
> To prevent this, put a delay between each API call.
> As a best practice, there's a 100-millisecond delay each for multiple API calls.

### 10,000,000 calls per account per month

An organization is allowed to make a total of 10,000,000 API requests per month.

When this threshold is reached, the system returns `429 Too Many Requests`.
This quota resets on the first day of the next month.

> **Tip**
>
> Implement the [Data Streamer](/developers/reference/data-streamer) to receive live the status of your endpoints and avoid using too many API calls.

## Specific API path limits

Apart from the general API rate limiting, there are limits configured on specific, more frequently used API paths.
The following limits are enforced per organization:

| `resourcePath`                             | Method | req/s     | burst     |
| :----------------------------------------- | :----- | :-------- | :-------- |
| `/api/v1/organisation/{id}/billing/`       | GET    | 10        | 5         |
| `/api/v1/stats/`                           | GET    | 10        | 5         |
| `/api/v1/organisation/{id}/stats/`         | GET    | 10        | 5         |
| `/api/v1/sim/`                             | GET    | 10        | 5         |
| `/api/v1/organisation/{id}/stats/`         | GET    | 10        | 5         |
| `/api/v1/endpoint/`                        | GET    | 10        | 5         |
| `/api/v1/sim/{id}/stats/`                  | GET    | 10        | 5         |
| `/api/v1/endpoint/{id}/connectivity_info/` | GET    | 10        | 5         |
| `/api/v1/endpoint/stats/`                  | GET    | 100       | 50        |
| `/api/v1/sim/{id}/`                        | GET    | 100       | 50        |
| `/api/v1/service_profile/`                 | GET    | 100       | 50        |
| `/api/v1/tariff_profile/`                  | GET    | 100       | 50        |
| `/api/v1/service_profile/`                 | GET    | 100       | 50        |
| `/api/v1/endpoint/{id}/`                   | GET    | 50        | 25        |
| `/api/v1/endpoint/{id}/connectivity/`      | GET    | 50        | 25        |
| `/api/v1/endpoint/{id}/stats/*/`           | GET    | 100       | 50        |
| `/api/v1/authenticate/`                    | POST   | 100/5 min | 100/5 min |

> **Tip**
>
> If you encounter the `429 Too Many Requests` status code, retry the call with exponential back-offs.