project44 Shipments API

Shipment tracking and management

OpenAPI Specification

project44-shipments-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: project44 Tracking Shipments API
  description: project44 Tracking API provides real-time shipment tracking and visibility for multimodal freight including truckload (TL), LTL, ocean, rail, air, and parcel. APIs deliver shipment status updates, predictive ETAs, and exception alerts.
  version: 2.0.0
  contact:
    name: project44 Support
    url: https://support.project44.com
  license:
    name: project44 Terms of Service
    url: https://www.project44.com/legal/
servers:
- url: https://api.project44.com/api/v4
  description: project44 Production API
security:
- oauth2: []
tags:
- name: Shipments
  description: Shipment tracking and management
paths:
  /shipments:
    post:
      operationId: createShipment
      summary: Create a tracked shipment
      description: Creates a new shipment to track, associating it with carrier and identifier information.
      tags:
      - Shipments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShipmentCreate'
      responses:
        '201':
          description: Shipment created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shipment'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    get:
      operationId: listShipments
      summary: List tracked shipments
      description: Returns a paginated list of tracked shipments with current status.
      tags:
      - Shipments
      parameters:
      - name: status
        in: query
        description: Filter by shipment lifecycle status
        schema:
          type: string
          enum:
          - AT_STOP
          - IN_TRANSIT
          - COMPLETED
          - EXCEPTION
          - UNKNOWN
      - name: mode
        in: query
        description: Transportation mode filter
        schema:
          type: string
          enum:
          - TL
          - LTL
          - OCEAN
          - AIR
          - RAIL
          - PARCEL
          - DRAY
      - name: carrierId
        in: query
        description: Carrier SCAC code or project44 carrier ID
        schema:
          type: string
      - name: updatedSince
        in: query
        description: Return shipments updated after this ISO 8601 timestamp
        schema:
          type: string
          format: date-time
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      - name: pageSize
        in: query
        schema:
          type: integer
          default: 50
          maximum: 200
      responses:
        '200':
          description: Shipment list
          content:
            application/json:
              schema:
                type: object
                properties:
                  shipments:
                    type: array
                    items:
                      $ref: '#/components/schemas/Shipment'
                  pageInfo:
                    $ref: '#/components/schemas/PageInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shipments/{shipmentId}:
    get:
      operationId: getShipment
      summary: Get a shipment
      description: Returns current status, position, ETA, and event history for a shipment.
      tags:
      - Shipments
      parameters:
      - $ref: '#/components/parameters/ShipmentId'
      responses:
        '200':
          description: Shipment details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShipmentDetail'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteShipment
      summary: Stop tracking a shipment
      description: Removes a shipment from active tracking.
      tags:
      - Shipments
      parameters:
      - $ref: '#/components/parameters/ShipmentId'
      responses:
        '204':
          description: Shipment deleted
components:
  schemas:
    ShipmentStopInput:
      type: object
      required:
      - stopNumber
      - stopType
      properties:
        stopNumber:
          type: integer
        stopType:
          type: string
          enum:
          - ORIGIN
          - DESTINATION
          - INTERMEDIATE
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
        country:
          type: string
          maxLength: 3
        appointmentWindow:
          $ref: '#/components/schemas/TimeWindow'
    PageInfo:
      type: object
      properties:
        page:
          type: integer
        pageSize:
          type: integer
        totalCount:
          type: integer
        hasNextPage:
          type: boolean
    Shipment:
      type: object
      description: A tracked freight shipment
      properties:
        id:
          type: string
          format: uuid
          description: project44 internal shipment ID
        masterShipmentId:
          type: string
          description: Unique master shipment ID across modes
        mode:
          type: string
          enum:
          - TL
          - LTL
          - OCEAN
          - AIR
          - RAIL
          - PARCEL
          - DRAY
        status:
          type: string
          enum:
          - AT_STOP
          - IN_TRANSIT
          - COMPLETED
          - EXCEPTION
          - UNKNOWN
        carrierCode:
          type: string
          description: Carrier SCAC code
        carrierName:
          type: string
        proNumber:
          type: string
          description: PRO/tracking number
        bolNumber:
          type: string
          description: Bill of lading number
        poNumber:
          type: string
          description: Purchase order number
        origin:
          $ref: '#/components/schemas/ShipmentStop'
        destination:
          $ref: '#/components/schemas/ShipmentStop'
        estimatedDelivery:
          $ref: '#/components/schemas/ETAWindow'
        currentPosition:
          $ref: '#/components/schemas/Position'
        exceptions:
          type: array
          items:
            $ref: '#/components/schemas/ShipmentException'
        createDatetime:
          type: string
          format: date-time
        lastUpdateDatetime:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        details:
          type: array
          items:
            type: object
    ShipmentDetail:
      allOf:
      - $ref: '#/components/schemas/Shipment'
      - type: object
        properties:
          stops:
            type: array
            items:
              $ref: '#/components/schemas/ShipmentStop'
          statusUpdates:
            type: array
            items:
              $ref: '#/components/schemas/StatusUpdate'
    ShipmentCreate:
      type: object
      required:
      - mode
      - carrierCode
      - identifiers
      properties:
        mode:
          type: string
          enum:
          - TL
          - LTL
          - OCEAN
          - AIR
          - RAIL
          - PARCEL
          - DRAY
        carrierCode:
          type: string
          description: SCAC code
        identifiers:
          type: array
          description: At least one tracking identifier required
          items:
            type: object
            required:
            - type
            - value
            properties:
              type:
                type: string
                enum:
                - PRO
                - BOL
                - PO
                - TRACKING_NUMBER
                - CONTAINER_NUMBER
                - BOOKING_NUMBER
              value:
                type: string
        stops:
          type: array
          items:
            $ref: '#/components/schemas/ShipmentStopInput'
    ETAWindow:
      type: object
      properties:
        estimatedAt:
          type: string
          format: date-time
        confidenceLow:
          type: string
          format: date-time
        confidenceHigh:
          type: string
          format: date-time
        predictedOnTime:
          type: boolean
        predictedLateMinutes:
          type: integer
          nullable: true
    ShipmentStop:
      type: object
      properties:
        stopNumber:
          type: integer
        stopType:
          type: string
          enum:
          - ORIGIN
          - DESTINATION
          - INTERMEDIATE
        name:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
        country:
          type: string
          maxLength: 3
        latitude:
          type: number
          format: double
        longitude:
          type: number
          format: double
        appointmentWindow:
          $ref: '#/components/schemas/TimeWindow'
        actualArrival:
          type: string
          format: date-time
          nullable: true
        actualDeparture:
          type: string
          format: date-time
          nullable: true
    StatusUpdate:
      type: object
      properties:
        updateId:
          type: string
        timestamp:
          type: string
          format: date-time
        statusCode:
          type: string
        statusDescription:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
          maxLength: 3
        isException:
          type: boolean
        exceptionCode:
          type: string
          nullable: true
        source:
          type: string
          enum:
          - CARRIER_EDI
          - CARRIER_API
          - TELEMATICS
          - MANUAL
    ShipmentException:
      type: object
      properties:
        exceptionCode:
          type: string
        description:
          type: string
        severity:
          type: string
          enum:
          - LOW
          - MEDIUM
          - HIGH
          - CRITICAL
        timestamp:
          type: string
          format: date-time
        resolvedAt:
          type: string
          format: date-time
          nullable: true
    TimeWindow:
      type: object
      properties:
        startDateTime:
          type: string
          format: date-time
        endDateTime:
          type: string
          format: date-time
    Position:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        latitude:
          type: number
          format: double
        longitude:
          type: number
          format: double
        heading:
          type: number
          format: double
          nullable: true
        speed:
          type: number
          format: double
          nullable: true
        speedUnit:
          type: string
          enum:
          - MPH
          - KPH
  responses:
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    ShipmentId:
      name: shipmentId
      in: path
      required: true
      description: project44 shipment identifier
      schema:
        type: string
        format: uuid
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.project44.com/api/v4/oauth2/token
          scopes:
            tracking.read: Read shipment tracking data
            tracking.write: Create and manage shipments
            webhooks.write: Manage webhook subscriptions