Install
Install

UPS WorldShip Export – Configuration

The UPS WorldShip Export in the Matrixify app produces an XML file with your store’s Orders data that imports directly into UPS
WorldShip. Its behavior can be adjusted with a per-store set of technical configuration parameters listed below.

Copy the full UPS WorldShip configuration example JSON, fill in your values, remove attributes you do not wish to set or configure, and send the configuration JSON to the Matrixify Support – we will apply it to your store. You do not need to use/set all configuration attributes – the Matrixify app will default to standard values/behviour if an attribute is not specifically configured.

Prefer not to edit JSON? Ask our AI Agent Maibo to prepare it from a plain-language description.

For instructions on how to Export Shopify Orders data to the UPS WorldShip file format using the Matrixify app, see our tutorial Export Orders from Shopify to UPS WorldShip®.

Examples of configuration JSON

Below you see examples of JSON code structure for the UPS WorldShip configuration within the Matrixify app.

You can copy the full JSON and keep only the parameters you need, replace the values with yours, and send it to Matrixify Support. All parameters are optional, and a typical store sends only a small subset.

Common minimum field configuration

{
  "DescriptionOfGoods": "Clothing",
  "Telephone": "+1 1234567890",
  "Email": "[email protected]",
  "price_includes_vat": false,
  "ShipperNumber": "A11B22"
}

Full UPS WorldShip configuration

{
  "DescriptionOfGoods": "Clothing",
  "Telephone": "+1 1234567890",
  "Email": "[email protected]",
  "price_includes_vat": true,
  "ShipperNumber": "A11B22",
  "ShipperNumberForAccessPoint": "88AA89",
  "ShipperNumberForNoAccessPoint": "86AA98",
  "xml_format": "xml_auto_import",
  "split_packages_per_unit": true,
  "package_dimensions_from_variant_metafields": {
    "Length": "custom.length",
    "Width": "custom.width",
    "Height": "custom.height"
  },
  "weight_unit": "lb",
  "PackageType": "CP",
  "fail_order_when_package_data_missing": true,
  "package_weights_from_order_metafield": "custom.package_weights",
  "reference1_source": {
    "parts": ["order_name","customer_metafield:custom.customer_number"],
    "separator": " | ",
    "max_length": 20
},
  "reference2_source": "sku",
  "reference3_source": "order_id",
  "remove_number_sign_from_references": true,
  "ship_to_elements_from_customer_metafields": {
    "CustomerID": "custom.customer_number",
    "LocationID": "custom.customer_number"
  },
  "ServiceType": "GND",
  "use_shipping_line_mapping": false,
  "number_of_packages_from_quantity": false,
  "ProfileName": {
    "GB": "GB_Youemp",
    "DE_FR_NL": "EU_Youemp",
    "EU": "EU_Einzelsendung",
    "WW": "WW_Youemp"
  },
  "InvoiceUnitOfMeasure": "CS",
  "use_presentment_currency" : true,
  "BillTransportationTo": "SHP",
  "BillDutyTaxTo": "REC",
  "include_quantum_view_notify_block": true,
  "include_bill_duty_tax_to": true,
  "@ProcessStatus": "0",
  "@ShipmentOption": "SC",
  "include_shipment_key": true,
  "remove_number_sign_from_shipment_key": true,
  "include_empty_ship_to_address_lines": true,
  "fallback_shipping_email": "[email protected]",
  "sanitize_phone": true,
  "remove_us_phone_country_code": true,
  "remove_vat_for_GB": true,
  "ThirdPartyIntermediary": {
    "CompanyOrName": "Company Name",
    "Attention": "Contact Person",
    "Address1": "123 Main St",
    "CountryTerritory": "US",
    "PostalCode": "12345",
    "CityOrTown": "City Name",
    "StateProvinceCounty": "FL",
    "Telephone": "5551234567",
    "UpsAccountNumber": "ABC123"
  },
  "goods_elements_from_metafields": {
    "PartNumber": "product_metafield:ups.part_number", 
    "DescriptionOfGood": "product_metafield:ups.description_of_goods"
  },
  "combine_goods_lines": true,
  "include_goods": true,
  "item_substitutions_by_sku": {
    "SKU_123ABC": [
      {
        "sku": "SKU_XYZ987",
        "price": 10.0,
        "quantity": 1,
        "title": "Replacement Item",
        "harmonized_system_code": "650500",
        "country_code_of_origin": "US"
      }
    ]
  }
}

Configuration field descriptions

Common information

These attributes are used by most shops and should always be included.

Field Description and allowed values
DescriptionOfGoods Text written into <DescriptionOfGoods> for the customs declaration.

Allowed Values

String.

Default

The first Line Item’s vendor.

Example
"Cans of our Beer, Clothing"
Telephone Fallback phone number used for <Telephone> when the shipping address has none.

When remove_us_phone_country_code is true, a fallback written as +1 plus 10 digits is exported as the bare 10 digits like any other Ship-to phone.

Allowed Values

String.

Default

Absent.

Example
"+1 1234567890"
Email Access Point notification failed-email address, used when an Order routes to a UPS Access Point.

This is the failed-notification address for UPS Access Point shipments, not a general contact address for the shipment. The recipient email on the shipment comes from the Order, with fallback_shipping_email setting as the fallback.

Allowed Values

Email string.

Default

Absent.

Example
"[email protected]"
price_includes_vat When enabled, prices for EU destinations are treated as VAT-inclusive, and the VAT portion is removed from the exported unit prices and freight charge. When disabled, prices are used as-is.

Allowed Values

true, false

Default

false

Example
true

XML Format

Field Description and allowed values
xml_format UPS WorldShip can import shipment XML in two official formats, and this parameter selects which one the Export produces.
Choose it based on how your WorldShip consumes the file.

  • xml_auto_import – the UPS XML Auto Import format (<OpenShipments>). WorldShip watches a folder and processes new files hands-off, printing labels automatically. This is the default, and the format the Export has always produced.
    Settings that have no effect in XML Auto Import:

    • package_weights_from_order_metafield – the auto-import format keeps its split_packages_per_unit behaviour and ignores this key
  • xml_batch_import – the UPS XML Batch Import format (<Shipments>). For bringing shipments in through the WorldShip Import-Export tab – imported as a batch, or recalled one at a time with Keyed Import. This format writes a <Good> for every Line Item of the Order (unless include_goods is false) and wraps the references in <ReferenceNumbers>. Per-package weights can be added to each shipment from an Order Metafield with package_weights_from_order_metafield – this is the only way <Package> elements appear in this format. Enable include_shipment_key together with it so each shipment can be recalled by the Order name.
    Settings that have no effect in XML Batch Import:

    • split_packages_per_unit – there is no per-unit splitting in this format; <Package> elements come only from package_weights_from_order_metafield
    • weight_unit – Line Item weight is written or converted; weights from package_weights_from_order_metafield are written in the Metafield’s own unit
    • fail_order_when_package_data_missing – has effect only together with package_weights_from_order_metafield; without that key there is no package data to check
    • include_quantum_view_notify_block – the QVN block is XML Auto Import only
    • Email – only the Access Point notification address, XML Auto Import only
    • use_shipping_line_mapping – the built-in list is never consulted in this format

If WorldShip prints labels by itself from a watched folder, keep the default. If you open WorldShip and import shipments from the Import-Export tab, you need xml_batch_import.

Allowed Values

xml_auto_import, xml_batch_import

Default

xml_auto_import

Example
xml_batch_import

Shipper Number (one of these patterns is required)

Use either ShipperNumber alone, or both ShipperNumberForAccessPoint and ShipperNumberForNoAccessPoint together. If both patterns are present, the Access Point/No Access Point pair takes priority.

Field Description and allowed values
ShipperNumber Your UPS shipper account number is written into <ShipperNumber>. Used for Orders that do not route to a UPS Access Point (when set), and as the single account for all shipments when you do not configure separate Access-Point accounts. See the selection order note below the table.

Allowed Values

String.

Default

Absent.

Example
"A11B22"
ShipperNumberForAccessPoint UPS account number used when the Order routes to a UPS Access Point.

Allowed Values

String.

Default

Absent.

Example
"88AE89"
ShipperNumberForNoAccessPoint UPS account number used when the Order does not route to a UPS Access Point and ShipperNumber is not set.

Allowed Values

String.

Default

Absent.

Example
"86E898"

Package splitting and per-package data

Field Description and allowed values
split_packages_per_unit When enabled, every fulfillable unit of every shippable Line Item becomes its own <Package> element – one UPS label per unit. For example, SKU A quantity 2 + SKU B quantity 3 produces 5 packages in one shipment. <NumberOfPackages> becomes the package count and <ShipmentActualWeight> becomes the sum of the package weights. Only shippable units are counted; on partially fulfilled Orders, only the still-fulfillable quantity is split. When disabled, no <Package> elements are written (legacy shape).

Allowed Values

true, false

Default

false

Example
true
package_dimensions_from_variant_metafields Maps each WorldShip package dimension element name to the Variant Metafield that holds its value. The object key is the XML element name written into each <Package>; the value is the namespace.key of the Variant Metafield to read. Supports Shopify dimension-type Metafields ({"value":20.0,"unit":"INCHES"}) and plain numeric Metafields. Any stored unit (inches, feet, yards, millimeters, centimeters, meters) is converted to inches. Whole numbers are written without a trailing .0 (20.0 becomes 20); real decimals are preserved (17.5). A dimension whose Metafield is empty is omitted from that package. Used only when split_packages_per_unit is true.

Allowed Values

Object of ElementName: "namespace.key" pairs. Typical element names: Length, Width, Height.

Default

Absent – no dimensions written.

Example
{
  "Length": "custom.length",
  "Width": "custom.width",
  "Height": "custom.height"
}
weight_unit Unit for the per-package <Weight> and for the summed <ShipmentActualWeight>, converted from the Line Item weight. Whole numbers drop the trailing .0; decimals are preserved with no rounding. Affects output only when split_packages_per_unit is true; without splitting, <ShipmentActualWeight> stays in kilograms regardless.

Does not apply to package_weights_from_order_metafield, whose values are already in the Merchant’s own unit.

Allowed Values

"kg", "lb"

Default

"kg"

Example
"lb"
PackageType Package-type code used for the shipment-level <PackageType> and each package’s <PackageType>.

Allowed Values

Any UPS WorldShip package-type code (string), for example "CP" (customer packaging).

Default

"CP"

Example
"CP"
fail_order_when_package_data_missing When enabled, an Order with bad packing data is excluded from the Export and reported as a failed item, with a message naming the Order and the offending data. Other Orders in the same Export continue. The purpose is to never print a label on wrong or missing packing data – fix the data and re-export instead. What counts as bad depends on which packing feature the shop uses:

With split_packages_per_unit on, a purchased Variant missing any configured dimension or having no weight; the message names the SKU and the missing fields. When disabled, missing dimensions are simply omitted from the package.
With package_weights_from_order_metafield set, an Order whose packing Metafield is missing, empty, or not a list of positive numbers; the message names the Metafield. When disabled, such an Order is exported without a Packages element.
The failed Orders appear on the Matrixify Export job and in its results file – they are never sent to WorldShip, so WorldShip has nothing to show for them.

Allowed Values

true, false

Default

false

Example
true
package_weights_from_order_metafield Names an Order Metafield, as namespace.key, that holds the per-package weights of the Order – for shops whose own system decides how an Order is packed and writes the result to the Order. XML Batch Import format only; the auto-import format ignores this key. Each exported <Shipment> gets a <Packages> element with one <Package> per value, holding that value as its <Weight>, so the package count is the number of values written:

<Packages>
  <Package>
    <Weight>41</Weight>
  </Package>
  <Package>
    <Weight>21.5</Weight>
  </Package>
</Packages>

The Metafield holds the list of weights in either of two forms:

  • a JSON array – [41.0, 21.5], or Shopify’s list.number_decimal form ["41.0", "21.5"];
  • text split on every comma – 41.0, 21.5 or 41.0,21.5. An empty entry between or after commas is skipped, so 41.0, 21.5, and 41,,5 are fine.

Each entry is read as the one number it contains, with a dot as the decimal separator – the same reading a list.number_decimal Metafield gets when imported from a file. Text around the number is ignored (41 kg is 41). The rules that follow from this:

  • A comma always separates entries. 41,5 is two packages of 41 and 5, not one of 41.5; 1,234.5 is two packages of 1 and 234.5. Write 1234.5.
  • Write a leading zero: .5 is read as 5, not 0.5. Write 0.5.
  • An entry with no number, or with more than one (4_10x1A1e4004.1.5), is invalid packing data.
  • A weight is positive: 0, a negative, and one that rounds to 0 at 2 decimals (0.004) are invalid.
  • In the JSON form every element must be a weight: [41.0, null] and [41.0, ""] are invalid, rather than shipping one label short.
  • More than 200 packages is invalid.

The weights keep the Metafield’s own unit – weight_unit does not apply – are rounded to 2 decimal places, and drop trailing zeros (41.0 is written as 41).

An Order whose Metafield is missing, empty, or holds anything that is not a positive number gets no Packages element at all – never a partial one – or, when fail_order_when_package_data_missing is true, is excluded from the file and reported as a failed item. The failure message tells the two cases apart: an unfilled Metafield reads “is not filled in … Fill it on the Order”, while one holding something unreadable quotes the value back – “holds [41 and 21.5], which is not a list of positive package weights … Correct it on the Order”.

The namespace cannot be an app-owned one (app--...): Shopify reserves those for the app that owns them, so such a key resolves to nothing on every Order. A key not spelled namespace.key (a bare package_weights) cannot address a Metafield either, and every Order then reads as unfilled – check this value first when every Order fails.

Unlike split_packages_per_unit, this does not move PackageType or the references out of <ShipmentInformation>: the <Package> elements carry only <Weight>. UPS documents a “conflicting fields” rule for XML Auto Import when per-package and shipment-level data appear together; whether XML Batch Import applies it to a weight-only <Package> is unverified. Confirm that the first file imports into WorldShip with the references still on the label before relying on it.

Allowed Values

A string in the form namespace.key naming an Order Metafield.

Default

Absent – no Packages element is written.

Example
"custom.package_weights"

References and ship-to linkage

Field Description and allowed values
reference1_source Chooses what Shopify data field fills <Reference1>, applied to both <ShipmentInformation> and each <Package>.

Set as a single source string, or as a JSON object joining several sources into one value.

Allowed Values

Single source – one of:

  • "order_name" – the Order name (for example #EZ1019),
  • "order_id" – the Shopify Order ID,
  • "sku" – the SKU; at package level the package’s own Line Item SKU, at shipment level the first Line Item’s SKU,
  • "customer_metafield:namespace.key" – the value of that Customer Metafield.
  • "blank" – no value at all. The element is still written, but empty, so a WorldShip import map that expects to find the field keeps finding it. This is how a shop switches off the Reference 1 (Order name) and Reference 2 (Order ID) defaults without leaving those values in the feed.

Combined sources – a JSON object with:

  • parts – array of the same source values, written in the order listed,
  • separator – string written between the parts. Optional; if not specified, defaults to ” / ”  (forward slash with spaces on both sides),
  • max_length – integer. The parts are joined first, then the whole value is cut to this many characters. Optional; if not specified, defaults to 35.
Default

Order name.

Examples
"customer_metafield:custom.customer_number"
{
"parts": ["order_name", "customer_metafield:custom.customer_number"],
"separator": " | ",
"max_length": 20
}
reference2_source Chooses what Shopify data field fills <Reference2>, applied to both <ShipmentInformation> and each <Package>.

Set as a single source string, or as a JSON object joining several sources into one value.

Allowed Values

Single source – one of:

  • "order_name" – the Order name (for example #EZ1019),
  • "order_id" – the Shopify Order ID,
  • "sku" – the SKU; at package level the package’s own Line Item SKU, at shipment level the first Line Item’s SKU,
  • "customer_metafield:namespace.key" – the value of that Customer Metafield.
  • "blank" – no value at all. The element is still written, but empty, so a WorldShip import map that expects to find the field keeps finding it. This is how a shop switches off the Reference 1 (Order name) and Reference 2 (Order ID) defaults without leaving those values in the feed.

Combined sources – a JSON object with:

  • parts – array of the same source values, written in the order listed,
  • separator – string written between the parts. Optional; if not specified, defaults to ” / ”  (forward slash with spaces on both sides),
  • max_length – integer. The parts are joined first, then the whole value is cut to this many characters. Optional; if not specified, defaults to 35.
Default

Order ID.

Examples
"sku"
{
"parts": ["sku", "order_name"],
"separator": ",",
"max_length": 20
}
reference3_source Chooses what Shopify data field fills <Reference3>, applied to both <ShipmentInformation> and each <Package>.

Set as a single source string, or as a JSON object joining several sources into one value.

Allowed Values

Single source – one of:

  • "order_name" – the Order name (for example #EZ1019),
  • "order_id" – the Shopify Order ID,
  • "sku" – the SKU; at package level the package’s own Line Item SKU, at shipment level the first Line Item’s SKU,
  • "customer_metafield:namespace.key" – the value of that Customer Metafield.
  • "blank" – no value at all. The element is still written, but empty, so a WorldShip import map that expects to find the field keeps finding it. This is how a shop switches off the Reference 1 (Order name) and Reference 2 (Order ID) defaults without leaving those values in the feed.

Combined sources – a JSON object with:

  • parts – array of the same source values, written in the order listed,
  • separator – string written between the parts. Optional; if not specified, defaults to ” / ”  (forward slash with spaces on both sides),
  • max_length – integer. The parts are joined first, then the whole value is cut to this many characters. Optional; if not specified, defaults to 35.
Default

Order ID.

Examples
"order_name"
{
"parts": ["order_id", "order_name"],
"separator": " , ",
"max_length": 10
}
remove_number_sign_from_references When true, a leading # is stripped from the resolved <Reference1> / <Reference2> / <Reference3> values (#1009 becomes 1009), wherever the references are written – <ShipmentInformation><ReferenceNumbers>, or per <Package>. Useful where the reference prints on the label and the shop wants the bare Order number, or where a WorldShip import map matches on it. <ShipmentKey> is not affected – it has its own remove_number_sign_from_shipment_key key. A reference without a #, a numeric one (the default Reference 2 is the numeric Order ID), and a "blank" one are written unchanged. Config-gated because existing shops’ WorldShip import maps may already match on the #-prefixed form.

Allowed Values

truefalse

Default

false

Example
true
ship_to_elements_from_customer_metafields Maps <ShipTo> child element names to Customer Metafield keys. Each listed element is written as the first children of <ShipTo>, taking its value from the named Customer Metafield – this attaches a shipment to an existing WorldShip customer record instead of writing a fresh address. An element is omitted when the Order has no customer or the Metafield value is empty.

Allowed Values

Object of ElementName: "namespace.key" pairs. Typical element names: CustomerID, LocationID.

Default

Absent – no CustomerID / LocationID written.

Example
{
  "CustomerID": "custom.customer_number",
  "LocationID": "custom.customer_number"
}

Shipment information

Field Description and allowed values
ServiceType Forces a specific UPS service code.

The UPS service is chosen in this order:

  • ServiceType, when set – forces one service for every Order
  • service_type_by_shipping_line, when the Order’s rate name is in the map
  • the built-in UPS rate name list, unless use_shipping_line_mapping is false
  • the regional default
Allowed Values

Any UPS Service Type – see UPS Service Codes, UPS Service Codes for Freight Shipments, UPS Service Codes for UPS Mail Innovations Shipments and UPS Service Codes and Weight Limits for UPS SurePost Shipments.

Default

Derived automatically from destination and shipping line.

Example
"GND"
service_type_by_shipping_line Maps the shop’s own checkout shipping rate names to UPS service codes, so a Merchant can keep their own wording at checkout instead of renaming rates to UPS’s official service names. Optional; when the key is absent nothing changes.

This map is consulted BEFORE the built-in UPS rate name list, so a shop can override a built-in name with its own meaning. It is NOT switched off by use_shipping_line_mapping: false – that setting only affects the built-in list.

Matching ignores letter case, punctuation and the (R) symbol, so “Ground”, “GROUND” and “Ground(R)” all match the same entry.

Example
"service_type_by_shipping_line": {"Ground": "GND","3 Day Air": "3DS"}
ProfileName Selects the WorldShip ProfileName by destination region. Regions: GB = United Kingdom, DE_FR_NL = Germany / France / Netherlands, EU = remaining EU member states, WW = everywhere else. When absent, a profile is derived only for B2C EU shipments.

Allowed Values

Region object with string values for keys GB, DE_FR_NL, EU, WW.

Default

Absent – derived for EU B2C.

Example
{
  "GB": "GB_Youemp",
  "DE_FR_NL": "EU_Youemp",
  "EU": "EU_Einzelsendung",
  "WW": "WW_Youemp"
}
use_shipping_line_mapping When enabled, the Shopify shipping line title is mapped to a UPS service code (for example, UPS Next Day Air becomes 1DA). When disabled, no mapping is attempted, and the service code falls back to the regional default. Ignored when ServiceType is set thus forcing exact service type.

Allowed Values

true, false

Default

true

Example
false
number_of_packages_from_quantity When enabled, <NumberOfPackages> is the Order’s total fulfillable quantity instead of 1. Ignored when split_packages_per_unit is on (splitting always sets <NumberOfPackages> to the actual package count).

Allowed Values

true, false

Default

false

Example
true
InvoiceUnitOfMeasure Written into each <Goods> block’s <InvoiceUnitOfMeasure>.

Allowed Values

UPS unit-of-measure code (string), for example "PC" (pieces) or "CS" (cases).

Default

"PC"

Example
"CS"
use_presentment_currency When enabled, the file declares the currency the Customer actually paid in instead of the store’s own currency: the currency code, the unit prices and the freight charge all come from the paid amounts.

A Canadian store selling in USD to the United States then exports USD on those shipments and CAD on Canadian ones. The currency code and the amounts always come from the same source, so the declared customs value is never mixed up. When an Order has no separate paid currency — a store that prices every Market in its store currency — the whole file stays in the store currency, exactly as before.

Do not combine with item_substitutions_by_sku unless the substitution prices are given in the currency the file declares.

Allowed Values

true, false

Default

false

Example
true
BillTransportationTo Who pays for transportation, written into <BillTransportationTo>.

Allowed Values

"SHP" (shipper), "REC" (receiver), "TP" (third party). For "TP", also set ThirdPartyIntermediary.

Default

"SHP"

Example
"TP"
BillDutyTaxTo Who pays duty and tax, written into <BillDutyTaxTo>. Forced to "SHP" when the derived profile is EU_Einzelsendung.

Allowed Values

"REC" (receiver), "SHP" (shipper), "TP" (third party).

Default

"REC"

Example
"SHP"
include_quantum_view_notify_block When enabled and the shipment has an email address, a UPS Quantum View Notify (QVN) block is added, requesting a ship notification.

Allowed Values

true, false

Default

false

Example
true
include_bill_duty_tax_to When disabled, will remove the BillDutyTaxTo attribute from the Shipment Information.

Allowed Values

true, false

Default

true

Example
false
goods_elements_from_metafields Fills the per-item customs fields of the Goods blocks from Metafields the Merchant maintains in Shopify, instead of the Variant SKU and the Line Item title.

Each key is the element name — PartNumber or DescriptionOfGood — and each value points at the Metafield to read: product_metafield:<namespace.key> for a Product Metafield, or variant_metafield:<namespace.key> for a Variant Metafield.

A mapped element is written from the Metafield only: when the Metafield is empty, the element is written empty instead of falling back to the SKU or the title. The value is written exactly as entered, with accented characters converted to plain letters, because WorldShip expects plain text. Elements that are not mapped keep their normal source.

Allowed Values

JSON object consisting of PartNumber and DescriptionOfGood keys.

Default

Part Number is the Variant SKU, Description of Goods is the Line Item title.

Example
{
  "PartNumber": "product_metafield:ups.part_number",
  "DescriptionOfGood": "product_metafield:ups.description_of_goods"
}
combine_goods_lines When enabled, Goods lines that carry the same customs data are combined into one commodity line on the customs documentation. UPS WorldShip itself never merges commodity lines on import – every Goods entry in the file becomes its own line – so without this parameter each Line Item of the Order prints as a separate customs line, even when several of them are the same commodity.

How the lines are combined:

  • Lines combine only when every exported customs element except the quantity and the unit price is exactly the same: Part Number, Description of Good, Tariff Code (Harmonized System code), Country of Origin, the unit of measure and currency, and any values mapped from Metafields via goods_elements_from_metafields.
  • A line without a Tariff Code never combines – an unclassified item always keeps its own line.
  • The combined line carries the summed quantity and a unit price of total value divided by total units, written with up to 6 decimal places – UPS WorldShip’s own Unit Price field format – so quantity times unit price still equals the original line values added together. Whenever the averaged price fits in 2 decimals (always the case when the combined lines share one price), the plain 2-decimal price is written. For example, 1 unit at 29.82 + 2 units at 31.24 becomes one line: 3 units at 30.766667 = 92.30.
  • The line order is kept – the combined line takes the position of its first item.
  • A group whose summed quantity would not fit WorldShip’s 4-digit Units field (over 9999), or whose quantities sum to zero, is left uncombined.
  • Combining runs after SKU substitutions (item_substitutions_by_sku), VAT removal and the paid-currency selection (use_presentment_currency), so lines are always grouped by the final exported values. Works the same in both XML formats.

Note: with the default SKU-based PartNumber, different Variants keep their own lines. Sizes of one product combine when PartNumber and DescriptionOfGood come from Product Metafields via goods_elements_from_metafields (or when their SKUs are equal or blank).

Allowed Values

true, false

Default

false

Example
true
include_goods When false, no Goods elements are written in either XML format – the commodity list disappears from the file. For shops whose WorldShip does not produce customs documentation from the import (for example domestic-only shipping), where the Goods lines are only noise in the import map. DescriptionOfGoods is a separate shipment-level element and is still written. Goods lines never print on a shipping label – they are customs data – so switching them off does not change the label.

Allowed Values

truefalse

Default

true

Example
false
@ProcessStatus Value of the ProcessStatus attribute on the OpenShipment element.

Allowed Values

String, typically "0" or "".

Default

"0"

Example
""
@ShipmentOption Value of the ShipmentOption attribute on OpenShipment. Either a plain string used for all destinations, or a region object chosen by destination (same regions as ProfileName). "SC" means ShipmentCharge.

Allowed Values

String (for example "", "SC"), or a region object with keys GB, DE_FR_NL, EU, WW.

Default

"SC" for B2C EU shipments, empty otherwise.

Example
{
  "GB": "",
  "DE_FR_NL": "SC",
  "EU": "",
  "WW": ""
}

Ship-to address and contact

Field Description and allowed values
include_shipment_key When enabled, a <ShipmentKey> equal to the Order name is written as the first element of each OpenShipment, so WorldShip can key its import on it.

Allowed Values

true, false

Default

false

Example
true
remove_number_sign_from_shipment_key When true, the leading # of the Order name is stripped from <ShipmentKey> (#1009 becomes 1009) – some WorldShip keyed-import setups match on the bare Order
number.

Allowed Values

true, false

Default

false

Example
true
include_empty_ship_to_address_lines When enabled, Address 2 and Address 3 are always written in the Ship-to block, empty when the address has no such line, so the shipper always sees the address-line slots.

By default Address 2 is written only when the address has a second line, and Address 3 is not written at all. Shopify collects only two address lines, so Address 3 is always empty — it exists as the placeholder that some WorldShip import maps expect to find.

Allowed Values

true, false

Default

false

Example
true
fallback_shipping_email Fallback email used for <EmailAddress> when the Order has no contact, customer, or order email.

Allowed Values

Any email string.

Default

Absent.

Example
"[email protected]"
sanitize_phone When enabled, spaces and dashes are stripped from the Ship-to phone number (some WorldShip setups reject formatted numbers).

Allowed Values

true, false

Default

false

Example
true
remove_us_phone_country_code When true, a Ship-to phone number that is exactly +1 followed by 10 digits (ignoring spaces, dashes, dots and parentheses) is written as the bare 10 digits – +1 707-433-4606 becomes 7074334606. This is a Merchant preference, not a WorldShip requirement: WorldShip imports +1-prefixed numbers as well, and the key exists for shops that want the domestic 10-digit form on their labels. Any other number – another country code, or one already in 10-digit form – is written unchanged. The Telephone fallback goes through the same strip, so a fallback written as +1... is exported as its bare 10 digits too.

Allowed Values

truefalse

Default

false

Example
true

Pricing and VAT

Field Description and allowed values
remove_vat_for_GB When enabled, VAT is also removed from prices for United Kingdom destinations. Relevant when price_includes_vat is true.

Allowed Values

true, false

Default

false

Example
true

International and third party

Field Description and allowed values
ThirdPartyIntermediary Third-party intermediary details. When present, the whole object is written into the <ThirdParty>, <ThirdPartyReceiver>, and <Importer> blocks – each sub-key becomes an XML element inside those blocks. Required when BillTransportationTo is "TP".

Allowed Values

Object; see the sub-fields table.

Default

Absent.

Example
{
  "CompanyOrName": "Company Name",
  "Attention": "Contact Person",
  "Address1": "123 Main St",
  "CountryTerritory": "US",
  "PostalCode": "12345",
  "CityOrTown": "City Name",
  "StateProvinceCounty": "FL",
  "Telephone": "5551234567",
  "UpsAccountNumber": "ABC123"
}
item_substitutions_by_sku Maps a purchased SKU to an array of substitute items. Each matched Line Item is replaced by the listed substitutes, with the substitute quantity multiplied by the ordered quantity. Used by stores that ship bundle components under different SKUs than the one sold.

Allowed Values

Object mapping "OriginalSKU" to an array of substitute item objects.

Default

Absent.

Example
{
  "ORIGINAL_SKU": [
    {
      "sku": "REPLACEMENT_SKU",
      "price": 10.0,
      "quantity": 1,
      "title": "Replacement Item",
      "harmonized_system_code": "650500",
      "country_code_of_origin": "US"
    }
  ]
}

Ask Maibo to prepare the configuration

You do not have to assemble the JSON by hand. Ask Maibo, our AI Agent, to guide you through a short set of questions and prepare the configuration JSON for you.
Maibo knows every parameter on this page and their allowed values.

Maibo is available in:

  • Slack
  • the in-app chat, inside the Matrixify app
  • the chat on our website

If you have connected Matrixify to your own AI Agent through the MCP connection, you can send the same prompt to your own AI Agent instead of Maibo – it produces the same configuration JSON.

Copy this prompt and send it to Maibo (or to your own AI Agent) to start:

I want to set up the "Export to UPS WorldShip" format in Matrixify for my Shopify store. Help me build the EXPORT_UPS_WORLDSHIP_SETUP configuration JSON.

Please interview me one question at a time, in plain language - do not ask me to write JSON or to know parameter names. Ask about the essentials first (my store .myshopify.com domain, description of goods for customs, a phone number and a notification email, my UPS shipper number, and whether my product prices already include VAT), then the optional features: splitting each ordered unit into its own package with dimensions and weight taken from my product metafields, what goes into the Reference 1 and Reference 2 fields, linking shipments to my existing WorldShip customer records, which UPS service to use, who pays for shipping and duties, VAT handling, notifications, bundles that ship as separate components, and any advanced options.

Skip questions that do not apply based on my earlier answers, and only include the settings I actually need - leave everything else at its default. Use the Matrixify "UPS WorldShip Export - Configuration" documentation for the available parameters and their allowed values.

When we are done, give me the configuration as a single JSON object plus a short plain-language summary of each setting so I can check it. Then I will send it to Matrixify Support to apply to my store.

Start by asking me the first question.

If you already know exactly what you want, you can skip the questions and just describe it directly, for example:

I want to set up the "Export to UPS WorldShip" format in Matrixify for my Shopify store. Help me build the EXPORT_UPS_WORLDSHIP_SETUP configuration JSON.

Split every ordered unit into its own package. Take Length, Width and Height from the Variant Metafields custom.length, custom.width and custom.height, and use pounds for the weight. 
Fail the Order if any dimension or weight is missing. 
Put my customer number Metafield custom.customer_number into Customer ID, Location ID and Reference 1, and the SKU into Reference 2. 
My UPS shipper number is R89Y57, invoice unit of measure is CS, and my prices do not include VAT.

Either way, you get back a ready configuration JSON. Review it against the tables on this page – check each key and its value against the field it maps to – and confirm it matches what you described.
Once it looks correct, send it to our Support.