Shipment
Sample payloads for every shipment webhook event.
Shipment webhooks come in three shapes. Which one you get depends on the event.
shipment.updated, shipment.in-transit, shipment.delivered, shipment.cancelled, shipment.returned, shipment.awaiting-clearance, shipment.pending-cancellation
A lean tracking snapshot.
shipment.created
A fuller shipment object.
shipment.customs_event
A small customs-delay object.
Status events
These carry a tracking snapshot, not the whole shipment. Addresses and the parcel appear as ids, not embedded objects — call Get Shipment if you need the full record.
All seven status events share this shape; only status, sub_statuses, events and the delivery_* flags differ.
shipment.delivered
{
"event": "shipment.delivered",
"data": {
"shipment_id": "SH-40208776515",
"user": "USER-27450202164",
"status": "delivered",
"sub_statuses": [],
"rate": "RT-64093387231",
"carrier": "CA-85479996273",
"tracking_number": "7412089553",
"events": [
{
"status": "confirmed",
"description": "Shipment arranged successfully by User.",
"location": "Lagos, NG",
"created_at": "2026-09-15T09:02:11.903Z"
},
{
"status": "in-transit",
"description": "Shipment picked up by carrier.",
"location": "Lagos, NG",
"created_at": "2026-09-15T14:38:40.512Z"
},
{
"status": "delivered",
"description": "Delivered - Signed for by: A. OBI",
"location": "London, GB",
"created_at": "2026-09-18T11:20:07.884Z"
}
],
"extras": {
"tracking_number": "7412089553",
"tracking_url": "https://track.terminal.africa/SH-40208776515",
"carrier_tracking_url": "https://www.dhl.com/ng-en/home/tracking.html?tracking-id=7412089553",
"shipping_label_url": "https://assets.terminal.africa/labels/SH-40208776515.pdf",
"proof_of_delivery": {
"url": "https://assets.terminal.africa/pod/SH-40208776515.pdf",
"type": "signature",
"signed_by": "A. OBI",
"fetched_at": "2026-09-18T11:34:52.006Z"
}
},
"metadata": {
"order_id": "ORD-10023"
},
"address_to": "AD-00632494668",
"address_from": "AD-00632494667",
"parcel": "PC-09857312356",
"pickup_date": "2026-09-15T14:00:00.000Z",
"delivery_date": "2026-09-18T11:20:07.884Z",
"delivery_arranged": true,
"delivery_picked_up": true,
"delivery_delivered": true,
"created_at": "2026-09-15T09:02:11.903Z",
"updated_at": "2026-09-18T11:20:07.884Z"
}
}shipment.in-transit
Fires once, the first time a shipment moves.
shipment.awaiting-clearance
The shipment is held at customs. awaiting-clearance also appears in sub_statuses while the main status stays in-transit.
shipment.returned
shipment.pending-cancellation
Cancellation has been requested but the carrier has not confirmed it.
shipment.cancelled
shipment.updated
Fires on any other change to an active shipment. Same shape; read events for what changed.
shipment.created
Carries a fuller shipment object than the status events — close to what Get Shipment returns.
These are always stripped out and will never appear:
extras.shipping_labelandextras.aws_shipping_label_url(label bytes and internal storage keys)metadata.shipment_payload,metadata.carrier_shipment,metadata.selected_rate(carrier blobs)legs
shipment.customs_event
Fires when a customs delay is detected, and again when it is resolved. Read status to tell them apart — the event type is the same both times.
Detected
Resolved
Was this helpful?