Browse documentation

Type to search the documentation. Press Esc to close.

What are the Scribble API rate limits?

For developers

120 requests a minute, per key. Going over returns 429 with a Retry-After header giving the seconds until the current minute window resets. The limit is per key, not per organisation, so two keys get two budgets. Ask us if you need it raised.

Rate limiting
PropertyValue
Default limit120 requests per minute
ScopePer API key
WindowA fixed clock minute, not a rolling window
Response429 with body code rate_limited
HeaderRetry-After, in seconds until the window resets
CountedEvery authenticated request, successful or not
A real 429 response
{
  "error": {
    "code": "rate_limited",
    "message": "This key is limited to 120 requests a minute. Try again in 33s, or ask us to raise the limit.",
    "docs": "https://scribblecards.com/app/integrations"
  }
}

The accompanying header on that response was retry-after: 33.

#Planning around it

How long a bulk job takes at 120 requests a minute
RecordsTime at the default limit
500About 4 minutes
2,000About 17 minutes
10,000About 84 minutes

For a one-off bulk send, a campaign is usually the better tool than a loop over the API: it prices the whole run, previews the extremes and lets you cancel. Use the API for the steady drip of event-driven cards.

Honouring Retry-After
import time, requests

def post_card(session, body, key):
    while True:
        res = session.post(
            "https://scribblecards.com/api/v1/cards",
            headers={"Authorization": f"Bearer {key}"},
            json=body,
            timeout=30,
        )
        if res.status_code != 429:
            return res
        # The header is authoritative. Do not guess, and do not
        # back off exponentially past it: the window is a clock minute.
        time.sleep(int(res.headers.get("Retry-After", "60")) + 1)

Last checked against the product on . Something wrong or missing? Tell us.