/v2/company endpoint is the single entry point for company data, official documents, and ownership graph traversal. It accepts one company identifier, one country, and the datapoints or documents you want.
Use it for company onboarding, KYB verification, shareholder and UBO checks, subsidiary analysis, official document retrieval, and follow-up polling by requestId.
For live country coverage, data block availability, pricing, sources, identifiers, and document catalogs, see Coverage and pricing.
Request shape
Datapoints
Availability varies by country and mode. Use the live pricing pages orGET /v2/pricing for country-specific availability.
The legacy
companyProfile datapoint is still accepted for existing integrations. New integrations should request explicit datapoints. See the migration guide.
Choose a mode
/v2/company supports two modes:
- Verification mode is the default and prioritizes authoritative data for compliance.
- Onboarding mode (
mode: "onboarding") prioritizes speed for form prefill and early screening.
Documents
Document retrieval is a two-step flow:- Request
availableDocuments. - Pass selected document IDs in the
documentsarray.
availableDocuments before requesting a download. See Document retrieval.
Response lifecycle
Every request returns arequest object with the current status of each datapoint and document.
The response may be progressive. For example,
company can succeed before legalRepresentatives, documents, or ownership datapoints finish.
Not every failed is an outage
Two error.code values mean the datapoint is not something we return for this
request, rather than something that went wrong:
Both carry
retryable: false. Handle them the way you would handle a successful
“nothing to report” answer: don’t retry, don’t alert, don’t block your flow waiting
for them. Filter on the code or on retryable. error.message is human-readable and
safe to show your own users.
To know which datapoints a country returns before you request them, see
Coverage and pricing or GET /v2/pricing.
Polling
Use therequestId to fetch the latest result. This is free and does not create a new billable request.
succeeded or failed). In production, use webhooks when possible.
Branch on the status itself rather than enumerating the non-terminal ones. A poller
that waits for anything other than succeeded or failed will hang if a new
intermediate status is ever introduced.