blitz-api-js is the official, typed TypeScript SDK for the Blitz API. It is fetch-based, Zod-validated, ships both ESM and CommonJS builds with .d.ts / .d.cts types, and uses snake_case request and response fields that match the API reference exactly.
npm
GitHub
Install
fetch). Ships both ESM and CommonJS builds.
Quickstart
Authentication
Pass the key explicitly or via theBLITZ_API_KEY environment variable. It is sent in the x-api-key header on every request.
Endpoints
All methods are grouped into seven namespaces. Each takes a single options object (snake_case keys) and returns a typed, Zod-validated response. The six list methods (search.people, search.companies, search.employee_finder, jobs.search, jobs.company, company.tam_by_jobs) return a paginated PagePromise (see Pagination); waterfall_icp, changelog.list, and the enrichment / utils / account methods return their response directly.
client.account
client.search
client.jobs
client.company
client.enrichment
client.utils
client.changelog
Pagination
The list methods (search.people, search.companies, search.employee_finder, jobs.search, jobs.company, company.tam_by_jobs) return a PagePromise — await it for the first page, or for await to stream every item across all pages (each fetched on demand).
max_items, .collect(), manual paging, page metadata, and the per-result billing caveat.
Usage & rate limit
Every metered/v2 response carries a fair_usage block reporting what the request cost and what is left, so you can meter a batch job without a second key_info() call.
changelog.list(), which is not metered, and account.key_info(), which reports the balance in its own top-level records_remaining, next_reset_at, and max_requests_per_seconds fields. Every field is optional, so a response predating the block still parses.
Configuration
429; see Rate limits & retries. rate_limit_rps defaults to 5; set it to your key’s max_requests_per_seconds to use your plan’s full per-endpoint throughput.
Error handling
401 / 402 / 404 throw immediately; 429 and 5xx are retried automatically; timeouts surface as APITimeoutError (not retried). InsufficientCreditsError is still exported as a deprecated alias of FairUsageLimitError (the same class, not a subclass), so existing instanceof checks keep working. See Rate limits & retries for the full retry and timeout behavior.
A 400 or 422 also throws immediately, as APIStatusError. For a 422, err.body.errors lists each invalid field as { field, message }; see Errors. The API rejects any field it does not define, so an extra key in a params object returns a 422 even when TypeScript does not flag it.
Types & enums
Response objects keep their snake_case wire keys and preserve unknown fields — if the API adds a property before this SDK models it, the value is still present (typed asunknown); known fields stay precisely typed.
industry, job_level, continent) accept a known value — autocompleted from a union like Industry — or any raw string, so a value missing from the vendored taxonomy never blocks you.

