For the complete documentation index, see llms.txt. This page is also available as Markdown.

Sample Webhook Event Payloads

The exact JSON delivered to your endpoint for every webhook event, grouped by resource.

Every webhook Terminal sends has the same two-key envelope. event is the event type; data is the resource the event happened to.

{
    "event": "shipment.delivered",
    "data": { }
}

The request also carries an X-Terminal-Signature header, an HMAC-SHA512 of the raw body keyed with your secret key. Always verify it before acting on a payload — see Handling Webhook Events.

What data contains

It depends on the event, and the difference matters:

  • Resource events — address.*, packaging.*, insurance.*, claim.*, transaction.* — carry the resource itself, in the same shape the corresponding GET endpoint returns.

  • Shipment status events — shipment.in-transit, shipment.delivered, shipment.updated, shipment.cancelled, shipment.returned, shipment.awaiting-clearance, shipment.pending-cancellation — carry a lean tracking snapshot, not the whole shipment. Addresses and the parcel appear as ids rather than embedded objects. If you need the full shipment, call Get Shipment.

  • shipment.created carries a fuller shipment object than the status events.

  • shipment.customs_event and the regulatory_document.* events carry a small purpose-built object rather than a resource.

Delivery behaviour

  • The payload is snapshotted at dispatch time and stored. Replaying a webhook resends that stored snapshot — it is not rebuilt from the resource as it stands now, so a replay shows you what was originally sent.

  • Keys whose value is undefined are omitted rather than sent as null. Treat every field below as optional and code defensively.

  • Label bytes, internal storage keys and carrier blobs are never included. Documents appear as URLs.

Payloads by resource

Resource
Events

address.created, address.updated, address.deleted

packaging.created, packaging.updated

shipment.created, shipment.updated, shipment.in-transit, shipment.delivered, shipment.cancelled, shipment.returned, shipment.awaiting-clearance, shipment.pending-cancellation, shipment.customs_event

insurance.pending, insurance.success, insurance.failed

claim.success, claim.failed

transaction.success, transaction.failed

reconciliation.flagged, reconciliation.billed

regulatory_document.pending, regulatory_document.uploaded, regulatory_document.complete

You can trigger any of these against your own data with Simulate Webhook, rather than waiting for the real event.

Was this helpful?