Guide6 min readAlberto García

Norway VAT Number (MVA) Validation API: Developer Guide

Norwegian VAT numbers end with 'MVA' and are registered with the Brønnøysund Register Centre — not VIES. This guide explains the format, validation endpoint, and how to handle all status codes.

norwaymvavatapiguide

Norway is not an EU member state, so Norwegian VAT numbers are not part of the EU VIES system. They are registered with the Brønnøysund Register Centre (Brønnøysundregistrene) and are formally called MVA numbers (Merverdiavgiftsnummer). If your application accepts VAT numbers from B2B customers across Europe, you need a validation endpoint that handles `NO`-prefixed numbers separately from EU countries.

Norwegian MVA Number Format

A Norwegian VAT number consists of an organisation number (9 digits) followed by the suffix `MVA`. The organisation number can be formatted with spaces (876 865 822) or without. When calling the TaxID API, pass the full number including the MVA suffix using the `NO` prefix.

FormatExampleNotes
NO + 9 digits + MVANO123456789MVAStandard format for API calls
With spacesNO 123 456 789 MVASpaces stripped automatically
Organisation number only123456789MVA suffix required — append it

Validating a Norwegian VAT Number

typescriptlib/validate-no-vat.ts
async function validateNorwegianVat(vatNumber: string) {
  // Normalise: strip spaces, ensure MVA suffix, uppercase
  let normalised = vatNumber.replace(/\s/g, '').toUpperCase();

  // Add NO prefix if missing
  if (!normalised.startsWith('NO')) normalised = 'NO' + normalised;
  // Add MVA suffix if missing (for org numbers entered without it)
  if (!normalised.endsWith('MVA')) normalised = normalised + 'MVA';

  const res = await fetch(
    `https://taxid.dev/api/v1/validate/NO/${normalised}`,
    { headers: { Authorization: `Bearer ${process.env.TAXID_API_KEY}` } }
  );

  return res.json();
}

// Usage:
const result = await validateNorwegianVat('NO 123 456 789 MVA');
// or:
const result2 = await validateNorwegianVat('123456789'); // MVA added automatically
pythonvalidate_no_vat.py
import os, re, requests

def validate_norwegian_vat(vat_number: str) -> dict:
    normalised = vat_number.replace(' ', '').upper()
    if not normalised.startswith('NO'):
        normalised = 'NO' + normalised
    if not normalised.endswith('MVA'):
        normalised += 'MVA'

    resp = requests.get(
        f'https://taxid.dev/api/v1/validate/NO/{normalised}',
        headers={'Authorization': f'Bearer {os.environ["TAXID_API_KEY"]}'},
        timeout=5,
    )
    resp.raise_for_status()
    return resp.json()

What the Response Means

`status: 'active'` means the organisation is registered for MVA in the Brønnøysund Register Centre. The `company_name` field returns the legal entity name from the register. For B2B transactions between a Norwegian business and an EU business, the Norwegian entity is treated as a third-country buyer and EU VAT rules for exports apply — Norwegian MVA validation is not the same as EU reverse charge.

Note

For EEA-related transactions: Norway is part of the European Economic Area (EEA) but not the EU. Norwegian businesses do not participate in EU VAT reverse charge. If you sell digital services to Norwegian consumers, you may need to register for Norwegian VAT under the VOEC scheme (Value Added Tax on Electronic Commerce) for sales over NOK 50,000/year.

Start validating EU VAT numbers

Free plan — 100 validations/month. No credit card required.

AG
Alberto García

Founder, TaxID

Building EU VAT validation tools for developers. Obsessed with compliance automation and developer experience.