Rate limits
Rate limits
Two limits apply, both returning 429 when exceeded.
| Scope | Limit | Applies to |
|---|---|---|
| Global | 60 requests / minute | every request |
| Per-tool | 10 conversions / day per IP | each public /pdf/* and /media/* tool |
When you hit a limit
A 429 Too Many Requests problem document is returned with a Retry-After
header (seconds to wait):
HTTP/2 429
content-type: application/problem+json
retry-after: 37
{ "type": "https://bastos-cms.dev/errors/rate_limited",
"title": "rate_limited", "status": 429, "code": "rate_limited" }Backing off
Respect Retry-After rather than retrying immediately. A simple, well-behaved
client:
# pseudo: retry once after the server-advised delay
resp=$(curl -s -w '%{http_code}' -o out.bin ...)
if [ "$resp" = "429" ]; then
sleep "$(curl -sI ... | awk '/retry-after/{print $2}')"
# retry
fiRaising the ceiling
The per-IP daily cap is meant for casual and trial use. Higher, account-based quotas come with an API key on Pro — the limit then tracks your account rather than your IP, so a shared office network or CI runner isn't throttled as one.