Skip to content
Apier

How do I check if a company is registered in the Norwegian VAT register (Merverdiavgiftsregisteret) via API?

Read the mva_registered flag, which is an open field needing no delegation. VAT registration is a separate register from company registration: every VAT-registered business is in Enhetsregisteret, but plenty of registered companies are not in Merverdiavgiftsregisteret. The flag is returned on the company context, as a verification signal, and per row on the zero-auth bulk status endpoint. When the same organisation number is used as a VAT identifier it is written with an MVA suffix.

A large rectangle labelled Enhetsregisteret, described as every registered entity, containing a smaller highlighted rectangle labelled Merverdiavgiftsregisteret with mva_registered set to true and the example organisation number 999999999MVA. A note below the outer rectangle says the number is written with an MVA suffix.Enhetsregisteretevery registered entityMerverdiavgiftsregisteretmva_registered: true999999999MVAwritten with an MVA suffix
The VAT register is a strict subset. Every VAT-registered business is a registered entity, and assuming the reverse is the single most common error when reading Norwegian company data.

What is the MVA registration threshold?

Registration is triggered by taxable turnover crossing a threshold within a rolling twelve-month period, rather than by a calendar year or by a decision the business makes at incorporation. The ordinary threshold is commonly stated as NOK 50,000, with a higher figure applying to certain charitable and non-profit activity. Confirm the current figures with Skatteetaten before relying on them in code: they are set in legislation and they change, and this page is not the authority on them.

The rolling window is the part that trips up automated reasoning. A business can cross the threshold mid-year and become liable to register from that point, which means VAT status is a property that changes during a company's life rather than a fixed attribute set when it was formed. Any cached answer about VAT status therefore has a shelf life, and a system that reads it once at onboarding will be wrong about some customers within months.

Because the threshold is about taxable turnover rather than revenue in general, you cannot reliably derive VAT status from financial figures you happen to hold. Read the registered flag instead of inferring it. That is exactly why mva_registered is exposed as an open field: the register already answers the question, and reconstructing it from turnover would be both harder and wrong.

Why is a company registered but not MVA-registered?

Because the two registrations answer different questions. Entering Enhetsregisteret establishes that a legal entity exists. Entering Merverdiavgiftsregisteret establishes that the entity collects and remits VAT. A company is created before it trades, so there is normally a period, and for some businesses a permanent state, in which the first is true and the second is not.

Three situations account for most of what you will see. A new company has not yet reached the threshold. A small business never reaches it. Or the activity itself falls outside the VAT regime, which applies to certain exempt sectors regardless of size. From the API's point of view these are indistinguishable: mva_registered is false in all three cases, and the flag does not carry a reason.

Treat a false value as information rather than as a red flag. It is routine, and reading it as a warning sign will produce false positives on exactly the small and new companies where the signal is least meaningful. The genuinely useful negative signals are the distress flags covered in the guide on checking whether a company is active, which mean something quite different.

How does MVA registration change filing obligations?

It adds a recurring reporting cycle the company did not previously have. A VAT-registered business submits an MVA-melding on a schedule, ordinarily across six terminer in a year, reporting VAT collected and VAT paid. A company that is not VAT registered does not file that return at all, so this is a difference in kind rather than in volume.

That makes mva_registered a useful input to any deadline or obligation logic you build. The canonical deadline set for a year, including the six MVA terminer, is available without a key from /api/v1/public/deadlines, and the generic obligation template for an entity form comes from /api/v1/public/obligations. Both answer the template question rather than the company-specific one, which is the right division: what generally applies is public, what a specific company owes depends on facts about that company.

One asymmetry is worth remembering when you design your data model. Whether a company is VAT registered is open and free to read, but the date it registered sits in the gated commercial tier and needs an active delegation for that organisation. If your logic depends on when registration happened rather than whether it happened, that is a delegation requirement, and discovering it late is a more disruptive surprise than it looks.

Make the first call

The bulk status request below is genuinely keyless and returns the VAT flag per row. The TypeScript snippet reads it from the company context and shows where the gated tier begins.

# Zero-auth: mva_registered comes back per row, no key needed.
curl -s "https://www.apier.no/api/v1/public/company-status?org_numbers=999999999"
// mva_registered is an OPEN field. No delegation required to read it.
const res = await fetch(
  "https://www.apier.no/api/v1/company/999999999/context",
  { 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();

if (data.mva_registered) {
  // Registered for VAT: expect MVA-melding obligations on the six terminer.
} else {
  // Registered as a company, but below or outside the VAT regime.
}

// The registration DATE is a gated Tier 2 field, unlike the flag above.
console.log(data.data_tier, data.tier_2 === null ? "no delegation" : "tier 2");

Frequently asked questions

How do I check if a Norwegian company is VAT registered?
Read the mva_registered boolean. It is an open field, available without a delegation, on the company context, on the verification signals, and per row on the zero-auth bulk status endpoint. A true value means the company appears in Merverdiavgiftsregisteret; false means it does not.
What does the MVA suffix on an organisation number mean?
It marks the number as a VAT registration. The same 9-digit organisasjonsnummer is written with MVA appended when it is used as a VAT identifier, for example on an invoice. It is not a second, separate number, so strip the suffix before using the value as a lookup key.
Why is a company registered but not VAT registered?
Usually because it has not yet passed the registration threshold, or because what it sells falls outside the VAT regime. Registration in Enhetsregisteret and registration for VAT are two different events with two different triggers, so a new or small company is commonly in the first register and not the second.
Can I read the VAT registration date through the API?
Not from the open tier. Whether a company is VAT registered is an open field that needs no delegation, but when it was registered sits in the gated commercial tier and requires an active delegation for that organisation. That split catches people out because the two facts feel like they belong together.
Does VAT registration change what a company must file?
Yes. A VAT-registered business reports VAT on a recurring cycle, ordinarily across six terminer in a year, which is an obligation a non-registered company does not carry at all. The canonical deadline set for a given year, including those terminer, is available from the zero-auth deadlines endpoint.