If you sell digital services — SaaS subscriptions, API access, online courses, software licenses — to customers in the EU, you are subject to EU VAT rules regardless of where your company is incorporated. Since July 2021, the Mini One Stop Shop (MOSS) was replaced by the broader One Stop Shop (OSS), changing both the threshold rules and the registration options. This guide explains what the current rules are, which regime applies to your business, and how to implement the correct VAT routing in your billing code.
What counts as a 'digital service' under EU VAT law
EU VAT law (Annex II to Directive 2006/112/EC) defines electronically supplied services as those 'delivered over the internet or an electronic network, the nature of which renders their supply essentially automated and involving minimal human intervention'. In practice, this covers virtually all software-as-a-service products.
- →SaaS subscriptions (project management, CRM, design tools, etc.)
- →API access (metered or subscription — any REST API sold as a product)
- →Online courses and e-learning platforms
- →Digital content streaming (video, music, podcasts)
- →Software license downloads and activation keys
- →Cloud storage and hosting services
- →Online marketplaces that facilitate digital goods or services
Note
If a human is meaningfully involved in delivering the service (consultancy, custom development, coaching), it may not qualify as an electronically supplied service. When in doubt, consult a EU VAT specialist for your specific product.
The B2B/B2C split: which regime applies
The most important thing to understand about EU VAT for digital services is that B2B and B2C transactions are governed by completely different rules. OSS and MOSS are strictly B2C mechanisms. Reverse charge is strictly a B2B mechanism. Both can apply to your business at the same time, for different customers.
| Customer type | VAT treatment | Your obligation | Mechanism |
|---|---|---|---|
| B2B: valid EU VAT number, different country | Reverse charge — buyer accounts for VAT | Invoice at 0%, validate via VIES | Reverse charge (Art. 196) |
| B2B: valid EU VAT number, same country | Standard domestic rate | Charge and remit local VAT | Domestic supply rules |
| B2C: EU consumer (no VAT number) | VAT at customer's country rate | Collect and remit via OSS | One Stop Shop |
| B2C: EU consumer, below €10k/year threshold | VAT at your country's rate | Remit locally until threshold | Home country rules |
| Non-EU customer | Generally out of scope | Check local rules | N/A for EU VAT |
OSS registration: when and why
The €10,000 EU-wide threshold for B2C digital services means that until your total B2C digital services revenue across all EU countries (excluding your home member state) exceeds €10,000 in a calendar year, you can choose to apply your home country's VAT rate and remit it locally. Once you exceed this threshold, you must charge VAT at each customer's country rate and remit via OSS.
OSS registration is done in one EU member state (typically your home country or the country where you have a fixed establishment). From there, you submit a single quarterly return covering all EU B2C VAT, and the OSS system distributes it to each member state. This replaces the old requirement to register for VAT in each country where you had customers.
What OSS does NOT cover
Note
OSS and reverse charge are separate regimes for separate customer types. OSS handles B2C VAT collection and remittance. Reverse charge handles B2B zero-rate supplies. A customer with a valid EU VAT number is never part of your OSS obligations — they account for VAT themselves via reverse charge.
Decision flowchart: which regime applies to each transaction
| Step | Check | If yes | If no |
|---|---|---|---|
| 1 | Is the customer in the EU? | Continue to step 2 | Outside EU VAT scope (check local rules) |
| 2 | Did the customer provide an EU VAT number? | Continue to step 3 | B2C — apply OSS rate for customer's country |
| 3 | Is the VAT number valid in VIES (status: active)? | Continue to step 4 | B2C — treat as unregistered consumer |
| 4 | Is the customer in a different member state from your seller entity? | B2B reverse charge (0%) | B2B domestic — apply standard domestic rate |
Developer implementation checklist
- 1.Add a VAT number field to your checkout and account settings UI
- 2.Validate the submitted VAT number in real time via the TaxID API before completing the order
- 3.Route the transaction: active VIES result → reverse charge; no number or invalid → OSS/B2C
- 4.Store the validation result (status + request_id) with the customer record
- 5.Generate invoices with the correct fields for the applicable treatment
- 6.Run a monthly re-validation job on all B2B customers with status: active
- 7.Register for OSS once your EU-wide B2C revenue approaches €10,000/year
type TaxTreatment = {
regime: 'reverse_charge' | 'oss_b2c' | 'domestic_b2b' | 'out_of_scope';
vatRate: number; // 0 for reverse charge, customer-country rate for OSS
reverseChargeNotation: boolean;
};
export async function determineTaxTreatment(
customerCountry: string,
sellerCountry: string,
vatNumber?: string
): Promise<TaxTreatment> {
const EU_COUNTRIES = ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR',
'DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE'];
if (!EU_COUNTRIES.includes(customerCountry)) {
return { regime: 'out_of_scope', vatRate: 0, reverseChargeNotation: false };
}
if (!vatNumber) {
const ossRate = await getOssVatRate(customerCountry);
return { regime: 'oss_b2c', vatRate: ossRate, reverseChargeNotation: false };
}
const { status } = await fetch(
`https://www.taxid.dev/api/v1/validate/${customerCountry}/${vatNumber}`,
{ headers: { Authorization: `Bearer ${process.env.TAXID_API_KEY}` } }
).then(r => r.json());
if (status !== 'active' && status !== 'service_unavailable') {
const ossRate = await getOssVatRate(customerCountry);
return { regime: 'oss_b2c', vatRate: ossRate, reverseChargeNotation: false };
}
if (customerCountry === sellerCountry) {
const domesticRate = await getDomesticVatRate(sellerCountry);
return { regime: 'domestic_b2b', vatRate: domesticRate, reverseChargeNotation: false };
}
return { regime: 'reverse_charge', vatRate: 0, reverseChargeNotation: true };
}Frequently asked questions
- →**If I'm outside the EU, do OSS rules still apply to me?** Yes. If you sell digital services to EU consumers, you are subject to EU VAT regardless of where your business is incorporated. Non-EU businesses can register for OSS via the Non-Union OSS scheme, which operates similarly to the EU OSS but has no €10k threshold.
- →**What happened to MOSS?** MOSS (Mini One Stop Shop) was replaced by OSS in July 2021. OSS covers not just digital services (B2C) but also goods sold via distance selling. If you were registered for MOSS, you were automatically moved to OSS.
- →**Does OSS registration affect my B2B reverse charge obligations?** No. OSS covers only B2C transactions. B2B reverse charge continues to operate independently under the same rules as before.
Related resources
Start validating EU VAT numbers
Free plan — 100 validations/month. No credit card required.