What are the Scribble API rate limits?
For developers
Each API key allows 120 requests per minute. Requests over the limit return 429; wait for the number of seconds in Retry-After before retrying.
| Property | Value |
|---|---|
| Default limit | 120 requests per minute |
| Scope | Per API key |
| Window | A fixed clock minute, not a rolling window |
| Response | 429 with body code rate_limited |
| Header | Retry-After, in seconds until the window resets |
| Counted | Every authenticated request, successful or not |
{
"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
| Records | Time at the default limit |
|---|---|
| 500 | About 4 minutes |
| 2,000 | About 17 minutes |
| 10,000 | About 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.
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.
