Skip to content

Country-Specific Shipping Requirements

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 general international shipping concepts, see our International Shipping guide.


European Union

The EU has specific requirements for customs descriptions, harmonization codes, and de minimis thresholds that apply to all member countries.

Customs Description Requirements & Stop Words

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 products.description field when creating international shipments.

Harmonization Code Requirements

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 products.harmonized_tariff_code field for each item. Learn more in the International Shipping guide.

Resource: Harmonized Tariff Schedule from the U.S. International Trade Commission.

EU De Minimis Changes

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 IndicatorUse for
b2bBusiness-to-business shipments
b2cBusiness-to-consumer shipments
c2bConsumer-to-business shipments
c2cConsumer-to-consumer shipments

Example:

{
  "shipment": {
    "advanced_options": {
      "movement_indicator": "b2b"
    }
  }
}

NOTE:

We recommend using the advanced_options.movement_indicator field for new integrations. The previous advanced_options.windsor_framework_details.movement_indicator field 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.

Product Identifiers (PIDs)

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.

PIDWhat it isIn 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-PID
  • packages.products.manufacturer_ns_product_id → your NS-PID
  • packages.products.manufacturer_product_id and packages.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.

DDP vs. DDU for EU Shipments

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.

Still Evolving

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.

EU Customs Changes FAQ

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:


Brazil

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.

Required Tax IDs

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:

{
  "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:


Germany

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.

Requirements for Online Retailers

  1. 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
  2. Update buyers: Provide information on returns and recycling options (include in packing slips or terms and conditions)

  3. 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:


Mexico

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.

Important Enforcement Dates

  • 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

Package Description Requirements

  • 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 customs.contents_explanation field:

{
  "shipment": {
    "customs": {
      "contents": "merchandise",
      "contents_explanation": "Cotton t-shirts and accessories"
    }
  }
}

If your customs item descriptions are already clear and under 35 characters, you can use the same text.

Related resources:


Saudi Arabia

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.

Short Address Format

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 ship_to.address_line2:

{
  "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


United Kingdom

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.

VAT Responsibility by Sale Type

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:


South Korea

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:


China

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:


Summary: Quick Reference

CountryRequirementAPI Field/Object
BrazilCPF or CNPJ Tax IDtax_identifiers array with identifier_type: "tin"
EUHS Codes (all items)
Clear customs descriptions
€3 duty per HS code (≤€150, B2C)
products.harmonized_tariff_code
products.description
advanced_options.windsor_framework_details.movement_indicator (GB→NI)
GermanyLUCID Packaging RegisterExternal registration (no API field required)
MexicoPackage description (Carta Porte)customs.contents_explanation (≤35 chars)
Saudi ArabiaShort Address codeship_to.address_line2
United KingdomVAT, EORI (for DDU), DDP optiontax_identifiers array
advanced_options.delivered_duty_paid
South KoreaPCCC or passporttax_identifiers array with identifier_type: "pccc" or "passport"
ChinaResident IDtax_identifiers array with identifier_type: "tin"