---
title: "Push tracking events and telematics readings."
method: POST
path: "/services/carrier-push/v1/tracking-updates"
tags: ["Universal Push: Truckload"]
---

# Push tracking events and telematics readings.

`POST /services/carrier-push/v1/tracking-updates`

## Request

- Base URL: `https://na12.api.project44.com`
- URL: `https://na12.api.project44.com/services/carrier-push/v1/tracking-updates`
- Auth: OAuth 2
  - Client credentials
  - Token URL: `/api/v4/oauth2/token`
- TypeScript: <https://skmtc.dev/project44/apis/project44-rest-api/docs/services/carrier-push/v1/tracking-updates/post.ts> (a function with typed inputs; its response is checked against the schema)

**Beta.** This endpoint is in active development; the contract and behavior are subject to change before general availability.

Ingest one shipment tracking event, one set of telematics readings, and/or one or more stop updates for the shipment(s) resolved by the supplied identifiers. Send the Full Truckload data under the `truckload` key. All timestamps are ISO 8601 date-times (for example `2026-06-01T08:30:00Z`). `shipmentEvent.dateTime` and `readings.dateTime` report something that has already happened, and are dropped if more than 5 minutes in the future. Stop times are forward-looking and are not subject to that limit: `stops[].carrierEstimatedArrivalDateTime` must carry a UTC offset or the `Z` designator, and the times in `stops[].carrierAppointmentWindow` are local to the stop, where an offset is optional.

<h4><b>Required Fields</b></h4><ul><li><b>truckload: </b></li><ul><li><b>identifiers: </b> at least one of billOfLadingNumber or orderNumber</li><li>at least one of shipmentEvent, readings or stops</li><li><b>shipmentEvent: </b> (if sent)</li><ul><li>type</li><li>dateTime</li></ul><li><b>readings: </b> (if sent)</li><ul><li>dateTime</li><li>at least one of position or sensor</li><li><b>position: </b> (if sent)</li><ul><li>latitude</li><li>longitude</li></ul></ul><li><b>stops: </b> (if sent), each entry</li><ul><li>one of stopNumber, stopReferenceId or stopId</li><li>at least one value to set: carrierEstimatedArrivalDateTime or carrierAppointmentWindow</li><li><b>carrierAppointmentWindow: </b> (if sent)</li><ul><li>startDateTime</li><li>endDateTime</li></ul></ul></ul></ul>

## Request body

- UniversalTrackingUpdate: The Universal Push request body. Carries the Full Truckload data under `truckload`.
  - `customerAccountNumber` string: The project44 tenant ID of the customer the tracking data is for. Optional.
  - `truckload` union: Truckload (FTL) ingestion body. Must carry resolving identifiers plus at least one of a shipment event, a set of readings, or one or more stop updates.
    - object
      - `extensions` object: Optional carrier-specific extension fields.
      - `identifiers` union: Identifiers carried with the tracking update. Two kinds are supported. Shipment-resolving identifiers (`billOfLadingNumber`, `orderNumber`) determine which shipment the update applies to, and at least one of them is required. Carrier identifiers (`scac`, `dotNumber`, `mcNumber`) are optional and identify the subject carrier the tracking data is about; supply one when you are pushing On-Behalf-Of another carrier, i.e. when the carrier making the call is not the carrier the data belongs to. Carrier identifiers never satisfy the shipment-resolution requirement. On-Behalf-Of push must be enabled for your account by project44 in advance.
        - object
          - `billOfLadingNumber` string, required
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string
          - `scac` string
        - object
          - `billOfLadingNumber` string
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string, required
          - `scac` string
      - `readings` union, required: A timestamped set of readings. At least one of position or sensor is required.
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition, required: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo, required: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
      - `shipmentEvent` TruckloadTrackingUpdateEvent: A shipment tracking event (milestone). `type` and `dateTime` are required; stop identifiers are optional.
        - `dateTime` string, date-time: ISO 8601 date-time of the event (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
        - `description` string
        - `exceptionCode` string
        - `extensions` object
        - `stopNumber` integer: 1-based stop sequence number the event applies to.
        - `stopReferenceId` string: Carrier's reference id for the stop.
        - `stopId` string: project44 stop id, if known.
        - `source` 'UNKNOWN' | 'CARRIER' | 'CONTRACT'
        - `type` 'UNKNOWN' | 'TRACKING_INITIATE' | 'TRACKING_START' | 'ARRIVAL_AT_STOP' | 'DEPARTURE_FROM_STOP' | 'LOAD_ONTO_VEHICLE' | 'UNLOAD_FROM_VEHICLE' | 'TRACKING_END_DUE_TO_TIMEOUT' | 'TRACKING_END_BY_USER' | 'TRACKING_COMPLETE' | 'GATE_IN' | 'GATE_OUT' | 'FLIGHT_BOOKING' | 'MANIFEST' | 'RECEIVE_FROM_SHIPPER' | 'CONSIGNEE_NOTIFY' | 'DELIVERY' | 'WARNING' | 'EXCEPTION' | 'TRACKING_STOP' | 'EXCEPTION_LATE_DEPARTURE' | 'EXCEPTION_MISSED_CONNECTION' | 'GATE_IN_FULL' | 'GATE_IN_EMPTY' | 'GATE_OUT_EMPTY' | 'GATE_OUT_FULL' | 'LOAD' | 'DISCHARGE' | 'EXCEPTION_DELAYED' | 'EXCEPTION_DELIVERY_MISSED' | 'EXCEPTION_HELD' | 'EXCEPTION_PICKUP_MISSED' | 'AVAILABLE' | 'ENTERED_GEOFENCE' | 'EXITED_GEOFENCE' | 'INFO' | 'OUT_FOR_DELIVERY' | 'PICKED_UP' | 'RETURN_TO_SENDER' | 'TRACKING_FAILED' | 'UNAUTHORIZED' | 'PICKUP_MISSED' | 'SURVEY' | 'HELD' | 'CLEAN_TRUCK_FEE_CLEARANCE' | 'CLEAN_TRUCK_FEE_HOLD' | 'OTHER_HOLD' | 'OTHER_HOLD_CLEARANCE' | 'TERMINAL_CLEARANCE' | 'TERMINAL_HOLD' | 'TRAFFIC_MITIGATION_FEE_CLEARANCE' | 'TRAFFIC_MITIGATION_FEE_HOLD' | 'RELEASE' | 'DELAYED' | 'DELIVERY_MISSED' | 'ENTERED_INNER_GEOFENCE' | 'EXITED_INNER_GEOFENCE' | 'ENTERED_OUTER_GEOFENCE' | 'EXITED_OUTER_GEOFENCE' | 'ENTERED_FINAL_GEOFENCE' | 'EXITED_FINAL_GEOFENCE' | 'IDLE' | 'DRIVER_DENY_TRACKING' | 'UNKNOWN_EQUIPMENT_IDENTIFIER' | 'MISSING_EQUIPMENT_IDENTIFIER' | 'DISPATCH' | 'CUSTOMS_HOLD' | 'CUSTOMS_CLEARANCE' | 'CUSTOMS_DOCS_FILING' | 'CUSTOMS_TRANSIT_DOCS_ISSUED' | 'CUSTOMS_TRANSIT_DOCS_CLOSED' | 'CARRIER_HOLD' | 'RECEIVE_FROM_CARRIER' | 'ISSUE_FREIGHT_BILL' | 'FREIGHT_ON_HAND' | 'READY_FOR_CARRIAGE' | 'LAST_FREE_DAY' | 'MISSING_CARRIER' | 'STUFF' | 'STRIP' | 'SEAL_INSPECTION' | 'SEAL_REMOVAL' | 'SEAL_RESEAL' | 'HANDOVER' | 'DOCUMENT_ADD' | 'DOCUMENT_REMOVE' | 'REMOVE_FROM_BOOKING' | 'COST_UPDATE' | 'SHARING_STOPPED' | 'ROLLED_OVER' | 'BAD_ORDER' | 'BAD_ORDER_RELEASE' | 'ARRIVED_AT_TERMINAL' | 'DEPARTED_TERMINAL': The shipment event type. Accepts project44's standard shipment event types plus the truckload terminal events ARRIVED_AT_TERMINAL and DEPARTED_TERMINAL. Only a subset produces a status milestone on the shipment (ARRIVAL_AT_STOP, DEPARTURE_FROM_STOP, LOAD_ONTO_VEHICLE, UNLOAD_FROM_VEHICLE, DELIVERY, GATE_IN, GATE_OUT, ARRIVED_AT_TERMINAL, DEPARTED_TERMINAL); other values are accepted and stored but do not change the shipment's status.
      - `stops` TruckloadTrackingStopUpdate[]: Updates to stops that already exist on the shipment, such as a carrier ETA or a dock appointment window.
        - union: An update to a stop that already exists on the shipment. Identify the stop, then supply the values to set. project44 never creates, removes or reorders stops from this array. Always send at least one value to set - an entry that identifies a stop but carries neither `carrierEstimatedArrivalDateTime` nor `carrierAppointmentWindow` is accepted and simply has no effect.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer, required: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string, required: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string, required: project44's identifier for the stop, when you have it.
    - object
      - `extensions` object: Optional carrier-specific extension fields.
      - `identifiers` union: Identifiers carried with the tracking update. Two kinds are supported. Shipment-resolving identifiers (`billOfLadingNumber`, `orderNumber`) determine which shipment the update applies to, and at least one of them is required. Carrier identifiers (`scac`, `dotNumber`, `mcNumber`) are optional and identify the subject carrier the tracking data is about; supply one when you are pushing On-Behalf-Of another carrier, i.e. when the carrier making the call is not the carrier the data belongs to. Carrier identifiers never satisfy the shipment-resolution requirement. On-Behalf-Of push must be enabled for your account by project44 in advance.
        - object
          - `billOfLadingNumber` string, required
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string
          - `scac` string
        - object
          - `billOfLadingNumber` string
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string, required
          - `scac` string
      - `readings` union: A timestamped set of readings. At least one of position or sensor is required.
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition, required: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo, required: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
      - `shipmentEvent` TruckloadTrackingUpdateEvent, required: A shipment tracking event (milestone). `type` and `dateTime` are required; stop identifiers are optional.
        - `dateTime` string, date-time: ISO 8601 date-time of the event (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
        - `description` string
        - `exceptionCode` string
        - `extensions` object
        - `stopNumber` integer: 1-based stop sequence number the event applies to.
        - `stopReferenceId` string: Carrier's reference id for the stop.
        - `stopId` string: project44 stop id, if known.
        - `source` 'UNKNOWN' | 'CARRIER' | 'CONTRACT'
        - `type` 'UNKNOWN' | 'TRACKING_INITIATE' | 'TRACKING_START' | 'ARRIVAL_AT_STOP' | 'DEPARTURE_FROM_STOP' | 'LOAD_ONTO_VEHICLE' | 'UNLOAD_FROM_VEHICLE' | 'TRACKING_END_DUE_TO_TIMEOUT' | 'TRACKING_END_BY_USER' | 'TRACKING_COMPLETE' | 'GATE_IN' | 'GATE_OUT' | 'FLIGHT_BOOKING' | 'MANIFEST' | 'RECEIVE_FROM_SHIPPER' | 'CONSIGNEE_NOTIFY' | 'DELIVERY' | 'WARNING' | 'EXCEPTION' | 'TRACKING_STOP' | 'EXCEPTION_LATE_DEPARTURE' | 'EXCEPTION_MISSED_CONNECTION' | 'GATE_IN_FULL' | 'GATE_IN_EMPTY' | 'GATE_OUT_EMPTY' | 'GATE_OUT_FULL' | 'LOAD' | 'DISCHARGE' | 'EXCEPTION_DELAYED' | 'EXCEPTION_DELIVERY_MISSED' | 'EXCEPTION_HELD' | 'EXCEPTION_PICKUP_MISSED' | 'AVAILABLE' | 'ENTERED_GEOFENCE' | 'EXITED_GEOFENCE' | 'INFO' | 'OUT_FOR_DELIVERY' | 'PICKED_UP' | 'RETURN_TO_SENDER' | 'TRACKING_FAILED' | 'UNAUTHORIZED' | 'PICKUP_MISSED' | 'SURVEY' | 'HELD' | 'CLEAN_TRUCK_FEE_CLEARANCE' | 'CLEAN_TRUCK_FEE_HOLD' | 'OTHER_HOLD' | 'OTHER_HOLD_CLEARANCE' | 'TERMINAL_CLEARANCE' | 'TERMINAL_HOLD' | 'TRAFFIC_MITIGATION_FEE_CLEARANCE' | 'TRAFFIC_MITIGATION_FEE_HOLD' | 'RELEASE' | 'DELAYED' | 'DELIVERY_MISSED' | 'ENTERED_INNER_GEOFENCE' | 'EXITED_INNER_GEOFENCE' | 'ENTERED_OUTER_GEOFENCE' | 'EXITED_OUTER_GEOFENCE' | 'ENTERED_FINAL_GEOFENCE' | 'EXITED_FINAL_GEOFENCE' | 'IDLE' | 'DRIVER_DENY_TRACKING' | 'UNKNOWN_EQUIPMENT_IDENTIFIER' | 'MISSING_EQUIPMENT_IDENTIFIER' | 'DISPATCH' | 'CUSTOMS_HOLD' | 'CUSTOMS_CLEARANCE' | 'CUSTOMS_DOCS_FILING' | 'CUSTOMS_TRANSIT_DOCS_ISSUED' | 'CUSTOMS_TRANSIT_DOCS_CLOSED' | 'CARRIER_HOLD' | 'RECEIVE_FROM_CARRIER' | 'ISSUE_FREIGHT_BILL' | 'FREIGHT_ON_HAND' | 'READY_FOR_CARRIAGE' | 'LAST_FREE_DAY' | 'MISSING_CARRIER' | 'STUFF' | 'STRIP' | 'SEAL_INSPECTION' | 'SEAL_REMOVAL' | 'SEAL_RESEAL' | 'HANDOVER' | 'DOCUMENT_ADD' | 'DOCUMENT_REMOVE' | 'REMOVE_FROM_BOOKING' | 'COST_UPDATE' | 'SHARING_STOPPED' | 'ROLLED_OVER' | 'BAD_ORDER' | 'BAD_ORDER_RELEASE' | 'ARRIVED_AT_TERMINAL' | 'DEPARTED_TERMINAL': The shipment event type. Accepts project44's standard shipment event types plus the truckload terminal events ARRIVED_AT_TERMINAL and DEPARTED_TERMINAL. Only a subset produces a status milestone on the shipment (ARRIVAL_AT_STOP, DEPARTURE_FROM_STOP, LOAD_ONTO_VEHICLE, UNLOAD_FROM_VEHICLE, DELIVERY, GATE_IN, GATE_OUT, ARRIVED_AT_TERMINAL, DEPARTED_TERMINAL); other values are accepted and stored but do not change the shipment's status.
      - `stops` TruckloadTrackingStopUpdate[]: Updates to stops that already exist on the shipment, such as a carrier ETA or a dock appointment window.
        - union: An update to a stop that already exists on the shipment. Identify the stop, then supply the values to set. project44 never creates, removes or reorders stops from this array. Always send at least one value to set - an entry that identifies a stop but carries neither `carrierEstimatedArrivalDateTime` nor `carrierAppointmentWindow` is accepted and simply has no effect.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer, required: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string, required: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string, required: project44's identifier for the stop, when you have it.
    - object
      - `extensions` object: Optional carrier-specific extension fields.
      - `identifiers` union: Identifiers carried with the tracking update. Two kinds are supported. Shipment-resolving identifiers (`billOfLadingNumber`, `orderNumber`) determine which shipment the update applies to, and at least one of them is required. Carrier identifiers (`scac`, `dotNumber`, `mcNumber`) are optional and identify the subject carrier the tracking data is about; supply one when you are pushing On-Behalf-Of another carrier, i.e. when the carrier making the call is not the carrier the data belongs to. Carrier identifiers never satisfy the shipment-resolution requirement. On-Behalf-Of push must be enabled for your account by project44 in advance.
        - object
          - `billOfLadingNumber` string, required
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string
          - `scac` string
        - object
          - `billOfLadingNumber` string
          - `dotNumber` string
          - `mcNumber` string
          - `orderNumber` string, required
          - `scac` string
      - `readings` union: A timestamped set of readings. At least one of position or sensor is required.
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition, required: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
        - object
          - `dateTime` string, date-time: ISO 8601 date-time for the readings (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
          - `position` UniversalTrackingUpdatePosition: GPS position.
            - `altitude` number
            - `heading` number
            - `latitude` number
            - `longitude` number
            - `speed` number
            - `speedUnit` 'KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR': The unit that `speed` is expressed in. Send it alongside `speed` so the value can be interpreted correctly.
          - `sensor` TruckloadTrackingUpdateSensorInfo, required: Truckload telematics/sensor readings.
            - `ambientTemperature` TruckloadTrackingUpdateAmbientTemperature: Ambient (outside-the-zone) temperature reading.
              - …
            - `fuel` TruckloadTrackingUpdateFuelSensor
              - …
            - `ignitionStatus` 'ON' | 'OFF' | 'UNKNOWN': Ignition state of the tracked unit at the time of the reading. Send `UNKNOWN` when the telematics device does not report ignition.
            - `reefer` TruckloadTrackingUpdateReeferSensor: Reefer unit status and operational metrics (temperatures live on zones[]).
              - …
            - `shock` TruckloadTrackingUpdateShockReading
              - …
            - `tirePressure` TruckloadTrackingUpdateTirePressure[]
              - …
            - `vibration` TruckloadTrackingUpdateVibrationReading
              - …
            - `zones` TruckloadTrackingUpdateTemperatureZone[]: Per-temperature-zone readings (single-zone units send ZONE1).
              - …
      - `shipmentEvent` TruckloadTrackingUpdateEvent: A shipment tracking event (milestone). `type` and `dateTime` are required; stop identifiers are optional.
        - `dateTime` string, date-time: ISO 8601 date-time of the event (for example `2026-06-01T08:30:00Z`). Must not be more than 5 minutes in the future.
        - `description` string
        - `exceptionCode` string
        - `extensions` object
        - `stopNumber` integer: 1-based stop sequence number the event applies to.
        - `stopReferenceId` string: Carrier's reference id for the stop.
        - `stopId` string: project44 stop id, if known.
        - `source` 'UNKNOWN' | 'CARRIER' | 'CONTRACT'
        - `type` 'UNKNOWN' | 'TRACKING_INITIATE' | 'TRACKING_START' | 'ARRIVAL_AT_STOP' | 'DEPARTURE_FROM_STOP' | 'LOAD_ONTO_VEHICLE' | 'UNLOAD_FROM_VEHICLE' | 'TRACKING_END_DUE_TO_TIMEOUT' | 'TRACKING_END_BY_USER' | 'TRACKING_COMPLETE' | 'GATE_IN' | 'GATE_OUT' | 'FLIGHT_BOOKING' | 'MANIFEST' | 'RECEIVE_FROM_SHIPPER' | 'CONSIGNEE_NOTIFY' | 'DELIVERY' | 'WARNING' | 'EXCEPTION' | 'TRACKING_STOP' | 'EXCEPTION_LATE_DEPARTURE' | 'EXCEPTION_MISSED_CONNECTION' | 'GATE_IN_FULL' | 'GATE_IN_EMPTY' | 'GATE_OUT_EMPTY' | 'GATE_OUT_FULL' | 'LOAD' | 'DISCHARGE' | 'EXCEPTION_DELAYED' | 'EXCEPTION_DELIVERY_MISSED' | 'EXCEPTION_HELD' | 'EXCEPTION_PICKUP_MISSED' | 'AVAILABLE' | 'ENTERED_GEOFENCE' | 'EXITED_GEOFENCE' | 'INFO' | 'OUT_FOR_DELIVERY' | 'PICKED_UP' | 'RETURN_TO_SENDER' | 'TRACKING_FAILED' | 'UNAUTHORIZED' | 'PICKUP_MISSED' | 'SURVEY' | 'HELD' | 'CLEAN_TRUCK_FEE_CLEARANCE' | 'CLEAN_TRUCK_FEE_HOLD' | 'OTHER_HOLD' | 'OTHER_HOLD_CLEARANCE' | 'TERMINAL_CLEARANCE' | 'TERMINAL_HOLD' | 'TRAFFIC_MITIGATION_FEE_CLEARANCE' | 'TRAFFIC_MITIGATION_FEE_HOLD' | 'RELEASE' | 'DELAYED' | 'DELIVERY_MISSED' | 'ENTERED_INNER_GEOFENCE' | 'EXITED_INNER_GEOFENCE' | 'ENTERED_OUTER_GEOFENCE' | 'EXITED_OUTER_GEOFENCE' | 'ENTERED_FINAL_GEOFENCE' | 'EXITED_FINAL_GEOFENCE' | 'IDLE' | 'DRIVER_DENY_TRACKING' | 'UNKNOWN_EQUIPMENT_IDENTIFIER' | 'MISSING_EQUIPMENT_IDENTIFIER' | 'DISPATCH' | 'CUSTOMS_HOLD' | 'CUSTOMS_CLEARANCE' | 'CUSTOMS_DOCS_FILING' | 'CUSTOMS_TRANSIT_DOCS_ISSUED' | 'CUSTOMS_TRANSIT_DOCS_CLOSED' | 'CARRIER_HOLD' | 'RECEIVE_FROM_CARRIER' | 'ISSUE_FREIGHT_BILL' | 'FREIGHT_ON_HAND' | 'READY_FOR_CARRIAGE' | 'LAST_FREE_DAY' | 'MISSING_CARRIER' | 'STUFF' | 'STRIP' | 'SEAL_INSPECTION' | 'SEAL_REMOVAL' | 'SEAL_RESEAL' | 'HANDOVER' | 'DOCUMENT_ADD' | 'DOCUMENT_REMOVE' | 'REMOVE_FROM_BOOKING' | 'COST_UPDATE' | 'SHARING_STOPPED' | 'ROLLED_OVER' | 'BAD_ORDER' | 'BAD_ORDER_RELEASE' | 'ARRIVED_AT_TERMINAL' | 'DEPARTED_TERMINAL': The shipment event type. Accepts project44's standard shipment event types plus the truckload terminal events ARRIVED_AT_TERMINAL and DEPARTED_TERMINAL. Only a subset produces a status milestone on the shipment (ARRIVAL_AT_STOP, DEPARTURE_FROM_STOP, LOAD_ONTO_VEHICLE, UNLOAD_FROM_VEHICLE, DELIVERY, GATE_IN, GATE_OUT, ARRIVED_AT_TERMINAL, DEPARTED_TERMINAL); other values are accepted and stored but do not change the shipment's status.
      - `stops` TruckloadTrackingStopUpdate[], required: Updates to stops that already exist on the shipment, such as a carrier ETA or a dock appointment window.
        - union: An update to a stop that already exists on the shipment. Identify the stop, then supply the values to set. project44 never creates, removes or reorders stops from this array. Always send at least one value to set - an entry that identifies a stop but carries neither `carrierEstimatedArrivalDateTime` nor `carrierAppointmentWindow` is accepted and simply has no effect.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer, required: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string, required: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string: project44's identifier for the stop, when you have it.
          - object
            - `carrierEstimatedArrivalDateTime` string, date-time: Your estimated time of arrival at this stop, as an ISO 8601 date-time that includes a UTC offset or the `Z` designator, for example `2026-06-01T14:30:00-05:00`. An ETA is an instant in time, so the offset is required.
            - `carrierAppointmentWindow` ZonedDateTimeWindow: A date and time range, including a time zone, representing a window of availability.
              - …
            - `stopNumber` integer: The position of the stop on the shipment, starting at 1. The most reliable way to identify a stop.
            - `stopReferenceId` string: Carrier's reference id for the stop.
            - `stopType` 'PICKUP' | 'DELIVERY': The type of the stop. Use only when the shipment has exactly one stop of this type; otherwise the update may be applied to the wrong stop.
            - `stopId` string, required: project44's identifier for the stop, when you have it.

## Response `202`

Accepted. The payload passed synchronous validation and was queued for asynchronous processing.

- UniversalTrackingUpdateAccepted: 202 acknowledgement body.
  - `ingestionId` string: The id assigned to the accepted ingestion, for support/tracing.

## Other responses

- `400`: Bad Request. The payload failed synchronous schema validation; the event was not accepted. `errors[]` lists each violation with a machine-readable `diagnostic` and a JSON-path `message`.
- `401`: Unauthorized. Missing or invalid credentials.
- `403`: Forbidden. Your credentials are not authorized to push for this tenant.
- `404`: Not Found. The requested resource does not exist.
- `413`: Payload Too Large. The request body exceeds the 1 MB limit.

---

[API](https://skmtc.dev/project44/apis/project44-rest-api.md) - [All operations](https://skmtc.dev/project44/apis/project44-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/project44/apis/project44-rest-api/revisions/cdf9675e2294?raw)
