EU De Minimis (Regulatory Details)

Effective July 1, 2026, the EU removes the €150 de minimis duty exemption. For goods in a shipment with an intrinsic value not exceeding €150 entering an EU27 member state (with the exception of B2B VAT‑registered imports), the shipper must provide product identifiers on each commodity. Missing these identifiers can prevent the shipment from clearing customs.

RocketShipIt supports this through per‑commodity regulatory details, which map to FedEx's customsClearanceDetail.commodities[].regulatoryDetails[] array. This is supported on the FedEx REST carrier (fedex-rest) and, using the same request fields, on the DHL Express REST carrier (dhl-rest) and the UPS REST carrier (ups-rest) — see DHL Express and UPS below.

Adding regulatory details#

Add a regulatory_details array to each entry in your customs lines. For the EU de minimis requirement set regulation_code to EU_DE_MINIMIS.

Field Required Description
regulation_code yes The regulator. Use EU_DE_MINIMIS for the EU low‑value requirement.
product_id yes Your alphanumeric product identifier. The EU treats this as the merchant SKU for the consignment.
product_id_type yes Type of the identifier: SKU, PART_NUMBER, GTIN, UPC, EAN, MPN, or OTHER.
merchant_product_id yes The merchant's product identifier. Set equal to product_id if you don't use separate merchant‑ and SKU‑level identifiers.
non_standard_manufacturer_product_id yes The manufacturer's internal SKU/ID (e.g. SH123456-L).
standard_manufacturer_product_id yes A standard identifier such as GTIN, UPC, or EAN. Use the literal string "NA" when the product has no standard identifier.

A commodity may carry more than one regulatory_details entry (one per applicable regulator). If two entries share the same regulation_code on the same commodity, only the last one is respected.

Example#

{
  "carrier": "fedex-rest",
  "action": "submitshipment",
  "params": {
    "currency": "EUR",
    "customs_value": 120.00,
    "ship_country": "US",
    "to_country": "DE",
    "customs": [
      {
        "customs_description": "Silicone product",
        "customs_quantity": 1,
        "customs_quantity_units": "EA",
        "customs_line_amount": 120.00,
        "customs_weight": 1,
        "customs_hs_tariff": "3926.90",
        "regulatory_details": [
          {
            "regulation_code": "EU_DE_MINIMIS",
            "product_id": "SKU-123",
            "product_id_type": "SKU",
            "merchant_product_id": "SKU-123",
            "non_standard_manufacturer_product_id": "SH123456-L",
            "standard_manufacturer_product_id": "01233456789012"
          }
        ]
      }
    ]
  }
}

See the full request in the API Explorer or on the examples site: FedEx-REST - Label International EU De Minimis (under €150 B2C).

IOSS number#

If you are registered for the Import One‑Stop Shop (IOSS), pass your IOSS number using the shipper tax‑id fields. These populate FedEx's shipper.tins[] array:

"ship_tax_id": "IM1234567890",
"ship_tax_id_type": "BUSINESS_UNION"

Referencing stored profiles (FedEx Regulatory API)#

Instead of sending the identifiers inline on every request, you can store per‑product regulatory data once in FedEx's Regulatory API and reference it at ship time. To do this, send only the join‑key fields and omit the detail fields:

"regulatory_details": [
  {
    "regulation_code": "EU_DE_MINIMIS",
    "product_id": "SKU-123",
    "product_id_type": "SKU"
  }
]

FedEx merges the stored profile data into the shipment after it is created. If a regulatory_details entry has no inline details and no matching stored profile, the shipment may be delayed until the details are provided.

Storing profiles#

Use the createregulatoryprofile action to store per‑product regulatory data in FedEx's Regulatory API (POST /regulatory/v1/profiles). Profiles are scoped per destination market via country_of_import and matched to shipments by regulation_code + product_id + product_id_type. FedEx accepts up to 25 profiles per request.

{
  "carrier": "fedex-rest",
  "action": "createregulatoryprofile",
  "params": {
    "regulatory_profiles": [
      {
        "regulation_code": "EU_DE_MINIMIS",
        "product_id": "SKU-123",
        "product_id_type": "SKU",
        "country_of_import": "DE",
        "details": [
          {
            "merchant_product_id": "SKU-123",
            "non_standard_manufacturer_product_id": "SH123456-L",
            "standard_manufacturer_product_id": "01233456789012"
          }
        ]
      }
    ]
  }
}

See the full request in the API Explorer or on the examples site: FedEx-REST - Create Regulatory Profile (EU De Minimis).

Note: RocketShipIt does not block shipment creation when identifiers are missing — FedEx does not reject the request, but the shipment may fail to clear EU customs. Validate against the FedEx test environment before relying on this in production.

DHL Express (dhl-rest)#

The DHL Express MyDHL API expresses the same manufacturer identifiers as export‑declaration line‑item references (MyDHL v3.3.1, June 2026) rather than a regulatory‑details block. RocketShipIt maps the two manufacturer fields from regulatory_details onto MyDHL's content.exportDeclaration.lineItems[].customerReferences[]:

regulatory_details field MyDHL reference typeCode Meaning
standard_manufacturer_product_id SRV Standardized Manufacturer Product ID (GTIN/UPC/EAN)
non_standard_manufacturer_product_id MF Non‑standardized Manufacturer Product ID (internal SKU)

Because the request shape is identical, the same customs line that drives FedEx also drives DHL — you do not need a carrier‑specific payload. Send a customs line with regulatory_details and switch carrier to dhl-rest. Supplying customs lines makes the shipment customs‑declarable and emits a full export declaration (line items plus a commercial invoice); an invoice/invoice_date are generated when not provided.

{
  "carrier": "dhl-rest",
  "action": "submitshipment",
  "params": {
    "currency": "EUR",
    "customs_value": 120.00,
    "ship_country": "US",
    "to_country": "DE",
    "customs": [
      {
        "customs_description": "Silicone product",
        "customs_quantity": 1,
        "customs_hs_tariff": "392690",
        "regulatory_details": [
          {
            "regulation_code": "EU_DE_MINIMIS",
            "non_standard_manufacturer_product_id": "SH123456-L",
            "standard_manufacturer_product_id": "01233456789012"
          }
        ]
      }
    ]
  }
}

See the full request in the API Explorer or on the examples site: DHL-REST - Label International EU De Minimis (under €150 B2C).

Other line‑item references#

To send arbitrary MyDHL line‑item references (e.g. AFE/ECCN, PON, MID), add a customer_references array to the customs line. Each entry is a type_code / value pair passed through verbatim:

"customer_references": [
  { "type_code": "AFE", "value": "1A999" }
]

UPS (ups-rest)#

Available since version 2.8.2.360 on the UPS REST carrier (ups-rest). UPS expresses the identifiers through its Customs Detail API as Product.ProductIdentifier[] entries on each international‑forms product, so the request must include an international invoice ("customs_forms": "01"). RocketShipIt maps the regulatory_details fields onto UPS product‑identifier type codes:

regulatory_details field UPS ProductIDTypeCode Meaning
merchant_product_id (or product_id if not set) 0100 Merchant product ID (your SKU)
non_standard_manufacturer_product_id 0200 Non‑standardized Manufacturer Product ID (internal SKU)
standard_manufacturer_product_id 0300 Standardized Manufacturer Product ID (GTIN/UPC/EAN)

As with the other carriers, use the literal string "NA" for standard_manufacturer_product_id when the product has no standard identifier. In that case RocketShipIt also sets CommodityFieldSpecialConditionCode to 01 on the commodity, which is how UPS is told that no standardized identifier exists.

B2C indicator#

UPS flags a low‑value B2C consignment with InternationalForms.EUDeMinimisIndicator = "Y". RocketShipIt sets this automatically whenever any customs line carries an EU_DE_MINIMIS regulatory detail, or you can set it explicitly with the top‑level param:

"eu_de_minimis": true

There is no separate B2B indicator — for B2B VAT‑registered imports (which are exempt from the requirement) simply omit eu_de_minimis and the regulatory_details entries.

Example#

{
  "carrier": "ups-rest",
  "action": "submitshipment",
  "params": {
    "customs_forms": "01",
    "currency": "EUR",
    "customs_value": 120.00,
    "reason_for_export": "SALE",
    "invoice_line_total": 120,
    "eu_de_minimis": true,
    "ship_country": "US",
    "to_country": "DE",
    "customs": [
      {
        "invoice_line_number": "1",
        "invoice_line_part_number": "SKU-123",
        "invoice_line_description": "Silicone product",
        "invoice_line_value": "120",
        "invoice_line_origin_country_code": "US",
        "customs_quantity_units": "EA",
        "regulatory_details": [
          {
            "regulation_code": "EU_DE_MINIMIS",
            "merchant_product_id": "SKU-123",
            "non_standard_manufacturer_product_id": "SH123456-L",
            "standard_manufacturer_product_id": "01233456789012"
          }
        ]
      }
    ]
  }
}

See the full request in the API Explorer or on the examples site: UPS-REST - International w/ EU De Minimis.