DHL Paket
Purpose
This connection buys DHL labels where the shipment is created — inside the shipping process, without switching to a carrier portal. It answers three questions in one place: which product applies to this parcel, what the tracking number is, and where the shipment currently is.
Scope
- Three products:
paket(domestic),warenpost(light shipments up to 1,000 g) and
international.
- Maximum weight 31.5 kg per package — above that the connection refuses rather than creating a
shipment that gets stuck at the belt.
- Tracking with status mapping, from which shipping derives its own states.
- Return labels from the same operation.
- Customs documents for third-country shipments travel in the same request as the label.
- Age verification (visual check from 16 or 18) for articles with an age limit — domestic
parcel only: a light shipment then does not become Warenpost, and an explicitly chosen Warenpost or international shipment is refused.
- Real cancellation: DHL actually deletes a cancelled shipment, so shipping may report
„deleted" and mean it.
Setup
Credentials live as an integration under Integrations — provider dhl. The credential names start with the provider, which keeps them apart from the settings of other connections.
| Setting | Required | Meaning |
|---|---|---|
dhl_api_key | yes | Application key from the DHL developer portal. Stored encrypted and never shown again. |
dhl_portal_user | yes | User of the DHL business customer portal. Stored encrypted and never shown again. |
dhl_portal_password | yes | Its password. Stored encrypted and never shown again. |
billing_number | yes | Billing number (14 digits: EKP, procedure, participation). Not the customer number. |
billing_numbers | no | Billing number per product, e.g. V62WP for Warenpost — DHL bills each product separately; where one is missing, billing_number applies. |
shipper | yes | Sender address as a group of fields; DHL requires it on every shipment. Passed to DHL unchanged, field names as in the DHL interface. |
production | no | true switches to live operation. Without it everything runs against the test environment. |
Credentials still stored in clear text under the old name without the provider prefix are taken over encrypted — on the next save or read of the integration and by the update step "Store credentials encrypted" (bin/console app:secrets:migrate).
Interplay
The connection sits inside Shipping: that is where the shipment is created, where the label is bought and where tracking runs. Credentials live as an integration under Integrations in the encrypted store — never in a setting and never in clear text; the same place switches between test environment and production. Labels and delivery notes reach the right printer through Printing & workstations. When a label is produced, and in how many copies, is decided by automations — shipping brings no rule engine of its own.
Limits
- Warenpost has a hard limit of 1,000 g. It is not a price advantage to stretch but an
acceptance condition: above it, the item is a parcel.
- The real run is still outstanding. What is verified is that we ask correctly and read the
answer correctly — the tests drive the interface with prepared responses. That DHL actually accepts the request we build is not proven; access to the real test environment is missing.
- Prices and contract terms do not come from here. What a shipment costs is in the contract with
the carrier; this connection buys the label, it does not price it.