How do I programmatically check if a Norwegian company is active and registered?
Read the registration status and the organisational form from Enhetsregisteret, and treat them as two different questions. "Registered" means the entity exists in the register, which stays true through bankruptcy and dissolution. "Active" means it is currently trading and not subject to a distress flag. The verify endpoint reduces seven independent signals into a single verification_status of pass, warn, fail or unknown, and entity form matters too: an AS and an ENK carry different obligations.
What does an inactive or dissolved status look like?
It looks like a company that is still in the register. That is the part worth internalising: an entity does not disappear from Enhetsregisteret when it goes bankrupt or begins winding up, so a lookup that merely succeeds tells you almost nothing about whether you should extend credit. The signal you want is not the presence of a record but the state carried on it.
Three raw Brønnøysund flags carry the bad news: konkurs for bankruptcy, under_avvikling for voluntary dissolution in progress, and under_tvangsavvikling for forced dissolution. They are open fields, exposed both on the company context and on the keyless bulk status endpoint. The verify endpoint carries their inverses as not_bankrupt, not_under_dissolution and not_forcibly_dissolved, which is what lets a single verdict reduce over them without hiding which one tripped.
Signals are tri-state rather than boolean, and this catches people out. has_signing_authority_defined comes back null when nothing is visible in the open role data, which is different from a confirmed absence of signing authority. The overall verdict reflects that honestly through unknown. Map unknown to its own branch in your code, because folding it into either pass or fail converts missing evidence into a decision the data does not support.
How do I tell an AS from an ENK and why does it matter?
Read entity_type on the response, which carries the registered organisational form directly. The two you will meet most often are AS, the limited company, and ENK, the sole proprietorship. ANS, DA and NUF appear as well, and the obligations endpoint accepts all five.
The difference is structural rather than cosmetic. An AS is a separate legal person with share capital and a board, and it files annual accounts that become public, so a great deal about it is verifiable from open registers. An ENK is legally inseparable from its owner, who is personally liable for its obligations, and its authority structure is registered around an innehaver rather than around the signing combinations an AS carries. A check written on the assumption that every counterparty is an AS will read an ENK as missing data it never had.
Because obligations follow form, the generic obligation set is queryable by form alone. Call /api/v1/public/obligations?entity_type=AS, with no key, to get the template describing what generally applies to that form. That endpoint answers the template question rather than the specific one: whether a particular company has met a particular deadline is a different call against that company's own record.
How do I validate an organisasjonsnummer before calling?
Check the MOD-11 control digit locally. The organisasjonsnummer is nine digits, the first eight weighted by the sequence 3, 2, 7, 6, 5, 4, 3, 2 and the ninth acting as the check. Sum the weighted digits, take the remainder modulo 11, and subtract it from 11 to get the expected check digit. A remainder of zero means the check digit is zero, and a computed value of 10 means the number is not a valid organisasjonsnummer at all.
Do this before the call, because the endpoint will not do it for you. Verify validates shape only: anything that is not exactly nine digits comes back as a 400 with VALIDATION_FAILED, which is a fix-the-input error rather than a retryable one. The MOD-11 check is not applied server-side, so a checksum-invalid number that is still nine digits sails through validation and gets looked up for real.
Be clear about what the checksum does and does not prove. It proves the number is well-formed. It does not prove the company exists, is active, or is the one you meant, and because valid numbers are dense enough a typo can land on a real and completely unrelated company. When you hold a name rather than a number, resolve it through the company search described in the Brønnøysund guide rather than constructing a candidate.
| Property | AS (aksjeselskap) | ENK (enkeltpersonforetak) |
|---|---|---|
| Legal personality | A separate legal person, distinct from its owners. | Not separate from its owner. The business and the person are the same party. |
| Liability | Liability is limited to the company, which is the point of the form. | The owner is personally liable for the obligations of the business. |
| Annual accounts | Files annual accounts, which become publicly available through Regnskapsregisteret. | Generally outside that filing regime, so far less is verifiable from open registers. |
| Authority structure | Board and registered signing combinations, resolvable through the authority endpoint. | Registered around an innehaver rather than the signature combinations an AS carries. |
| What verification tells you | Status, distress flags, signing authority and accounts filing history. | Status and distress flags, with a thinner public record behind them. |
Make the first call
The sandbox request returns the full verify shape with no key. The TypeScript snippet validates the checksum locally first, then reads the signals rather than trusting the headline verdict alone.
# Zero-auth sandbox: the full verify shape, synthetic company.
curl -s https://www.apier.no/api/v1/sandbox/public/company/999999999/verify// Validate locally first: a bad checksum is a 400 you can avoid paying for.
function isMod11Valid(org: string): boolean {
if (!/^\d{9}$/.test(org)) return false;
const weights = [3, 2, 7, 6, 5, 4, 3, 2];
const sum = weights.reduce((acc, w, i) => acc + w * Number(org[i]), 0);
const remainder = sum % 11;
const check = remainder === 0 ? 0 : 11 - remainder;
return check !== 10 && check === Number(org[8]);
}
const res = await fetch(
"https://www.apier.no/api/v1/company/999999999/verify",
{ headers: { Authorization: `Bearer ${process.env.APIER_API_KEY}` } },
);
if (!res.ok) {
const { error_code, explanation } = await res.json();
throw new Error(`${error_code}: ${explanation.summary}`);
}
const { data } = await res.json();
// Registered is not the same as safe to trade with. Read the signals.
console.log(data.verification_status, data.signals.is_active,
data.signals.not_bankrupt, data.entity_type);Frequently asked questions
- Is a registered Norwegian company automatically an active one?
- No, and treating the two as the same is the most common error here. An entity stays in the register through bankruptcy and through dissolution, so a company can be perfectly findable and still be in no position to trade. Registration answers whether the entity exists. Activity is a separate question answered by the status field and the distress flags.
- How do I check whether a company is bankrupt?
- Read the raw distress flags konkurs, under_avvikling and under_tvangsavvikling, which are open Brønnøysund fields available on the company context and on the keyless bulk status endpoint. The verify endpoint exposes their inverses as the not_bankrupt, not_under_dissolution and not_forcibly_dissolved signals so a single verdict can reduce over them.
- What is the difference between an AS and an ENK?
- An AS is a limited company: a separate legal person with share capital, a board, and an obligation to file annual accounts. An ENK is a sole proprietorship, legally inseparable from its owner, who is personally liable for its debts. The distinction changes who can sign, what must be filed, and how much of the picture is public.
- Should I validate an organisasjonsnummer before calling?
- Yes, and for a stronger reason than saving a round trip. The verify endpoint validates shape only, rejecting anything that is not exactly nine digits with a 400 VALIDATION_FAILED. It does not run the MOD-11 check, so a mistyped but well-formed number passes validation and is looked up for real, coming back as a 404 or as a different company entirely. Only a local check catches that before it costs you.
- Can I check a company's status without an API key?
- Yes, in bulk. The zero-auth endpoint /api/v1/public/company-status accepts up to 100 organisation numbers and returns registry status, entity type, VAT registration, the distress flags and accounts filing status per number. The richer per-company verify verdict sits behind a key because the response reflects role data.