Skip to content
English
  • There are no suggestions because the search field is empty.

PCS Software Integration

Keep Tai and PCS in sync so shipments created in Tai flow through to PCS for dispatch and execution, and carrier and truck assignments made in PCS flow back to Tai automatically. Tai remains the system of record; PCS handles fleet dispatch and operational updates. A middleware layer called Socket (built by Metafora) sits between the two and does the translation — Tai and PCS never talk to each other directly.

How it works

There are three automated flows. Knowing which flow a problem belongs to makes triage much faster.

Flow Direction Trigger Frequency
1. Shipment created Tai → PCS New shipment in Tai fires the ShipmentCreateUrl webhook. Socket receives it, creates a matching load in PCS, then writes the PCS Load ID back onto the Tai shipment. Real-time (webhook)
2. Shipment updated Tai → PCS Any change to an existing shipment (stops, weights, rate, status, etc.) fires the ShipmentDetailUpdateUrl webhook. Socket applies the change to the matching PCS load. Real-time (webhook)
3. Carrier & truck assigned PCS → Tai When a load is dispatched in PCS, Socket pulls the assignment and writes the carrier and truck number back onto the matching Tai shipment. Every 15 minutes

Before You Start

  • An active PCS Software account with API credentials issued to Metafora.
  • An engagement with Metafora's Socket team (they own the middleware configuration and the day-to-day support of the integration).
  • Admin access to Tai's Public API integration source (needed to configure the webhooks).
  • If your company operates its own fleet through PCS, you'll need the DOT number(s) assigned to each fleet in Tai — Metafora uses these to route company dispatches to the right carrier record in Tai (see Company fleet vs brokered carriers below).

Setup

Step 1 — Create a Public API webhook integration in Tai

  1. In Tai, open Integrations and add a new integration source of type Public API.
  2. Generate API credentials for Metafora. Share them via a secure channel (never in email or a Jira comment).

Step 2 — Configure the two webhooks

On the same Public API integration source, configure the following webhook URLs. Metafora provides the URL values that point at Socket's Tai-facing endpoints.

Webhook Fires when Sent to
ShipmentCreateUrl A new shipment is created in Tai Socket (provided by Metafora)
ShipmentDetailUpdateUrl An existing shipment is updated in Tai (stops, rate, status, etc.) Socket (provided by Metafora)

Step 3 — Metafora completes the Socket side

Metafora configures Socket to receive the two Tai webhooks, translate the payloads to PCS's load format, and (for company fleets) build the loadType → DOT number mapping described below. No action is required on the Tai side for this step, but the mapping needs to include every fleet type before that fleet's dispatches can flow back to Tai.

Step 4 — End-to-end test

  1. Create a test shipment in Tai.
  2. Within a few moments, the shipment should appear as a load in PCS.
  3. Open the shipment in Tai and confirm that a new reference has been added under Custom Reference Number containing the PCS Load ID. This is the "link" that keeps updates flowing (see next section).
  4. Dispatch the load in PCS. Within 15 minutes, the carrier and truck number should appear on the Tai shipment.
⚠️ Confirm the Custom Reference Number was written.
If Step 3 succeeds but no PCS Load ID lands on the shipment, subsequent Tai updates cannot be matched to a PCS load. This is the single most important thing to verify on any new setup.

The link: Custom Reference Number

When Socket successfully creates a load in PCS, it writes the PCS Load ID back onto the Tai shipment as a reference of type Custom Reference Number. This is how Socket recognizes the two records as the same thing on every future update. If that reference is missing:

  • Edits in Tai will not reach PCS (Socket can't identify which PCS load to update).
  • Carrier assignments made in PCS may still flow back, because the PCS load also stores the Tai shipment ID in its loadReference field — but this depends on the initial create having reached PCS at all.

If a shipment is missing its Custom Reference Number, treat it as a broken link and escalate to Metafora with the Tai shipment ID.

Company fleet vs brokered carriers

PCS distinguishes between loads hauled by your own company fleet and loads brokered to outside carriers. Socket handles both, but the routing back to Tai differs:

  • Brokered carriers — PCS provides the outside carrier's DOT number on the dispatch. Socket looks up the matching carrier in Tai by DOT and assigns it to the shipment.
  • Company fleet — PCS does not include a DOT number on company dispatches. Instead, PCS reports a loadType value (for example, McLeod Fleet). Metafora maintains a small mapping in Socket that translates each loadType to the corresponding DOT number in Tai. Socket then uses that DOT to find the carrier in Tai.

⚠️ New fleet type? Loop in Metafora.
If your team adds a new fleet type in PCS, Metafora needs to add it to the Socket mapping before those dispatches will flow back to Tai. This is a configuration change on Metafora's side — no code release is required, but nothing will sync for that fleet type until the mapping is updated.

Manual carrier assignments

Socket never overwrites a carrier that has already been assigned manually in Tai. Specifically, if the Tai shipment already has a carrier with transit type Linehaul, Socket skips the carrier assignment step for that dispatch and moves on. This is intentional so that dispatchers who take action in Tai directly don't have their work reverted 15 minutes later by the sync.

If you see "Tai kept the existing carrier instead of the one PCS assigned," that is the expected behavior — it is not a bug.

Delivery and project closeout

When a shipment reaches Delivered in Tai, the update flows to PCS through the standard ShipmentDetailUpdateUrl path and PCS closes the load on its side. No separate closeout action is required in either system.

Troubleshooting

Symptom Likely cause Where to look / who owns it
Shipment exists in Tai but never appeared in PCS The ShipmentCreateUrl webhook didn't fire, Socket couldn't process the payload, or PCS rejected the load. Grab the Tai shipment ID and the approximate creation time and escalate to Metafora Socket Support.
Edits in Tai aren't reaching PCS Most commonly, the initial create failed and the shipment has no Custom Reference Number, so Socket can't match it to a PCS load. Check the shipment for a Custom Reference Number reference. If missing, escalate to Metafora.
Company dispatch in PCS didn't create a carrier in Tai Either the PCS load's loadType is blank, the loadType isn't in Socket's mapping, or the mapped DOT number doesn't have a matching carrier record in Tai. Check the PCS load's loadType. Blank → PCS data fix. Missing from mapping → Metafora config. Present but no carrier in Tai → carrier onboarding on the Tai side.
Carrier synced to Tai, but the truck number is blank The PCS dispatch record had no truck number filled in. PCS data fix.
Tai kept the existing carrier and ignored the PCS assignment Working as intended — Socket won't overwrite a manually-assigned Linehaul carrier. No action needed unless this was unexpected — in which case, remove the manual carrier in Tai and wait for the next 15-minute sync.
PCS load creation is failing with a "field too long" error PCS enforces length limits on some fields (e.g., Address.Line1). Long values from Tai need to be trimmed by Socket before PCS accepts them. Escalate to Metafora with the failing shipment ID and the error message.
PCS load creation is failing on missing dates (AvailableFrom / AvailableTo) The Tai shipment's estimated ready or estimated close times are empty, so Socket has no value to send to PCS's required date fields. Populate the shipment's estimated ready/close times in Tai, or escalate to Metafora for a fallback default policy.
The 15-minute PCS → Tai sync hasn't run for a while The scheduler on Socket's side has stalled. Escalate to Metafora Socket Support.

Before you escalate — collect these

Any one of the IDs below plus a rough timestamp (within ~15 minutes is fine) lets Metafora pull the full trace for the event:

  • Tai shipment ID
  • PCS load ID (visible in Tai under Custom Reference Number)
  • PCS dispatch ID, if the problem is on the PCS → Tai flow
  • The approximate time (UTC) the event was expected
  • The symptom — what's missing or wrong, and on which system

Contacts

Issue Who to contact
Anything in the handoff between Tai and PCS Metafora Socket Support — socketsupport@metafora.net
Account / relationship questions Miguel Ceja (Metafora CSM) — mceja@metafora.net
Integration engineering Ashok Kumar (Metafora) — akumar@metafora.net
Tai data, webhooks, or API on the Tai side Tai Support — support@tai-software.com
PCS data or API on the PCS side PCS Support (contact TBD)

Glossary

  • Tai — the TMS; system of record for shipments, customers, carriers, and financials.
  • PCS — the load-management / dispatch system where planners and dispatchers move freight.
  • Socket — Metafora's middleware platform that keeps Tai and PCS in sync.
  • Load — the PCS-side representation of a Tai shipment.
  • Company dispatch — a load hauled by your own fleet (vs. a brokered outside carrier).
  • Custom Reference Number — the field on the Tai shipment where Socket stores the PCS Load ID. Acts as the link between the two systems.
  • loadType — the PCS field that identifies which company fleet is hauling a load (used only for company dispatches, not brokered carriers).