The lookup endpoint

GET https://firmatal.dk/api

There is one. It returns a single company. country is required, and exactly one search parameter must be supplied.

Query parameters

Parameter Required Meaning
country yes dk or no. Which register to search.
vat one of these Registration number. 8 digits in Denmark, 9 in Norway.
name one of these Company name. Fuzzy, accent-insensitive.
produ one of these Production-unit number.
phone one of these Phone number, 8 digits.
ean one of these E-invoicing identifier (Peppol / EAN). Resolves to the registered company.
address one of these Street address. Returns the best-matching company at that address.
search one of these Any of the above. The type is detected from the value.
include no Comma-separated: owners, production_units, einvoicing.
format no json (default) or xml.

Registration numbers are strings.

A leading zero is significant. 01234567 and 1234567 are different companies. Never store one as an integer.

How search decides

If you pass search instead of a named parameter, the type is inferred: a number of the register's own length is a registration number, ten digits in Denmark is a production unit, eight digits is a phone number, and anything else is a name. When you know what you are looking for, name it — the inference is a convenience, not a contract.

Typed endpoints

Every search type is also its own endpoint, taking the term as q. Same response, same country/include/format parameters, but nothing is ever inferred — /api/name?q=12345678 searches names, not registration numbers.

GET https://firmatal.dk/api/vat?q=12345678&country=dk
GET https://firmatal.dk/api/name?q=b%C3%B8gh&country=dk
GET https://firmatal.dk/api/produ?q=1234567890&country=dk
GET https://firmatal.dk/api/phone?q=33112233&country=dk
GET https://firmatal.dk/api/ean?q=5798009811578&country=dk
GET https://firmatal.dk/api/address?q=Bredgade+12,+8000+Aarhus&country=dk