International shipping involves navigating country-specific customs regulations, tax requirements, and documentation standards. This guide covers the most common requirements for shipping to major destinations worldwide.
NOTE:
This is not a comprehensive guide for all countries. Requirements change frequently - always verify current regulations with your carrier and destination country customs authority.
For detailed information about tax identifiers (VAT, EORI, IOSS, etc.), see our Tax Identifier Numbers guide.
For information about creating international shipments, see the Create Labels and Create Shipments guides.
The EU has specific requirements for customs descriptions, harmonization codes, and de minimis thresholds that apply to all member countries.
Beginning February 2, 2026, the European Union will enforce enhanced customs description requirements. The new requirements include a list of Stop Words - generic descriptions that prevent customs authorities from clearly identifying the nature of imported goods. Using these words alone increases the risk of delays and rejections under ICS2. They may only be used if incorporated into a clear and accurate product description.
Stop words include:
- Aid products
- Commercial
- Consumption
- Ensemble
- Fake
- Item
- Headwear
- Promotional
- Oddments
- N/A
- Miscellaneous
Tips for Clear Customs Descriptions
A good description is simple and specific. It should enable easy identification of the goods and accurate HS code classification. Avoid brand names, colors, serial numbers, or internal product codes. Descriptions that are too generic or overly technical are considered insufficient.
Your customs description should answer:
- What is the product?
- What are the product's essential characteristics?
- What is the product made from?
- How is it presented to customers?
In the API: Provide clear, specific descriptions in the packages[].products[].description field for each product when creating labels.
As of March 1, 2023, the European Union requires Harmonized System Codes (HS Codes) for all items in shipments entering EU member countries. This requirement is part of the EU's ICS2 reform and applies regardless of which carrier you use.
Failure to provide HS codes could result in:
- Shipment delays
- Fines or penalty fees
- Customs holds
In the API: Include HS codes in the packages[].products[].harmonized_tariff_code field for each product when creating labels.
Resource: Harmonized Tariff Schedule from the U.S. International Trade Commission.
Effective July 1, 2026, the European Union will remove the de minimis duty exemption for qualifying low-value imports. Previously, qualifying shipments valued at €150 or less could enter duty-free. As a result, qualifying business-to-consumer (B2C) shipments valued at €150 or less may be subject to a €3 customs duty for each unique HS code included in the shipment.
B2B shipments are exempt. This duty, and the Product Identifiers requirement below, only apply to business-to-consumer (B2C) shipments — where the recipient is not VAT-registered in the destination country. Business-to-business (B2B) shipments (VAT-registered recipient) are not subject to either requirement.
This requirement applies to shipments that:
- Originate outside the European Union.
- Are shipped to an EU member country.
- Have a declared value of €150 or less.
In the API: To comply, qualifying shipments require a Movement Indicator. Send the Movement Indicator value in the advanced_options.movement_indicator field when creating qualifying labels.
| Movement Indicator | Use for |
|---|---|
b2b | Business-to-business shipments |
b2c | Business-to-consumer shipments |
c2b | Consumer-to-business shipments |
c2c | Consumer-to-consumer shipments |
Example:
{
"shipment": {
"advanced_options": {
"movement_indicator": "b2b"
}
}
}NOTE:
We recommend using the
advanced_options.movement_indicatorfield for new integrations. The previousadvanced_options.windsor_framework_details.movement_indicatorfield remains supported during the transition period.
Non-compliance: Missing or incorrect Movement Indicator data can result in the shipment being held, delayed, or rejected at customs. The €3 duty is non-refundable, including on returns, regardless of whether your data was correct.
Effective November 1, 2026, every product in a business-to-consumer (B2C) shipment to the EU — regardless of value — must carry three Product Identifiers (PIDs) so customs authorities can identify exactly what is being imported. This requirement does not apply to business-to-business (B2B) shipments.
| PID | What it is | In the API |
|---|---|---|
| M-PID (Merchant Product ID) | Your own internal product identifier — typically your SKU. | packages.products.sku |
| NS-PID (Non-Standardized Manufacturer Product ID) | The manufacturer's own model or part number. Does not follow an international standard. Contact your manufacturer or supplier and ask for the product's model number or part number — if they haven't assigned one yet, ask them to. | packages.products.manufacturer_ns_product_id |
| S-PID (Standardized Product ID) | An internationally recognized code — GTIN, EAN, UPC, or ISBN — or, when one isn't available, a Manufacturer Part Number (MPN) or your own SKU. Use undefined if the identifier type doesn't fit any of these. | packages.products.manufacturer_product_id + packages.products.manufacturer_product_id_type (enum: gtin, ean, isbn, upc, mpn, sku, undefined) |
For each product line in a shipment, provide:
packages.products.sku→ your M-PIDpackages.products.manufacturer_ns_product_id→ your NS-PIDpackages.products.manufacturer_product_idandpackages.products.manufacturer_product_id_type→ together, your S-PID
NOTE: PIDs are per product variant
Assign PIDs to every distinct product variant (color/size combination). Batch-level or lot-level identifiers will be rejected at customs.
Example:
{
"shipment": {
"advanced_options": {
"movement_indicator": "b2c"
},
"packages": [
{
"package_code": "parcel",
"weight": {
"value": 0.236,
"unit": "kilogram"
},
"dimensions": {
"unit": "centimeter",
"length": 10,
"width": 10,
"height": 10
},
"label_messages": {
"reference1": "TEST123456789"
},
"products": [
{
"quantity": 1,
"description": "Test product 1",
"value": {
"amount": "65",
"currency": "EUR"
},
"country_of_origin": "GB",
"manufacturer_product_id": "1234567890",
"manufacturer_product_id_type": "gtin",
"manufacturer_ns_product_id": "0987654321",
"sku": "8379892",
"harmonized_tariff_code": "95134569",
"item_weight": {
"weight_in_grams": 1200
}
}
]
}
]
}
}Voluntary early adoption: You'll be able to provide PIDs voluntarily starting July 1, 2026, so it will be safe to start entering and testing this data once that window opens — there's no penalty for omitting PIDs before November 1, 2026.
Carrier rollout varies: ShipStation can transmit M-PID, NS-PID, and S-PID data to carriers, but each carrier is enabling this capability on its own timeline.
When shipping internationally, you choose who pays duties at delivery: the sender (Delivered Duty Paid, or DDP) or the recipient (Delivered Duty Unpaid, or DDU).
With the new flat-rate EU duty applying to every qualifying B2C shipment, DDU means your EU customers receive a charge request before they can collect their package — creating friction and, in some cases, refused deliveries that come back to you. DDP keeps the experience clean: you control the cost, build it into your pricing, and your customer receives their order without surprise charges.
In the API: Use the delivered_duty_paid advanced option to indicate the shipment is DDP.
ShipStation also offers Guaranteed Prepaid Duties and Taxes, letting you pay all applicable duties, taxes, and fees upfront so your customers never face surprise charges at delivery. As long as your shipment details are accurate, the quoted duties, taxes, and fees are locked in, with no adjustments to those charges after the fact.
Some details of these requirements are not yet finalized or binding, but are expected to be clarified as the EU confirms them:
- An additional EU-wide handling fee (on top of the €3 duty), draft range €2–4 per item — amount and start date not yet adopted.
- Which HS codes are excluded from the PID requirement, and require a disclaimer/exception code instead.
We'll update this guidance as soon as these points are confirmed.
Disclaimer: This is not legal advice. Please consult your customs advisor for guidance specific to your business.
What's changing, when, and does it apply to me?
This applies to shipments originating outside the EU and destined for an EU member state. Starting July 1, 2026, the EU will remove the €150 duty-free threshold: a flat €3 customs duty per HS line item will apply to B2C shipments valued €150 or less. Starting November 1, 2026, Product Identifiers (PIDs) will become mandatory for B2C distance-sale shipments into the EU, regardless of value. This applies to B2C shipments (recipient not VAT-registered in the destination country). B2B shipments (VAT-registered recipient) will not be subject to the €3 duty or the PID requirement.
What happens if I'm not compliant?
Missing or incorrect data (Movement Indicator or PID) can result in the shipment being held, delayed, or rejected at customs. The €3 duty is non-refundable, including on returns, regardless of whether your data was correct.
What are the three PIDs, and what do I put if I'm missing one?
- Merchant Product ID (M-PID): your own internal identifier (SKU).
- Non-Standardized Manufacturer Product ID (NS-PID): the manufacturer's own model or part number. If you don't have one, contact your manufacturer or supplier to obtain it.
- Standardized Product ID (S-PID): GTIN, EAN, UPC, or ISBN.
ShipStation is able to transmit M-PID, NS-PID, and S-PID data to carriers. However, each carrier is enabling this capability on its own timeline.
What do I need to do?
Start setting the Movement Indicator for all B2B/B2C shipments. If you use the ShipStation dashboard, see the Country-Specific Cross-Border Shipping Requirements help center article; for the API, use the advanced_options.movement_indicator field described above.
Audit your product catalogue now and fill in all missing PID data across M-PID, NS-PID, and S-PID to avoid customs holds. PIDs must be assigned to every distinct product variant (color/size combination) — batch-level or lot-level identifiers will be rejected at customs.
Can I test now, and is it safe to ship without PID before November 1?
Yes — you'll be able to provide PIDs voluntarily starting July 1, 2026, so you can start entering and testing this data once that window opens. Shipping without PIDs before November 1, 2026 will carry no penalty, but starting early will help you avoid disruption once it becomes mandatory.
DDP vs. DDU: which option protects your EU customers?
See DDP vs. DDU for EU Shipments above.
Related resources:
All shipments to Brazil must include the recipient's Tax ID number on labels and customs documents. Shipments missing this information will be subject to return or disposal by Brazilian customs authorities.
CPF (Cadastro de Pessoas Físicas) - Individual Tax ID
- 11 digits long (9 base digits + 2 verification digits)
- Format:
123.456.789-10 - Used for individual recipients
CNPJ (Cadastro Nacional de Pessoas Jurídicas) - Business Tax ID
- 14 digits long (12 base digits + 2 verification digits)
- Format:
123.456.789/0000-00 - Used for business recipients
In the API: Add the recipient's tax ID to the tax_identifiers array when creating labels:
{
"shipment": {
"tax_identifiers": [
{
"taxable_entity_type": "recipient",
"identifier_type": "tin",
"issuing_authority": "BR",
"value": "123.456.789-10"
}
]
}
}For CPF (Individual): Include "CPF" prefix in the value: CPF 123.456.789-10
For CNPJ (Business): Include the business name: 123.456.789/1011-12 - Business Name
Related resources:
All manufacturers and retailers that sell or ship packaged goods to consumers in Germany must comply with Germany's VerpackG (Packaging Act), which relates to the collection and recycling of packaging materials.
Exemptions: Packages sent through non-commercial activity, such as gifts or donations, do not need to follow the Packaging Act guidelines.
Register with LUCID: Complete the LUCID Packaging Register to receive your identification number.
- Consider appointing an authorized representative to handle registration
- If no representative, register as a Producer
- Penalty for non-registration: Up to €100,000 fine
Update buyers: Provide information on returns and recycling options (include in packing slips or terms and conditions)
Add LUCID number to marketplaces: Update your Etsy, eBay, and other marketplace accounts with your LUCID identification number
In the API: No special fields are required. Germany's Central Agency Packaging Register has internal systems that match outbound packages with your LUCID identification number automatically.
Additional Resources:
As of January 2023, the Mexican Tax Authority adopted Carta Porte requirements, which mandate that all shipments to and within Mexico include a Package Description field that accurately describes the shipment contents. This is in addition to customs form item descriptions.
- March 20, 2023: UPS began requiring Package Description for all shipments to Mexico
- August 1, 2023: Mexican Tax Authority began enforcing Carta Porte requirements - non-compliant shipments subject to delays and penalties
- Maximum 35 characters
- Should summarize all contents of the parcel
- Must be accurate and specific
In the API: Provide a clear, concise description in the packages[].content_description field (ensure it's 35 characters or less):
{
"packages": [
{
"content_description": "Cotton t-shirts and accessories",
"weight": {
"value": 5,
"unit": "pound"
}
}
]
}Related resources:
All shipments to Saudi Arabia require the recipient's Short Address code/National Address. This requirement is mandatory for all residents, citizens, and companies operating inside Saudi Arabia.
A short address consists of four letters and four numbers representing:
- Region Code
- Branch Code
- Division Code
- Building Number
Example: RJBA2442
In the API: Add the recipient's Short Address code to the ship_to.address_line2 field:
{
"shipment": {
"ship_to": {
"name": "Recipient Name",
"address_line1": "123 Main Street",
"address_line2": "RJBA2442",
"city_locality": "Riyadh",
"postal_code": "12345",
"country_code": "SA"
}
}
}Resource: Learn more about the Saudi National Address
All goods shipped to the UK are subject to VAT regardless of value. Prior to January 2021, only goods over £15 were subject to the 20% VAT.
These changes primarily affect shippers in the US, Canada, and Australia.
1. E-commerce Marketplace Sales
- The marketplace is responsible for collecting and remitting VAT to HMRC
- Sellers do not need EORI numbers for marketplace sales
2. Direct-to-Consumer Sales (Outside Marketplace)
- DDP (Delivered Duty Paid): No EORI required. Carrier bills you for tax per shipment.
- DDU (Delivered Duty Unpaid): EORI recommended. Set up EORI to proactively pay tax to HMRC and keep shipping costs low.
3. Products Already in UK (e.g., Fulfillment Centers)
- Seller responsible for accounting for VAT with HMRC
In the API:
For DDP shipments, set the delivered_duty_paid advanced option:
{
"shipment": {
"advanced_options": {
"delivered_duty_paid": true
}
}
}Include EORI and VAT numbers in the tax_identifiers array as needed:
{
"shipment": {
"tax_identifiers": [
{
"taxable_entity_type": "shipper",
"identifier_type": "eori",
"issuing_authority": "GB",
"value": "GB123456789000"
},
{
"taxable_entity_type": "shipper",
"identifier_type": "vat",
"issuing_authority": "GB",
"value": "GB123456789"
}
]
}
}Resources:
- Apply for an EORI number
- Register and pay taxes in the UK
- UK.gov Import and Export Process
- Tax Identifier Numbers - EORI
All shipments to South Korea must include the recipient's Personal Customs Clearance Code (PCCC) on labels and customs documents. Foreign nationals without a PCCC can use their passport number instead.
Shipments missing this information will be subject to return or disposal by customs authorities.
In the API: Add the PCCC to the tax_identifiers array:
{
"shipment": {
"tax_identifiers": [
{
"taxable_entity_type": "recipient",
"identifier_type": "pccc",
"issuing_authority": "KR",
"value": "P123456789012"
}
]
}
}For foreign nationals using passport: Use identifier_type: "passport" instead.
Related resources:
All shipments to China must include the recipient's People's Republic of China Resident Identity Card (Resident ID) number on labels and customs documents. Shipments missing this information will be subject to return or disposal by customs authorities.
In the API: Add the Resident ID to the tax_identifiers array:
{
"shipment": {
"tax_identifiers": [
{
"taxable_entity_type": "recipient",
"identifier_type": "tin",
"issuing_authority": "CN",
"value": "123456789012345678"
}
]
}
}Related resources:
| Country | Requirement | API Field/Object |
|---|---|---|
| Brazil | CPF or CNPJ Tax ID | tax_identifiers array with identifier_type: "tin" |
| EU | HS Codes (all items) Clear customs descriptions €3 duty per HS code (≤€150, B2C) | packages[].products[].harmonized_tariff_codepackages[].products[].description |
| Germany | LUCID Packaging Register | External registration (no API field required) |
| Mexico | Package description (Carta Porte) | packages[].content_description (≤35 chars) |
| Saudi Arabia | Short Address code | ship_to.address_line2 |
| United Kingdom | VAT, EORI (for DDU) | tax_identifiers array |
| South Korea | PCCC or passport | tax_identifiers array with identifier_type: "pccc" or "passport" |
| China | Resident ID | tax_identifiers array with identifier_type: "tin" |
- Tax Identifier Numbers - Detailed information about VAT, EORI, IOSS, and other tax IDs
- Create Labels - How to generate international shipping labels
- Create Shipments - How to create international shipments