International Shipments
To ship internationally, your package will be required to go through customs in the destination country. For your shipment to effectively pass through customs, include all the required customs declarations data in your create shipment request and create label request.
Requirements
International shipments must include the required properties for the customs
, products
, and tax_identifiers
objects. You may also need to add specific details like harmonized_tarrif_code
and vat_rate
to each of the products in your shipment.
Specific properties may be required depending on which countries you are shipping to and which carriers you are using. Be sure to check with your carrier and customs authority if you are uncertain what details you need to include with your shipments.
Customs Object Properties
Property | Type | Required | Description |
---|---|---|---|
contents | enumerated string | ✔ | The contents of the shipment. Valid values include: gift merchandise returned_goods documents sample other - The package contains something other than items listed above. |
contents_explanation | string | Explanation for contents (required if the contents is set to other ). | |
non_delivery | enumerated string | ✔ | Indicates what should be done if the shipment cannot be delivered. Valid values include: treat_as_abandoned return_to_sender |
terms_of_trade_code | enumerated string | Specifies the supported terms of trade code (incoterms). Valid values include: exw fca cpt cip dpu dap ddp fas fob cfr cif ddu daf deq des | |
declaration | string | Declaration statement to be placed on the commercial invoice. | |
invoice_additional_details | object | The additional information to put on a commercial invoice. See the full API Reference for object fields. | |
importer_of_record | object | The importer of records' address, anywhere in the world. See the full API Reference for object fields. | |
customs_items | array of objects | Deprecated - please provide this information in the products property inside Packages. Customs declarations for each item in the shipment. See the Products section for details about which fields to include. |
Products Object
When you request an international shipping label, you are required to send ShipEngine a list of that shipment's contents, along with their declared values. The following table describes the properties available.
Property | Type | Required | Description |
---|---|---|---|
description | string | ✔ | <= 100 characters, Nullable A short description of the item in this package. |
value | object | ✔ | The declared value of each item. Object includes 2 properties: currency and amount . |
value.currency | string | ✔ | ShipEngine supports those currencies specified by ISO 4217. |
value.amount | number | ✔ | The monetary amount, in the specified currency. |
weight | object | ✔ | The item weight. Object includes 2 properties: value and unit . |
weight.value | number | ✔ | The weight, in the specified unit. |
weight.unit | enumerated string | ✔ | The possible weight unit values. Valid values are: pound ounce gram kilogram |
harmonized_tariff_code | string | Nullable The Harmonization Codes, as standardized by the World Customs Organization. See the Harmonization Codes section below for more information. | |
country_of_origin | string | Nullable The 2-character country code as it corresponds to ISO 3166-1 alpha-2. | |
unit_of_measure | string | Nullable The possible dimensions unit values. | |
sku | string | ✔ | Nullable The Stock Keeping Unit (SKU) for this item. This value must be between 1 and 20 characters. Required only by some carriers. |
sku_description | string | Nullable A description of the SKU. | |
mid_code | string | Nullable Manufacturers Identification code. | |
product_url | string | Nullable Link to the item on the seller website. | |
vat_rate | string | Nullable VAT rate applicable to the item. |
Tax Identifiers Object
ShipEngine supports adding tax IDs to your shipment to comply with current international shipping requirements. Note that the tax_identifiers
object exists inside the shipments
object, so you will need to take this into account when creating both shipments and labels.
Property | Type | Required | Description |
---|---|---|---|
taxable_entity_type | enumerated string | ✔ | The taxable entity type for this tax item. Valid values include: shipper - The shipper is responsible for this tax. recipient - The recipient of the shipment is responsible for this tax. ior - The importer of record is responsible for the tax. |
identifier_type | enumerated string | ✔ | The tax identifier type. Valid values include: vat eori ssn ein tin ioss pan voec pccc oss passport abn ukims |
value | string | ✔ | The actual tax id number. |
issuing_authority | string | ✔ | The authority that issued this tax. This must be a valid 2-character ISO 3166 Alpha 2 country code. |
Downloading Forms
Any forms you will need to include with your shipment will be in the form_download
object. In some cases, the form_download
object will be empty, as is the case with electronic submissions or carriers that print customs details directly on the label (like USPS).
- When shipping with UPS, FedEx or DHL Express, ShipEngine can electronically submit your forms to the carrier.
- When using USPS, your customs forms print with your label rather than as separate documents.
- For other carriers, you will need to download and print any generated files and include them in your shipment.
Example Request & Response
Now that you understand the objects required for international shipping, we can drop those into a basic label request by adding a products
object, customs
object, and tax_identifiers
object.
POST /v1/labels
Example Response
Note that the customs
, products
, and tax_identifier
objects are not returned in the response. Any customs forms and commercial invoices you need to print will be returned in the form_download
object. In this example, since it uses a USPS service, the customs details are printed directly on the label, so no additional forms are returned.
Your label and customs forms can be found by going to label_download.href
and links.form_download
in the response, respectively.
Shipping from US to Canada
If you ship from the US to Canada using USPS First-Class Mail International, Priority Mail International, or Priority Mail Express International, you have the option to create a Delivered Duty Paid (DDP) shipment.
When you create a DDP shipment, you will be charged a flat fee to pay duties or taxes in advance so that your recipient does not have to pay them upon delivery. The fee is $9.95 for all eligible services.
To use the pre-pay DDP option, add an advanced option object to your shipment
object with the canada_delivered_duty
property set to "sender_prepay".
Example Response
The flat fee will display in the other_amount
field of the rate_response
object. (This response is truncated to more easily demonstrate the relevant propery.)
Shipping to and from Mexico
The Mexican government requires all shipments to, from, and within Mexico to include a Bill of Lading Complement (Complemento Carta Porte). The Bill of Lading must include package-level merchandise descriptions, which are separate from traditional customs item information requirements.
To create a Bill of Lading with your shipping label and other customs documents, include the content_description
property in the packages
object of your label request.
For more information about the Carta Porte requirement, visit the Gobierno de México Servicio de Administración Tributaria page (Español) or the US International Trade Administration's Carta Porte page (English).
Example Packages Object
Shipping to the EU
All shipments to and passing through most countries in the EU require Harmonization Codes to be included on customs forms with accurate descriptions of the package contents.
This means that descriptions such as "Clothes" will not be accepted. Instead, more detailed descriptions such as "Men's Cotton Shirt" or "Women's Leather Shoes" are required.
Learn more about the Harmonization Code requirement from the following resources:
International Shipping FAQ
What are Harmonization Codes?
The purpose of a Harmonization Code (also referred to as Tariff Codes, Customs Tariffs, Harmonized Tariff Codes, and Harmonized System Codes or HS Codes) is to expedite the delivery of international shipments. The system of codes for your goods is a universal economic language used to trade merchandise that is shipped internationally and assess taxes.
Once an order reaches an international border, the Harmonization Codes help the customs office to identify what it is you are shipping. We recommend that you list and properly identify your Harmonization Codes at the time of label creation.
For a full list of Harmonization Codes, use the Harmonized Tariff Schedule search.
Does ShipEngine print USMCA forms for international shipments?
Currently, ShipEngine does not receive USMCA forms (formerly called NAFTA forms) from carriers for international shipments. If you'd like to include a USMCA form with a shipment, you must download and fill out the form outside of ShipEngine.