Mon – Sat: 9:00 AM – 7:00 PM IST
iDempiere · Open-Source ERP

iDempiere Carrier Integration: Connecting DHL, FedEx, and UPS for Shipping Automation

A field-tested approach to integrating iDempiere with DHL Express, FedEx Ship, and UPS Developer Kit: rate shopping, one-click label generation, AWB tracking, pickup scheduling, and proof-of-delivery capture.

By SCM Software Lab Published 2026-04-23 9 min read iDempiere · Open-Source ERP
iDempiere DHL FedEx UPS Logistics
0
Carriers on one integration layer
0
Functions: rate, ship, pickup, track
0
Click from shipment to printed label
0
Typical delivery including testing
On This Page

Everything in this guide

Grouped by the decision each section supports. Jump straight to the part you need.

Why It Matters

Business case for carrier integration

Without ERP ↔ carrier integration, every shipment requires a warehouse operator to open the carrier portal, re-key the AWB details, download the label, paste it on the box, and then re-enter the tracking number back into the ERP. For a 200-shipment-a-day operation, that's 4–6 labor hours and a meaningful error rate.

A proper integration collapses the whole thing into a single click inside iDempiere: ship a package, print the label, book the pickup, and have the tracking number post back to the ERP automatically.

Four Functions

Integration scope: rate, label, track, confirm

Every carrier API, whichever vendor, reduces to the same four calls. Get these right and the rest is mapping.

1

Rate

Weight, dimensions, origin and destination in; the services available on your account and their prices out.

2

Ship

Create the AWB and return a printable label, as PDF for a laser printer or ZPL straight to a thermal printer.

3

Pickup

Book the collection window and close the day's manifest so the driver arrives against a known consignment list.

4

Track

Ingest carrier events and move the iDempiere shipment through its status, ending in delivery with proof captured.

Side By Side

DHL, FedEx and UPS — what differs

The four functions are the same everywhere. Authentication, payload shape and label handling are not, and that is where integration effort actually goes.

AspectDHL ExpressFedExUPS
Current API styleMyDHL API, REST / JSONREST / JSON, modernised from the legacy SOAP stackREST / JSON, after the SOAP XPCI stack was retired
AuthenticationHTTP Basic with account number and API keyOAuth2 client credentials; token valid about an hourOAuth2 client credentials
Token handlingNone needed — credentials sent per callCache and refresh before expiry, or every call pays for a tokenCache and refresh before expiry
Label formatsPDF and ZPL, base64 encoded in the responsePDF, ZPL and thermal variantsPDF and ZPL
Bulk trackingPer-AWB calls, or subscribe to tracking webhooksBatched — multiple tracking numbers per callPer-shipment lookup
SandboxMirrors production structureSeparate credentials and hostSeparate credentials and host
Usual integration effortLowest — simplest auth modelModerate — token lifecycle to manageModerate — token lifecycle to manage

Carrier APIs are versioned and do change. Treat this as an orientation to the shape of the work, and confirm the current contract against each carrier's developer portal before you scope a build.

Carrier 1

DHL Express API

DHL offers a modern MyDHL API with REST/JSON endpoints for rate shopping, shipment creation, label generation, pickup booking, and tracking. Key endpoints we use:

  • POST /rates — get a rate quote with service options
  • POST /shipments — create an AWB, returns the base64-encoded label (PDF or ZPL)
  • POST /pickups — schedule pickup for the day's manifest
  • GET /tracking/{awb} — pull status; or subscribe to tracking webhooks for push updates

Auth is HTTP Basic with your DHL account number + API key. Sandbox and production share the same structure. We cache rate quotes for 15 minutes to keep the UI snappy.

Carrier 2

FedEx Ship API

FedEx's REST API (modernized from the legacy SOAP stack) covers rating, shipping, tracking, and pickup. Auth uses OAuth2 client-credentials flow:

  • POST /oauth/token — client_id + client_secret → access token (valid 1 hour)
  • POST /rate/v1/rates/quotes — rate shopping with all eligible services
  • POST /ship/v1/shipments — shipment creation; returns label (PDF, ZPL, or thermal) and tracking number
  • POST /pickup/v1/pickups — close-of-day manifest and pickup
  • POST /track/v1/trackingnumbers — bulk tracking (up to 30 AWBs per call)
Carrier 3

UPS Developer Kit

UPS also offers modern REST endpoints after retiring the SOAP XPCI stack. We use:

  • OAuth2 flow for auth
  • /api/rating/v1/Rate — rate shopping
  • /api/shipments/v1/ship — shipment + label
  • /api/track/v1/details/{inquiryNumber} — tracking
  • /api/shipments/v1/pickup — pickup scheduling
Best Price, Every Shipment

Multi-carrier rate shopping

For every shippable iDempiere document we call all three carriers in parallel and rank the results. The operator picks a strategy rather than a carrier.

Cheapest

Lowest total landed cost regardless of transit time. Right for stock replenishment and anything where the customer has not been promised a date.

Fastest

Shortest committed delivery date. Used for replacements, recovery shipments and anything already running late.

Cheapest meeting the SLA

The lowest price that still hits the customer's required date. This is the one most operations should default to — it protects the promise and the margin at once.

Quotes are cached briefly per origin, destination, weight and service so the screen stays responsive without going stale. One click, and the chosen carrier's label is generated against the shipment.

From Screen to Box

Label & AWB printing from iDempiere

The carrier returns a base64-encoded label (PDF for A4 printers, ZPL for thermal label printers like Zebra ZD420). We attach the label to the iDempiere M_InOut via C_Attachment and the AWB number goes into the shipment's tracking field.

Warehouse clients almost always prefer thermal printers on 4×6" labels. Plan for that hardware in your rollout and test a few hundred labels end-to-end before go-live — thermal printer quirks are real.

Close The Loop

Tracking & proof of delivery

Each carrier publishes its own status vocabulary. We normalise all of them onto one internal state machine, so a report or a customer-facing screen never has to know which carrier moved the box.

01

Picked up

The carrier has taken physical custody. Until this event fires, a printed label means nothing has actually shipped — a distinction that matters when a customer asks where their order is.

02

In transit

Movement between facilities. Useful mainly for exception detection: a consignment that has not moved for longer than its lane normally takes is worth a call before the customer makes one.

03

Out for delivery

On the final vehicle. This is the event worth pushing to the customer, because it is the only one that tells them something actionable about today.

04

Delivered, with proof

Receiver name and, where the carrier provides it, the signature image are captured and attached to the iDempiere shipment. That attachment is what settles a delivery dispute months later.

05

Exception

Address problem, failed attempt, customs hold or damage. Exceptions are the whole reason to ingest tracking at all — they are the events somebody has to act on.

When Things Go Wrong

Exception handling & dangerous goods

Not every shipment goes through cleanly. Common exceptions:

  • Address validation failures — carrier returns "address not serviceable". We auto-retry with a corrected address from our address-validation service before escalating to the operator.
  • Weight mismatch — carrier reweighs in transit and posts a surcharge. We ingest weight-correction events and post them as additional landed cost.
  • Dangerous goods — lithium batteries, aerosols, etc. require IATA DGR declarations for air shipments. Our DHL/FedEx integration templates include the required fields; ask us for the DGR-ready config.

Need DHL / FedEx / UPS integration wired into iDempiere?

We've shipped production integrations for 3PL operators, eCommerce exporters, and manufacturers. Typical turnaround is 3–5 weeks including testing.

Scope Your Carrier Integration

Working With Us

How we deliver it

A carrier integration is a small, well-bounded project. It should be quoted and run as one.

Scope against your accounts

Which carriers, which services, which countries, and what your warehouse actually does today. Carrier credentials and a sandbox are the only prerequisites.

Build on the ERP's own extension model

An OSGi plugin inside iDempiere plus a thin service layer, so the integration survives upgrades instead of being reapplied after each one.

Test on real consignments

Sandbox first, then a live pilot lane with real labels on real boxes. Printer behaviour and address edge cases only surface with physical shipments.

You own the code

The plugin, the mappings and the documentation are handed over in your repositories, so a future change does not require us.

Frequently Asked

Carrier integration questions

The questions that come up before every carrier project.

Yes. You contract directly with each carrier and hold the account; the integration authenticates as you. That is what you want commercially, because the rate APIs then return the negotiated rates on your account rather than published list pricing, and the carrier relationship, claims and invoicing stay yours rather than sitting behind a reseller.
The rate call returns your account's rates, so the quote is normally accurate at the point of booking. Two things can still move the final invoice: dimensional weight re-measurement, where the carrier reweighs in transit and posts a correction, and accessorial surcharges such as residential delivery, remote area or fuel. We ingest those correction events and post them against the shipment so the landed cost stays true.
Shipment requests go through a queue with retries rather than a direct blocking call, so a short outage delays rather than loses the request. For a longer outage the operator can rate-shop the remaining carriers and ship on one that is responding, or record a manually created AWB against the iDempiere shipment so the warehouse is never blocked by an external service.
For volume, a thermal printer taking 4x6 inch labels and ZPL is the practical choice, and the carrier APIs return ZPL directly so there is no rendering step. A4 or Letter PDF labels print on an ordinary laser printer and are fine at low volume. Whichever you choose, test several hundred labels end to end before go-live; thermal printer and driver quirks are real and are much easier to solve before the warehouse depends on them.
They are separate obligations and both can be automated. The carrier integration produces the AWB and tracking; the e-way bill is a GST requirement for goods movements above the prescribed value and is generated against the invoice and shipment. If you operate in India you usually want both wired into the same shipment confirmation step.
The architecture is carrier-agnostic: rate, ship, pickup and track are the same four functions behind every carrier API, and the ERP side does not change. What differs is the authentication model, the payload schema and the label format. Tell us which carrier you use and we will confirm what its API supports before any commitment.
The rate returned at booking is stored against the shipment so you have an expected cost per consignment from day one. Carrier invoices are then reconciled against those expected values, which is how you find the surcharges and re-weights that would otherwise disappear into a single monthly freight figure.
Air shipments of items such as lithium batteries and aerosols need IATA Dangerous Goods declarations, and the carrier APIs require additional fields for them. This has to be designed in rather than added later, because a rejected dangerous-goods shipment is discovered at the carrier counter rather than in your ERP. Tell us up front if any of your catalogue is restricted.
More on iDempiere

Continue across our iDempiere pages

Six pages cover iDempiere here, each answering a different question — the practice, choosing a partner, what it costs, and the three integrations clients ask for most. Whichever you landed on, the rest are one click away.

Ready to roll out iDempiere for your business?

Get a free Proof of Concept — we build a working iDempiere environment with your data, modules, and integrations in 2–3 weeks. Zero upfront cost, zero obligation.