Changelog

New features, improvements, and fixes to the Blitz API.

Subscribe
Breaking

Unknown/invalid fields in a request body now return `422`

Every /v2 endpoint now rejects a JSON request body that contains a field it does not define, at any depth, with a 422 that names the field and where it is (previously the field was dropped and the call ran without it). A misspelled filter such as company.industry.includes no longer returns results as if the filter were not there. Remove or correct any field your client sends that the endpoint documentation does not list.

Breaking

`422` errors now name every field and suggest a fix

A 422 from any /v2 endpoint now carries the same success and message fields as every other error, plus an errors list: each item gives the full field path, such as company.industry.include[0], and a message that suggests the closest valid field or value when one exists. message sums up the first three errors, and the response no longer repeats your request or lists every allowed value. A request body that is not valid JSON now returns a 400 with a JSON message instead of plain text. Update any client that reads type, on, property, found or errors[].path from a 422.

Improvement

Company distribution endpoints now cost 1 record on success

/v2/enrichment/company-distribution-by-country and /v2/enrichment/company-distribution-by-department now cost 1 record on success (previously 1 record per call). Both responses now carry a found field. A call returns found: false and costs 0 records when the company is unknown or has no current employees.

Endpoints/v2/enrichment/company-distribution-by-country/v2/enrichment/company-distribution-by-department
Improvement

`/v2/search/people` returns only the position that matched

experiences[] on /v2/search/people now carries the single position that matched your search, allowing to understand what matched.

Endpoints/v2/search/people
Improvement

`Unknown` now also matches records with no company

Unknown in company.industry.include now returns people and job postings that have no company attached, next to those whose company has no industry value (previously it returned only the second group). In exclude it drops both. /v2/search/companies is unchanged: Unknown there still means a company with no industry value.

Endpoints/v2/search/people/v2/jobs/search
Fix

`min` above `max` in a range filter now returns `422`

A range filter sent with min greater than max was accepted: on company.revenue the call failed with a 500, and on every other range it returned no results. Any range filter whose min is above its max is now rejected with a 422 that names the field. A max of 0 still means no upper bound.

Endpoints/v2/search/people/v2/search/companies/v2/jobs/search/v2/company/tam-by-jobs/v2/company/tam-by-people
Feature

`Unknown` filters companies with no industry

The company.industry filter now accepts Unknown, which matches companies that have no industry value. In include it is added to the industries you list, so ["Banking", "Unknown"] returns banks plus every company with no industry; in exclude it drops them. Before this, reaching those companies meant listing every other industry in exclude, which the 50-entry cap made impossible.

Endpoints/v2/search/people/v2/search/companies/v2/jobs/search/v2/company/tam-by-people/v2/company/tam-by-jobs
Improvement

More contact data, and more accurate contact data

Contact coverage is up 40% and contact accuracy is now above 90%. On the same queries you run today you should see fewer empty and fewer stale email and phone values.

Breaking

Three changes to `field_of_study`, `profile_picture_url` and `headline`

Three changes to the person returned by every people endpoint: education[].field_of_study is removed and the field of study is now part of degree, for example Bachelor of Science, Industrial Engineering; profile_picture_url is now always null, though it stays in the response so clients do not break; and headline is now built from the person's first position as <job title> | @<employer> rather than the free-text headline written on the LinkedIn profile. Update any client that reads field_of_study or profile_picture_url.

Endpoints/v2/search/people/v2/search/employee-finder/v2/search/waterfall-icp-keyword/v2/enrichment/person/v2/enrichment/email-to-person/v2/enrichment/phone-to-person
Improvement

New fields on the person output

People now carry location.postal_code and location.street_address, and every entry in experiences[] now carries job_contract_type and job_work_arrangement. experiences[].company_domain is now filled on past positions as well as the current one, and experiences[].company_name now prefers the name on the linked LinkedIn company page.

Endpoints/v2/search/people/v2/search/employee-finder/v2/search/waterfall-icp-keyword/v2/enrichment/person/v2/enrichment/email-to-person/v2/enrichment/phone-to-person
Improvement

`/v2/search/people` and `/v2/enrichment/person` return the whole career

/v2/search/people returned only the position that matched your search in experiences[], and /v2/enrichment/person returned only current positions. Both now return every position a person has held, in profile order.

Endpoints/v2/search/people/v2/enrichment/person
Feature

Added a LinkedIn profile enrichment endpoint

You can now enrich a person from their LinkedIn profile URL at POST /v2/enrichment/person. It returns their whole career, education, skills and certifications, and costs 1 record on success.

Endpoints/v2/enrichment/person
Improvement

Education entries carry a school name more often

Some education entries came back with an empty education[].school_name. Fewer entries are now missing the school name.

Endpoints/v2/search/people/v2/search/employee-finder/v2/search/waterfall-icp-keyword/v2/enrichment/person/v2/enrichment/email-to-person/v2/enrichment/phone-to-person
Improvement

`/v2/enrichment/email` no longer repeats the same address

profile[] could return the same address more than once, with every field identical. Duplicate entries are now returned once.

Endpoints/v2/enrichment/email
Improvement

The company revenue filter accepts larger values

company.revenue.min and company.revenue.max rejected values above a ceiling that ruled out the largest companies. Both now accept any revenue figure you need.

Endpoints/v2/search/companies/v2/search/people/v2/company/tam-by-people
Fix

`/v2/enrichment/domain-to-linkedin` returns the right company more often

/v2/enrichment/domain-to-linkedin could return a company that was not the owner of the domain you sent. Some domains now return a different and more accurate company.

Endpoints/v2/enrichment/domain-to-linkedin
Fix

`null` now reads the same as leaving a field out

Every /v2 request body now treats null on an optional field exactly like an omitted field, so a client that serialises its unset filters as null no longer gets a 422. Defaults still apply: country_code: null on /v2/search/employee-finder falls back to ["WORLD"], and max_results: null falls back to the endpoint default. This holds inside nested filter objects too. A null on a required field is still rejected, and so is a null inside a list.

Breaking

Search filter lists are capped at 50 entries

Every filter list on the search endpoints now accepts at most 50 entries, and a longer list returns 422. This covers the include and exclude arrays on the company and people filters, the job and firmographic filters, and the industry, location and code lists. On /v2/search/waterfall-icp-keyword the cascade array is capped at 10 steps, and each step still accepts up to 50 title phrases. A very long exclusion list used to time out and return 500, so split a longer list across several requests.

Endpoints/v2/search/people/v2/search/companies/v2/search/employee-finder/v2/search/waterfall-icp-keyword/v2/jobs/search/v2/jobs/company/v2/company/tam-by-jobs/v2/company/tam-by-people
Feature

Added the TAM By People endpoint

You can now build a target-account list from the people inside companies at POST /v2/company/tam-by-people. Give it your people and company filters and it returns the distinct companies whose current employees match, each with a matched_people count. It costs 1 record per result.

Endpoints/v2/company/tam-by-people
Breaking

`/v2/search/people` no longer accepts `people.linkedin_url`

A request that still sends the people.linkedin_url filter succeeds, but the filter is ignored, so you get results for your other criteria instead of the people you asked for. /v2/company/tam-by-people still accepts it. Check any saved query that used it.

Endpoints/v2/search/people
Announcement

The Python and JavaScript SDKs now expose the `fair_usage` block

blitz-api-py and blitz-api-js are in sync with the current API. Every response model now carries fair_usage, so you can read records_used, records_remaining, next_reset_at, rate_limit and request_id straight off the typed response instead of parsing headers. Upgrade to the latest SDK version to get it.

Improvement

Legacy plans now run at 50 requests per second

Every plan created before 30 September 2026 now runs at 50 requests per second, at no extra cost. The new limit is already live on your key. fair_usage.rate_limit.requests_per_second reports the limit currently applied to you.

Breaking

`remaining_credits` on the key-info endpoint is renamed `records_remaining`

GET /v2/account/key-info now returns your balance under records_remaining instead of remaining_credits. The new name matches fair_usage.records_remaining and the x-records-remaining header. Update any client that reads remaining_credits.

Endpoints/v2/account/key-info
Breaking

The `x-credit-*` response headers are replaced by `x-records-*`

x-credit-cost and x-credit-remaining are removed. Every /v2 response now returns x-records-used and x-records-remaining instead, carrying the same values. Update any client that reads the old header names.

Improvement

Every response now reports your record usage and rate limit

Every /v2 endpoint now returns a fair_usage block on success, and on the 402 insufficient-balance error. fair_usage.records_used gives the records this request consumed, fair_usage.records_remaining the records left on your plan and fair_usage.next_reset_at when your balance resets. fair_usage.rate_limit gives requests_per_second and remaining_this_second, and is absent on /v2/account/key-info, which is not rate limited. fair_usage.request_id gives an id you can quote to support.

Improvement

Reverse phone lookup now costs 1 record

A successful /v2/enrichment/phone-to-person reverse phone lookup now costs 1 record on success (previously 5).

Endpoints/v2/enrichment/phone-to-person
Announcement

Added TAM By Jobs and the changelog endpoint to the SDKs

blitz-api-js and blitz-api-py SDKs now expose company.tam_by_jobs() - build a Total Addressable Market of companies from live hiring signals - and changelog.list() to fetch this changelog.

Breaking

TAM By Jobs `min_per_company` maximum lowered to 25

The job.min_per_company floor on /v2/company/tam-by-jobs now accepts a maximum of 25 (previously 100). Requests passing a higher value are rejected. Lower it to 25 or below.

Endpoints/v2/company/tam-by-jobs
Fix

Company search cursor now returns every matching company

When paging through /v2/search/companies with cursor, the walk could stop well short of total_results, skipping matching companies that were never returned across the full set of pages. Cursor pagination now covers the complete result set, so you receive every company that matches your filters.

Endpoints/v2/search/companies
Improvement

Search pages now reliably return the full result count

Company and job search pages now fill to your requested max_results, so pages no longer come back short. If the search has a partial failure, these endpoints now return 503 (retriable) instead of a truncated page that looks like the end of results.

Endpoints/v2/search/companies/v2/jobs/search/v2/jobs/company
Improvement

TAM By Jobs 50k limit now counts returned companies

The 50,000-company pagination cap on TAM By Jobs now counts companies actually returned to you.

Endpoints/v2/company/tam-by-jobs
Feature

Added TAM By Jobs endpoint

You can now find companies from their job offers on Linkedin at POST /v2/company/tam-by-jobs.

Endpoints/v2/company/tam-by-jobs
Feature

Added a public changelog endpoint

You can now fetch the Blitz API changelog at GET /changelog, with no API key required. Use days to limit to recent changes and limit to cap the count.

Endpoints/changelog