> ## Documentation Index
> Fetch the complete documentation index at: https://docs.catenatelematics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 🧪 Get Load Tracking

> Retrieve the vehicle carrying a load you posted and where it last reported. If you sent `vehicle` identifiers when you posted or edited the load, the vehicle is the best match for them (`source` is `declared`). If you sent none, it is the vehicle best matched from location data, provided the match is strong enough (`source` is `inferred`). For a declared vehicle, `agreement` says whether the vehicles matched from location data back it up. `last_position` is the last position that vehicle reported, and `tracking_health` says how far to trust it. Only vehicles in fleets that share vehicle data with you are returned, and positions only where the fleet also shares location data. Inferred vehicles need location data to be shared. Each load also lists its `stops` in travel order. Each stop carries the estimated arrival and departure you posted, if any. Actual arrival and departure times are not recorded yet, so they are always null.

<Callout icon="vial" color="#FFC107" iconType="solid"><strong>Provisional endpoint</strong><br />This endpoint is available for early access. The core schema is stable, but minor details — such as field names or added fields — may change before it becomes generally available. Backward compatibility is not guaranteed.<br /><br /><em>See <a href="/api-reference/stability-versioning">API Stability & Versioning</a> for details on provisional endpoints.</em></Callout>


## OpenAPI

````yaml https://api.catenatelematics.com/v2/intelligence/openapi.json get /v2/visibility/loads/{load_id}/tracking
openapi: 3.1.0
info:
  title: Telematics Intelligence Service - REST API
  description: Telematics Intelligence Service REST API.
  version: 0.1.0
servers:
  - url: https://api.catenatelematics.com
    description: Catena Intelligence API
security: []
tags:
  - name: Analytics
    description: >-
      Endpoints providing analytical insights and aggregated data for vehicles,
      fleets, drivers, and trailers.
  - name: Benchmarks
    description: >-
      Endpoints providing cross-fleet benchmark data. A vehicle's metrics are
      ranked against a cohort of peer vehicles drawn from the full Catena fleet
      population. Cohort statistics are k-anonymised: percentile and cohort
      counts are suppressed when the cohort covers too few distinct fleets to
      protect individual fleet privacy.
  - name: Visibility
    description: >-
      Post load context, including planned locations, times, and the carrier,
      vehicle and driver.
paths:
  /v2/visibility/loads/{load_id}/tracking:
    get:
      tags:
        - Visibility
      summary: Get tracking for a load
      description: >-
        Retrieve the vehicle carrying a load you posted and where it last
        reported. If you sent `vehicle` identifiers when you posted or edited
        the load, the vehicle is the best match for them (`source` is
        `declared`). If you sent none, it is the vehicle best matched from
        location data, provided the match is strong enough (`source` is
        `inferred`). For a declared vehicle, `agreement` says whether the
        vehicles matched from location data back it up. `last_position` is the
        last position that vehicle reported, and `tracking_health` says how far
        to trust it. Only vehicles in fleets that share vehicle data with you
        are returned, and positions only where the fleet also shares location
        data. Inferred vehicles need location data to be shared. Each load also
        lists its `stops` in travel order. Each stop carries the estimated
        arrival and departure you posted, if any. Actual arrival and departure
        times are not recorded yet, so they are always null.
      operationId: get_load_tracking
      parameters:
        - name: load_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Load Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoadTrackingRead'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
          description: Not Found
        '405':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowed'
          description: Method Not Allowed
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntity'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequests'
          description: Too Many Requests
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal Server Error
        '501':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotImplementedResponse'
          description: Not Implemented
      security:
        - Bearer:
            - telematics:read
components:
  schemas:
    LoadTrackingRead:
      properties:
        load_id:
          type: string
          format: uuid
          title: Load Id
          description: Catena identifier of the load.
        load_ref:
          type: string
          title: Load Ref
          description: Your reference for the load, as posted.
        tracking_health:
          $ref: '#/components/schemas/TrackingHealthEnum'
          description: >-
            How far to trust `last_position`. See the values for what each
            means.
          default: unknown
        vehicle_assignment:
          anyOf:
            - $ref: '#/components/schemas/LoadTrackingVehicleAssignmentRead'
            - type: 'null'
          description: >-
            The vehicle carrying the load. If you sent vehicle identifiers, the
            best vehicle they matched, or null when none matched a vehicle you
            can see. If you sent none, the best vehicle matched from location
            data, or null when no vehicle has been seen at the origin yet, none
            matched well enough, or none is in a fleet that shares vehicle and
            location data with you.
        last_position:
          anyOf:
            - $ref: '#/components/schemas/LoadTrackingPositionRead'
            - type: 'null'
          description: >-
            The last position the assigned vehicle reported, however long ago.
            Null when there is no `vehicle_assignment`, the vehicle has not
            reported a position, or the vehicle's fleet does not share location
            data with you.
        stops:
          items:
            $ref: '#/components/schemas/LoadTrackingStopRead'
          type: array
          title: Stops
          description: >-
            The load's stops in travel order, origin first and destination last.
            Each is meant to say when the vehicle is expected to arrive and
            leave (as you posted them) and when it actually did, but actual
            times are not recorded yet.
      type: object
      required:
        - load_id
        - load_ref
        - tracking_health
        - vehicle_assignment
        - last_position
        - stops
      title: LoadTrackingRead
      description: Where a load stands right now.
    BadRequest:
      properties:
        code:
          type: integer
          title: Code
          default: 400
        message:
          type: string
          title: Message
          default: Bad Request
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: BadRequest
    Unauthorized:
      properties:
        code:
          type: integer
          title: Code
          default: 401
        message:
          type: string
          title: Message
          default: Unauthorized
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: Unauthorized
    Forbidden:
      properties:
        code:
          type: integer
          title: Code
          default: 403
        message:
          type: string
          title: Message
          default: Forbidden
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: Forbidden
    NotFound:
      properties:
        code:
          type: integer
          title: Code
          default: 404
        message:
          type: string
          title: Message
          default: Not Found
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: NotFound
    MethodNotAllowed:
      properties:
        code:
          type: integer
          title: Code
          default: 405
        message:
          type: string
          title: Message
          default: Method Not Allowed
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: MethodNotAllowed
    Conflict:
      properties:
        code:
          type: integer
          title: Code
          default: 409
        message:
          type: string
          title: Message
          default: Conflict
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: Conflict
    UnprocessableEntity:
      properties:
        code:
          type: integer
          title: Code
          default: 422
        message:
          type: string
          title: Message
          default: Invalid Request Body
        detail:
          anyOf:
            - items:
                $ref: '#/components/schemas/ValidationErrorDetail'
              type: array
            - type: 'null'
          title: Detail
      type: object
      title: UnprocessableEntity
    TooManyRequests:
      properties:
        code:
          type: integer
          title: Code
          default: 429
        message:
          type: string
          title: Message
          default: Too Many Requests
        detail:
          anyOf:
            - $ref: '#/components/schemas/RetryAfterDetail'
            - type: 'null'
      type: object
      title: TooManyRequests
    InternalServerError:
      properties:
        message:
          type: string
          title: Message
          default: Internal Server Error
      type: object
      title: InternalServerError
    NotImplementedResponse:
      properties:
        code:
          type: integer
          title: Code
          default: 501
        message:
          type: string
          title: Message
          default: Not Implemented
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
      type: object
      title: NotImplementedResponse
    TrackingHealthEnum:
      type: string
      enum:
        - live
        - stale
        - no_signal
        - not_shared
        - unassigned
        - unknown
      title: TrackingHealthEnum
      description: >-
        How far to trust a load's last position.


        - `live`: a vehicle is assigned and reported recently.

        - `stale`: a vehicle is assigned, but its last position is old.

        - `no_signal`: a vehicle is assigned and you can read its location data,
        but it has never reported a position.

        - `not_shared`: a vehicle is assigned, but its fleet shares vehicle data
        with you and not location data.

        - `unassigned`: no vehicle qualifies, so see `vehicle_assignment`.

        - `unknown`: a vehicle is assigned, but we couldn't work out how far to
        trust its position.


        What counts as recent is provisional and may change, and more values may
        be added, so tolerate values you don't

        recognise.
    LoadTrackingVehicleAssignmentRead:
      properties:
        source:
          type: string
          enum:
            - declared
            - inferred
          title: Source
          description: >-
            How the vehicle was assigned to the load. `declared` means it
            matched the vehicle identifiers you sent when you posted the load.
            `inferred` means you sent none, and the vehicle was matched from
            location data. More sources may be added, so tolerate values you
            don't recognise.
        agreement:
          anyOf:
            - type: string
              enum:
                - agree
                - disagree
            - type: 'null'
          title: Agreement
          description: >-
            For a `declared` vehicle, whether the vehicles we independently
            matched from location data back it up. `agree`: the vehicle is among
            the strong matches. `disagree`: there are strong matches and it is
            not one of them, so another vehicle looks likelier. Null when we
            can't tell: no strong match yet or at all, the vehicle's fleet isn't
            covered by location matching, or you can't read its location data.
            Always null for `inferred` vehicles. What counts as a strong match
            is deliberately conservative and may change, and more values may be
            added, so tolerate values you don't recognise.
        vehicle:
          $ref: '#/components/schemas/VehicleEmbeddedRead'
          description: >-
            The vehicle, including its Catena identifier as `vehicle.id`, its
            VIN and its license plate.
      type: object
      required:
        - source
        - agreement
        - vehicle
      title: LoadTrackingVehicleAssignmentRead
      description: The vehicle tracking the load, and how it was assigned.
    LoadTrackingPositionRead:
      properties:
        latitude:
          type: number
          title: Latitude
          description: Latitude in decimal degrees (WGS 84).
        longitude:
          type: number
          title: Longitude
          description: Longitude in decimal degrees (WGS 84).
        occurred_at:
          type: string
          format: date-time
          title: Occurred At
          description: When the vehicle reported this position (UTC).
      type: object
      required:
        - latitude
        - longitude
        - occurred_at
      title: LoadTrackingPositionRead
      description: The last position the vehicle reported.
    LoadTrackingStopRead:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Catena identifier of the stop.
        sequence:
          type: integer
          title: Sequence
          description: >-
            Position in the journey, starting at 0. 0 is the origin and the
            highest is the destination.
        stop_type:
          anyOf:
            - $ref: '#/components/schemas/LoadStopTypeEnum'
            - type: 'null'
          description: >-
            Whether the stop is the origin, the destination or an intermediate
            stop. Null when the stop was never classified.
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: Your own label for the stop, as posted.
        estimated_arrival_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Estimated Arrival At
          description: >-
            When the vehicle is expected to arrive at the stop (UTC). Null when
            none was sent.
        estimated_departure_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Estimated Departure At
          description: >-
            When the vehicle is expected to leave the stop (UTC). Null when none
            was sent.
        arrived_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Arrived At
          description: >-
            When the vehicle arrived at the stop (UTC). Null until it has, and
            not recorded yet, so always null for now.
        departed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Departed At
          description: >-
            When the vehicle left the stop (UTC). Null until it has, and not
            recorded yet, so always null for now.
      type: object
      required:
        - id
        - sequence
        - stop_type
        - name
        - estimated_arrival_at
        - estimated_departure_at
        - arrived_at
        - departed_at
      title: LoadTrackingStopRead
      description: A stop on the load's journey, and when the vehicle reached and left it.
    ValidationErrorDetail:
      properties:
        path:
          type: string
          title: Path
        input:
          type: string
          title: Input
        message:
          type: string
          title: Message
        error_type:
          type: string
          title: Error Type
      type: object
      required:
        - path
        - input
        - message
        - error_type
      title: ValidationErrorDetail
    RetryAfterDetail:
      properties:
        retry_after_seconds:
          type: integer
          title: Retry After Seconds
        message:
          type: string
          title: Message
      type: object
      required:
        - retry_after_seconds
        - message
      title: RetryAfterDetail
    VehicleEmbeddedRead:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Unique identifier of the record at Catena Telematics.
        vehicle_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Vehicle Name
          description: Display name or unit number for the vehicle.
        oem:
          anyOf:
            - type: string
            - type: 'null'
          title: Oem
          description: Manufacturer (OEM) of the vehicle.
        model_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Model Type
          description: >-
            Manufacturer model or type designation (e.g., 'Class 8 Tractor',
            'Pickup').
        model_year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Model Year
          description: Model year (four-digit, e.g., 2022).
        vin:
          anyOf:
            - type: string
            - type: 'null'
          title: Vin
          description: >-
            Vehicle Identification Number (VIN), typically 17 characters; if
            available.
        license_plate_region:
          anyOf:
            - type: string
            - type: 'null'
          title: License Plate Region
          description: Plate region/subdivision (state/province code, e.g., 'CA', 'ON').
        license_plate_country:
          anyOf:
            - type: string
            - type: 'null'
          title: License Plate Country
          description: Plate country code (ISO-3166-1 alpha-3, e.g., 'USA', 'CAN').
        license_plate_number:
          anyOf:
            - type: string
            - type: 'null'
          title: License Plate Number
          description: License plate number (e.g., 'HMT-3570').
        is_active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Active
          description: Indicates whether the vehicle is currently active/in service.
        status:
          anyOf:
            - type: string
            - type: 'null'
          title: Status
          description: >-
            Operational status label (e.g., 'IN_SERVICE', 'OUT_OF_SERVICE',
            'MAINTENANCE').
        eld_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Eld Id
          description: >-
            Telematics/ELD device identifier associated with this vehicle, if
            any.
        eld_serial_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Eld Serial Number
          description: Telematics/ELD device serial number, if any.
        source_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Id
          description: Unique identifier of the record in the TSP.
        external_id:
          anyOf:
            - type: string
            - type: 'null'
          title: External Id
          description: >-
            External vehicle identifier as known in the TSP or customer's
            system.
      type: object
      required:
        - id
      title: VehicleEmbeddedRead
      description: Lightweight vehicle snapshot embedded in other API responses.
    LoadStopTypeEnum:
      type: string
      enum:
        - origin
        - intermediate
        - destination
        - fuel
        - rest
      title: LoadStopTypeEnum
      description: The role a stop plays on a load's journey.
  securitySchemes:
    Bearer:
      type: oauth2
      flows:
        clientCredentials:
          refreshUrl: >-
            https://auth.catenatelematics.com/realms/catena/protocol/openid-connect/token
          scopes: {}
          tokenUrl: >-
            https://auth.catenatelematics.com/realms/catena/protocol/openid-connect/token
        authorizationCode:
          refreshUrl: >-
            https://auth.catenatelematics.com/realms/catena/protocol/openid-connect/token
          scopes: {}
          authorizationUrl: >-
            https://auth.catenatelematics.com/realms/catena/protocol/openid-connect/auth
          tokenUrl: >-
            https://auth.catenatelematics.com/realms/catena/protocol/openid-connect/token

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.