vatverify home
All guides

OSS and IOSS implementation guide for cross-border B2C sellers

How OSS and IOSS work for cross-border B2C sales to EU consumers, when each scheme applies, the €10,000 and €150 thresholds, and the integration patterns that hold up under audit. Builds on the validation flow.

TL;DR

  • OSS (One-Stop-Shop) lets EU sellers report VAT on cross-border B2C sales of goods and services to other EU consumers through a single quarterly return, charged at the destination country's rate.
  • IOSS (Import One-Stop-Shop) is the parallel scheme for distance sales of imported goods up to €150 to EU consumers; the seller charges destination VAT at checkout instead of leaving customs to collect it at the border.
  • The B2B reverse-charge mechanism does not apply to either scheme. OSS and IOSS are strictly B2C.
  • The €10,000 EU-wide distance-sales threshold (for goods plus telecommunications, broadcasting, and electronic services) decides whether OSS applies. The €150 per-consignment intrinsic-value cap decides whether IOSS applies.

What problem these schemes solve

Before 2021, an EU seller crossing the per-country distance-selling threshold (€35,000 in most countries, €100,000 in some larger ones) was required to register for VAT in that destination country, file a domestic VAT return there, and remit the destination's VAT. A seller crossing several thresholds at once needed several VAT registrations, several local accountants, and several filing schedules.

The 2021 reform replaced this fragmented model with two unified schemes:

  1. OSS (Union): a single registration in the seller's home member state covers all intra-EU B2C distance sales of goods and services. One quarterly return reports VAT for all destination countries; the seller's home tax authority distributes the collected VAT to each destination.
  2. IOSS: a parallel registration for B2C distance sales of imported goods up to €150 per consignment. The seller charges destination VAT at checkout and reports through a single monthly IOSS return; parcels clear customs without further VAT collection if they reference the IOSS number.

A third scheme, Non-Union OSS, applies to non-EU sellers supplying B2C services to EU consumers (a US SaaS company selling to EU consumers, for example). It rolled out of the 2015 MOSS scheme into OSS in 2021 with broader scope.

Every modern cross-border EU e-commerce stack ships with at least one of these schemes wired into its tax engine; the question is which scheme, and the trigger conditions for switching between them.

OSS: the €10,000 threshold

A seller below the €10,000 EU-wide threshold charges VAT at the seller's domestic rate on intra-EU B2C distance sales. Above it, OSS applies and the destination country's rate is charged.

Three details about the threshold worth knowing:

  1. EU-wide, not per-country. The threshold sums across all destination countries. A seller with €4,000 of intra-EU B2C sales to France plus €7,000 to Germany has crossed the threshold; both flows go through OSS afterwards.
  2. Goods plus TBE services. Telecommunications, broadcasting, and electronically supplied services (TBE) count toward the threshold, as do distance sales of goods. Other cross-border B2C services follow general place-of-supply rules independently.
  3. One-year carry-over. Once a seller crosses the threshold in a given calendar year, OSS applies for the rest of that year and the entire following year regardless of subsequent volume. Under the threshold for two consecutive years, the seller can opt back to domestic-rate charging.

The threshold counter is a domain object worth modeling explicitly:

interface OssThresholdState {
  year: number;
  euB2cSalesYtd: number;
  thresholdCrossedAt: Date | null;
  ossActiveUntil: Date;  // end of the year following the crossing
}

function shouldUseOss(state: OssThresholdState, now: Date): boolean {
  if (state.thresholdCrossedAt && now <= state.ossActiveUntil) return true;
  return state.euB2cSalesYtd >= 10_000;
}

A common pitfall: tracking the threshold per-store rather than per-legal-entity. A seller operating multiple stores under one VAT number has one threshold counter across all stores combined.

OSS: the per-country rate matrix

When OSS applies, the destination country's standard or reduced rate determines what the seller charges. This means the seller's invoicing engine needs:

  1. The destination country (derived from the buyer's address; see place-of-supply evidence requirements below).
  2. The applicable rate matrix for that country.
  3. The category-to-rate mapping for the goods or services being sold.

Hardcoding the rate matrix as constants will go stale within 12 to 18 months on average. Several countries have changed rates in 2024-2025: Switzerland 8.1% (Jan 2024), Estonia 22% (Jan 2024) and 24% (Jul 2025), Finland 25.5% (Sep 2024), Czechia 12% reduced (Jan 2024), Slovakia 23% (2025). See the EU VAT rates 2026 page for the current rate table.

vatverify exposes per-country rates through /v1/rates/{country} with date-aware lookups; that decouples the rate logic from your release cadence.

OSS: place-of-supply evidence

For B2C digital services, the consumer's country drives the place of supply, which drives the rate. EU rules require the seller to maintain at least two non-contradictory pieces of evidence of the consumer's location. Acceptable evidence types:

  • The buyer's billing address.
  • The IP address used to place the order.
  • The country of the payment-method issuer (BIN-derived for cards, IBAN-derived for SEPA).
  • The country code of the SIM card (for telecommunications).
  • The fixed land-line location of the service.

Three matching signals out of three is the strongest defensible position; two-of-three is the regulatory minimum. Storing the evidence alongside the order record is what makes the audit-trail reconstructible.

IOSS: the €150 threshold

IOSS applies to distance sales of imported goods with an intrinsic value of €150 or less per consignment. Two details worth knowing:

  1. Intrinsic value, not invoice total. Transport and insurance shown separately on the invoice are excluded from the threshold calculation. A €140 product with €15 shipping is in scope (intrinsic value €140); a €151 product is out.
  2. No per-customer counter. Unlike the OSS €10,000 threshold, IOSS applies per-consignment. A single consumer ordering twenty €100 items in separate parcels stays within IOSS for each one.

Above €150, the IOSS scheme is unavailable. Goods enter through the standard import process and customs collects VAT (and often a handling fee from the postal carrier) before releasing the parcel to the consumer.

IOSS: the IM number

An IOSS registration produces a 12-character identifier starting with IM, e.g. IM1234567890. The number is quoted on the customs declaration so the parcel clears without further VAT collection.

Two integration points to handle correctly:

  1. The IOSS number must accompany the customs data. Postal and courier carriers (DHL, UPS, FedEx, La Poste, Royal Mail) accept the IOSS number through their structured shipping APIs. Without the number on the declaration, the parcel falls back to standard import treatment and the consumer is charged again at the border.
  2. The IOSS number is not in VIES. It is issued by a single member state of identification and validated through the EU's dedicated IOSS registry lookup (ec.europa.eu/taxation_customs/dds2/eos/iosss_consultation.jsp). vatverify currently does not validate IOSS numbers; for that flow the EU portal is the right tool.

IOSS: who registers for it

A non-EU seller registering for IOSS typically needs an EU-established intermediary. The intermediary holds the IOSS number on the seller's behalf and is jointly liable for VAT collection and reporting. Several specialist providers operate as IOSS intermediaries; many e-commerce platforms (Shopify Markets Pro, others) bundle intermediary services as part of their cross-border offering.

EU-established sellers can register for IOSS directly without an intermediary. The single-MS-of-identification model means one IOSS registration covers all EU consumer destinations.

When neither scheme applies

Two cross-border B2C scenarios fall outside both OSS and IOSS:

  1. B2C sales below the €10,000 threshold. Charge the seller's domestic VAT rate. Domestic VAT return reports the sale.
  2. B2C imports above €150. Standard customs flow; no IOSS. Customs collects VAT at the border, the consumer pays it before release.

Beyond those, B2B reverse-charge applies for B2B cross-border, and the seller's domestic rate applies for B2C domestic sales. There are no other primary cases inside the EU.

Decision tree

Is the buyer a consumer (no VAT number)?
├─ No (B2B with valid VAT) → reverse charge (see /guides/reverse-charge-vat-explained)
└─ Yes (B2C)
   └─ Are the goods imported from outside the EU?
      ├─ Yes
      │  └─ Is the consignment intrinsic value <= €150?
      │     ├─ Yes → IOSS: charge destination VAT at checkout
      │     └─ No  → standard import: customs collects VAT at border
      └─ No (intra-EU)
         └─ Is the seller's EU-wide B2C YTD >= €10,000?
            ├─ Yes → OSS: charge destination VAT
            └─ No  → charge seller's domestic VAT rate

Audit trail

Both schemes require seller-side record retention. Specifics vary by member state of identification but the common floor is 10 years for OSS and IOSS records.

Per-order, persist:

  • The decision tree branch that fired (OSS, IOSS, domestic, B2B reverse-charge).
  • The buyer location evidence (at least two non-contradictory signals for digital services).
  • The applicable rate and the rate's effective date.
  • For IOSS, the consignment intrinsic value and the IOSS number used.

vatverify retains the validation-side records (VAT number lookups, registry responses, consultation numbers); the OSS and IOSS reporting records live in your accounting or tax system.

What this guide does not cover

  • Filing the OSS or IOSS return itself. That is a tax-administration submission, not an API call.
  • Choosing an IOSS intermediary. Several specialist providers exist; selection is a procurement and pricing question outside vatverify's scope.
  • Pre-2021 MOSS recordkeeping. MOSS records remain in scope for periods up to 30 June 2021; corrections to those returns continue to flow through the original member state of identification.

Validate VAT in three lines.

Free up to 500 requests per month. No credit card.

Start free