Norwegian VAT Number Validation API: MVA Format
Norwegian VAT numbers (MVA numbers) are based on the 9-digit organization number issued by the Bronnoysund Register Centre (Enhetsregisteret). This guide covers how Norwegian VAT numbers work, how validation works, and how Avatcado handles it for you.
What is a Norwegian VAT number?
A Norwegian VAT number consists of the country prefix NO, a 9-digit organization number, and the suffix MVA (Merverdiavgift, the Norwegian word for VAT). The full format is NO123456785MVA.
NO- country prefix- 9 digits - organization number (last digit is a MOD11 checksum)
MVA- indicates VAT registration
The organization number itself is assigned by the Bronnoysund Register Centre and is used for all official purposes in Norway, not just VAT. For the full format reference with a free checker, see the Norwegian VAT number format page.
Organization number vs MVA registration
Similar to the Swiss system, having a valid organization number does not mean the entity is VAT-registered. A company must register for MVA separately once their taxable turnover exceeds NOK 50,000. The Enhetsregisteret tracks both: the entity exists in the register, and the registrertIMvaregisteret field indicates whether they are MVA-registered.
Avatcado checks both. valid: true means the entity exists and is actively registered for MVA.
The Bronnoysund Register API
The Bronnoysund Register Centre (Bronnoysundregistrene) provides a free, open REST API for looking up Norwegian organizations at data.brreg.no. No authentication is required.
- Endpoint:
GET https://data.brreg.no/enhetsregisteret/api/enheter/{orgNumber} - Protocol: REST (JSON)
- Authentication: none
- No documented rate limit
- Returns: company name, address, MVA registration status, business activity codes
HTTP status codes, per the Enhetsregisteret API documentation:
- 200 - entity found (check
registrertIMvaregisteretfor VAT status) - 404 - organization number does not exist
- 410 - entity was removed for legal reasons (Fjernet av juridiske arsaker)
MOD11 checksum validation
The 9th digit of a Norwegian organization number is a MOD11 checksum. The algorithm uses weights [3, 2, 7, 6, 5, 4, 3, 2] on digits 1-8. If the remainder is 1, the number is invalid. If the remainder is 0, the check digit is 0.
Validating with Avatcado
Pass any Norwegian VAT number to the same endpoint you use for EU, UK, and Swiss numbers:
curl "https://api.avatcado.com/v1/validate?vat_number=NO923609016MVA" \
-H "Authorization: Bearer avat_live_YOUR_KEY"Response:
{
"data": {
"valid": true,
"vat_number": "NO923609016",
"country_code": "NO",
"company": {
"name": "EQUINOR ASA",
"address": "Forusbeen 50, 4035 STAVANGER"
},
"requested_at": "2026-03-26T12:00:00.000Z"
},
"meta": {
"request_id": "req_abc123"
}
}Avatcado normalizes all input formats:
NO923609016MVA,NO923609016, and923609016with anNOprefix all work- The MVA suffix is stripped automatically
- MOD11 checksum is validated before making the upstream call
- Results are cached, so repeat lookups skip the upstream call
SDK integration
The @avatcado/node SDK works the same way for Norwegian numbers as it does for every other country:
import Avatcado from "@avatcado/node";
const avatcado = new Avatcado("avat_live_YOUR_KEY");
const { data, error } = await avatcado.vat.validate({
vatNumber: "NO923609016MVA",
});
if (error) {
console.error(error.code, error.message);
} else if (data.data.valid) {
console.log(data.data.company?.name, data.data.company?.address);
} else {
// Org number exists but is not registered for MVA, or does not exist at all
console.log("Not a valid MVA registration");
}The avatcado Python package mirrors the same shape:
from avatcado import Avatcado
avatcado = Avatcado("avat_live_YOUR_KEY")
result = avatcado.vat.validate("NO923609016MVA")
if result.data.valid:
print(result.data.company.name)Onboarding several Norwegian suppliers at once? Use the batch endpoint (Pro and Business plans) instead of looping single requests:
curl -X POST "https://api.avatcado.com/v1/validate/batch" \
-H "Authorization: Bearer avat_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"vat_numbers": [
"NO923609016MVA",
"NO982463718MVA"
]
}'Limitations
- No consultation numbers. Consultation numbers are a VIES-specific concept for EU cross-border audit proof. Norway is not in VIES, so there is no Norwegian equivalent. Store the raw API response and timestamp as your audit trail instead.
- Undocumented upstream rate limits. The Bronnoysund Register does not publish a rate limit, which means it could change without notice. Avatcado's response cache keeps most repeat lookups from ever reaching the upstream API, insulating you from this uncertainty.
- 410 vs 404 both mean invalid. Per the Enhetsregisteret API documentation, the register distinguishes between an organization number that never existed (404) and an entity that was removed from the register for legal reasons (410). Avatcado normalizes both to
valid: false, so if you need to distinguish "never existed" from "removed" for compliance reasons, you will need to call the Bronnoysund API directly for that specific case. - MVA threshold differs from the EU. The NOK 50,000 registration threshold does not map directly to any EU country's VAT registration threshold. Do not assume a Norwegian counterpart to an EU reverse-charge rule without checking Norwegian tax guidance directly.
Norwegian VAT rates
Norway has three main VAT rates: 25% (standard), 15% (food), and 12% (transport, accommodation, cinema). These are available through the /v1/rates endpoint; see current Norwegian VAT rates for the full breakdown.
Test mode
Use a avat_test_ API key with these magic numbers:
NO123456785- valid, MVA-registeredNO987654325- valid org, not MVA-registeredNO999999999- simulates upstream error (503)
Get your API key and start validating Norwegian VAT numbers in under 2 minutes.
Frequently asked questions
What is a Norwegian MVA number?
An MVA (Merverdiavgift, the Norwegian word for VAT) number is a Norwegian organization number dressed for VAT purposes: the country prefix NO, the 9-digit organization number, and the suffix MVA, giving a full format like NO923609016MVA. The 9-digit core is assigned by the Bronnoysund Register Centre (Enhetsregisteret) and is used for all official purposes in Norway, not just VAT. Its last digit is a MOD11 checksum computed with the weights 3, 2, 7, 6, 5, 4, 3, 2 over the first eight digits, so many typos can be caught locally before any lookup. The MVA suffix signals VAT registration but is not part of the number's identity. Avatcado accepts NO923609016MVA, NO923609016, or the bare nine digits with an NO prefix, strips the suffix automatically, verifies the checksum, and then confirms against the register that the entity exists and is actively MVA-registered before returning valid: true.
Is the Bronnoysund Register API free to use?
Yes. The Enhetsregisteret API at data.brreg.no is completely free, requires no authentication or API key, returns plain JSON over REST, and is genuinely pleasant to integrate compared with SOAP-era registries like VIES or the Swiss BFS service. A lookup is a simple GET to /enhetsregisteret/api/enheter/{orgNumber}, returning the company name, address, MVA registration status (the registrertIMvaregisteret field), and business activity codes. The caveats are operational rather than financial. There is no documented rate limit, which cuts both ways: nothing to design around today, but nothing contractual stopping limits from appearing without notice. You also still need to handle the status code semantics (404 for an organization number that never existed, 410 for an entity removed for legal reasons) and check the MVA field yourself, since a 200 alone does not mean VAT-registered. Avatcado's cache keeps repeat lookups off the upstream API, insulating you from the undocumented-limit uncertainty.
What does a 410 response from the Bronnoysund API mean?
HTTP 410 (Gone) means the organization existed in the register but has been removed for legal reasons (the register's own phrase is 'Fjernet av juridiske arsaker'). It is deliberately distinct from 404, which means the organization number never existed at all. For VAT purposes the distinction rarely changes your decision, since neither a removed entity nor a nonexistent one supports an active VAT registration, so Avatcado normalizes both to valid: false and your billing logic can treat them identically. There is one situation where the difference matters: if you have a compliance requirement to distinguish 'this counterparty was deregistered' from 'this number was never real', for example when investigating fraud or cleaning historical records, that nuance is not surfaced through Avatcado's normalized response, so call the Bronnoysund API directly for that specific forensic case. For everyday checkout and invoicing flows, valid: false is the answer either way, and no special handling is needed.
Can a Norwegian company have an organization number but not be MVA-registered?
Yes, and it is common. Every Norwegian company gets an organization number from the Bronnoysund Register Centre for official purposes, but MVA registration is a separate step that only becomes mandatory once taxable turnover exceeds NOK 50,000, so small companies, holding entities, and dormant businesses routinely exist in the register with no VAT registration behind them. This mirrors the Swiss UID situation and is why a bare 'organization exists' check is not VAT validation. The register exposes the difference through the registrertIMvaregisteret field, and Avatcado checks it on every lookup: valid: true only comes back when the entity both exists and is actively MVA-registered, while an org number without MVA registration returns valid: false. In test mode you can exercise both sides of the gap: NO123456785 returns valid and MVA-registered, while NO987654325 returns a valid organization that is not MVA-registered, so your handling is testable without touching the live register.
Sources
- Enhetsregisteret API documentation Bronnoysund Register Centre, accessed August 13, 2026
- About the organisation number (modulus 11 check digit) Bronnoysund Register Centre, accessed August 13, 2026
- Register in the VAT Register (NOK 50,000 threshold) Norwegian Tax Administration, accessed August 13, 2026
- VAT rates Norwegian Tax Administration, accessed August 13, 2026
Related guides
Swiss VAT Number Validation API: CHE Format
How to validate Swiss and Liechtenstein VAT numbers using the BFS UID Register. Covers the CHE format, MWST/TVA/IVA suffixes, and the MOD11 checksum.
Australian GST Validation API: ABN and ABR Lookup
How to validate Australian ABNs and GST registration using the ABR Lookup service. Covers the ABN format, checksum algorithm, and checkout integration.
HMRC VAT Check API: OAuth, Examples & Error Handling
Integrate HMRC's Check a UK VAT Number API with OAuth client credentials, Node.js examples, verified lookups, and structured error handling.
Validate EU VAT Numbers via API: Developer Guide
Learn how to validate EU VAT numbers, plus UK, Swiss, Norwegian, and Australian VAT/GST, via REST API. Covers VIES, HMRC, TypeScript, Python, and test mode.