DHL Freight and Comgate integration for a Czech industrial supplier
Diagnosed why standard shipping connectors fail in the Czech Republic and scoped a native Odoo module against DHL's local API variant, building on a prior custom Comgate payment gateway integration for the same client.
- Client
- Gumová Střecha
- Sector
- ERP
- Stack
- Odoo · Python · DHL CZ API · Comgate API
- Year
- 2024
The problem
Gumová Střecha, a Czech industrial supplier, needed reliable shipping automation inside their Odoo ERP. The obvious route — a standard DHL connector from the Odoo app store — didn't actually work for them. DHL Czech Republic runs a local API variant that off-the-shelf modules aren't built against, so the standard connectors either failed silently or dropped shipments at the border without a usable error.
What I built
Rather than patch the third-party connector, I diagnosed the root cause: the mismatch was structural, not a configuration bug, because the third-party module was built against DHL's general API, not the Czech-specific one. I recommended and scoped a custom Odoo module written directly against DHL CZ's API, and opened a direct technical channel with DHL's IT contact to confirm the correct endpoints and authentication flow before writing any code.
This built on integration work I'd already delivered for the same client — a custom Comgate payment gateway module, since Comgate is the dominant Czech payment processor and, like DHL CZ, isn't well served by generic international connectors.
Outcome
The client now runs native shipping and payment flows inside their ERP, without depending on a third-party module's release cycle or licence terms. Shipments go out through the correct DHL CZ endpoints instead of failing at a border the generic connector never accounted for.
Why it mattered
The cheap answer here would have been to install a plugin, watch it pass a demo, and ship it — it would have looked fine until the first real shipment hit the Czech-specific routing rules and quietly failed. Diagnosing the API mismatch before writing code is what kept this from becoming a production incident instead of a design decision.
Have a system that needs to work in production?
Tell me what's breaking — or what you're building.