Rate limits
Limits
Section titled “Limits”| Scope | Limit | Applies to |
|---|---|---|
| Per API key | 300 requests per minute | Every /v1 call with an mls_live_ key, including MCP |
| Per IP address | 60 requests per minute | Unauthenticated endpoints: the hosted connect page and the OAuth callback |
| Per embed session | Enough for interactive use | The widget’s /v1/embed/* calls |
Limits are counted in a sliding one-minute window. Partner keys and workspace keys each have their own budget, so handing workspace keys to customers also isolates their traffic from yours.
The 429 response
Section titled “The 429 response”HTTP/1.1 429 Too Many RequestsRetry-After: 60Content-Type: application/json
{ "error": { "code": "rate_limited", "message": "Rate limit exceeded (300 requests/minute per key)" } }Retry-After is in seconds. Sleep that long before the next call. Retrying sooner counts against the same window.
Meta’s caps
Section titled “Meta’s caps”Meta enforces limits of its own on top. They arrive as network_error with Meta’s code in details, or on a failed target of a post.
| Cap | Value | Note |
|---|---|---|
| Instagram publishing | 100 posts per account per rolling 24 hours | Carousels count as one. Refused publishes fail the target; nothing is queued |
| Messaging | Per-Page rate limits scaled by audience | Only matters for bulk sending, which this API is not for |
| Reads | Generous per-app and per-user windows | Follower stats and inbox reads are well within them at normal use |
The Instagram cap is the one products hit. A scheduler that dumps a month of posts for one account on the same day will run into it; spread them out or warn the user.
Staying under
Section titled “Staying under”- Cache reads. Account lists, stats and workspace lookups change rarely. Cache them for minutes, invalidate on webhook events.
- Use webhooks, not polling, for outcomes. One
post.publishedevent replaces a poll loop. If you must pollGET /v1/events, do it once a minute per partner. - Batch by workspace.
GET /v1/posts?workspace=in one call rather thanGET /v1/posts/:idper post. - Back off on 429. Respect
Retry-After; add jitter if many workers share a key. - One key per service. Give your scheduler, your inbox sync and your admin tooling separate workspace or partner keys so one runaway loop does not starve the others.
Need more
Section titled “Need more”Limits are set per partner. If your integration legitimately needs more than 300 requests per minute, contact MissLess with the numbers.