Here's the verdict up front: most WMS–TMS integration failures I've seen weren't technical. The APIs were live, the messages were flowing, and the operation still caught fire every day. It always breaks in the same three places: when the wave plan gets pushed to the TMS for capacity booking, how the load sequence reaches the dock, and how tender numbers and proof of delivery come back for reconciliation. Get these three touchpoints right and the integration holds. Get them wrong and all your field mappings are decoration.
I've seen this exact failure three times. Same cause of death every time.
In 2023, an 80,000-square-foot 3PL warehouse in Ontario, California — big-name WMS, big-name TMS, a thick interface spec. The WMS auto-released wave plans at 3 PM daily and pushed them to the TMS to book capacity. The problem was the time gap: the TMS needed 2–4 hours to confirm carriers, while pickers started working at 4 PM. Freight got picked, but no trucks were booked. The staging area filled until forklifts couldn't turn around, night shift kept pushing more in, and it took two full days to dig out. The postmortem finding: the WMS only pushed, the TMS only received — nobody owned the question "is the truck actually booked?" The interface was up. The business was down.
Touchpoint 1: The WMS–TMS Handoff — Pushing the Wave Plan for Capacity Booking
This is where WMS–TMS integration most often derails. The two systems mean completely different things by "plan": the WMS wave is a labor plan (release at what time, who picks), while the TMS needs a transportation plan (which loads, which trucks, what dock time). Without a translation layer in between, humans become the translation layer — and that always breaks eventually.
Step by step:
- Check capacity before releasing the wave. Before the WMS releases a wave, it should call the TMS capacity inquiry and confirm a carrier actually has trucks. No truck, no wave — or release only the portion with confirmed capacity. Remember the order: truck first, wave second. Reverse it and you get the Ontario story.
- Lock in cutoff times. Carrier confirmation typically takes 2–4 hours, longer in peak season. Work backward: if the carrier needs 4 hours' notice and the truck must arrive at 6 PM, the wave releases no later than 2 PM. Write it into the SOP and tape it next to the planner's monitor.
- Have a fallback when no truck is available. If the TMS fails to book, the WMS must automatically bounce the wave back to "awaiting capacity" instead of letting freight keep moving. Test this the night before go-live: deliberately make the TMS return a booking failure and watch whether the WMS actually stops.
One counterintuitive point: don't chase real-time wave pushes. Many projects demand "the second a wave releases, the TMS gets it in milliseconds" — but carriers don't respond that fast anyway, so the real-time push buys nothing. Three to four fixed wave windows a day, pushed in batch, is far more stable. Real time is for exceptions, not for the daily routine.
Touchpoint 2: Getting the Load Sequence from WMS to TMS to the Dock
Waves and trucks are sorted — the next trap is at the dock. The load sequence calculated in the WMS (last stop loads first, heavy freight on the bottom) gets mangled on its way to the dock. The worst case I saw: the sequence field arrived fine, but the dock display sorted it alphabetically. The driver loaded accordingly, and at the store the freight that had to come off first was buried deepest. They re-handled the entire trailer before they could unload. The receiving clerk was not amused.
Step by step:
- Decide who calculates the sequence, once and for all. Usually the WMS computes it from route and store priority; the TMS just carries it and executes. If both systems calculate, they will fight.
- Freeze the field definitions. Load sequence can't be just a "number" — it needs pallet ID, store or order reference, unload sequence number, and special handling (cold chain, fragile). What shows on the dock board and what shows on the driver's handheld gets specified screen by screen in the interface doc, with screenshots archived.
- The dock must confirm back. When loading finishes, the dock scans to confirm the actual load sequence and sends it back to the WMS. If actual differs from plan (a pallet missed the wave), the WMS flags it red and the TMS updates the driver — don't let the driver find out halfway down the highway.

Touchpoint 3: Closing the WMS–TMS Loop on Tender Numbers and POD
The freight is gone, but the WMS–TMS integration isn't done. Tender numbers, actual ship times, and proof-of-delivery coming back — that's the third touchpoint, and finance's lifeline at month-end. In another project, POD data came back three days late. Finance had already closed the books on the WMS "shipped" status, the customer claimed two loads never arrived, and the argument dragged on for a month. They finally settled it by pulling security camera footage.
Step by step:
- Send the tender number back at gate-out, not at delivery. One scan when the truck leaves, pushed to both TMS and WMS, status flips to "in transit." That's the shared anchor both systems use for the same load. Nail the anchor first.
- POD comes back in batch — three times a day is plenty. Proof of delivery is inherently delayed (drivers upload when they return to base), so a real-time POD interface is money down the drain. Fix three batch times, morning, midday, evening, and never miss them.
- Run one reconciliation report daily, automatically. The logic is dead simple: WMS shipped minus TMS delivered equals in-transit-not-delivered. Anything unaccounted for past 48 hours gets flagged red and pushed to customer service. It doesn't need to be fancy — it needs to land in the CS inbox at 8 AM sharp every day.
Here's the minimum viable version of the interface list — three interfaces, each with trigger timing and an owner, fits on one page:
| Interface | Trigger | Real-time or batch | Who owns failures |
|---|---|---|---|
| Wave plan to TMS for booking | Before wave release, after capacity check | Batch, 3–4 windows/day | Planner |
| Load sequence to dock | Before loading | Real-time | Dock supervisor |
| Tender numbers and POD return | Gate-out, after delivery | Tender real-time, POD batch 3x/day | CS / Finance |
Go-Live Eve Checklist: All 8 Must Be Checked
- Wave-release vs. capacity-confirmation order tested: deliberately fail a booking, watch whether the WMS actually stops.
- Cutoff times in the SOP, signed off by planner, carrier, and dock — all three.
- Load sequence fields verified screen by screen on dock boards and driver handhelds, screenshots archived.
- Mismatch between actual and planned loading tested end to end, including the red-flag and notification chain.
- Tender numbers return at gate-out; alert fires if delayed more than 10 minutes.
- Reconciliation report has run 7 straight days, matching manual spot checks.
- Every exception flow (booking failure, short load, refusal) walked end to end at least once.
- Rollback plan: if the interface dies, can the manual process hold for 4 hours? Drilled, not just documented.
One last thing: WMS–TMS integration is 30% technology and 70% writing "who moves first, who owns it, who gets called when it breaks" into documents and testing it into the system. Don't celebrate when the interface spec gets signed. Ask one question first: if the TMS can't book a truck tomorrow, will the WMS stop itself? If you can't answer that, don't go live.
By Lin Xiao, WMS Implementation Consultant










