Introduction
Send Full Truckload (FTL) tracking updates to project44 through the Universal PUSH endpoint:
- Send a Status Event with a Position Update
- Send Just a Position Update
- Send Just a Status Event
- Send a Status Event and a Reefer Temperature with a Position Update
Each request carries the FTL data under the truckload key. The endpoint validates synchronously and returns 202 Accepted with an ingestion ID before processing the payload asynchronously.
Best practices
Keep these in mind as you build your integration:
- Authenticate every request. See Authentication for OAuth2 setup.
- Nest the FTL data under the
truckloadkey. - Provide at least one resolving identifier —
billOfLadingNumberororderNumber— in theidentifiersobject. - To couple an event to a stop, set a stop identifier on
shipmentEvent(stopReferenceId,stopId, orstopNumber). See Stop coupling. - The
shipmentEventandreadingsslots each carry their owndateTime, so you can report a past event alongside a current sensor reading in one request. - Timestamps must be ISO 8601 date-times (for example
2026-06-01T08:30:00Z) and not more than 5 minutes in the future. - Sending status events together with position updates is preferred. Sending only position updates is preferred to sending only status events.
Send a Status Event with a Position Update
Requirements
Have the following information:
- A resolving identifier:
billOfLadingNumberororderNumber - The event type. See FTL event types.
- The UTC timestamp of the event
- Position coordinates of the update: latitude, longitude
- [OPTIONAL] A stop identifier (
stopReferenceId,stopId, orstopNumber) to couple the event to a stop - [OPTIONAL] A reefer temperature reading
Workflow
Complete these steps:
- Call the
POST/services/carrier-push/v1/tracking-updates endpoint. - Enter the shipment update information in the request body. For example,
{ "customerAccountNumber": "1559052698636", "truckload": { "identifiers": { "billOfLadingNumber": "BOL-20260601-001" }, "shipmentEvent": { "type": "ARRIVAL_AT_STOP", "stopNumber": 1, "dateTime": "2026-06-01T08:30:00Z" }, "readings": { "dateTime": "2026-06-01T08:30:05Z", "position": { "latitude": 41.8781, "longitude": -87.6298, "speedUnit": "MILES_PER_HOUR" }, "sensor": { "zones": [ { "id": "ZONE1", "returnAirTemperature": 2.5, "setPoint": 2, "temperatureUnit": "CELSIUS" } ], "fuel": { "type": "DIESEL", "currentLevel": 72, "fuelUnit": "PERCENT_REMAINING" } } } } }
- Submit the request.
Expected Response
The request is successfully submitted and confirmed when a 202 Accepted response is received. The response body contains an ingestion ID:
{ "ingestionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }
Include the ingestionId when contacting project44 support about a specific push.
Errors
If there was a problem with your request, you will receive one of the following error codes:
400 Bad Request401 Unauthorized403 Forbidden404 Not Found413 Content Too Large
See Error response codes in the Appendix for more information.
Fields & Objects
The table below describes the relevant fields for sending a status event with a position update. See the Appendix for the full identifier, object, and limit reference.
| Field | Description | Notes |
|---|---|---|
customerAccountNumber | The project44 tenant ID of the customer the data is for. | Maximum 128 characters. Optional. |
truckload.identifiers | Resolving identifier keys used to match the shipment. | At least one of billOfLadingNumber or orderNumber. |
truckload.shipmentEvent.type | The event type. | See FTL event types. |
truckload.shipmentEvent.dateTime | ISO 8601 date-time of the event. | |
truckload.readings.dateTime | ISO 8601 date-time of the reading. | Independent of shipmentEvent.dateTime. |
truckload.readings.position | Vehicle latitude and longitude in decimal degrees. | |
truckload.readings.sensor.zones | Reefer temperature zones. | Maximum 5 items. |
Send Just a Position Update
Requirements
Have the following information:
- A resolving identifier:
billOfLadingNumberororderNumber - Position coordinates of the update: latitude, longitude
- The UTC timestamp of the reading
Workflow
Complete these steps:
- Prepare a
POSTrequest to /services/carrier-push/v1/tracking-updates. - Enter the position update in the request body. For example,
{ "customerAccountNumber": "1559052698636", "truckload": { "identifiers": { "billOfLadingNumber": "BOL-20260601-002" }, "readings": { "dateTime": "2026-06-01T10:15:00Z", "position": { "latitude": 41.9022, "longitude": -87.6550 } } } }
- Send the request.
Expected Response
The request is successfully submitted and confirmed when a 202 Accepted response with an ingestionId is received.
Errors
If there was a problem with your request, you will receive one of the following error codes:
400 Bad Request401 Unauthorized403 Forbidden404 Not Found413 Content Too Large
See Error response codes in the Appendix for more information.
Fields & Objects
| Field | Description | Notes |
|---|---|---|
customerAccountNumber | The project44 tenant ID of the customer the data is for. | Maximum 128 characters. Optional. |
truckload.identifiers.billOfLadingNumber | Bill of lading number used to match the shipment. | |
truckload.readings.dateTime | ISO 8601 date-time of the reading. | |
truckload.readings.position | Vehicle latitude and longitude in decimal degrees. |
Send Just a Status Event
Requirements
Have the following information:
- A resolving identifier:
billOfLadingNumberororderNumber - The event type. See FTL event types.
- The UTC timestamp of the event
- [OPTIONAL] A stop identifier (
stopReferenceId,stopId, orstopNumber) to couple the event to a stop
Workflow
Complete these steps:
- Prepare a
POSTrequest to /services/carrier-push/v1/tracking-updates. - Enter the status event in the request body. For example,
{ "customerAccountNumber": "1559052698636", "truckload": { "identifiers": { "billOfLadingNumber": "BOL-20260601-003" }, "shipmentEvent": { "type": "DELIVERY", "stopNumber": 2, "dateTime": "2026-06-01T16:45:00Z" } } }
- Send the request.
Expected Response
The request is successfully submitted and confirmed when a 202 Accepted response with an ingestionId is received.
Errors
If there was a problem with your request, you will receive one of the following error codes:
400 Bad Request401 Unauthorized403 Forbidden404 Not Found413 Content Too Large
See Error response codes in the Appendix for more information.
Fields & Objects
| Field | Description | Notes |
|---|---|---|
customerAccountNumber | The project44 tenant ID of the customer the data is for. | Maximum 128 characters. Optional. |
truckload.identifiers | Resolving identifier keys used to match the shipment. | At least one of billOfLadingNumber or orderNumber. |
truckload.shipmentEvent.type | The event type. | See FTL event types. |
truckload.shipmentEvent.dateTime | ISO 8601 date-time of the event. | |
truckload.shipmentEvent.stopNumber | 1-based stop the event applies to. | Optional. |
Send a Status Event and a Reefer Temperature with a Position Update
Requirements
Have the following information:
- A resolving identifier:
billOfLadingNumberororderNumber - The event type. See FTL event types.
- Position coordinates of the update: latitude, longitude
- A reefer temperature reading
- The UTC timestamps of the event and reading
- [OPTIONAL] A stop identifier on the event
Workflow
Complete these steps:
- Prepare a
POSTrequest to /services/carrier-push/v1/tracking-updates. - Enter the combined update in the request body. For example,
{ "customerAccountNumber": "1559052698636", "truckload": { "assetType": "TRAILER", "identifiers": { "billOfLadingNumber": "BOL-20260601-004" }, "shipmentEvent": { "type": "DEPARTURE_FROM_STOP", "stopNumber": 1, "dateTime": "2026-06-01T12:05:00Z" }, "readings": { "dateTime": "2026-06-01T12:05:10Z", "position": { "latitude": 41.7508, "longitude": -88.1535, "speed": 55, "heading": 90, "speedUnit": "MILES_PER_HOUR" }, "sensor": { "ignitionStatus": "ON", "reefer": { "state": "ON", "powerSource": "DIESEL", "operatingMode": "CONTINUOUS" }, "ambientTemperature": { "value": 6.5, "unit": "CELSIUS" }, "zones": [ { "id": "ZONE1", "returnAirTemperature": 1.0, "setPoint": 2, "temperatureUnit": "CELSIUS", "doorState": "CLOSED" } ] } } } }
- Send the request.
Expected Response
The request is successfully submitted and confirmed when a 202 Accepted response with an ingestionId is received.
Errors
If there was a problem with your request, you will receive one of the following error codes:
400 Bad Request401 Unauthorized403 Forbidden404 Not Found413 Content Too Large
See Error response codes in the Appendix for more information.
Fields & Objects
| Field | Description | Notes |
|---|---|---|
truckload.assetType | Type of tracked unit. | TRUCK, TRAILER, or OTHER. Defaults to TRAILER. |
truckload.identifiers | Resolving identifier keys used to match the shipment. | At least one of billOfLadingNumber or orderNumber. |
truckload.shipmentEvent.type | The event type. | See FTL event types. |
truckload.shipmentEvent.dateTime | ISO 8601 date-time of the event. | |
truckload.readings.dateTime | ISO 8601 date-time of the reading. | Independent of shipmentEvent.dateTime. |
truckload.readings.position | Vehicle latitude and longitude in decimal degrees. | |
truckload.readings.sensor.ambientTemperature | Ambient temperature reading with its value and unit. | |
truckload.readings.sensor.zones | Reefer temperature zones. | Maximum 5 items. |