DHL Shipping API Guidance
Use this skill when selecting, implementing, reviewing, or migrating among the DHL eCommerce Americas, DHL Location Finder, MyDHL Express, and Parcel Germany Shipping APIs. Identify the DHL division and contract before choosing endpoints, credentials, product codes, location services, or shipment rules.
Reference index
| Reference |
Topics |
| API selection and access |
Product scope, accounts, authentication, environments, quotas, endpoints, compatibility |
| Location search and addressing |
Search modes, filters, location and service identifiers, response data, direct addressing, migration |
| Shipment, label, and manifest lifecycle |
Shipment inputs, labels, manifests, pickup behavior, returns, rendering, schema changes |
| Customs and dangerous goods |
Customs details, product restrictions, registrations, reference and document codes, dangerous goods |
| Rates, tracking, images, and reference data |
Rating, landed cost, cutoff fields, tracking, document images, invoice totals, reference datasets |
Breaking changes and retirements
Retired location and shipping APIs
- Location Search Europe is decommissioned. Migrate to Unified Location Finder v1, using the documented field mappings and accounting for fields with no Unified equivalent.
- Parcel Germany GKV SOAP 1.x and 2.x are retired. GKV SOAP 3.x reached its stated sunset on May 31, 2026; use REST Shipping v2.
Authentication migration
Parcel Germany Shipping v2 supports OAuth 2 through the separately assigned Post & Parcel Germany Authentication API. Basic Auth with dhl-api-key remains an alternative in v2 but is slated for removal in a future major version.
Renamed and deprecated fields
- Versioned MyDHL Shipment and Rates responses introduced
pickupCutoffSameDayOutboundProcessing through x-version as the replacement for GMTCutoffTime. Migrate field handling rather than treating the names as independent cutoff values.
- Parcel Germany
officeOfOrigin is deprecated.
- Parcel Germany clients should follow the corrected
GET /labels, GET /manifests, shippingConditions, and product schemas.
GoGreen label deadlines
- GoGreen ends on August 31, 2026, and its logo must be removed by that date.
- Remove the existing GoGreen Plus logo by September 27, 2026. A new GoGreen Plus claim is optional; the service remains available for national outbound and return shipments.
Choose the correct contract
| Contract |
Supported use |
| eCommerce Americas v4 |
Product discovery, duties and taxes, labels, manifests, tracking, and returns for domestic and international packages originating in the United States or Canada |
| Location Finder v1 |
GET-only lookup by address, coordinates, location ID, or keywordId |
| MyDHL API |
DHL Express product, rating, shipment, pickup, tracking, image, invoice, landed-cost, reference-data, and service-point operations |
| Parcel Germany Shipping v2 |
Labels and export documents for goods shipments originating in Germany, domestically or internationally |
Do not substitute the MyDHL Service Point contract for another DHL division's location API. Its operation is specific to MyDHL and finds Express points from a postal address, service-point ID, or geocode.
Access and environment quick reference
eCommerce Americas
- Test against
https://api-sandbox.dhlecs.com; use https://api.dhlecs.com in production.
- Labels and manifests do not cross environments.
- Verify production pickup access, products, capacity, account master data, distribution centers, and allowed content categories separately before launch.
- Check network allowlists and TLS policy against the inbound and outbound IP addresses and cipher versions published effective August 18, 2026.
Location Finder
- Production base URL:
https://api.dhl.com/location-finder/v1.
- Every call requires an approved app key in
DHL-API-Key.
- Initial access is 500 calls per day. Request an app upgrade for more; exhaustion returns HTTP
429.
MyDHL Express
- An active DHL Express customer account is required.
- Send issued credentials with pre-emptive HTTP Basic authentication.
- Test at
https://express.api.dhl.com/mydhlapi/test; use https://express.api.dhl.com/mydhlapi in production.
- Test credentials allow 500 service invocations per day.
Parcel Germany
- Sandbox:
https://api-sandbox.dhl.com/parcel/de/shipping/v2/.
- Production:
https://api-eu.dhl.com/parcel/de/shipping/v2/; explicit approval follows successful sandbox use.
- A newly created API key may not work until 00:00 CEST.
- Use a non-interactive system user in production. Its portal password expires after 365 days; a personal user's expires after 90 days.
Compatibility and failure handling
eCommerce Americas evolution
Within an existing API version, treat these as backward-compatible changes:
- new optional request or query fields;
- extra response fields;
- property reordering;
- new methods;
- new resources.
Clients must tolerate those changes. Use product codes, error codes, and event IDs as integration keys instead of mutable names or descriptions.
Error responses link to https://api.dhlecs.com/docs/errors/<error-code>. Two independent controls can return 429 with distinct details:
- Spike Arrest limits parallel requests to a resource.
- Quota Violation limits account-specific weekly volume across resources.
Provide queue-and-retry handling for either case.
Parcel Germany batch semantics
POST /orders validates or creates shipments; GET /orders retrieves documents; DELETE /orders cancels shipments.
POST /manifests closes out shipments; GET /manifests retrieves manifests.
GET /labels follows the label URL returned by POST /orders.
GET / checks the version but does not disclose patch-level updates.
- Array responses retain request order, and a one-entry request still returns a one-entry array.
- Use
validate=true to check fields and business rules without creating a shipment.
High-value shipment rules
eCommerce Americas
- International label requests can include
additionalPartyAddress and customsDetails.itemReferences; use published Item Reference Type Codes for item reference values.
- Domestic Label requests accept the
customsDetails array only for APO, FPO, DPO, and non-continental US destinations. Omit it elsewhere.
- Manifest requests accept optional
products to limit or group closeout by product.
- Put optional
deliveryInstructions in consigneeAddress.
- Preserve
postalCode and country from each Tracking events object when processing event location.
MyDHL Express
- Use
Product for lightweight one-piece capability lookup. Rating adds account rates, value-added services, and estimated delivery.
- DHL recommends rating before shipment creation so submitted products and services are eligible.
- JSON must not begin with a byte-order mark.
- For standardized packaging, a package type code lets Rating and Shipment omit dimensions because the code supplies them.
addPiece works only before DHL pickup or a recorded scan.
- Declarable non-document shipments require
exportDeclaration; non-declarable shipments may omit currency code and incoterm.
- Shipment data can be validated without creating a label.
- Monetary, weight, duty, tax, and additional-charge values must be positive.
Parcel Germany
- Each physical parcel is one shipment; multipackage shipments are unsupported.
costCenter values such as 1/2 and 2/2 can visually relate separate labels.
- Weight is mandatory in grams or kilograms.
- Dimensions are optional, but unit, length, width, and height must be supplied together.
- Omit missing consignee phone or email, or send
null; do not send whitespace.
- Warnings do not invalidate an accompanying label. Set
mustEncode=true when creation must require an encodable address.
- Shipments remain editable only until manifesting. Before then, cancel with
DELETE /orders and recreate with POST /orders; manifested shipments cannot be changed.
- International parcels must be manifested before physical handoff.
High-value location rules
/find-by-address requires at least three total characters across addressLocality, postalCode, and streetAddress and first resolves the address to coordinates.
- The default radius is 5,000 metres and the maximum is 1,000,000 metres.
- Repeating
serviceType creates an AND condition.
parcel:pick-up-all and parcel:drop-off-all are query-only family matchers and are not returned as service values.
- Use
providerType=parcel to exclude Express locations from Post & Parcel results.
- A valid but uncovered country code can return
200 with no locations; an invalid code returns 400.
- Direct shipment addressing is not for DHL Express and requires a designated Postfiliale number exposed as
keywordId. Supply the recipient email for pickup notification.
- Location Data must not be stored or modified. When used with other logistics providers' location data, show all DHL locations returned for the address and do not select or recommend individual DHL locations contrary to DHL's interests.
Product and dangerous-goods checks
- eCommerce Americas product code
PLX is DHL Parcel International Expedited. Apply its regulations and content-category rules; PLX does not support dangerous goods.
- Paperless Trade dangerous-goods content categories
01–06 and 40 are restricted to Canada and Mexico, not Canada alone. Reject other destinations.
- Parcel Germany validates request
product against the billing-number procedure. Available services also depend on product, user permissions, and mutually exclusive combinations.
- DHL Kleinpaket replaced Warenpost on January 1, 2025.
Consignee.ContactAddress.country is mandatory for Kleinpaket as an ISO 3166-1 alpha-3 code.
- A requested Parcel Germany
premium=false can still become Premium where the destination lacks an Economy product; most EU countries behave this way, while Switzerland offers both.
Consult the detailed references
Use the linked references for complete field lists, service identifiers, country coverage, label formats, customs codes, image types, address layouts, response mappings, and lifecycle limits. Preserve the documented division-specific scope and conditions when transferring any item into implementation code.
1---2name: dhl-shipping-knowledge-patch3description: DHL Shipping4license: MIT5---678# DHL Shipping API Guidance910Use this skill when selecting, implementing, reviewing, or migrating among the DHL eCommerce Americas, DHL Location Finder, MyDHL Express, and Parcel Germany Shipping APIs. Identify the DHL division and contract before choosing endpoints, credentials, product codes, location services, or shipment rules.1112## Reference index1314| Reference | Topics |15| --- | --- |16| [API selection and access](references/api-selection-and-access.md) | Product scope, accounts, authentication, environments, quotas, endpoints, compatibility |17| [Location search and addressing](references/location-search-and-addressing.md) | Search modes, filters, location and service identifiers, response data, direct addressing, migration |18| [Shipment, label, and manifest lifecycle](references/shipment-label-and-manifest.md) | Shipment inputs, labels, manifests, pickup behavior, returns, rendering, schema changes |19| [Customs and dangerous goods](references/customs-and-dangerous-goods.md) | Customs details, product restrictions, registrations, reference and document codes, dangerous goods |20| [Rates, tracking, images, and reference data](references/rates-tracking-and-documents.md) | Rating, landed cost, cutoff fields, tracking, document images, invoice totals, reference datasets |2122## Breaking changes and retirements2324### Retired location and shipping APIs2526- Location Search Europe is decommissioned. Migrate to Unified Location Finder v1, using the documented field mappings and accounting for fields with no Unified equivalent.27- Parcel Germany GKV SOAP 1.x and 2.x are retired. GKV SOAP 3.x reached its stated sunset on May 31, 2026; use REST Shipping v2.2829### Authentication migration3031Parcel Germany Shipping v2 supports OAuth 2 through the separately assigned Post & Parcel Germany Authentication API. Basic Auth with `dhl-api-key` remains an alternative in v2 but is slated for removal in a future major version.3233### Renamed and deprecated fields3435- Versioned MyDHL Shipment and Rates responses introduced `pickupCutoffSameDayOutboundProcessing` through `x-version` as the replacement for `GMTCutoffTime`. Migrate field handling rather than treating the names as independent cutoff values.36- Parcel Germany `officeOfOrigin` is deprecated.37- Parcel Germany clients should follow the corrected `GET /labels`, `GET /manifests`, `shippingConditions`, and `product` schemas.3839### GoGreen label deadlines4041- GoGreen ends on August 31, 2026, and its logo must be removed by that date.42- Remove the existing GoGreen Plus logo by September 27, 2026. A new GoGreen Plus claim is optional; the service remains available for national outbound and return shipments.4344## Choose the correct contract4546| Contract | Supported use |47| --- | --- |48| eCommerce Americas v4 | Product discovery, duties and taxes, labels, manifests, tracking, and returns for domestic and international packages originating in the United States or Canada |49| Location Finder v1 | GET-only lookup by address, coordinates, location ID, or `keywordId` |50| MyDHL API | DHL Express product, rating, shipment, pickup, tracking, image, invoice, landed-cost, reference-data, and service-point operations |51| Parcel Germany Shipping v2 | Labels and export documents for goods shipments originating in Germany, domestically or internationally |5253Do not substitute the MyDHL Service Point contract for another DHL division's location API. Its operation is specific to MyDHL and finds Express points from a postal address, service-point ID, or geocode.5455## Access and environment quick reference5657### eCommerce Americas5859- Test against `https://api-sandbox.dhlecs.com`; use `https://api.dhlecs.com` in production.60- Labels and manifests do not cross environments.61- Verify production pickup access, products, capacity, account master data, distribution centers, and allowed content categories separately before launch.62- Check network allowlists and TLS policy against the inbound and outbound IP addresses and cipher versions published effective August 18, 2026.6364### Location Finder6566- Production base URL: `https://api.dhl.com/location-finder/v1`.67- Every call requires an approved app key in `DHL-API-Key`.68- Initial access is 500 calls per day. Request an app upgrade for more; exhaustion returns HTTP `429`.6970### MyDHL Express7172- An active DHL Express customer account is required.73- Send issued credentials with pre-emptive HTTP Basic authentication.74- Test at `https://express.api.dhl.com/mydhlapi/test`; use `https://express.api.dhl.com/mydhlapi` in production.75- Test credentials allow 500 service invocations per day.7677### Parcel Germany7879- Sandbox: `https://api-sandbox.dhl.com/parcel/de/shipping/v2/`.80- Production: `https://api-eu.dhl.com/parcel/de/shipping/v2/`; explicit approval follows successful sandbox use.81- A newly created API key may not work until 00:00 CEST.82- Use a non-interactive system user in production. Its portal password expires after 365 days; a personal user's expires after 90 days.8384## Compatibility and failure handling8586### eCommerce Americas evolution8788Within an existing API version, treat these as backward-compatible changes:8990- new optional request or query fields;91- extra response fields;92- property reordering;93- new methods;94- new resources.9596Clients must tolerate those changes. Use product codes, error codes, and event IDs as integration keys instead of mutable names or descriptions.9798Error responses link to `https://api.dhlecs.com/docs/errors/<error-code>`. Two independent controls can return `429` with distinct details:99100- Spike Arrest limits parallel requests to a resource.101- Quota Violation limits account-specific weekly volume across resources.102103Provide queue-and-retry handling for either case.104105### Parcel Germany batch semantics106107- `POST /orders` validates or creates shipments; `GET /orders` retrieves documents; `DELETE /orders` cancels shipments.108- `POST /manifests` closes out shipments; `GET /manifests` retrieves manifests.109- `GET /labels` follows the label URL returned by `POST /orders`.110- `GET /` checks the version but does not disclose patch-level updates.111- Array responses retain request order, and a one-entry request still returns a one-entry array.112- Use `validate=true` to check fields and business rules without creating a shipment.113114## High-value shipment rules115116### eCommerce Americas117118- International label requests can include `additionalPartyAddress` and `customsDetails.itemReferences`; use published Item Reference Type Codes for item reference values.119- Domestic Label requests accept the `customsDetails` array only for APO, FPO, DPO, and non-continental US destinations. Omit it elsewhere.120- Manifest requests accept optional `products` to limit or group closeout by product.121- Put optional `deliveryInstructions` in `consigneeAddress`.122- Preserve `postalCode` and `country` from each Tracking `events` object when processing event location.123124### MyDHL Express125126- Use `Product` for lightweight one-piece capability lookup. `Rating` adds account rates, value-added services, and estimated delivery.127- DHL recommends rating before shipment creation so submitted products and services are eligible.128- JSON must not begin with a byte-order mark.129- For standardized packaging, a package type code lets Rating and Shipment omit dimensions because the code supplies them.130- `addPiece` works only before DHL pickup or a recorded scan.131- Declarable non-document shipments require `exportDeclaration`; non-declarable shipments may omit currency code and incoterm.132- Shipment data can be validated without creating a label.133- Monetary, weight, duty, tax, and additional-charge values must be positive.134135### Parcel Germany136137- Each physical parcel is one shipment; multipackage shipments are unsupported. `costCenter` values such as `1/2` and `2/2` can visually relate separate labels.138- Weight is mandatory in grams or kilograms.139- Dimensions are optional, but unit, length, width, and height must be supplied together.140- Omit missing consignee phone or email, or send `null`; do not send whitespace.141- Warnings do not invalidate an accompanying label. Set `mustEncode=true` when creation must require an encodable address.142- Shipments remain editable only until manifesting. Before then, cancel with `DELETE /orders` and recreate with `POST /orders`; manifested shipments cannot be changed.143- International parcels must be manifested before physical handoff.144145## High-value location rules146147- `/find-by-address` requires at least three total characters across `addressLocality`, `postalCode`, and `streetAddress` and first resolves the address to coordinates.148- The default radius is 5,000 metres and the maximum is 1,000,000 metres.149- Repeating `serviceType` creates an AND condition.150- `parcel:pick-up-all` and `parcel:drop-off-all` are query-only family matchers and are not returned as service values.151- Use `providerType=parcel` to exclude Express locations from Post & Parcel results.152- A valid but uncovered country code can return `200` with no locations; an invalid code returns `400`.153- Direct shipment addressing is not for DHL Express and requires a designated Postfiliale number exposed as `keywordId`. Supply the recipient email for pickup notification.154- Location Data must not be stored or modified. When used with other logistics providers' location data, show all DHL locations returned for the address and do not select or recommend individual DHL locations contrary to DHL's interests.155156## Product and dangerous-goods checks157158- eCommerce Americas product code `PLX` is DHL Parcel International Expedited. Apply its regulations and content-category rules; PLX does not support dangerous goods.159- Paperless Trade dangerous-goods content categories `01`–`06` and `40` are restricted to Canada and Mexico, not Canada alone. Reject other destinations.160- Parcel Germany validates request `product` against the billing-number procedure. Available services also depend on product, user permissions, and mutually exclusive combinations.161- DHL Kleinpaket replaced Warenpost on January 1, 2025. `Consignee.ContactAddress.country` is mandatory for Kleinpaket as an ISO 3166-1 alpha-3 code.162- A requested Parcel Germany `premium=false` can still become Premium where the destination lacks an Economy product; most EU countries behave this way, while Switzerland offers both.163164## Consult the detailed references165166Use the linked references for complete field lists, service identifiers, country coverage, label formats, customs codes, image types, address layouts, response mappings, and lifecycle limits. Preserve the documented division-specific scope and conditions when transferring any item into implementation code.