> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# My Dhl Express

> Client-mode REST API connectors for the DHL API Developer Portal: Shipment Tracking Unified (every DHL division) with Tracking Push subscriptions, Location Finder service points, DHL Express MyDHL API (rates, landed cost, shipments and labels, pickups, tracking, proof of delivery, paperless trade uploads) and Post & Parcel Germany (Parcel DE Shipping, Pickup and Returns with OAuth); purchases marked; companion server connector for DHL Tracking Push webhooks

Technical Preview

## Overview

Client-mode REST API connectors for the DHL API Developer Portal: Shipment Tracking Unified (every DHL division) with Tracking Push subscriptions, Location Finder service points, DHL Express MyDHL API (rates, landed cost, shipments and labels, pickups, tracking, proof of delivery, paperless trade uploads) and Post & Parcel Germany (Parcel DE Shipping, Pickup and Returns with OAuth); purchases marked; companion server connector for DHL Tracking Push webhooks.

This is one of the templates in the DHL API Developer Portal REST API app (`dhl-api-developer-portal`). Deploy it alongside the other connectors of that app when they depend on each other (for example a token connector plus an API connector).

> [!NOTE]
>
> Not yet verified against the live vendor API: No own DHL credentials on the factory box (no DHL\_\* / MYDHL\_\* variables): no developer.dhl.com app key with the Tracking / Location Finder / Push / Parcel DE products, no MyDHL API username + password, no DHL Express account or Parcel DE billing number. Static, mock, negative-control and no / fake-credential public probes ran; DHL's public pre-defined test keys gave live 200s for TrackShipment (mocked data), Location Finder and the Parcel DE sandbox token + hello, but those demo keys have no shipping product (Parcel DE ValidateShipments 401 no apiproduct match; MyDHL rejects the portal demo key), so no authenticated GET + POST round trip of the shipping APIs and no broker MQTT round trip.

## Auth

Per product: DhlApi + DhlLocationFinder header DHL-API-Key (developer.dhl.com app key); MyDhlExpress HTTP Basic MyDHL username:password (from DHL Express, not the portal key) + x-version 3.3.3 + Message-Reference; DhlParcelDeAuth OAuth 2.0 password grant (form grant\_type=password, username, password = GKP system user, client\_id = API key, client\_secret = API secret; reply access\_token Bearer, expires\_in 1799, no refresh token); DhlParcelDe Authorization: Bearer only (bearer + dhl-api-key together -> 401). Every event sends User-Agent: Coreflux-Broker.

Auth headers used by the template: `Authorization: Basic {value.json.basic}`.

## Template parameters

| Placeholder | Type | Description | Required |
| - | - | - | - |
| `RouteName` | string | Name of the My Dhl Express connector | no |
| `BaseUrl` | string | My Dhl Express base URL without trailing slash (e.g. [https://express.api.dhl.com](https://express.api.dhl.com)) | yes |

`BASE_ADDRESS` default: `https://express.api.dhl.com`.

## Events

| Event | Method | Endpoint | Request topic | Response topic | Payload fields |
| - | - | - | - | - | - |
| `ExpressGetRates` | GET | `/mydhlapi/rates?{value.json.query}` | `fleet/dhl/express-rate/get` | `fleet/dhl/express-rate/get/response` | `basic`, `message_ref`, `query` |
| `ExpressGetRatesMultiPiece` | POST | `/mydhlapi/rates` | `fleet/dhl/express-rate-multi/get` | `fleet/dhl/express-rate-multi/get/response` | `basic`, `body`, `message_ref` |
| `ExpressGetProducts` | GET | `/mydhlapi/products?{value.json.query}` | `fleet/dhl/express-product/get` | `fleet/dhl/express-product/get/response` | `basic`, `message_ref`, `query` |
| `ExpressValidateAddress` | GET | `/mydhlapi/address-validate?{value.json.query}` | `fleet/dhl/express-address/validate` | `fleet/dhl/express-address/validate/response` | `basic`, `message_ref`, `query` |
| `ExpressGetLandedCost` | POST | `/mydhlapi/landed-cost` | `fleet/dhl/express-landed-cost/get` | `fleet/dhl/express-landed-cost/get/response` | `basic`, `body`, `message_ref` |
| `ExpressValidateShipment` | POST | `/mydhlapi/shipments?validateDataOnly=true` | `fleet/dhl/express-shipment/validate` | `fleet/dhl/express-shipment/validate/response` | `basic`, `body`, `message_ref` |
| `ExpressCreateShipment` | POST | `/mydhlapi/shipments` | `fleet/dhl/express-shipment/create` | `fleet/dhl/express-shipment/create/response` | `basic`, `body`, `message_ref` |
| `ExpressAddShipmentPiece` | PATCH | `/mydhlapi/shipments/{value.json.id}/add-piece` | `fleet/dhl/express-shipment-piece/create` | `fleet/dhl/express-shipment-piece/create/response` | `basic`, `body`, `id`, `message_ref` |
| `ExpressTrackShipment` | GET | `/mydhlapi/shipments/{value.json.id}/tracking?{value.json.query}` | `fleet/dhl/express-tracking/get` | `fleet/dhl/express-tracking/get/response` | `basic`, `id`, `message_ref`, `query` |
| `ExpressTrackShipments` | GET | `/mydhlapi/tracking?{value.json.query}` | `fleet/dhl/express-tracking-multi/get` | `fleet/dhl/express-tracking-multi/get/response` | `basic`, `message_ref`, `query` |
| `ExpressGetProofOfDelivery` | GET | `/mydhlapi/shipments/{value.json.id}/proof-of-delivery?{value.json.query}` | `fleet/dhl/express-proof-of-delivery/get` | `fleet/dhl/express-proof-of-delivery/get/response` | `basic`, `id`, `message_ref`, `query` |
| `ExpressGetShipmentImage` | GET | `/mydhlapi/shipments/{value.json.id}/get-image?{value.json.query}` | `fleet/dhl/express-shipment-image/get` | `fleet/dhl/express-shipment-image/get/response` | `basic`, `id`, `message_ref`, `query` |
| `ExpressUploadShipmentImage` | PATCH | `/mydhlapi/shipments/{value.json.id}/upload-image` | `fleet/dhl/express-shipment-image/upload` | `fleet/dhl/express-shipment-image/upload/response` | `basic`, `body`, `id` |
| `ExpressUploadShipmentInvoiceData` | PATCH | `/mydhlapi/shipments/{value.json.id}/upload-invoice-data` | `fleet/dhl/express-shipment-invoice/upload` | `fleet/dhl/express-shipment-invoice/upload/response` | `basic`, `body`, `id`, `message_ref` |
| `ExpressUploadInvoiceData` | POST | `/mydhlapi/invoices/upload-invoice-data` | `fleet/dhl/express-invoice/upload` | `fleet/dhl/express-invoice/upload/response` | `basic`, `body`, `message_ref` |
| `ExpressCreatePickup` | POST | `/mydhlapi/pickups` | `fleet/dhl/express-pickup/create` | `fleet/dhl/express-pickup/create/response` | `basic`, `body`, `message_ref` |
| `ExpressUpdatePickup` | PATCH | `/mydhlapi/pickups/{value.json.id}` | `fleet/dhl/express-pickup/update` | `fleet/dhl/express-pickup/update/response` | `basic`, `body`, `id`, `message_ref` |
| `ExpressCancelPickup` | DELETE | `/mydhlapi/pickups/{value.json.id}?{value.json.query}` | `fleet/dhl/express-pickup/cancel` | `fleet/dhl/express-pickup/cancel/response` | `basic`, `id`, `message_ref`, `query` |
| `ExpressAllocateIdentifiers` | GET | `/mydhlapi/identifiers?{value.json.query}` | `fleet/dhl/express-identifier/create` | `fleet/dhl/express-identifier/create/response` | `basic`, `message_ref`, `query` |
| `ExpressFindServicePoints` | GET | `/mydhlapi/servicepoints?{value.json.query}` | `fleet/dhl/express-service-point/search` | `fleet/dhl/express-service-point/search/response` | `basic`, `query` |
| `ExpressGetReferenceData` | GET | `/mydhlapi/reference-data?{value.json.query}` | `fleet/dhl/express-reference-data/get` | `fleet/dhl/express-reference-data/get/response` | `basic`, `message_ref`, `query` |
| `ExpressEarlyShipmentScreening` | POST | `/mydhlapi/early-shipment-screening` | `fleet/dhl/express-screening/create` | `fleet/dhl/express-screening/create/response` | `basic`, `body`, `message_ref` |

## Deploy

Get the template card (JSON with `template` and `metadata`) from the broker, then deploy the connector:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_pub -t '$SYS/Coreflux/Command' -m "-routeCode MY_DHL_EXPRESS"
```

The deployable connector from the REST API app, with `BASE_ADDRESS` already filled in:

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
DEFINE ROUTE MyDhlExpress WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://express.api.dhl.com"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '60'
        WITH DEFAULT_CONTENT_TYPE "application/json"
    ADD EVENT ExpressGetRates
        WITH SOURCE_TOPIC "fleet/dhl/express-rate/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-rate/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/rates?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressGetRatesMultiPiece
        WITH SOURCE_TOPIC "fleet/dhl/express-rate-multi/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-rate-multi/get/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/rates"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressGetProducts
        WITH SOURCE_TOPIC "fleet/dhl/express-product/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-product/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/products?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressValidateAddress
        WITH SOURCE_TOPIC "fleet/dhl/express-address/validate"
        WITH DESTINATION_TOPIC "fleet/dhl/express-address/validate/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/address-validate?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressGetLandedCost
        WITH SOURCE_TOPIC "fleet/dhl/express-landed-cost/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-landed-cost/get/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/landed-cost"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressValidateShipment
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment/validate"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment/validate/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/shipments?validateDataOnly=true"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressCreateShipment
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment/create"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/shipments"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressAddShipmentPiece
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment-piece/create"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment-piece/create/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/add-piece"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressTrackShipment
        WITH SOURCE_TOPIC "fleet/dhl/express-tracking/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-tracking/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/tracking?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressTrackShipments
        WITH SOURCE_TOPIC "fleet/dhl/express-tracking-multi/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-tracking-multi/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/tracking?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressGetProofOfDelivery
        WITH SOURCE_TOPIC "fleet/dhl/express-proof-of-delivery/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-proof-of-delivery/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/proof-of-delivery?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressGetShipmentImage
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment-image/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment-image/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/get-image?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressUploadShipmentImage
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment-image/upload"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment-image/upload/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/upload-image"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressUploadShipmentInvoiceData
        WITH SOURCE_TOPIC "fleet/dhl/express-shipment-invoice/upload"
        WITH DESTINATION_TOPIC "fleet/dhl/express-shipment-invoice/upload/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/mydhlapi/shipments/{value.json.id}/upload-invoice-data"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressUploadInvoiceData
        WITH SOURCE_TOPIC "fleet/dhl/express-invoice/upload"
        WITH DESTINATION_TOPIC "fleet/dhl/express-invoice/upload/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/invoices/upload-invoice-data"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressCreatePickup
        WITH SOURCE_TOPIC "fleet/dhl/express-pickup/create"
        WITH DESTINATION_TOPIC "fleet/dhl/express-pickup/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/pickups"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressUpdatePickup
        WITH SOURCE_TOPIC "fleet/dhl/express-pickup/update"
        WITH DESTINATION_TOPIC "fleet/dhl/express-pickup/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/mydhlapi/pickups/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExpressCancelPickup
        WITH SOURCE_TOPIC "fleet/dhl/express-pickup/cancel"
        WITH DESTINATION_TOPIC "fleet/dhl/express-pickup/cancel/response"
        WITH METHOD "DELETE"
        WITH ENDPOINT "/mydhlapi/pickups/{value.json.id}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressAllocateIdentifiers
        WITH SOURCE_TOPIC "fleet/dhl/express-identifier/create"
        WITH DESTINATION_TOPIC "fleet/dhl/express-identifier/create/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/identifiers?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressFindServicePoints
        WITH SOURCE_TOPIC "fleet/dhl/express-service-point/search"
        WITH DESTINATION_TOPIC "fleet/dhl/express-service-point/search/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/servicepoints?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
    ADD EVENT ExpressGetReferenceData
        WITH SOURCE_TOPIC "fleet/dhl/express-reference-data/get"
        WITH DESTINATION_TOPIC "fleet/dhl/express-reference-data/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/mydhlapi/reference-data?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "x-version" "3.3.3"
            ADD "Message-Reference" "{value.json.message_ref}"
    ADD EVENT ExpressEarlyShipmentScreening
        WITH SOURCE_TOPIC "fleet/dhl/express-screening/create"
        WITH DESTINATION_TOPIC "fleet/dhl/express-screening/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/mydhlapi/early-shipment-screening"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Basic {value.json.basic}"
            ADD "Message-Reference" "{value.json.message_ref}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
```

Deploy it with `-addRoute` (do not include `ADD METADATA`).

## Usage example

Call `ExpressGetRates` by publishing a JSON payload to its request topic, and read the reply on the response topic:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_sub -t 'fleet/dhl/express-rate/get/response' &
mosquitto_pub -t 'fleet/dhl/express-rate/get' -m '{"basic": "<basic>", "message_ref": "<message_ref>", "query": "<query>"}'
```

## Related

* [REST API Connectors](/latest/lot-language/routes/rest-api-routes)
* [REST API Apps catalog](/latest/lot-language/routes/rest-api-apps)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.