Skip to main content

Receive Shipment Tracking

You can provide a webhook for us to push tracking events to, or call an api to GET the latest tracking event.


Webhook

You can provide a webhook where we send tracking updates anytime we receive them. For a list of tracking events that we send, see below. Note, on our legacy platform, you can tell us which events you want to consume and you can also speicfy the format of the events (see below). On the new platform, you will have access to a developer's page where this can all be done.

This endpoint should be exposed by your TMS to receive load location and status based on user actions in the mobile app or geofence trigger. Chaine can call TMS's API to update any load data (i.e. driver No., appointment time changes, etc...).

Chaine triggers this endpoint to transfer load location and status information to TMS, and load any data that may be updated in on the Chaine Platform during execution.


Requesting URL

Alternatively, you can also request the current tracking status of a load with a GET HTTP Request.

GET https://api.track.loadtap.com/tms/v1/loads/:loadId/status

Models

In both of the scenarios, the payload that we send is as follows:

{
"loadStatusData": {
"loadId": "string",
"loadtapAppURL": "string",
"trackLoadURL": "string",
"currentLoadLocationInfo": {
"locationDateTime": "2020-05-27T20:10:32.976Z",
"localLocationDateTime": "2020-05-27T20:10:32.976Z",
"localLocationTimeZone": "string",
"lng": 0,
"lat": 0,
"addr1": "string",
"cityName": "string",
"stateCode": "string",
"countryCode": "string"
},
"stopStatuses": [
{
"stopStatus": {
"stopId": "string",
"stopType": "string",
"stopStatusDateTime": "2020-05-27T20:10:32.976Z",
"localStopStatusDateTime": "2020-05-27T20:10:32.976Z",
"localStopStatusTimeZone": "string",
"stopStatusCode": "string",
"stopStatusCodeDescription": "string",
"reasonCode": "string",
"statusLocationInfo": {
"addr1": "string",
"lng": 0,
"lat": 0,
"cityName": "string",
"stateCode": "string",
"countryCode": "string"
}
}
}
]
}
}

Load Status data

Status object within loadStatusData

NameTypeDescription
loadIdstringLoad ID or number
loadtapAppURLstringLink to automatically take a user to a load in the Chaine Platform
trackLoadURLstringUnique tracking map link for each load ‌

Current Load Location

currentLoadLocationInfo object withing loadStatusData.

NameTypeDescription
locationDateTimestring (dateTime)Date-time in UTC of tracking location/status
localLocationDateTimestring (dateTime)Date-time in the location's time zone
localLocationTimeZonestringTime zone of the location update
lngstringLongitude value of location
latstringLatitude value of location.
addr1stringAddress of the location update
cityNamestringCity of the location update
stateCodestringState code of the location update
countryCodestringCountry code of the location update

Stop Status

stopStatus object within in stopStatuses array. This is sent when a stop-level update is done, (i.e. EDI status codes, arrived at shipper, etc..)

NameTypeDescription
stopIdstringUnique identifier for a sotp
stopTypestringPick or Drop
stopStatusDateTimestring (dateTime)Date-time of stop status in UTC
localStopStatusDateTimestring (dateTime)Date-time of stop status in stop's local timezone
localStopStatusTimeZonestringStop's local timezone
stopStatusCodestringEDI Code
stopStatusCodeDescriptionstringEDI Code Description
reasonCodestringEDI Reason Code

Location info

Load location in stopStatus object. Along with the stop-status, we also send the location details if needed. Below is the device's address at the point when a stop-status is updated.

NameTypeDescription
addr1stringAddress
lngstringLongitude
latstringLatitude
cityNamestringCity name
stateCodestringState
countryCodestringCountry

IF a customer has it enabled, we send stop statuses such as arrived or departed based on Geo-Fence triggers. In the addresses above, that is the location of the device/truck when a stop status is updated.


Sample Request

{
"loadStatusData": {
"loadId": "PS0021",
"loadtapAppURL": "https://track.loadtap.com/brokers/alogin/eeeakXi2cJ_3z5CdVdzwi67vSlM",
"trackLoadURL": "https://track.loadtap.com/share/GdiCRgbYJb0/4f506jjjjf9d-4940-b985-d112bf9db88f",
"currentLoadLocationInfo": {
"locationDateTime": "2020-01-11 16:51:16.225",
"localLocationDateTime": "2020-01-11 08:51:16",
"localLocationTimeZone": "America/Los_Angeles",
"lng": "-121.882568359375",
"lat": "37.400394439697266",
"addr1": "",
"cityName": "San Jose",
"stateCode": "CA",
"countryCode": "US"
},
"stopStatuses": [
{
"stopStatus": {
"stopId": "a0t2E000008IDIwQAO51",
"stopType": "pick",
"stopStatusDateTime": "2020-01-11 16:51:16.225",
"localStopStatusDateTime": "2020-01-11 08:51:16",
"localStopStatusTimeZone": "America/Los_Angeles",
"stopStatusCode": "A1",
"stopStatusCodeDescription": "Estimated to arrive for Pick up",
"reasonCode": "",
"statusLocationInfo": {
"addr1": "",
"lng": "-121.882568359375",
"lat": "37.400394439697266",
"cityName": "San Jose",
"stateCode": "CA",
"countryCode": "US"
}
}
}
]
}
}

List of tracking events

Chaine normalizes all tracking data from any source (mobile app, API, ELD, FTP, CSV, EDI, etc..) into the following 6 simple statuses:

  • ESTIMATED_ARRIVAL_PICKUP: ETA to each pick (with pick number included in the data for multi-pick)
  • ARRIVED_PICKUP: Arrival for each pick (with pick number included in the data for multi-pick)
  • DEPARTED_PICKUP: Departed for each pick (with pick number included in the data for multi-pick)
  • ESTIMATED_ARRIVAL_DELIVERY: : ETA to each drop ((with drop number included in the data for multi-drop)
  • ARRIVED_DELIVERY: Arrival for each drop (with drop number included in the data for multi-drop)
  • DEPARTED_DELIVERY: Departed for each drop (with drop number included in the data for multi-drop)

Additionally, a location with date/time is sent with seach of the statuses. You can also configure one of the ETA events above to send a location with a configurable with a frequency i.e. every 15min, 1 hour, 4 hours, etc...).

Here is an example of how a customer can configure the stopStatusCode and stopStatusCodeDescription in the example payload above:

  • ESTIMATED_ARRIVAL_PICKUP
    • stopStatusCode: "A1"
    • stopStatusCodeDescription: "Estimated to arrive for Pick up"
    • enabled: false
      • "enabled" determines whether a customer wants us to send it to their TMS or not. False means, don't send it, true means send it to the TMS.
  • ARRIVED_PICKUP
    • stopStatusCode: "X3"
    • stopStatusCodeDescription: "Arrived at Pickup Location"
    • enabled: true
  • DEPARTED_PICKUP (if not last pick)
    • stopStatusCode: "AF"
    • stopStatusCodeDescription: "Carrier Departed Pickup Location with Shipment,"
    • enabled: false
  • DEPARTED_PICKUP (if last pick)
    • stopStatusCode: "A2"
    • stopStatusCodeDescription: "En Route to Delivery Destination"
    • enabled: true
  • ESTIMATED_ARRIVAL_DELIVERY: sent every 3 hours if a new location is received
    • stopStatusCode: "A2"
    • stopStatusCodeDescription: "En Route to Delivery Destination"
    • enabled: true
  • ARRIVED_DELIVERY
    • stopStatusCode: "X5"
    • stopStatusCodeDescription: "Arrived at Delivery Location Loading Dock"
    • enabled: true
  • DEPARTED_DELIVERY (not last drop)
    • stopStatusCode: "CD"
    • stopStatusCodeDescription: "Carrier Departed Delivery Location"
    • enabled: true
  • DEPARTED_DELIVERY (last drop)
    • stopStatusCode: "D3"
    • stopStatusCodeDescription: "Delivered and Unloaded"
    • enabled: true