Articles on: API & Webhooks

DHL Express XML to REST API Migration Guide

Overview



Starting April 21, 2025, DHL Express is transitioning from the legacy XML API to the new REST API. This migration will occur in three phases and is aimed at improving reliability, security, and feature support.

Key details



The migration from the XML API to the new REST API will occur in the background, with no need for customers to manually update their credentials.
Your existing XML API credentials will automatically be migrated to the new REST API.
New accounts will automatically use the new REST API credentials (Account number, API Key and API Secret).
AfterShip Shipping and AfterShip Returns services will continue without downtime.
The XML API will be fully deprecated on June 3, 2025 for Non-Enterprise customers, and they will need to use the new REST API to access all DHL Express services.

Migration timeline



PhaseTimelineCustomers
Phase 1April 21 - May 5, 2025AfterShip Shipping Essentials and selected Pro plan customers
Phase 2May 6 - 18, 2025AfterShip Shipping remaining Pro plan and selected AfterShip Returns Non-Enterprise customers
Phase 3May 19 - June 3, 2025All remaining Non-Enterprise AfterShip Returns customers

Key changes



Outlined below are the main behavior changes you can expect when transitioning to the new MyDHL integration from XML API. Please review these changes and take actions to ensure smooth operation and avoid issues during label generation and rates calculation.

Require action from your end


These changes require you to take some actions to ensure your shipping and returns services remain compatible with the new REST API and to avoid running into any errors.

invoice.number or order_number required for generating commercial invoice

To generate a DHL commercial invoice, either invoice.number or `order_number`must be provided. If neither is provided for international shipments, label generation will fail with the error data.invoice.number is a required property

ship_to.city is now required

Due to changes in the DHL integration, the ship_to.city field is now required for label generation and rate calculation. If ship_to.city is not included, label generation and rate calculation will fail with an error data.shipment.ship_to.city is a required property.

Address length limitation change

All address fields ( street1, street2, street3) now have a length limitation of 45 characters. If the address length exceeds this limit, label generation will fail with the error data.shipment.ship_to.street1 is too long, maximum length is 45.

New set of box_type enum

Customers using DHL-provided boxes should update their box_type values to match the new ones.

custom
dhl_box_2
dhl_box_3
dhl_box_4
dhl_box_5
dhl_box_6
dhl_box_7
dhl_box_8
dhl_tube_small
dhl_tube_large
dhl_card_envelope

You will not run into any errors if you continue to use the legacy box_type values.

Require no action from your end


These changes don't require any changes or actions from you. The API will continue to work as it did before, but the changes are either internal or will be handled automatically by the API itself. You will greatly benefit from the improvements without needing to modify your integration.

Auto-apply paperless invoice

Paperless invoices are now enabled by default, with no impact on domestic or EU to EU shipments.
For international shipments, qualified shipments not created with paperless_invoice will default to Paperless Trade (PLT), while non-qualified ones will continue as non-PLT.
Shipments created with paperless_invoice will succeed without errors.

💡 What disqualifies shipments for Paperless Trade (PLT) ?

Whether a shipment is eligible for paperless trade can depend on the carrier or the countries involved in shipping. For example, a domestic shipment doesn't require a customs declaration, so no commercial invoice is needed for customs, making it "not qualified" for paperless trade. Example, for shipments to certain countries, such as Vietnam, where hardcopy invoices are required (and electronic commercial invoices are not accepted), the shipment is "qualified" for paperless trade.

Always get DHL commercial invoice

DHL commercial invoices are always provided when requested, as long as the API includes an invoice object.
For customers using the AfterShip Returns product, the commercial invoice will be in DHL Returns format and will display the Original Export Tracking ID if available.

DHL commercial invoice output change

There are two changes to the DHL commercial invoice output:

The Position value will now be empty instead of Manager.
The Signature value will no longer default to using ship_from.contact_name. You can specify the signature name using the API request field invoice.signature_name.

Apply tax_id_type mapping

The tax_id_type will now directly map to registrationNumbers.typeCode, improving tax information accuracy (e.g., vat → VAT, gst → GST). If tax_id_type is not provided, shipment data will be used instead.

DHL service name change

The service name will change from DHL Domestic Express to DHL Express Domestic, but this will not impact API behavior.


Refer to DHL Express Troubleshooting Tips if you need more help on DHL Express.

Updated on: 07/04/2025

Was this article helpful?

Share your feedback

Cancel

Thank you!