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

# Rate limits

| Limit                   | Applies to                                                                 |
| ----------------------- | -------------------------------------------------------------------------- |
| 120 requests per minute | Each token, across every endpoint                                          |
| 20 requests per minute  | Each token, on file uploads (`POST /uploads`), on top of the general limit |

Limits are counted per token, not per organization or per person: two tokens have separate budgets.

## Knowing where you stand

Successful responses carry two headers:

| Header                  | Meaning                                         |
| ----------------------- | ----------------------------------------------- |
| `X-RateLimit-Limit`     | The number of requests allowed per minute       |
| `X-RateLimit-Remaining` | How many of them are left in the current minute |

Slow down as `X-RateLimit-Remaining` approaches zero.

## When you go over

A request over the limit answers `429`:

```json
{
  "errors": [
    { "status": "429", "title": "Error", "detail": "Too Many Attempts." }
  ],
  "jsonapi": { "version": "1.1" }
}
```

Wait before retrying: the budget refills within a minute. Retry with an increasing delay rather than immediately, and never retry in a tight loop.

The request quota of the organization is a separate limit, counted over the billing period: see [Organizations](/organizations).