DOCS

Ship to the EU

Ship Japan Post parcels duty-prepaid to select EU destinations with the Zonos API, and choose how EU VAT is handled.

Starting October 1, 2026 (JST), your Verified Account can create Japan Post labels with duties prepaid, where the destination supports it, for these EU destinations: Denmark, France (including Monaco), Andorra, French overseas departments (Guadeloupe, French Guiana, Martinique), Sweden, Spain, Netherlands, Slovakia, Italy, Finland, Luxembourg, Estonia, and Malta.

Whether a shipment qualifies for DDP depends on the destination, the shipment's value, and whether it's a gift, and some postal-code areas are excluded. See EU country readiness for each destination's rules.

You use the same CreateDeclarationShipment workflow you use for U.S. shipments. For an EU shipment, change the destination address, and use two optional fields on landedCostCalculateWorkflow to choose how VAT is handled. If you use your own IOSS number, you also pass it in shipmentInput.references.taxCode so it is applied to the label. Everything else works exactly as described in Create a single shipment.

Key terms 

  • DDP (Delivered Duty Paid): Duties and taxes are paid before the parcel arrives, so your customer isn't asked to pay anything on delivery. Zonos ships DDP to supported EU destinations wherever the destination's rules allow it. See EU country readiness.
  • VAT (Value-added tax): The EU's consumption tax, charged on the goods, the shipping, and the duty. The rate depends on the destination country.
  • IOSS (Import One-Stop Shop): An EU registration that lets a seller collect VAT at the time of sale and pay it to the EU in one monthly filing, instead of VAT being collected when the parcel arrives. IOSS applies to shipments with goods valued at €150 or less. An IOSS number looks like IM followed by 10 digits.

Do you need your own IOSS number? 

No. If you don't have an IOSS number, you're set. Zonos has its own IOSS number. When you ship with your Zonos Verified Account, Zonos uses its IOSS number, charges you the VAT along with the duties, and remits the VAT to the EU on your behalf. Most merchants use this option.

Use your own IOSS number only if you already have one, or you sell through a marketplace that has one (for example eBay or Etsy) and you collect VAT from your customers at checkout. Passing your IOSS number tells Zonos not to charge you VAT a second time, because you (or your marketplace) will remit it.

↕Zonos' IOSS number (most merchants)↕Your own IOSS number↕
taxIdNumberLeave it outYour IOSS number
taxRemittanceCalculationREMITTANCEREMITTANCE for an estimate that includes VAT, NO_REMITTANCE to create the label
shipmentInput.references.taxCodeLeave it outYour IOSS number, when you create the label
Who collects and remits the VATZonosYou or your marketplace
What Zonos invoices youDuties, VAT, and feesDuties and fees
Your IOSS number applies only to shipments of €150 or less

Only pass your own IOSS number on shipments with goods valued at €150 or less. Zonos checks only the format (IM followed by 10 digits). If the format is invalid, Zonos ignores the number and uses its own IOSS number instead, so double-check the number you send.

Get a landed cost estimate 

Run the workflow through landedCostCalculateWorkflow without shipmentCreateWorkflow to see the duties, VAT, and fees for a shipment. Nothing is shipped and no label is created. The request is the same as Create a single shipment with an EU destination; only landedCostInput changes.

Using Zonos' IOSS number

Leave taxIdNumber out and set taxRemittanceCalculation to REMITTANCE. The estimate returns the EU duty, the VAT, and fees. This is what Zonos will invoice you, and Zonos remits the VAT under its IOSS number.

1{
2 "landedCostInput": {
3 "calculationMethod": "DDP",
4 "endUse": "NOT_FOR_RESALE",
5 "currencyCode": "EUR",
6 "taxRemittanceCalculation": "REMITTANCE"
7 }
8}

Using your own IOSS number

Pass your IOSS number in taxIdNumber. Choose taxRemittanceCalculation based on what you need:

  • REMITTANCE: The estimate returns the VAT, so you know how much to collect from your customer and remit under your own IOSS registration.
  • NO_REMITTANCE: Use this if you already have your own systems to calculate and collect VAT. The estimate returns no VAT, only the duties and fees Zonos will invoice you.
1{
2 "landedCostInput": {
3 "calculationMethod": "DDP",
4 "endUse": "NOT_FOR_RESALE",
5 "currencyCode": "EUR",
6 "taxIdNumber": "IM5281234567",
7 "taxRemittanceCalculation": "REMITTANCE"
8 }
9}

Full example: Estimate duties and taxes

A complete estimate request, from parties to landed cost, for a Japan to France shipment. The mutation is the same for both options; only the landedCostInput variables change.

1mutation EstimateLandedCost(
2$partyInput: [PartyCreateWorkflowInput!]!
3$itemInput: [ItemCreateWorkflowInput!]!
4$cartonInput: [CartonCreateWorkflowInput!]!
5$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!
6$landedCostInput: LandedCostWorkFlowInput!
7) {
8 partyCreateWorkflow(input: $partyInput) {
9 id
10 type
11 }
12 itemCreateWorkflow(input: $itemInput) {
13 id
14 }
15 cartonsCreateWorkflow(input: $cartonInput) {
16 id
17 }
18 shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {
19 id
20 amount
21 serviceLevel {
22 code
23 }
24 }
25 landedCostCalculateWorkflow(input: $landedCostInput) {
26 id
27 currencyCode
28 amountSubtotals {
29 duties
30 taxes
31 fees
32 shipping
33 landedCostTotal
34 }
35 duties {
36 amount
37 description
38 }
39 taxes {
40 amount
41 description
42 }
43 remittance {
44 amount
45 description
46 note
47 taxIdNumber
48 }
49 }
50}

Create a label 

Run the full CreateDeclarationShipment workflow, including shipmentCreateWorkflow, with an EU destination. Zonos creates the Japan Post label and tracking number, and invoices you after the parcel is inducted into the postal stream.

Using Zonos' IOSS number

Leave taxIdNumber and references.taxCode out and set taxRemittanceCalculation to REMITTANCE. You don't pass an IOSS number anywhere: Zonos applies its own IOSS number to the shipment by default, invoices you for the duties and the VAT, and remits the VAT to the EU.

{
  "landedCostInput": {
    "calculationMethod": "DDP",
    "endUse": "NOT_FOR_RESALE",
    "currencyCode": "EUR",
    "taxRemittanceCalculation": "REMITTANCE"
  }
}

Using your own IOSS number

Pass your IOSS number in two places:

  • landedCostInput.taxIdNumber, with taxRemittanceCalculation set to NO_REMITTANCE. Zonos does not charge you VAT on this shipment, because you have already collected it and will remit it under your own IOSS registration. Zonos invoices you for the duties and fees.
  • shipmentInput.references.taxCode. This applies your IOSS number to the Japan Post label.
{
  "landedCostInput": {
    "calculationMethod": "DDP",
    "endUse": "NOT_FOR_RESALE",
    "currencyCode": "EUR",
    "taxIdNumber": "IM5281234567",
    "taxRemittanceCalculation": "NO_REMITTANCE"
  },
  "shipmentInput": {
    "serviceLevel": "japan_post.air.ems_merchandise",
    "generateLabel": true,
    "contentsType": "ECOMMERCE_GOODS",
    "references": {
      "taxCode": "IM5281234567"
    }
  }
}
Using your own IOSS number? Pass it in both places

When you create a label with your own IOSS number, always pass it in both landedCostInput.taxIdNumber (with NO_REMITTANCE) and shipmentInput.references.taxCode. Missing either one can mean you're charged VAT you are remitting yourself, or your IOSS number isn't applied to the label. REMITTANCE with your own IOSS number is for estimates only.

Full example: Create a Japan Post label

A complete CreateDeclarationShipment request, from parties to label, for a Japan to France shipment. The mutation is the same for both options. With your own IOSS number, the variables change in two places: landedCostInput and shipmentInput.references.taxCode.

1mutation CreateDeclarationShipment(
2$partyInput: [PartyCreateWorkflowInput!]!
3$itemInput: [ItemCreateWorkflowInput!]!
4$cartonInput: [CartonCreateWorkflowInput!]!
5$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!
6$landedCostInput: LandedCostWorkFlowInput!
7$shipmentInput: ShipmentCreateWorkflowInput!
8) {
9 partyCreateWorkflow(input: $partyInput) {
10 id
11 type
12 }
13 itemCreateWorkflow(input: $itemInput) {
14 id
15 }
16 cartonsCreateWorkflow(input: $cartonInput) {
17 id
18 }
19 shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {
20 id
21 amount
22 serviceLevel {
23 code
24 }
25 }
26 landedCostCalculateWorkflow(input: $landedCostInput) {
27 id
28 currencyCode
29 amountSubtotals {
30 duties
31 taxes
32 fees
33 shipping
34 landedCostTotal
35 }
36 duties {
37 amount
38 description
39 }
40 taxes {
41 amount
42 description
43 }
44 remittance {
45 amount
46 description
47 note
48 taxIdNumber
49 }
50 }
51 shipmentCreateWorkflow(input: $shipmentInput) {
52 id
53 trackingDetails {
54 number
55 }
56 shipmentCartons {
57 label {
58 url
59 }
60 }
61 }
62}

Batch dispatch 

EU shipments can go on the same deferred-payment dispatch batch as your U.S. shipments. Set the IOSS fields on each shipment's landedCostCalculateWorkflow as shown above, then attach and close the batch as described in Batch dispatch.

Book a demo

Was this page helpful?


Get support·Legal docs·© 2026 Zonos