Tai Client
The Tai Client node connects Splice workflows to TAI, a transportation management system (TMS) and freight brokerage platform. Use it to retrieve LTL rate quotes for a lane and to create shipments in TAI from upstream workflow data.
Overview
The Tai Client node is essential when you need to:
- Request LTL freight rate quotes for an origin/destination lane, including commodity dimensions, weight, freight class, hazmat details, and accessorials
- Create a shipment in TAI, typically booking against a previously returned rate quote
- Feed quote results or created shipment records into downstream workflow steps
Configuration
Resource & Action
The node exposes a single Resource and two Actions.
| Resource | Value | Actions |
|---|---|---|
| Shipping | shipping | Get Rate Quote (getRateQuote), Create Shipment (createShipment) |
- Resource defaults to
shipping(the only option). - Action defaults to
getRateQuote. The Action field is shown whenresource = shipping.
Get Rate Quote parameters
These parameters are shown when Action = Get Rate Quote (displayOptions.show.action = ["getRateQuote"]). All support Splice expressions.
| Parameter | Name | Type | Required | Notes |
|---|---|---|---|---|
| Origin Zip Code | originZipCode | string | No | Origin postal code |
| Origin Country | originCountry | options | No | Full country list; defaults to USA at the top of the list |
| Destination Zip Code | destinationZipCode | string | No | Destination postal code |
| Destination Country | destinationCountry | options | No | Full country list; USA listed first |
| Weight Units | weightUnits | options | No | lbs, kg |
| Dimension Units | dimensionUnits | options | No | in, cm, ft, m |
| Legacy Support | legacySupport | boolean | No | Toggle legacy quote behavior |
| Customer Reference Number | customerReferenceNumber | string | Yes | Your reference for the quote request |
| Commodities | commodities | fixedCollection (multiple) | No | One or more commodity line items (see below) |
| Accessorial Codes | accessorialCodes | string (multiple) | No | Repeatable list of accessorial codes |
Commodity line items
The Commodities collection (placeholder "Add Commodity") accepts multiple entries. Each commodity supports:
| Field | Name | Type | Notes |
|---|---|---|---|
| Handling Quantity | handlingQuantity | number | |
| Packaging Type | packagingType | options | A-Frame, Bags, Bales, Barrel, Basket, Batteries, Bins, Box, Break Bulk, Bundle, Cans, Cart, Carton, Case, Chest, Container, Crate, Cylinder, Drum, Gallons, Gaylords, HalfPallets, Hopper, Jerricans, Lift Van, Loose, Package, Pails, Pallet, Piece, Racks, Reel, Roll, Skid, Stacks, Totes, Truckload, Tube, Tubs, U-Box, Unit, Vehicle, Wheels |
| Length / Width / Height | length / width / height | number | Dimensions (in the selected Dimension Units) |
| Weight Total | weightTotal | number | |
| Hazardous Material | hazardousMaterial | boolean | Default false |
| Pieces Total | piecesTotal | number | |
| Freight Class | freightClass | options | No Class, 50, 55, 60, 65, 70, 77.5, 85, 92.5, 100, 110, 125, 150, 175, 200, 250, 300, 400, 500 |
| NMFC | nmfc | string | National Motor Freight Classification code |
| Description | description | string | |
| Additional Markings | additionalMarkings | string | |
| UN Number | unNumber | string | Hazmat UN identifier |
| Packing Group | packingGroup | options | 0, 1, 2, 3 |
| Reference | reference | string | |
| Hazmat Custom Class Description | hazmatCustomClassDescription | string | |
| Hazmat Piece Description | hazmatPieceDescription | string | |
| Harmonized Code | harmonizedCode | string | |
| Hazard Class | hazardClasses | multiOptions | 1.1–1.6, 2.1–2.3, 3.1, 4.1–4.3, 5.1–5.2, 6.1–6.2, 7, 8, 9, 10 |
Create Shipment parameters
These parameters are shown when Action = Create Shipment (displayOptions.show.action = ["createShipment"]). Create Shipment is generally used to book a shipment against a rate quote returned by Get Rate Quote. All parameters support Splice expressions.
| Parameter | Name | Type | Required | Notes |
|---|---|---|---|---|
| Customer Reference Number | customerReferenceNumber | string | Yes | Your reference for the shipment |
| Tariff Description | tariffDescription | string | No | |
| Allow New Shipment Notifications | allowNewShipmentNotifications | boolean | No | |
| Is Committed | isCommitted | boolean | No | |
| Rate Shipment | rateShipment | boolean | No | |
| Carrier SCAC | carrierSCAC | string | No | Carrier Standard Carrier Alpha Code |
| Amount | amount | number | No | |
| Customer ID | customerId | number | No | |
| Shipment Type | shipmentType | options | No | LTL, Small Package, Truckload, Domestic Freight, International Air, International Ocean, Combined International Air, Combined International Ocean, Cartage, Other, Supplemental Insurance Provider, Drayage |
| Stackable | stackable | boolean | No | |
| Trailer Type | trailerType | options | No | Large list (None, Other, Flatbed, Refrigerated, Van, Sprinter Van variants, straight-truck and 48/53 ft van/flatbed/step-deck/reefer/container/tanker variants, HotShot, etc.) |
| Trailer Size | trailerSize | options | No | Full, Partial |
| Weight Units | weightUnits | options | No | lbs, kg |
| Dimension Units | dimensionUnits | options | No | in, cm, ft, m |
| Service Level | serviceLevel | options | No | Normal, Guaranteed End of Day, Guaranteed By Noon, Time-Critical, Priority, Standard, Friday Only Pickup, Standard Truckload, Intermodal, Partial, and more |
| Import/Export | importExport | options | No | |
| Shipment Reference Numbers | shipmentReferenceNumbers | fixedCollection | No | Repeatable reference numbers |
| Stops | stops | fixedCollection | No | Pickup/delivery stops with addresses |
| Commodities | commodities | fixedCollection | No | Same commodity line-item shape as Get Rate Quote (see above) |
| Accessorial Codes | accessorialCodes | fixedCollection | No | Repeatable accessorial entries |
| Shipment Alerts | shipmentAlerts | fixedCollection | No | |
| Driver Cell Number | driverCellPhoneNumber | string | No | |
| Hazmat Emergency Contact Number | hazmatEmergencyContactNumber | string | No |
The bill-to details and selected price/quote that TAI returns mirror the response shape under Output.
Credential
The node uses the Tai Client credential (tai-auth), which is required.
| Field | Name | Type | Required | Description |
|---|---|---|---|---|
| Api Key | apiKey | string | Yes | Your TAI API key |
| URL | url | string | Yes | Base URL of your TAI API environment (used as the request base path; a trailing / is trimmed) |
Configure the credential once and reference it from any Tai Client node. How the API key is sent depends on the action:
- Get Rate Quote sends the key in the request body as
authenticationKey. - Create Shipment sends the key in an
x-api-keyrequest header.
In both cases the URL is used as the API base path.
Output
The node returns the raw TAI API response (response.data) as workflow item(s). The shapes below come from the action samples defined in the node metadata.
Get Rate Quote
Returns an array of quote objects, each shaped like:
[
{
"carrierSCAC": "string",
"carrierName": "string",
"tariffDescription": "string",
"transitTime": 0,
"serviceLevel": "string",
"priceLineHaul": 0,
"priceFuelSurcharge": 0,
"priceAccessorials": [
{ "accessorialCode": "string", "accessorialPrice": 0 }
],
"priceTotal": 0,
"pricingInstructions": "string",
"usedLiabilityCoverage": 0,
"newLiabilityCoverage": 0,
"tsaCompliance": "string",
"apiQuoteNumber": "string"
}
]
The apiQuoteNumber field identifies a returned quote and is what you carry forward into Create Shipment.
Create Shipment
Returns a single shipment object:
{
"shipmentID": 0,
"proNumber": "string",
"shipperReferenceNumber": "string",
"poReference": "string",
"shipmentStatus": "string",
"billToType": "Third",
"billToAccountNumber": "string",
"billToAddress": {
"companyName": "string",
"streetAddress": "string",
"streetAddressTwo": "string",
"city": "string",
"state": "string",
"zipCode": "string",
"email": "string",
"country": "USA",
"fax": "string",
"phone": "string"
},
"priceDetail": {
"carrierSCAC": "string",
"carrierName": "string",
"tariffDescription": "string",
"transitTime": 0,
"serviceLevel": "string",
"priceLineHaul": 0,
"priceFuelSurcharge": 0,
"priceAccessorials": [
{ "accessorialCode": "string", "accessorialPrice": 0 }
],
"priceTotal": 0,
"pricingInstructions": "string",
"usedLiabilityCoverage": 0,
"newLiabilityCoverage": 0,
"tsaCompliance": "string",
"apiQuoteNumber": "string"
},
"billOfLadingURL": "string",
"secondaryBOLNumber": "string",
"apiQuoteNumber": "string"
}
The response includes shipmentID, proNumber, the priceDetail that was booked, and a billOfLadingURL for the generated BOL.
Example Usage & Common Use Cases
- Rate shopping: Run Get Rate Quote with origin/destination ZIPs, commodity dimensions, weight, and freight class to retrieve carrier options sorted by price and transit time. Store
apiQuoteNumberandpriceDetailfor the option you want. - Quote-to-book: Take the selected quote from a Get Rate Quote step and run Create Shipment, passing the
apiQuoteNumberand bill-to details to book the load. Capture the returnedproNumberandbillOfLadingURL. - Hazmat shipments: Populate the hazmat fields on each commodity (Hazardous Material, UN Number, Packing Group, Hazard Class) so quotes reflect hazmat handling.
How It Works
- Select the Shipping resource and an action (Get Rate Quote or Create Shipment).
- Provide the action's parameters. The node validates that parameters and a credential are present, then looks up the credential from the Splice credential store.
- The node builds the request body from your parameters. Commodity collections are flattened into the TAI commodity shape, and for Create Shipment empty/blank properties are purged before sending. Stop country names are normalized (US becomes
USA; other countries are mapped to their TAI country name). - The node calls the TAI API at the configured URL:
- Get Rate Quote calls
shippingGetRateQuotewithauthenticationKeyin the body and returns the carrier quote array. - Create Shipment calls the commit-domestic-shipment endpoint with the
x-api-keyheader and returns the created shipment record (including price detail and BOL URL). Errors from TAI are surfaced (see Troubleshooting).
- Get Rate Quote calls
- The response payload is emitted as workflow item(s) for downstream nodes.
Best Practices
- Store the Tai Client credential once (API key + environment URL) and reuse it across nodes.
- Always set a meaningful Customer Reference Number on quote requests so quotes can be traced.
- Carry the
apiQuoteNumberfrom a Get Rate Quote result into Create Shipment to book the exact rate you selected, rather than re-quoting. - Set Weight Units and Dimension Units consistently with the values you supply in the Commodities collection.
- For hazmat freight, complete the hazmat commodity fields so rates and compliance are correct.
- Because this node is in beta, validate response shapes defensively in downstream nodes.
Troubleshooting
This node requires a credential: No credential was selected on the node. Attach thetai-authcredential.Error: No parameters found: The node received no parameters. Check upstream wiring and that required fields are mapped.Credential [<id>] not found: The referenced credential could not be loaded from the credential store. Re-select or re-save the credential.- Authentication failures: Verify both the Api Key and the URL in the
tai-authcredential. An incorrect environment URL routes requests to the wrong endpoint; an invalid key is rejected by TAI (sent asauthenticationKeyfor quotes andx-api-keyfor shipment creation). - Create Shipment errors: On a failed Create Shipment call, the node throws the error returned by TAI — a raw string message, or a JSON-stringified array of error objects when TAI returns multiple errors. If no detail is available it throws
Error calling Tai. Check the thrown message for the specific TAI validation issue. - Empty or unexpected quotes: Confirm origin/destination ZIPs and that each commodity has the weight, dimensions, and freight class TAI needs to rate the lane.
- Wrong units in rates: Mismatched Weight Units / Dimension Units versus the numbers entered on commodities can produce incorrect quotes.
Related
- HTTP Request - For TAI endpoints not covered by this node
- Set - Shape commodity, stop, and bill-to values before a Create Shipment call