Skip to main content
POST
Search Companies

Overview

The POST variant of Semantic Search takes the same parameters in a JSON body, with filters as a native object instead of a URL-encoded string. Use it when an exclude.domains list is too large to fit a GET URL.

Example request

Key parameters

  • q (required): Natural-language query.
  • filters (optional): SearchFilters as a JSON object. See Search Filters Reference.
  • pagination (optional): { "offset": <int>, "limit": <int> }; limit up to 250 per request.

Endpoint behavior

  • Identical ranking and results to GET /v1/companies/search; only the transport differs.
  • Prefer POST when exclude.domains is large; otherwise either method works.
  • A single request returns at most 250 results. Page with pagination.offset to read deeper: paid plans (Starter, Pro) can reach up to 2,000 results per query; the free tier is capped at 25.

Success signal

Returns results and request metadata, the same shape as the GET endpoint. Reuse results[].id or results[].domain as downstream identifiers.

Common errors

401 Unauthorized

Check that your header is Authorization: Bearer ${EXTRUCT_API_TOKEN}.

422 Unprocessable Entity

An invalid domain in exclude.domains, more than 1000 domains after de-duplication, or a malformed body. Validate before sending:

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

Request body for POST company search. Send filters as a JSON object.

q
string
required

Search query.

filters
SearchFilters · object | null

Structured filters (same contract as the GET filters string).

pagination
Pagination · object | null

Offset/limit pagination.

Response

Successful Response

Semantic search response wrapper.

results
CompanySearchResult · object[]
required

Search results

request
SearchRequestInfo · object
required

Request parameters echo