Last updated

Introduction

Send Full Truckload (FTL) tracking updates to project44 through the Universal PUSH endpoint:

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 truckload key.
  • Provide at least one resolving identifier — billOfLadingNumber or orderNumber — in the identifiers object.
  • To couple an event to a stop, set a stop identifier on shipmentEvent (stopReferenceId, stopId, or stopNumber). See Stop coupling.
  • The shipmentEvent and readings slots each carry their own dateTime, 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: billOfLadingNumber or orderNumber
  • 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, or stopNumber) to couple the event to a stop
  • [OPTIONAL] A reefer temperature reading

Workflow

Complete these steps:

  1. Call the POST /services/carrier-push/v1/tracking-updates endpoint.
  2. Enter the shipment update information in the request body. For example,
JSON
{
  "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"
        }
      }
    }
  }
}

This is an example of a potential request. For the full request schema and descriptions of all fields and objects, see the reference documentation.

  1. 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:

JSON
{
  "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 Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 413 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.

FieldDescriptionNotes
customerAccountNumberThe project44 tenant ID of the customer the data is for.Maximum 128 characters. Optional.
truckload.identifiersResolving identifier keys used to match the shipment.At least one of billOfLadingNumber or orderNumber.
truckload.shipmentEvent.typeThe event type.See FTL event types.
truckload.shipmentEvent.dateTimeISO 8601 date-time of the event.
truckload.readings.dateTimeISO 8601 date-time of the reading.Independent of shipmentEvent.dateTime.
truckload.readings.positionVehicle latitude and longitude in decimal degrees.
truckload.readings.sensor.zonesReefer temperature zones.Maximum 5 items.

Send Just a Position Update

Requirements

Have the following information:

  • A resolving identifier: billOfLadingNumber or orderNumber
  • Position coordinates of the update: latitude, longitude
  • The UTC timestamp of the reading

Workflow

Complete these steps:

  1. Prepare a POST request to /services/carrier-push/v1/tracking-updates.
  2. Enter the position update in the request body. For example,
JSON
{
  "customerAccountNumber": "1559052698636",
  "truckload": {
    "identifiers": {
      "billOfLadingNumber": "BOL-20260601-002"
    },
    "readings": {
      "dateTime": "2026-06-01T10:15:00Z",
      "position": {
        "latitude": 41.9022,
        "longitude": -87.6550
      }
    }
  }
}

This is an example of a potential request. For the full request schema and descriptions of all fields and objects, see the reference documentation.

  1. 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 Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 413 Content Too Large

See Error response codes in the Appendix for more information.

Fields & Objects

FieldDescriptionNotes
customerAccountNumberThe project44 tenant ID of the customer the data is for.Maximum 128 characters. Optional.
truckload.identifiers.billOfLadingNumberBill of lading number used to match the shipment.
truckload.readings.dateTimeISO 8601 date-time of the reading.
truckload.readings.positionVehicle latitude and longitude in decimal degrees.

Send Just a Status Event

Requirements

Have the following information:

  • A resolving identifier: billOfLadingNumber or orderNumber
  • The event type. See FTL event types.
  • The UTC timestamp of the event
  • [OPTIONAL] A stop identifier (stopReferenceId, stopId, or stopNumber) to couple the event to a stop

Workflow

Complete these steps:

  1. Prepare a POST request to /services/carrier-push/v1/tracking-updates.
  2. Enter the status event in the request body. For example,
JSON
{
  "customerAccountNumber": "1559052698636",
  "truckload": {
    "identifiers": {
      "billOfLadingNumber": "BOL-20260601-003"
    },
    "shipmentEvent": {
      "type": "DELIVERY",
      "stopNumber": 2,
      "dateTime": "2026-06-01T16:45:00Z"
    }
  }
}

This is an example of a potential request. For the full request schema and descriptions of all fields and objects, see the reference documentation.

  1. 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 Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 413 Content Too Large

See Error response codes in the Appendix for more information.

Fields & Objects

FieldDescriptionNotes
customerAccountNumberThe project44 tenant ID of the customer the data is for.Maximum 128 characters. Optional.
truckload.identifiersResolving identifier keys used to match the shipment.At least one of billOfLadingNumber or orderNumber.
truckload.shipmentEvent.typeThe event type.See FTL event types.
truckload.shipmentEvent.dateTimeISO 8601 date-time of the event.
truckload.shipmentEvent.stopNumber1-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: billOfLadingNumber or orderNumber
  • 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:

  1. Prepare a POST request to /services/carrier-push/v1/tracking-updates.
  2. Enter the combined update in the request body. For example,
JSON
{
  "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"
          }
        ]
      }
    }
  }
}

This is an example of a potential request. For the full request schema and descriptions of all fields and objects, see the reference documentation.

  1. 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 Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 413 Content Too Large

See Error response codes in the Appendix for more information.

Fields & Objects

FieldDescriptionNotes
truckload.assetTypeType of tracked unit.TRUCK, TRAILER, or OTHER. Defaults to TRAILER.
truckload.identifiersResolving identifier keys used to match the shipment.At least one of billOfLadingNumber or orderNumber.
truckload.shipmentEvent.typeThe event type.See FTL event types.
truckload.shipmentEvent.dateTimeISO 8601 date-time of the event.
truckload.readings.dateTimeISO 8601 date-time of the reading.Independent of shipmentEvent.dateTime.
truckload.readings.positionVehicle latitude and longitude in decimal degrees.
truckload.readings.sensor.ambientTemperatureAmbient temperature reading with its value and unit.
truckload.readings.sensor.zonesReefer temperature zones.Maximum 5 items.