DHL Express Mobile icon

DHL Express Mobile data API: waybills, rates, pickups

DHL Express · Transport

DHL Express Mobile is the official Android client of DHL Express, the time-definite international unit of Deutsche Post DHL Group, for people who send and receive Express shipments. From the home dashboard a signed-in user splits inbound To Me and outbound From Me air waybills, opens a quote-and-ship flow that compares Express products, books a ClickFlow shipment or a courier pickup, stores an address book and linked Express account numbers, and jumps into MyBill; guests can still look up a single air waybill with a captcha. On Demand Delivery lets a consignee change the drop, and an electronic proof of delivery is available on delivered pieces. Locales include English, German, French, Mexican Spanish, Brazilian Portuguese and Arabic, covering markets such as Germany, the United States, India, the UAE, France, Brazil and Mexico, and the app sits in the global Express market against UPS, FedEx and national posts such as Australia Post and Nova Poshta.

Air-waybill checkpoints pin airWayBill, status and eddDate beside a checkpoints timeline of date, time and location, with oddLink or a fallback On Demand Delivery link when the drop can still change. Outbound From Me rows add receiverName, originCountry, toBePickedUp and pendingPickupBooking; inbound To Me rows key off userId plus mobileNo/email and optional postCd/ctyNm. Quote cards return productName, productPrice, productCode and chargeableWeight from origin/destination and packages, switching to an account tariff when customerAccNo is set; the packaging catalog supplies box_title and packageTyCd.

Courier windows expose bookingNo, puDate, readyTime and closeTime. Linked Express accounts list accountNo and localImp; the address book stores addLn1, ctyNm, postCd, taxID and EORINumber. ClickFlow bookings return shipmentId (and hostedCheckoutId on card checkout); delivered pieces yield an ePOD PDF in data; the inbox carries awbNumber, actionRequired and mngDlvryURL; MyBill SSO hands back loginURL. TMS and marketplace feeds page inbound airWayBill/eddDate into the same To Me timeline, ship desks file productPrice against the quote the customer saw, warehouse calendars ingest pickup windows, and billing matches accountNo before a rate call — openData Studio turns that surface into callable open data.

Screenshots

  • DHL Express Mobile screenshot 1
  • DHL Express Mobile screenshot 2
  • DHL Express Mobile screenshot 3
  • DHL Express Mobile screenshot 4
  • DHL Express Mobile screenshot 5
  • DHL Express Mobile screenshot 6
  • DHL Express Mobile screenshot 7
  • DHL Express Mobile screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Sign in with loginV2

    POST /v1/express/session osint

    Issues access_token, refresh_token and client_id for the signed-in session when the new-password-policy feature is on (loginV2).

    Auth: App API key in the Authorization header. No user token yet; the body carries username and password.

    • username
    • password
    • user_info
    • country
    • language
    • appVersion
    • access_token
    • refresh_token
    • client_id
    • expires_in
    • accessToken
    • refreshToken
    • clientId
    • countryCd
    • statusCode
    • responseDetail
    • userId
    • userEmail
    • userMobileNo
    POST /v1/express/session HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "username": "[email protected]",
      "password": "<password>",
      "user_info": {
        "country": "DE",
        "language": "en",
        "appVersion": "6.1.1"
      }
    }
    {
      "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
      "refresh_token": "rt-7f21c9...",
      "client_id": "cid-88421",
      "expires_in": 3600,
      "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
      "refreshToken": "rt-7f21c9...",
      "clientId": "cid-88421",
      "countryCd": "DE",
      "statusCode": "100",
      "responseDetail": {
        "userId": "u-100200",
        "userEmail": "[email protected]",
        "userMobileNo": "+491701234567",
        "userFirstName": "Alex",
        "userLastName": "Keller"
      }
    }
  • Track air waybill

    POST /v1/shipments/track opendata

    Hydrates the tracking-details screen: checkpoint timeline plus status, eddDate/eddTime, eta, oddLink and servicePointUrl for one airWayBill.

    Auth: App API key in Authorization. Guests post a waybill lookup; a signed-in session adds authentication.token (access_token).

    • airWayBill
    • countryCode
    • languageCd
    • addShipmentToODD
    • moreDetails
    • iv
    • captchaVerificationData
    • captchaText
    • postCd
    • ctyNm
    • sbNm
    • checkpoints
    • date
    • time
    • description
    • location
    • counter
    • totalPieces
    • pIds
    • status
    • eddDate
    • eddTime
    • eta
    • oddLink
    • servicePointUrl
    POST /v1/shipments/track HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "airWayBill": "1234567890",
      "countryCode": "DE",
      "languageCd": "en",
      "addShipmentToODD": "N",
      "moreDetails": "Y",
      "iv": "",
      "captchaVerificationData": {
        "captchaText": "AB12",
        "token": "<captcha-token>"
      }
    }
    [
      {
        "airWayBill": "1234567890",
        "status": "Transit",
        "eddDate": "2026-10-14",
        "eddTime": "18:00",
        "eta": "2026-10-14T16:30:00",
        "oddLink": "https://example.invalid/odd/session/abc",
        "servicePointUrl": "https://example.invalid/locator/de/berlin",
        "checkpoints": [
          {
            "date": "2026-10-12",
            "time": "09:14",
            "description": "Shipment picked up",
            "location": "Frankfurt, DE",
            "counter": 1,
            "id": "cp-1",
            "totalPieces": 1,
            "pIds": [
              "pid-1"
            ]
          }
        ]
      }
    ]
  • List From Me shipments

    POST /v1/shipments/outbound opendata

    Pages the signed-in From Me (outbound) list used by the home dashboard: airWayBill, receiver, status, EDD and pickup/drop-off flags.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. From-Me listing errors if the user is not logged in.

    • offset
    • limit
    • searchTerm
    • status
    • shipmentType
    • _id
    • id
    • airWayBill
    • receiver
    • receiverName
    • shipmentCreatedDate
    • eddDate
    • eddTime
    • location
    • destinationCity
    • originCountry
    • destinationCountry
    • readStatus
    • weight
    • pieces
    • contents
    • type
    • referenceNo
    • puDate
    • dropOff
    • toBePickedUp
    • pendingPickupBooking
    POST /v1/shipments/outbound HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "offset": 0,
      "limit": 20,
      "searchTerm": "",
      "status": "",
      "shipmentType": "N",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "shipments": [
        {
          "_id": "sh-1001",
          "id": "1234567890",
          "airWayBill": "1234567890",
          "receiver": "Maria Lopez",
          "receiverName": "Maria Lopez",
          "status": "Transit",
          "shipmentCreatedDate": "2026-10-10",
          "eddDate": "2026-10-14",
          "eddTime": "18:00",
          "location": "Mexico City",
          "destinationCity": "Mexico City",
          "originCountry": "DE",
          "destinationCountry": "MX",
          "readStatus": "N",
          "weight": "2.4",
          "pieces": 1,
          "contents": "Documents",
          "type": "ClickFlow",
          "referenceNo": "PO-4419",
          "puDate": "2026-10-10",
          "dropOff": "N",
          "toBePickedUp": "Y",
          "pendingPickupBooking": "N"
        }
      ],
      "totalCount": 1
    }
  • List To Me shipments

    POST /v1/shipments/inbound opendata

    Pages inbound To Me shipments for the signed-in dashboard, keyed by userId plus mobileNo/email and optional default-address postCd/ctyNm/sbNm.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. To-Me listing requires a logged-in user.

    • mobileNo
    • email
    • userId
    • offset
    • limit
    • languageCode
    • countryCode
    • postCd
    • ctyNm
    • sbNm
    • shipmentId
    • _id
    • airWayBill
    • sender
    • senderName
    • receiver
    • receiverName
    • status
    • eddDate
    • eddTime
    • location
    • isNCCheckpoint
    • description
    • checkpoints
    • totalCount
    POST /v1/shipments/inbound HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "mobileNo": "+491701234567",
      "email": "[email protected]",
      "userId": "u-100200",
      "offset": 0,
      "limit": 20,
      "languageCode": "en",
      "countryCode": "DE",
      "postCd": "60311",
      "ctyNm": "Frankfurt",
      "sbNm": "",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "shipments": [
        {
          "_id": "ib-2002",
          "id": "0987654321",
          "airWayBill": "0987654321",
          "sender": "Acme GmbH",
          "senderName": "Acme GmbH",
          "receiver": "Alex Keller",
          "receiverName": "Alex Keller",
          "status": "Out for delivery",
          "eddDate": "2026-10-13",
          "eddTime": "12:00",
          "location": "Frankfurt",
          "isNCCheckpoint": "N",
          "description": "Out for delivery",
          "checkpoints": []
        }
      ],
      "totalCount": 1
    }
  • Quote Express rates

    POST /v1/quotes/express openfinance

    Returns Express product quotes (productName, productPrice, productCode, eddDate) for the rate picker from origin/destination, packages and declatedValue.

    Auth: App API key. Guests quote walk-up tariffs; a signed-in session may send customerAccNo for account tariffs.

    • countryCode
    • rdTm
    • bkgDtm
    • dimensionWeight
    • originCountryCode
    • originCity
    • originZip
    • destinationCountryCode
    • destinationCity
    • destinationZip
    • langCd
    • currency
    • declatedValue
    • customerAccNo
    • isDocument
    • packages
    • promocode
    • productName
    • productPrice
    • productBasePrice
    • productCode
    • productLocalCode
    • eddDate
    • eddTime
    • netPrice
    • chargeableWeight
    • deliveryOptions
    POST /v1/quotes/express HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "countryCode": "DE",
      "rdTm": "10:00:00",
      "bkgDtm": "2026-10-12T09:00:00",
      "dimensionWeight": "KG",
      "packageCount": "2.4",
      "publishDate": "12/10/2026",
      "isDutiable": false,
      "originCountryCode": "DE",
      "originCity": "Frankfurt",
      "originZip": "60311",
      "originSuburb": "",
      "destinationCountryCode": "US",
      "destinationCity": "New York",
      "destinationZip": "10001",
      "destinationSuburb": "",
      "langCd": "en",
      "currency": "EUR",
      "declatedValue": "150.00",
      "customerAccNo": null,
      "isDocument": false,
      "shipmentCategory": "PACKAGE",
      "type": "QUOTE",
      "packages": [
        {
          "weight": "2.4",
          "length": "30",
          "width": "20",
          "height": "15"
        }
      ],
      "isPromocodeValid": "N",
      "promocode": ""
    }
    {
      "deliveryOptions": [
        {
          "productName": "EXPRESS WORLDWIDE",
          "productPrice": "86.40",
          "productBasePrice": "79.00",
          "currency": "EUR",
          "productCode": "P",
          "productLocalCode": "WPX",
          "eddDate": "2026-10-14",
          "eddTime": "18:00",
          "netPrice": "86.40",
          "chargeableWeight": "2.4",
          "volumetricWeight": "2.0",
          "deliveryOptionServiceDetails": [],
          "addonServices": []
        }
      ]
    }
  • List package types

    POST /v1/catalog/packages opendata

    Returns the per-country packaging catalog (box_title, packageTyCd, metric/imperial dimensions, isDocument) used by the ship flow.

    Auth: App API key. Optional user token; catalog is keyed by countryCode and langCd.

    • countryCode
    • langCd
    • shipmentCategory
    • id
    • box_title
    • maxQuantityOfPackaging
    • active
    • customizable
    • isDocument
    • shipmentType
    • countryCd
    • metric
    • imperial
    • packageTyCd
    • cost
    • label
    POST /v1/catalog/packages HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "countryCode": "DE",
      "langCd": "en",
      "shipmentCategory": "ALL"
    }
    [
      {
        "id": 12,
        "box_title": "Small box",
        "maxQuantityOfPackaging": "10",
        "active": "Y",
        "customizable": "N",
        "isDocument": "N",
        "shipmentType": "PACKAGE",
        "countryCd": "DE",
        "metric": "{\"length\":\"30\",\"width\":\"20\",\"height\":\"15\",\"dimensionWeight\":\"KG\"}",
        "imperial": "{\"length\":\"12\",\"width\":\"8\",\"height\":\"6\",\"dimensionWeight\":\"LB\"}",
        "packageTyCd": "BOX",
        "shipmentCategory": "PACKAGE",
        "cost": "0",
        "label": "Small"
      }
    ]
  • Schedule a courier pickup

    POST /v1/pickups/book opendata

    Books a courier pickup window and returns bookingNo, puStatus, puDate, readyTime and closeTime for the schedule confirmation screen.

    Auth: App API key. Guests book a window; signed-in users add authentication.token and userId.

    • puDate
    • readyTime
    • closeTime
    • puCutOffTime
    • accNumber
    • companyNm
    • name
    • addLn1
    • ctryCd
    • ctyNm
    • postCd
    • email
    • mobilePhoneNo
    • noPieces
    • dimensionWeight
    • packageWeight
    • userId
    • userConsentAgreement
    • totalShipmentWeight
    • totalPackagePieces
    • bookingNo
    • puStatus
    POST /v1/pickups/book HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "puDate": "20261013",
      "readyTime": "10:00:00",
      "closeTime": "16:00:00",
      "puCutOffTime": "15:00:00",
      "accNumber": "123456789",
      "companyNm": "Keller Studio",
      "name": "Alex Keller",
      "addLn1": "Friedrich-Ebert-Anlage 49",
      "ctryCd": "DE",
      "ctyNm": "Frankfurt",
      "postCd": "60308",
      "email": "[email protected]",
      "mobilePhoneNo": "+491701234567",
      "noPieces": "1",
      "dimensionWeight": "KG",
      "packageWeight": "2.4",
      "userId": "u-100200",
      "userConsentAgreement": null,
      "totalShipmentWeight": "2.4",
      "totalPackagePieces": "1",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "bookingNo": "BK-2026-88421",
      "puStatus": "BOOKED",
      "puDate": "20261013",
      "readyTime": "10:00:00",
      "closeTime": "16:00:00",
      "accNumber": "123456789",
      "name": "Alex Keller",
      "ctyNm": "Frankfurt",
      "postCd": "60308"
    }
  • List scheduled pickups

    POST /v1/pickups opendata

    Returns the signed-in user's booked pickups (bookingNo, puDate, readyTime, closeTime, accNumber) for the schedule history list.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. Requires the signed-in userId.

    • mobileNo
    • email
    • userId
    • countryCode
    • _id
    • bookingNo
    • puStatus
    • puDate
    • readyTime
    • closeTime
    • accNumber
    • companyNm
    • name
    • addLn1
    • ctryCd
    • ctyNm
    • postCd
    • noPieces
    • packageWeight
    POST /v1/pickups HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "mobileNo": "+491701234567",
      "email": "[email protected]",
      "userId": "u-100200",
      "countryCode": "DE",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    [
      {
        "_id": "pu-3003",
        "bookingNo": "BK-2026-88421",
        "puStatus": "BOOKED",
        "puDate": "20261013",
        "readyTime": "10:00:00",
        "closeTime": "16:00:00",
        "accNumber": "123456789",
        "companyNm": "Keller Studio",
        "name": "Alex Keller",
        "addLn1": "Friedrich-Ebert-Anlage 49",
        "ctryCd": "DE",
        "ctyNm": "Frankfurt",
        "postCd": "60308",
        "email": "[email protected]",
        "mobilePhoneNo": "+491701234567",
        "noPieces": "1",
        "packageWeight": "2.4"
      }
    ]
  • List Express account numbers

    POST /v1/accounts/express openfinance

    Returns Express account numbers (accountNo, localImp) bound to the profile for account-rate quotes and pickup billing.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. Empty parameters; the session identifies the user.

    • _id
    • accountNo
    • localImp
    POST /v1/accounts/express HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    [
      {
        "_id": "acc-1",
        "accountNo": "123456789",
        "localImp": "N"
      }
    ]
  • List address book

    POST /v1/addresses osint

    Returns the signed-in address book (addLn1, ctyNm, postCd, ctryCd, nickName, taxID) used by ship, pickup and mandatory-address tracking.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. Body userId is the signed-in profile id.

    • userId
    • _id
    • userObjID
    • nickName
    • name
    • companyNm
    • addLn1
    • addLn2
    • addLn3
    • ctryCd
    • ctryNm
    • ctyNm
    • ctryDivNm
    • sbNm
    • postCd
    • isDefault
    • isResidentialAddress
    • lat
    • lgtd
    • shippingEmail
    • phoneNo
    • phoneNoCtryCd
    • taxID
    • EORINumber
    POST /v1/addresses HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "userId": "u-100200",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    [
      {
        "_id": "addr-1",
        "userObjID": "u-100200",
        "nickName": "Office",
        "name": "Alex Keller",
        "companyNm": "Keller Studio",
        "addLn1": "Friedrich-Ebert-Anlage 49",
        "addLn2": "",
        "addLn3": "",
        "ctryCd": "DE",
        "ctryNm": "Germany",
        "ctyNm": "Frankfurt",
        "ctryDivNm": "Hessen",
        "sbNm": "",
        "postCd": "60308",
        "isDefault": "Y",
        "isResidentialAddress": "N",
        "lat": "50.1109",
        "lgtd": "8.6821",
        "shippingEmail": "[email protected]",
        "phoneNo": "+491701234567",
        "phoneNoCtryCd": "DE",
        "taxID": "",
        "EORINumber": ""
      }
    ]
  • List shipment notifications

    POST /v1/alerts/shipments opendata

    Returns in-app shipment alerts (awbNumber, shipmentStatus, actionRequired, mngDlvryURL) for the notifications inbox.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. Body is {userId}.

    • userId
    • id
    • awbNumber
    • shipmentType
    • shipmentStatus
    • actionRequired
    • countryCd
    • createdDt
    • content
    • readStatus
    • isActive
    • ackDeliveryStatus
    • mngDlvryURL
    POST /v1/alerts/shipments HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "userId": "u-100200",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    [
      {
        "id": "n-9001",
        "awbNumber": "0987654321",
        "shipmentType": "IB",
        "shipmentStatus": "Out for delivery",
        "actionRequired": "Y",
        "countryCd": "DE",
        "createdDt": "20261013",
        "content": "Your shipment is out for delivery",
        "readStatus": "N",
        "isActive": "Y",
        "ackDeliveryStatus": "N",
        "mngDlvryURL": "https://example.invalid/odd/session/abc"
      }
    ]
  • Get On Demand Delivery link

    POST /v1/delivery/options opendata

    Returns the On Demand Delivery URL (link) used to change a drop when oddLink is missing on the tracking payload.

    Auth: App API key. Signed-in calls add authentication.token; guests still post airway_bill_number with email/mobileNo.

    • airway_bill_number
    • countryCode
    • email
    • mobileNo
    • postCd
    • ctyNm
    • sbNm
    • link
    POST /v1/delivery/options HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "airway_bill_number": "0987654321",
      "countryCode": "DE",
      "email": "[email protected]",
      "mobileNo": "+491701234567",
      "postCd": "60308",
      "ctyNm": "Frankfurt",
      "sbNm": "",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "link": "https://example.invalid/odd/session/abc"
    }
  • Fetch electronic proof of delivery

    POST /v1/shipments/epod opendata

    Returns the signed-in electronic proof of delivery PDF (data) for a delivered air waybill, keyed by shipmentId plus the earliest checkpoint pickUpDate/pickUpTime.

    Auth: App API key plus authentication.token (access_token) and authentication.login (client_id). Requires a signed-in session. Posts shipmentId, pickUpDate and pickUpTime.

    • shipmentId
    • pickUpDate
    • pickUpTime
    • statusCode
    • data
    POST /v1/shipments/epod HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "shipmentId": "1234567890",
      "pickUpDate": "2026-10-12",
      "pickUpTime": "09:14",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "statusCode": 200,
      "data": "JVBERi0xLjQKJdP..."
    }
  • Create ClickFlow shipment

    POST /v1/shipments opendata

    Books an account ClickFlow air waybill and returns shipmentId; card checkout also returns hostedCheckoutId and partialRedirectUrl for the payment gateway.

    Auth: App API key plus authentication.token / authentication.login. Account ClickFlow uses a transactionID on the body; guests create a non-account shipment.

    • type
    • referenceNo
    • shipmentCreatedDate
    • shippingDate
    • bkgDtm
    • rdTm
    • dutiable
    • productName
    • productCode
    • productLocalCode
    • productPrice
    • declaredValue
    • declaredValueCurrency
    • eddDate
    • eddTime
    • totalPackages
    • totalPackagePieces
    • totalShipmentWeight
    • weightUOM
    • shipmentAccntNo
    • sender
    • senderAddress1
    • senderCtyNm
    • senderZip
    • senderCtryCd
    • receiver
    • receiverAddress1
    • receiverCtyNm
    • receiverZip
    • receiverCtryCd
    • isSchedulePickup
    • shipmentId
    • hostedCheckoutId
    • partialRedirectUrl
    • shipmentAttachments
    • statusCode
    POST /v1/shipments HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "type": "ClickFlow",
      "referenceNo": "PO-4419",
      "shipmentCreatedDate": "2026-10-12",
      "shippingDate": "2026-10-12",
      "bkgDtm": "2026-10-12T09:00:00",
      "rdTm": "10:00:00",
      "dutiable": "N",
      "productName": "EXPRESS WORLDWIDE",
      "productCode": "P",
      "productLocalCode": "WPX",
      "productPrice": "86.40",
      "declaredValue": "150.00",
      "declaredValueCurrency": "EUR",
      "eddDate": "2026-10-14",
      "eddTime": "18:00",
      "totalPackages": "1",
      "totalPackagePieces": "1",
      "totalShipmentWeight": "2.400",
      "weightUOM": "kg",
      "shipmentAccntNo": "123456789",
      "sender": "Alex Keller",
      "senderCompany": "Keller Studio",
      "senderEmail": "[email protected]",
      "senderAddress1": "Friedrich-Ebert-Anlage 49",
      "senderCtyNm": "Frankfurt",
      "senderZip": "60308",
      "senderCtryCd": "DE",
      "senderMobilePhoneNo": "+491701234567",
      "receiver": "Maria Lopez",
      "receiverCompany": "",
      "receiverAddress1": "Paseo de la Reforma 222",
      "receiverCtyNm": "Mexico City",
      "receiverZip": "06600",
      "receiverCtryCd": "MX",
      "isSchedulePickup": "Y",
      "transactionID": "ANDROID-6.1.1-0001",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "statusCode": "200",
      "shipmentId": "sh-88421",
      "hostedCheckoutId": "hc-1001",
      "partialRedirectUrl": "https://example.invalid/payment-redirect",
      "shipmentAttachments": []
    }
  • Get MyBill SSO login URL

    POST /v1/billing/sso openfinance

    Returns the MyBill hosted billing SSO URL (loginURL) used by the in-app browser when statusCode is 200.

    Auth: App API key plus authentication.token / authentication.login. Side-menu SSO posts an empty body; the dedicated MyBill login posts languageCode, countryCode, email, encrypted password and iv.

    • languageCode
    • countryCode
    • email
    • password
    • iv
    • statusCode
    • loginURL
    POST /v1/billing/sso HTTP/1.1
    Content-Type: application/json
    Cache-Control: no-cache
    Authorization: <app-api-key>
    transactionId: ANDROID-6.1.1-0001
    
    {
      "languageCode": "en",
      "countryCode": "DE",
      "email": "[email protected]",
      "password": "<encrypted>",
      "iv": "<iv64>",
      "authentication": {
        "provider": "express",
        "token": "<access_token>",
        "login": "<client_id>"
      }
    }
    {
      "statusCode": "200",
      "loginURL": "https://example.invalid/billing/sso?token=abc"
    }

Data categories

  • login tokens
  • air waybill checkpoints
  • outbound From Me shipments
  • inbound To Me shipments
  • Express product rates
  • package type catalog
  • scheduled pickups
  • Express account numbers
  • address book
  • shipment notifications
  • On Demand Delivery links
  • electronic proof of delivery
  • created ClickFlow shipments
  • MyBill SSO URLs

Where teams use this data

  • Inbound visibility feed

    A TMS or marketplace pages toMeListing for airWayBill, status and eddDate, then hydrates checkpoints (date, time, location) so consignees see the same To Me timeline the app shows.

  • Outbound rate card

    A ship desk posts origin/destination and packages to getRatesV3 and files productName, productPrice, productCode and eddDate against the quote the customer saw before pickup.

  • Pickup calendar sync

    Operations pulls userScheduledPickups (bookingNo, puDate, readyTime, closeTime, accNumber) into a warehouse calendar so couriers are not double-booked.

  • Account-tariff matching

    Billing checks userAccNos (accountNo, localImp) before a getRatesV3 call so customerAccNo lands on the negotiated Express tariff instead of a public walk-up rate.

Frequently asked questions

How does DHL Express Mobile authenticate?

Every call sends an app API key in the Authorization header. Sign-in then returns access_token, refresh_token and client_id; later signed-in bodies add authentication.token and authentication.login. Guests can still track a waybill (with captcha) and quote Express products without those user tokens.

What tracking fields come back for an air waybill?

Tracking returns checkpoints with date, time, description, location and counter, plus status, eddDate, eddTime, eta, oddLink and servicePointUrl. The request key is airWayBill, with optional postCd/ctyNm/sbNm when address registration is mandatory.

Can I quote Express products without shipping?

Yes. The rate picker takes originCountryCode, destinationCountryCode, packages and declatedValue and returns productName, productPrice, productCode, currency and eddDate. The packaging catalog lists box_title and packageTyCd first. A signed-in customerAccNo switches the quote onto the linked Express account tariff.

Are these public developer APIs?

No. They illustrate first-party calls the Express mobile client uses for shipping, tracking and billing. User-scoped lists (From Me, To Me, pickups, accounts, addresses, notifications, ePOD) need the signed-in access_token; guest tracking and guest rates do not.

Apps similar to DHL Express Mobile

  • UPS — Official UPS Android client for 1Z tracking, rate quotes and My Choice delivery changes.
  • FedEx — FedEx mobile client for time-definite air bills, pickup booking and delivery-manager redirects.
  • J&T Express Indonesia — Indonesian parcel client for waybill tracking, pickup booking and drop-point maps.
  • Australia Post — National-post Android client for domestic parcels, tracking and location lookup.
  • Nova Poshta — Ukrainian parcel network client for barcode tracking and branch pickup.
  • Delhivery — Indian courier consignee app for inbound AWB status and delivery instructions.

Topics

  • DHL Express Mobile API
  • DHL airWayBill tracking
  • DHL Express rates
  • DHL pickup bookingNo
  • DHL Express accountNo
  • DHL On Demand Delivery
  • DHL Express ePOD

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote