Hermes
Purpose
This connection buys Hermes labels from inside the shipping process. Hermes does not price by weight alone but by size class — and that shapes the whole connection.
Scope
- Five size classes:
xs,s,m,landxl. - Maximum weight 31.5 kg per package.
- Tracking with status mapping.
- Return labels from the same operation.
Setup
Credentials live as an integration under Integrations — provider hermes. The credential names start with the provider, which keeps them apart from the settings of other connections.
| Setting | Required | Meaning |
|---|---|---|
hermes_username | yes | User name of the Hermes interface. Stored encrypted and never shown again. |
hermes_password | yes | Its password. Stored encrypted and never shown again. |
customer_number | yes | Customer number of the Hermes business contract. Without it no label is produced. |
shipper | no | Sender address as a group of fields; passed to Hermes unchanged, field names as in the Hermes interface. |
default_size | no | Size class when neither the shipment nor a shipping rule names one: xs, s, m, l or xl; m if empty. |
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
- No cancellation. A bought label stays bought; if it is not used, it lapses. The interface does
not offer the action at all rather than offering it and letting it fail.
- The size class is not decided here but by the shipping rule (which knows dimensions and girth)
or by configuration. A dimension table here would be a price list in code — and Hermes changes it without us.
- No customs handling on this route.
- 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 Hermes 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.