Eligibility and the EUR 150 rule

Intrinsic value

The EUR 150 ceiling is tested against the consignment’s intrinsic value: the price of the goods themselves, excluding transport and insurance costs when they are separately stated, and excluding taxes (Article 1(48) UCC-DA). In WooCommerce terms:

  • A separate shipping line is excluded — only product line totals count.
  • “Free shipping” bundled into product prices counts, because it is not separately indicated.
  • Discounted line totals count as charged — a coupon that brings goods under EUR 150 genuinely brings the consignment under the ceiling.

So a EUR 145 cart with EUR 20 shipping on its own line is IOSS-eligible; the same goods at EUR 165 with free shipping are not.

Per consignment, not per order

Legally the test applies per consignment — goods dispatched together under one transport contract. The plugin’s v1 rule is one order = one consignment, which matches how most stores ship. If you split an order into multiple shipments, each shipment is legally its own consignment; the plugin does not model splits, so assess those cases manually. Deliberately splitting orders to duck under EUR 150 is an anti-abuse red flag for customs — don’t.

Fixed at payment acceptance

The EUR 150 test and all captured amounts use the ECB daily exchange rate on the day payment is accepted (Article 91(2) VAT Directive). The rate and EUR values are persisted on the order, so a later rate move never shifts an order in or out of the scheme, and the EUR value is available for the commercial invoice — the recommended defense against being re-assessed at customs. See Currency conversion.

What the plugin checks, in order

Every cart and order goes through the same sequence; the first failing check decides the outcome:

  1. Setup complete — no assessment happens until the plugin is configured (establishment, ship-from, rates).
  2. Destination — must be an EU VAT destination. Northern Ireland (GB + BT postcode) maps to XI and counts; territories outside the EU VAT area (Canary Islands, Ceuta, Melilla, Åland, French overseas departments, Büsingen, Heligoland, Livigno, Campione d’Italia, Mount Athos) are excluded by postcode.
  3. Ship-from — goods dispatched from inside the EU are out of scope (that is OSS, not IOSS).
  4. Excise goods — any product flagged as excise blocks the whole consignment. See Excise goods.
  5. B2B — a business buyer with a VAT number falls outside IOSS (B2C-only scheme). See Marketplaces and B2B.
  6. Marketplace — marketplace-facilitated orders belong on the marketplace’s return, not yours.
  7. The EUR 150 ceiling — intrinsic value in EUR at the captured ECB rate must not exceed EUR 150.
  8. FX availability — if no ECB rate could be obtained for a non-EUR order, the order is marked fx_unavailable and treated as not eligible rather than guessed at.

Exclusion reasons on orders

Every assessed order records its outcome. The IOSS column in the orders list shows eligible vs. excluded at a glance, and the order meta box spells out the detail: the eligibility verdict, the why-excluded reason (over-ceiling, ship-from-EU, excise, marketplace, B2B, non-EU destination, FX unavailable), the intrinsic value in EUR, the VAT captured, and the FX rate used.

Excluded orders are still recorded — they simply never enter your monthly figures. If an order looks misclassified, check its meta box first; the reason usually points straight at the cause (a missing excise flag, a marketplace import, or an address in an excluded territory).

Developers can adjust the verdict via the ioss_eligibility_decided filter, and the ceiling itself is filterable (ioss_consignment_ceiling_eur) ahead of its planned abolition around 2028.