Skip to main content
Agents & LLMs: a Markdown version of this page is available by appending .md to the URL, and the full documentation index is at llms.txt.
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

blitz-api-js on the npm registry.

GitHub

Source, changelog, and issues.

Install

Requires Node.js 20+ (or any runtime with a global fetch). Ships both ESM and CommonJS builds.

Quickstart

CommonJS works too:

Authentication

Pass the key explicitly or via the BLITZ_API_KEY environment variable. It is sent in the x-api-key header on every request.
Never expose your API key in client-side code (browsers, mobile apps). Always call Blitz from your backend.

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.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 PagePromiseawait it for the first page, or for await to stream every item across all pages (each fetched on demand).
See Pagination for 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.
Two endpoints don’t return the block: the public 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

A single client instance stays under your per-endpoint request-per-second limit and retries automatically on 429 — see Rate limits & retries. rate_limit_rps defaults to 5, below the API’s 10 req/s per endpoint, so raise it to your key’s max_requests_per_seconds if you need the full 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.

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 as unknown); known fields stay precisely typed.
Enum-backed filter fields (e.g. 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.

Next steps

Python SDK

The same API surface with sync + async clients.

Field Normalization

Accepted values for industry, job level, job function, and geography filters.

API reference

Full request/response schemas and an interactive try-it console.

Recipes

End-to-end workflows: build an ICP list, enrich it, and sync to your CRM.