When the Order Starts in the TMS

On September 11 I was on a scoping call with a merchant and their 3PL. The 3PL runs two systems: a warehouse system, and a transportation management system for its own home-delivery service. The merchant said that delivery service would take about 90 percent of their orders, with FedEx for a few small items.
I asked if the TMS was the freight version of ShipStation. The 3PL’s engineer said yes, more or less, and that it was where they’d give us delivery tracking. So I summed it up out loud: “we just need to check status. It’s kind of like a read only.” Orders go into the warehouse system, and the TMS tells us where the truck is.
He answered with a question. Would anyone else ever deliver the product, FedEx or UPS or an LTL carrier? The carrier decides where the order gets created. If their own trucks deliver it, the order is created in the TMS. If anyone else does, it’s created in the warehouse system.
I asked whether it was always created in the warehouse system. He said no, again, in different words. We’d be calling two order APIs, one for each system, depending on the carrier.
I pushed back. I said it “makes our integration more expensive because it’s very atypical to have conditional sending to two different, you know, companies, but within one ecosystem.” I wanted every order to go to the warehouse system and the TMS to stay read-only. He said they were working toward that and might have it by mid-November. Until then it was two APIs, and our side was going to ship before then.
Near the end of the call I changed my answer: “I think it needs to be one integration, to be honest, because we need conditional rules.” A shipping method maps to a sub-integration, and the TMS is one of them. I’d also been about to ask why we’d integrate the warehouse system at all, if the TMS held everything. I never did. I’m also not sure I followed how their two systems sync with each other, and I didn’t ask him to draw it.
Ask which system creates the order
If I scoped another one tomorrow, the first thing I’d ask is which system the order gets created in, for each carrier the merchant uses. I’d walked in with “the warehouse system, always” in my head, and the whole first half of that call was me finding out it wasn’t.

The answer decides the size of the job. A read-only TMS is a tracking feed. A TMS that creates orders needs everything an order needs, and someone has to decide which shipping methods go to it and which of its statuses means the order has shipped. In this case it also meant every product needed a weight and three dimensions before the TMS would take the order, which is a catalog job on the merchant’s side, not ours.
We’ve built against one TMS so far, and I haven’t read any other’s API. If you’re scoping one, book a call and bring the answer for each carrier.