Rate limits
Two limits apply to every request, and the stricter one answers first:
| Limit | Value | Counted per |
|---|---|---|
| API key | 3000 requests per minute | Key |
| IP address | 200 requests per minute | Address the request comes from |
Both answer 429 rate_limited with a Retry-After header: wait that many seconds. The TypeScript SDK waits for Retry-After and retries for you.
Limits per organization
Some routes call a system of yours, or send test traffic, and have their own limit for the whole organization, whatever key sends the request. They are counted across all the servers of Lelemon and answer 429 rate_limited with Retry-After.
| Route | Value per minute |
|---|---|
POST /v2/actions/{id}/test | 10 |
POST /v2/data-connectors/{id}/check | 20 |
POST /v2/mcp-servers/{id}/discover | 20 |
Headers
Every answer to a request with a valid key carries the state of the key limit:
| Header | Meaning |
|---|---|
RateLimit-Limit | Requests the key can send in the window |
RateLimit-Remaining | Requests left in the window |
RateLimit-Reset | Seconds until the window resets |
RateLimit-Policy | The policy as limit;w=seconds, for example 3000;w=60 |
Spread work that arrives in bursts: a queue worker that sends one request per message stays far below the key limit, while a loop over every contact does not.
If you hit a limit while polling, subscribe to webhooks instead. An organization can have up to 16 webhook endpoints; the next one answers 422 webhook_endpoint_limit.