Canonical
GET /api/companies/:orgNumber/group
Corporate group tree for a Norwegian company. Walks up to the root via parentOrgNumber, then returns all descendants.
Request
GET /api/companies/:orgNumber/group
| Parameter | Type | Required | Description |
|---|---|---|---|
orgNumber |
string | yes | Path parameter. 9-digit Norwegian org number. |
Resolution: the handler walks parentOrgNumber up to 5 levels to find the group root, then returns the full tree via BFS, capped at 500 members. Only Norwegian records are supported — group structure is not available in the Finnish or Swedish registers via the free data set.
Response
{
"root": {
"orgNumber": "923609016",
"name": "EQUINOR ASA",
"orgFormCode": "ASA",
"employeeCount": 22000,
"children": [
{ "orgNumber": "987654321", "name": "EQUINOR ENERGY AS", "orgFormCode": "AS", "employeeCount": 4500, "children": [] }
]
},
"totalMembers": 47,
"_sources": {
"attribution": ["Brønnøysundregistrene"],
"fields": {
"companyCore": "Brønnøysundregistrene",
"groupHierarchy": "Brønnøysundregistrene"
}
}
}A single _sources block covers the whole tree — all hierarchy data comes from Brreg (parent/subsidiary linkage). See Attribution → _sources response field.
For companies with no parent and no subsidiaries, the response is a single-node tree with totalMembers: 1 and an explanatory message field.
Examples
curl
curl -H "Authorization: Bearer $ORAKEL_KEY" \
https://orakel.cloud/api/companies/923609016/groupJavaScript
const res = await fetch(
"https://orakel.cloud/api/companies/923609016/group",
{ headers: { Authorization: `Bearer ${process.env.ORAKEL_KEY}` } },
);
const { root, totalMembers } = await res.json();Error modes
| Status | Meaning | Action |
|---|---|---|
| 400 | orgNumber is not 9 digits |
Check the path segment |
| 401 | Missing or invalid API key | Check the Authorization header |
| 404 | Company not in the database | Call /api/companies/:orgNumber first to trigger a Brreg fetch |
| 429 | Rate or quota exceeded | Back off |
Rate limits
Per-key RPM per tier. A single group query may issue several DB passes; it still counts as one request against the quota.
Typical use cases
- Mapping a target account to the full group for account-based selling.
- Flagging records whose owner is already in your CRM (match on any
orgNumberin the tree). - Due-diligence: find every subsidiary of a holding company.