Rate limits
What’s limited today, and the per-key limits coming with ENGIN-46.
Per-key limits are coming
Limits per API key, with standard rate-limit headers and plan-based quotas, come with ENGIN-46, alongside API keys. This page describes what’s limited today; it will grow when they ship.
Today
Some routes limit how often they can be called: signed-out callers per network, and a few signed-in actions per person (suggesting corrections, sending cover photos). Over the limit the answer is 429 rate_limited with a Retry-After header in seconds. Wait that long, then retry; the SDK does it for you.
Routes that can answer 429:
- POSTSend a message
- POSTPreview a proposed change
- GETLook up a barcode
- POSTSuggest a correction
- POSTSend a cover photo
- POSTBring a candidate into the catalog
- POSTAdd a book no source knows yet
- GETSearch the catalog
- POSTPropose a variant
- POSTLook up a certificate
- GETExport the collection
- POSTCheck a copy’s certificate now
- POSTAdd a code to a copy
- POSTCheck a code against a copy
- POSTAsk a store to hold a book
- POSTMessage about a hold
- GETA cover for a printed label
- GETThe catalog home
- GETShops’ copies of an issue
- GETNew releases
- GETA publisher or imprint
- GETSearch the public catalog
- GETA series
- GETAn issue
- GETA shop’s listing
- GETA public collection
- GETThe shop directory
- GETA shop’s storefront
- POSTAsk a store about a book
- POSTReply in a question’s thread
- POSTReport something
- POSTCreate a scan
- POSTMatch a scan
- GETSearch for a scan
- GETSearch before scanning
- POSTInvite someone to the team
Being a good client
- Cache what you read: reads carry an
ETag; send it back asIf-None-Matchand an unchanged answer is a bodiless304. - Prefer one bulk call to many single ones where a route offers it.
- Spread background jobs out instead of running them on the hour.