Brreg API
The Brreg API is the open-data interface to Enhetsregisteret, the Norwegian entity register run by Brønnøysundregistrene. It needs no key, no registration and no auth on the standard endpoints, and returns company identity, bankruptcy and dissolution flags, board roles and sub-entities.
Free and completely keyless on the standard endpoints. Licensed under NLOD, the Norwegian Licence for Open Government Data - free reuse with attribution. Read-only. Official docs: Brønnøysundregistrene - Enhetsregisteret API.
npx skills add Nolpak14/getregdata -g -y
Teaches your agent the endpoints, the auth pattern and the failure modes below - so it runs the check correctly rather than guessing. Read SKILL.md
What you get, for free
- Company profile
- organisasjonsnummer, navn, organisasjonsform (AS, ASA, ENK and so on), næringskode1 to 3 as NACE activity codes, registration and founding dates, forretningsadresse and postadresse, antallAnsatte and kapital.
- Status flags
- konkurs (bankruptcy), underAvvikling (dissolution) and underTvangsavviklingEllerTvangsopplosning (compulsory liquidation) - booleans that together give the distress read.
- Roller - board and officers
- Board members (styre), daglig leder (managing director) and other role types grouped by role, with person names.
- Sub-entities
- The underenheter - branches and establishments beneath a main entity, held in a separate collection.
Getting an API key
- There is nothing to do. No API key, no registration and no auth header on any standard endpoint.
- Be polite: there is no documented hard rate limit, but prefer the bulk download over hammering the API for large jobs.
- An extra autorisert-api adding birth-number identifiers requires Maskinporten auth - none of the basics need it.
# no auth header on any standard endpoint curl "https://data.brreg.no/enhetsregisteret/api/enheter?navn=equinor" # org number -> full record (Equinor ASA = 923609016) curl "https://data.brreg.no/enhetsregisteret/api/enheter/923609016" # org number -> board and officers curl "https://data.brreg.no/enhetsregisteret/api/enheter/923609016/roller"
Responses are HAL+JSON. Lists wrap results in _embedded with a page object and a _links.next to walk.
Endpoints
| Purpose | Call |
|---|---|
| Search entities by name | GET /enhetsregisteret/api/enheter?navn={name}&size=20 |
| Single entity by org number | GET /enhetsregisteret/api/enheter/{orgnr} |
| Roles, board and officers | GET /enhetsregisteret/api/enheter/{orgnr}/roller |
| Sub-entities of a parent | GET /enhetsregisteret/api/underenheter?overordnetEnhet={orgnr} |
| Single sub-entity | GET /enhetsregisteret/api/underenheter/{orgnr} |
| Bulk download of all entities | GET /enhetsregisteret/api/enheter/lastned |
Running a KYB check end to end
- 1 Resolve identity
Search by navn, read _embedded.enheter and take the organisasjonsnummer from the match. Skip if you already hold a 9-digit org number.
- 2 Confirm it is real and current
Fetch the entity and require all three status booleans to be false. Record organisasjonsform, næringskode1, registration date, forretningsadresse and antallAnsatte.
- 3 Who runs it
Fetch roller and read the styre group and daglig leder for the people in control.
- 4 Its footprint
Query underenheter by overordnetEnhet to list branches and establishments.
- 5 Distress signals
Any of the three booleans true is a flag. konkurs true means bankruptcy proceedings are open.
What bites people
Status is three booleans, not one field
konkurs is bankruptcy, underAvvikling is voluntary dissolution and underTvangsavviklingEllerTvangsopplosning is compulsory liquidation. All three false is the pass condition. Checking only konkurs misses a company being wound up.
Sub-entities are a separate collection
Branches and establishments never appear inside the main entity record - underenheter is its own endpoint. An org number with no hit under /enheter may still exist as an underenhet, and the reverse is also true.
The result set caps at 10,000 per query
Pagination is Spring HATEOAS with a page object and a _links.next, default size 20. You cannot page past 10,000 records - narrow the filter instead of trying.
Roles are per entity, with no cheap bulk feed
Each entity’s board comes from its own /roller call. A full roller dump exists but is a very large file - do not reach for it to answer one check.
The bankruptcy flag is a boolean, not a case file
Brreg tells you that proceedings are open, not the dates, creditors or stage. For the detail of an insolvency proceeding you need a source built for it.
The jurisdictions with no free equivalent
The UK is the outlier. Most European registers publish through portals built for people, not a general-purpose API - so the next jurisdiction you need probably has no free option. These read the official source live and return the same shape of structured record.
Does the Brreg API need an API key?
No. The standard Enhetsregisteret endpoints are completely open - no key, no registration, no auth header. Only the separate autorisert-api, which adds birth-number identifiers, requires Maskinporten authentication.
What is an organisasjonsnummer?
The 9-digit Norwegian organisation number, the canonical key for an entity. Take it verbatim from a name search and reuse it across the entity, roles and sub-entity endpoints.
How do I check whether a Norwegian company is bankrupt?
Read the konkurs boolean on the entity record, but check underAvvikling and underTvangsavviklingEllerTvangsopplosning too. All three false is the pass condition; any one true is a flag.
Is there a paid getregdata actor for Norway?
No. Brreg is genuinely open with no anti-bot wall, so there is nothing for a scraper to add. The free skill is the whole toolkit for Norway.