project44 Webhooks API
The project44 Webhooks API delivers real-time event notifications for shipments, inventory, orders, and loads, allowing customers to subscribe to lifecycle events and react to status changes asynchronously.
The project44 Webhooks API delivers real-time event notifications for shipments, inventory, orders, and loads, allowing customers to subscribe to lifecycle events and react to status changes asynchronously.
asyncapi: 2.6.0
info:
title: project44 Shipment Events API
version: 2.0.0
description: >-
project44 publishes real-time freight visibility events via webhooks.
Events include shipment status updates, position changes, ETA revisions,
and exception alerts across TL, LTL, ocean, air, and parcel modes.
contact:
name: project44 Support
url: https://support.project44.com
license:
name: project44 Terms of Service
url: https://www.project44.com/legal/
servers:
project44-webhook:
url: https://your-endpoint.example.com/webhooks/project44
protocol: https
description: >-
Customer-provided HTTPS endpoint to receive project44 webhook events.
Register via the project44 Webhooks API.
defaultContentType: application/json
channels:
shipment/status-updated:
description: Event published when a shipment status changes
subscribe:
operationId: onShipmentStatusUpdated
summary: Shipment status updated event
description: >-
Triggered when a new status update is received for a tracked shipment
from carrier EDI, carrier API, or telematics providers.
tags:
- name: Shipments
message:
$ref: '#/components/messages/ShipmentStatusUpdatedEvent'
shipment/position-updated:
description: Event published when a shipment GPS position is updated
subscribe:
operationId: onShipmentPositionUpdated
summary: Shipment position updated event
description: Triggered periodically when a new GPS position is received from a telematics provider.
tags:
- name: Tracking
message:
$ref: '#/components/messages/ShipmentPositionUpdatedEvent'
shipment/eta-changed:
description: Event published when the predicted delivery ETA changes
subscribe:
operationId: onShipmentEtaChanged
summary: Shipment ETA changed event
description: >-
Triggered when the machine-learning ETA prediction changes significantly
(typically by more than 30 minutes from previous prediction).
tags:
- name: ETA
message:
$ref: '#/components/messages/ShipmentEtaChangedEvent'
shipment/exception:
description: Event published when a shipment exception is detected
subscribe:
operationId: onShipmentException
summary: Shipment exception event
description: >-
Triggered when a delay, missed stop, delivery attempt failure, or other
exception condition is detected on the shipment.
tags:
- name: Shipments
message:
$ref: '#/components/messages/ShipmentExceptionEvent'
shipment/completed:
description: Event published when a shipment delivery is confirmed
subscribe:
operationId: onShipmentCompleted
summary: Shipment completed (delivered) event
description: Triggered when the shipment is confirmed as delivered.
tags:
- name: Shipments
message:
$ref: '#/components/messages/ShipmentCompletedEvent'
components:
messages:
ShipmentStatusUpdatedEvent:
name: ShipmentStatusUpdated
title: Shipment Status Updated
contentType: application/json
headers:
type: object
properties:
x-p44-event-id:
type: string
format: uuid
x-p44-event-type:
type: string
const: shipment.status-updated
x-p44-signature:
type: string
description: HMAC-SHA256 signature for payload verification
payload:
$ref: '#/components/schemas/ShipmentStatusUpdatedPayload'
ShipmentPositionUpdatedEvent:
name: ShipmentPositionUpdated
title: Shipment Position Updated
contentType: application/json
payload:
$ref: '#/components/schemas/ShipmentPositionUpdatedPayload'
ShipmentEtaChangedEvent:
name: ShipmentEtaChanged
title: Shipment ETA Changed
contentType: application/json
payload:
$ref: '#/components/schemas/ShipmentEtaChangedPayload'
ShipmentExceptionEvent:
name: ShipmentException
title: Shipment Exception Detected
contentType: application/json
payload:
$ref: '#/components/schemas/ShipmentExceptionPayload'
ShipmentCompletedEvent:
name: ShipmentCompleted
title: Shipment Delivered
contentType: application/json
payload:
$ref: '#/components/schemas/ShipmentCompletedPayload'
schemas:
ShipmentStatusUpdatedPayload:
type: object
required:
- eventId
- eventTimestamp
- shipmentId
- statusCode
properties:
eventId:
type: string
format: uuid
eventTimestamp:
type: string
format: date-time
shipmentId:
type: string
format: uuid
masterShipmentId:
type: string
mode:
type: string
enum: [TL, LTL, OCEAN, AIR, RAIL, PARCEL, DRAY]
carrierCode:
type: string
proNumber:
type: string
statusCode:
type: string
statusDescription:
type: string
statusTimestamp:
type: string
format: date-time
city:
type: string
state:
type: string
country:
type: string
maxLength: 3
source:
type: string
enum: [CARRIER_EDI, CARRIER_API, TELEMATICS, MANUAL]
ShipmentPositionUpdatedPayload:
type: object
required:
- eventId
- eventTimestamp
- shipmentId
- position
properties:
eventId:
type: string
format: uuid
eventTimestamp:
type: string
format: date-time
shipmentId:
type: string
format: uuid
masterShipmentId:
type: string
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]
ShipmentEtaChangedPayload:
type: object
required:
- eventId
- eventTimestamp
- shipmentId
- previousEta
- newEta
properties:
eventId:
type: string
format: uuid
eventTimestamp:
type: string
format: date-time
shipmentId:
type: string
format: uuid
masterShipmentId:
type: string
previousEta:
type: string
format: date-time
newEta:
type: string
format: date-time
deltaMinutes:
type: integer
description: Change in ETA in minutes (positive = later, negative = earlier)
predictedOnTime:
type: boolean
ShipmentExceptionPayload:
type: object
required:
- eventId
- eventTimestamp
- shipmentId
- exceptionCode
properties:
eventId:
type: string
format: uuid
eventTimestamp:
type: string
format: date-time
shipmentId:
type: string
format: uuid
masterShipmentId:
type: string
exceptionCode:
type: string
description:
type: string
severity:
type: string
enum: [LOW, MEDIUM, HIGH, CRITICAL]
estimatedImpactMinutes:
type: integer
nullable: true
ShipmentCompletedPayload:
type: object
required:
- eventId
- eventTimestamp
- shipmentId
- deliveryDatetime
properties:
eventId:
type: string
format: uuid
eventTimestamp:
type: string
format: date-time
shipmentId:
type: string
format: uuid
masterShipmentId:
type: string
deliveryDatetime:
type: string
format: date-time
signedBy:
type: string
nullable: true
podAvailable:
type: boolean
description: Whether proof-of-delivery document is available