/enrichment/email and 5 req/s on /enrichment/phone run at the same time without competing for the same budget. Both SDKs handle this for you: a client-side limiter keeps your outgoing requests under the cap, and any 429 that still slips through is retried automatically. In most cases you don’t need to write any rate-limit handling yourself.
Find your limit
Your per-endpoint limit is onkey_info(). Trial and paid plans may differ — read it rather than hard-coding 5.
key_info response.
Client-side rate limiting
Each client throttles its outgoing requests torate_limit_rps (default 5) per endpoint — every endpoint path gets its own limiter, mirroring the API’s per-endpoint budget. In Python it’s a sliding window (at most N requests to a given endpoint in any rolling second); in TypeScript it’s a token bucket (admits at most N per second, per endpoint). A single client instance therefore stays under the API limit on every endpoint on its own. Set it to None / null to disable.
Automatic retries
429 (rate limited) and 5xx (server errors) are retried automatically with exponential backoff — TypeScript adds jitter — up to max_retries (default 3). 401 / 402 / 404 are not retried; they raise immediately. If the retries are exhausted, the error surfaces as RateLimitError (429) or ServerError / APIStatusError (5xx).
Timeouts are not retried
Each method takes a per-calltimeout (Python keyword arg; TypeScript options object as the last argument). Unlike 429/5xx, a read timeout is not retried — the server may already have processed (and billed) the request, so the SDK surfaces APITimeoutError immediately rather than risk a double charge. Raise the per-call timeout for genuinely slow endpoints instead of relying on retries.
Running many workers
The limiter is per client instance (per process), and the API limit is per endpoint. If you fan the SDK out across multiple processes or workers that hit the same endpoint, their combined rate can exceed that endpoint’s limit and you’ll see429s — the retry path absorbs occasional ones, but for steady throughput divide rate_limit_rps across the workers sharing an endpoint (e.g. 5 workers all calling /enrichment/email on a 5 req/s key → rate_limit_rps = 1 each). Workers calling different endpoints don’t compete — each endpoint has its own budget.
Next steps
Pagination
Stream results across pages and cap spend with
max_items.Python error handling
The full exception hierarchy for
blitz-api-py.TypeScript error handling
The full exception hierarchy for
blitz-api-js.API reference
Request/response schemas and a try-it console.

