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
Name | Type | Description |
---|---|---|
loadId | string | Load ID or number |
loadtapAppURL | string | Link to automatically take a user to a load in the Chaine Platform |
trackLoadURL | string | Unique tracking map link for each load |
Current Load Location
currentLoadLocationInfo object withing loadStatusData.
Name | Type | Description |
---|---|---|
locationDateTime | string (dateTime) | Date-time in UTC of tracking location/status |
localLocationDateTime | string (dateTime) | Date-time in the location's time zone |
localLocationTimeZone | string | Time zone of the location update |
lng | string | Longitude value of location |
lat | string | Latitude value of location. |
addr1 | string | Address of the location update |
cityName | string | City of the location update |
stateCode | string | State code of the location update |
countryCode | string | Country 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..)
Name | Type | Description |
---|---|---|
stopId | string | Unique identifier for a sotp |
stopType | string | Pick or Drop |
stopStatusDateTime | string (dateTime) | Date-time of stop status in UTC |
localStopStatusDateTime | string (dateTime) | Date-time of stop status in stop's local timezone |
localStopStatusTimeZone | string | Stop's local timezone |
stopStatusCode | string | EDI Code |
stopStatusCodeDescription | string | EDI Code Description |
reasonCode | string | EDI 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.
Name | Type | Description |
---|---|---|
addr1 | string | Address |
lng | string | Longitude |
lat | string | Latitude |
cityName | string | City name |
stateCode | string | State |
countryCode | string | Country |
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