Find a company
Turning a name your user typed into a company id you can rely on.
Almost every integration starts here: you have a string, and you need the right company. There are three ways in, and they are not interchangeable.
If you have a register number
This is the only exact route. Give the number and the court:
curl -G "https://api.registercheck.de/v1/search/companies" \
--data-urlencode "register_number=13557" \
--data-urlencode "register_court=Amtsgericht Memmingen" \
-H "Authorization: Bearer $REGISTERCHECK_API_KEY"Register numbers repeat across courts — HRB 670 exists at most of them — so a number without a court will match many unrelated companies.
If a human is typing
Use /search/suggestions. It is
built for autocomplete: one call per keystroke-ish, cheap, and ranked.
const res = await fetch(
`${BASE}/search/suggestions?search_term=${encodeURIComponent(term)}&limit=8`,
{ headers: { Authorization: `Bearer ${key}` } },
);
const { profiles } = await res.json();Each profile carries register_id, status and is_active — show those next to the
name. Two companies in the same town with nearly the same name are common, and the
register line is how your user tells them apart.
Debounce to ~250 ms. At 1 credit a call, a busy search box is the one place this API can quietly get expensive.
If you are matching a list
Use /search/companies with as many
fields as you have. Every parameter is optional and they combine:
| Parameter | Matching |
|---|---|
name | partial, case-insensitive |
register_number, register_court, register_prefix | exact |
city, address | partial |
is_active | exact |
has_financials | exact |
Unknown parameters are ignored, not rejected
There is no query parameter. Sending ?query=Siemens returns an unfiltered page of
companies with a 200, because the unrecognised parameter is dropped and no filter
remains. If a result set looks suspiciously large or unrelated, check your parameter
spelling first.
Matching well
- Strip the legal form before comparing. Compare against
raw_name, notname. - Use the city.
namepluscityresolves most ambiguity in one call. - Expect branches. A name that matches several entries at different courts is usually one business with registered branches, not a bad match.
- Score, do not guess.
total_countof 1 is a match;total_countof 40 means you need another field.
Then store the id
{ "id": "c359aa06-1ac0-4dab-9c60-d5c69a06ff2c" }Store that id. Names change, companies are renamed and re-registered, and register
numbers are reused across courts. The id is the only stable handle.