DocsGet startedRate limits
Rate limits
Per-plan request limits and the headers that report them.
Limits apply per workspace and count every request: a REST call and an MCP tool call both count as one.
| Plan | Per second | Per minute | Per hour | Per day |
|---|---|---|---|---|
| Pro | 20 | 120 | 1,200 | 24,000 |
| Business | 40 | 250 | 6,000 | 50,000 |
Response headers#
| Header | Meaning |
|---|---|
X-RateLimit-Limit / X-RateLimit-Remaining | The per-minute window |
X-RateLimit-Daily-Limit / X-RateLimit-Daily-Remaining | The per-day window |
Retry-After | On 429, seconds to wait |
X-Request-Id | Quote it when you contact support |
GET /usage returns every window at once.
Handling 429#
async function provly(url, init = {}, tries = 3) {
const res = await fetch(url, { ...init, headers: { Authorization: `Bearer ${process.env.PROVLY_API_KEY}`, ...init.headers } })
if (res.status === 429 && tries > 0) {
await new Promise((r) => setTimeout(r, Number(res.headers.get("retry-after") ?? 1) * 1000))
return provly(url, init, tries - 1)
}
return res.json()
}Need more? Business has twice the Pro limits; contact us for higher volumes.
