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.
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.
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↕
taxIdNumber
Leave it out
Your IOSS number
taxRemittanceCalculation
REMITTANCE
REMITTANCE for an estimate that includes VAT, NO_REMITTANCE to create the label
shipmentInput.references.taxCode
Leave it out
Your IOSS number, when you create the label
Who collects and remits the VAT
Zonos
You or your marketplace
What Zonos invoices you
Duties, VAT, and fees
Duties 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.
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.
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.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.
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.
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.
GraphQL API ReferenceTypes, inputs, and operations used in this guide
Ship to the EU
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
CreateDeclarationShipmentworkflow you use for U.S. shipments. For an EU shipment, change the destination address, and use two optional fields onlandedCostCalculateWorkflowto choose how VAT is handled. If you use your own IOSS number, you also pass it inshipmentInput.references.taxCodeso it is applied to the label. Everything else works exactly as described in Create a single shipment.Key terms
IMfollowed 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.
taxIdNumbertaxRemittanceCalculationREMITTANCEREMITTANCEfor an estimate that includes VAT,NO_REMITTANCEto create the labelshipmentInput.references.taxCodeOnly pass your own IOSS number on shipments with goods valued at €150 or less. Zonos checks only the format (
IMfollowed 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
landedCostCalculateWorkflowwithoutshipmentCreateWorkflowto 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; onlylandedCostInputchanges.Using Zonos' IOSS number
Leave
taxIdNumberout and settaxRemittanceCalculationtoREMITTANCE. 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.{"landedCostInput": {"calculationMethod": "DDP","endUse": "NOT_FOR_RESALE","currencyCode": "EUR","taxRemittanceCalculation": "REMITTANCE"}}Using your own IOSS number
Pass your IOSS number in
taxIdNumber. ChoosetaxRemittanceCalculationbased 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.{"landedCostInput": {"calculationMethod": "DDP","endUse": "NOT_FOR_RESALE","currencyCode": "EUR","taxIdNumber": "IM5281234567","taxRemittanceCalculation": "REMITTANCE"}}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
landedCostInputvariables change.mutation EstimateLandedCost($partyInput: [PartyCreateWorkflowInput!]!$itemInput: [ItemCreateWorkflowInput!]!$cartonInput: [CartonCreateWorkflowInput!]!$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!$landedCostInput: LandedCostWorkFlowInput!) {partyCreateWorkflow(input: $partyInput) {idtype}itemCreateWorkflow(input: $itemInput) {id}cartonsCreateWorkflow(input: $cartonInput) {id}shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {idamountserviceLevel {code}}landedCostCalculateWorkflow(input: $landedCostInput) {idcurrencyCodeamountSubtotals {dutiestaxesfeesshippinglandedCostTotal}duties {amountdescription}taxes {amountdescription}remittance {amountdescriptionnotetaxIdNumber}}}Create a label
Run the full
CreateDeclarationShipmentworkflow, includingshipmentCreateWorkflow, 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
taxIdNumberandreferences.taxCodeout and settaxRemittanceCalculationtoREMITTANCE. 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, withtaxRemittanceCalculationset toNO_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" } } }When you create a label with your own IOSS number, always pass it in both
landedCostInput.taxIdNumber(withNO_REMITTANCE) andshipmentInput.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.REMITTANCEwith your own IOSS number is for estimates only.Full example: Create a Japan Post label
A complete
CreateDeclarationShipmentrequest, 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:landedCostInputandshipmentInput.references.taxCode.mutation CreateDeclarationShipment($partyInput: [PartyCreateWorkflowInput!]!$itemInput: [ItemCreateWorkflowInput!]!$cartonInput: [CartonCreateWorkflowInput!]!$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!$landedCostInput: LandedCostWorkFlowInput!$shipmentInput: ShipmentCreateWorkflowInput!) {partyCreateWorkflow(input: $partyInput) {idtype}itemCreateWorkflow(input: $itemInput) {id}cartonsCreateWorkflow(input: $cartonInput) {id}shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {idamountserviceLevel {code}}landedCostCalculateWorkflow(input: $landedCostInput) {idcurrencyCodeamountSubtotals {dutiestaxesfeesshippinglandedCostTotal}duties {amountdescription}taxes {amountdescription}remittance {amountdescriptionnotetaxIdNumber}}shipmentCreateWorkflow(input: $shipmentInput) {idtrackingDetails {number}shipmentCartons {label {url}}}}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
landedCostCalculateWorkflowas shown above, then attach and close the batch as described in Batch dispatch.CartonCreateWorkflowInput ItemCreateWorkflowInput LandedCostWorkFlowInput PartyCreateWorkflowInput ShipmentCreateWorkflowInput ShipmentRatingCreateWorkflowInput
cartonsCreateWorkflow itemCreateWorkflow landedCostCalculateWorkflow partyCreateWorkflow shipmentCreateWorkflow shipmentRatingCreateWorkflow
Was this page helpful?