Global search is in alpha. The request and response shapes may still change, and so may the wording of explanations and the list of reason kinds.
/v2/search call needs a country. Often you do not have one: a shareholder listed in a foreign filing, a counterparty on an invoice, a holding company whose stated domicile is not where it is incorporated. Or you know the country but not the state: an American company, any of fifty registers.
POST /v2/search/global takes what you know in one line of text and returns candidates across every country Topograph covers, or only the countries you choose, best first. Each candidate has the country and registration number you pass to /v2/company, whether it is a strong or a possible match, and a one-sentence explanation of why it matched. When the search can stand behind one of them, that candidate is selected.
Quick example
Sending what you know
Put everything you know inquery, separated by commas. The name comes first; everything after it is read for what it says about the company.
What was understood comes back in
query, so you can check the search read your input as you meant it:
Add
"activeOnly": true to leave out companies the search sees as inactive (an indicative status, see Candidates).
Searching only some countries
countries limits the search to the countries you name. Nothing outside them is searched or returned.
US stands for every state, and CA for every Canadian jurisdiction we cover. When the state is not known, the search looks for it in public sources first, then asks the state registers: the usual incorporation states first (Delaware, New York, Nevada, Wyoming, Florida, Texas), then almost every other state.
A Canadian company is returned once, in the jurisdiction it is incorporated in. A federal corporation registered in a province as an extra-provincial corporation is found in both registers; when the two records share a Business Number, or the provincial record names the federal one, the search returns the federal (CA-FED) candidate and lists the provincial registration as an other_registration reason. New Brunswick and Nunavut are not covered yet.
countries is a filter. A country named in query is not: it says where you think the company is, and the search can still look elsewhere.
When nothing is found in the countries you named and the evidence places the company elsewhere (a GmbH searched in the United States only), the search ends not_found with the reason outside_countries, and likelyCountryCode names the country it points to. The same happens, without any search, for an LEI registered outside them.
Searching by LEI
An LEI names one entity, and the LEI record says where it is registered. Send the LEI alone asquery, or next to a name (La Banque Postale, 96950066U5XAAIRCPA78), and the search goes straight to that register: no other country is searched.
identifier, “The LEI you gave belongs to a company registered in France”. When the LEI belongs to a company registered in a country Topograph does not cover, the search ends not_found with country_not_covered, and likelyCountryCode names that country.
How it decides
The search works through cheap signals first and stops as soon as one candidate is a strong match.- The name. The legal form and the wording of the name point to the jurisdictions that use them:
EOODis Bulgarian,S.p.A.Italian,GmbHGerman, Austrian or Swiss.Ltdis most often British, but an American-soundingLtdis weighed toward the United States.LLCandInc.point to the United States, and the state still has to be found. Scanning noise such asS.a r.1.is corrected. - The rest of your query, as above: an address, an identifier, a website, a country.
- Topograph’s company data, checked once across all countries.
- The web, only when the name and Topograph’s data are not enough, or the company is American and its state is unknown. A source page is kept as evidence.
- The registers. Live searches in the most likely countries, three at a time, with one rephrased retry when a register returns nothing. The search stops once a register returns the exact name and no other country is a serious contender.
Reading the answer
status is the first thing to check.
summary says the same thing in one sentence you can show a user.
On not_found, reason says why:
likelyCountryCode names the country the evidence settled on, even when the company could not be confirmed, its register is not covered, or it is outside countries. A Cayman Islands fund still gets its country.
id identifies the search. Quote it when you contact support about one.
The company: selected
The candidate with selected: true is the one you can use without a person checking it. At most one candidate is selected, always the first, and only when status is resolved. The search selects a candidate only for a strong match with no plausible rival: no candidate of that name in another country, and no other company of the same name in the same register that the evidence cannot tell apart. Two Topograph SAS in France and no address to separate them is ambiguous, not a guess.
Take the selected candidate rather than picking from candidates yourself: the decision is the search’s own, made on evidence the response does not all carry.
Candidates
Candidates come best first. Each carriescountryCode, id, legalName, its registered address and isActive, selected, and a match: strong when the evidence points to this company, possible when it needs a second look. Several candidates can be strong (the same name in Germany and Austria) while none is selected.
isActive is indicative only. It is the status the search saw, from a register’s search results or from Topograph’s company data, which can lag the register, so it may be out of date, and it is absent when unknown. activeOnly filters on the same indicative status. Before relying on a company’s status, request company from /v2/company and read company.status. explanation.summary says why it matched in one or two sentences, and explanation.reasons lists the reasons one by one, each with a text you can show as is:
Streaming
With"stream": true and the Accept: text/event-stream header, the endpoint sends Server-Sent Events while the search runs:
progress: the search so far, as{ revision, activity, candidates, query }.activitylists what the search is doing right now, as sentences you can show (“Asking the register in Austria”); several registers are often asked at once. Its wording is for display and may change.candidatesare the ones found so far; none is selected beforecomplete. A new event is sent every time something changes.complete: the final response, same shape as the non-streaming answer.error:{ error: { code, message } }.
Billing
A search is billed only when it succeeds, that is whenstatus is resolved. Ambiguous and not-found searches, inputs rejected as not a legal entity, failures and timeouts are not billed. usage.priceCents shows what the search was charged. The current price is on the pricing page.
Limits and errors
Each account can run 60 global searches per minute and 5 at the same time.Development environments
With ansk_dev_ key, global search answers from generated data: candidates in the countries the name’s legal form points to, each resolvable with /v2/company in the same environment. Coverage is honoured, so a name that only points at uncovered countries ends not_found with country_not_covered, as it would live. A countries filter is honoured too: nothing outside it is generated, and US lands on a state. Nothing is billed.