Webhook Change Diffs: See Exactly What Changed on Load & Trip Events
Load & trip webhooks can now tell you exactly what changed. load.changed and trip.changed events carry an optional data.diff — a list of domain-named change kinds (e.g. StatusChanged, RateChanged, AppointmentChanged) and, opt-in, the previous values of every changed field. React to the exact change that matters and apply just the delta, instead of diffing full snapshots yourself.
What's New?
load.changed and trip.changed webhooks now carry an optional data.diff node that tells you what changed on the record — and, if you opt in, what the value was before. You no longer have to diff successive snapshots yourself to react to a change.
What Changed?
Previously, load.changed and trip.changed delivered only the full current snapshot in data. Consumers had to cache the prior payload and compute their own delta to know whether a change was relevant. Each event can now include data.diff with two independent parts:
data.diff.changes— an array of domain-named change kinds (e.g.StatusChanged,RateChanged,StopReordered,AppointmentChanged). Delivered to every subscriber whenever something meaningful changed. Sub-entity changes carry atarget—{ "type": "Stop" | "Field", "id": "<stableId>" }.data.diff.previousAttributes— the previous value of every changed field visible on the public response, keyed 1:1 with the snapshot. Keyed collections (stops, references, charge lines) diff by stableid. Opt-in per subscription.
Event Envelope
{
"type": "load.changed",
"data": {
"load": { "...": "full current snapshot" },
"diff": {
"changes": [
{ "kind": "StatusChanged" },
{ "kind": "AppointmentChanged", "target": { "type": "Stop", "id": "abc123" } }
],
"previousAttributes": { "...": "previous values (opt-in)" }
}
}
}data.diff is present only on load.changed / trip.changed — never on *.status.changed, and it is omitted on the first (create) event where there is no prior state.
Treatchangesas a filtering hint only. The vocabulary is curated and may grow — always ignore change kinds you don't recognize, and never assume the snapshot is unchanged just because a kind is missing.
How to Enable Previous Values
data.diff.changes is delivered automatically. data.diff.previousAttributes is opt-in:
-
Dashboard: turn on Include previous values on the webhook.

-
API: set
IncludePreviousAttributes: truewhen creating or updating the subscription (defaults tofalse).
Endpoints Affected
POST /p/v1.0/webhooks and PUT /p/v1.0/webhooks/{id} accept the new IncludePreviousAttributes flag. Event delivery on existing load.changed / trip.changed subscriptions is backward compatible — data.diff is additive.
Why?
State-mirroring integrators can now apply just the delta instead of re-importing the whole record on every event — lower processing cost, cleaner audit trails, and the ability to filter on the exact business change that matters.