Webhooks
Real Time Freight Events, Not Check Calls
The old way: call the broker for updates, poll a tracking page every 15 minutes, or wait hours for an EDI 214 message. The Warp way: webhook events arrive in real time for every scan, GPS update, exception, and delivery. Your system gets a POST request the moment something happens. No polling. No check calls. No stale data.
20,000+ carriers · 9,000+ box trucks and cargo vans · 50+ cross dock facilities
Polling, check calls, EDI, and webhooks
Most freight tracking relies on one of three approaches: polling the carrier API every few minutes, calling the carrier for status updates, or waiting for batched EDI 214 messages. All three introduce delay. Webhooks flip the model. Warp pushes events to your system the moment they happen.
Event types
Warp fires webhook events for every meaningful status change in the shipment lifecycle. Each event includes a timestamp, GPS coordinates, and contextual data specific to the event type. Your system receives them in the order they happen.
PICKED_UPDriver has picked up the freight from originTimestamp, GPS, driver ID, scan countSCANNED_INFreight scanned into a cross dock facilityTimestamp, facility ID, item count, conditionDEPARTEDFreight has left a facility or stopTimestamp, GPS, next stop ETAIN_TRANSITGPS update while freight is movingTimestamp, GPS coordinates, speed, headingARRIVEDDriver has arrived at destination or facilityTimestamp, GPS, facility/address matchSCANNED_OUTFreight scanned out of a cross dock facilityTimestamp, facility ID, item count, next legDELIVEREDFreight delivered with proof of delivery capturedTimestamp, GPS, signature, photos, recipientEXCEPTIONIssue flagged by Orbit or driverTimestamp, exception type, severity, resolutionWebhook payload: DELIVERED
When freight is delivered, your webhook endpoint receives a payload with GPS coordinates, the name of the person who signed, photo count, a link to the proof of delivery, and delivery notes. Everything you need to close out the order automatically.
POST to your webhook URL
{
"event": "DELIVERED",
"shipmentId": "shp_01HGA2K9MNPQ4RV8XW3YZ5TJ6",
"trackingNumber": "WARP1234567890",
"orderId": "ord_01HGA2K9MNPQ4RV8XW3YZ5TK7",
"timestamp": "2025-03-17T14:22:00Z",
"location": {
"latitude": 33.4484,
"longitude": -112.0740,
"city": "Phoenix",
"state": "AZ"
},
"details": {
"signedBy": "J. Martinez",
"photoCount": 2,
"podUrl": "https://api.wearewarp.com/pod/abc123",
"deliveryNotes": "Left at receiving dock B"
}
}Webhook payload: EXCEPTION
Our AI backbone, Orbit, monitors every shipment in real time. When Orbit detects a risk, it fires an EXCEPTION event before the problem becomes a missed delivery. The payload includes exception type, severity, a description of the issue, and a suggested action. In many cases, Warp is already resolving the issue by the time your system receives the event.
EXCEPTION event (flagged by Orbit)
{
"event": "EXCEPTION",
"shipmentId": "shp_01HGA2K9MNPQ4RV8XW3YZ5TJ6",
"trackingNumber": "WARP1234567890",
"timestamp": "2025-03-17T06:15:00Z",
"location": {
"latitude": 34.0522,
"longitude": -118.2437,
"city": "Los Angeles",
"state": "CA"
},
"exception": {
"type": "LATE_PICKUP_RISK",
"severity": "warning",
"message": "Driver ETA is 45 min past pickup window",
"suggestedAction": "Warp is dispatching backup driver",
"flaggedBy": "Orbit"
}
}Setting up a webhook listener
Register your webhook URL in the Warp dashboard under developer settings. Your endpoint receives a POST request for every event. Return a 200 status within 5 seconds. Here is a minimal Express.js listener that routes events by type.
Express.js webhook listener
// Express.js webhook listener
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhooks/warp', (req, res) => {
const event = req.body;
switch (event.event) {
case 'PICKED_UP':
// Update your TMS: shipment in transit
updateShipmentStatus(event.shipmentId, 'picked_up');
break;
case 'DELIVERED':
// Close out the order, trigger invoicing
markDelivered(event.shipmentId, event.details);
break;
case 'EXCEPTION':
// Alert your ops team
notifyOpsTeam(event.shipmentId, event.exception);
break;
default:
// Log all other events for audit trail
logEvent(event);
}
res.status(200).send('OK');
});
app.listen(3000);What you can build with webhook events
Real time tracking UI
Show live shipment status to your customers.
Every webhook event updates your tracking page instantly. Your customers see PICKED_UP, IN_TRANSIT, ARRIVED, and DELIVERED without refreshing. No polling lag.
Automated exception handling
Trigger alerts before customers ask.
Route EXCEPTION events to your ops team via Slack, PagerDuty, or email. Our AI backbone, Orbit, flags issues proactively so your team can resolve them before the customer calls.
Order lifecycle automation
Close orders and trigger invoicing automatically.
When DELIVERED fires, update your TMS, mark the order complete, trigger invoicing, and archive the shipment. Zero manual steps between delivery and settlement.
Reliability and retries
Warp retries failed webhook deliveries with exponential backoff for up to 24 hours. If your endpoint returns a non 200 status or times out, the event is queued and retried at increasing intervals. You can also pull any missed events from the tracking endpoint (GET /freights/events/{shipmentId}) as a fallback. Every event is persisted on the Warp side regardless of webhook delivery status.
- -First retry: 30 seconds after initial failure.
- -Subsequent retries: exponential backoff up to 1 hour intervals.
- -Total retry window: 24 hours.
- -Fallback: GET /freights/events/{shipmentId} returns the full event history at any time.
- -Every event is persisted. Nothing is lost if your endpoint is temporarily down.
Frequently asked questions
What events does Warp send via webhooks?
Warp sends webhook events for every status change in the shipment lifecycle: PICKED_UP, SCANNED_IN, DEPARTED, IN_TRANSIT, ARRIVED, SCANNED_OUT, DELIVERED, and EXCEPTION. Each event includes a timestamp, GPS coordinates, and a description of what happened.
How do I set up a webhook listener for Warp events?
Register your webhook URL in the Warp dashboard under developer settings. Warp sends a POST request to your URL for every shipment event. Your endpoint should return a 200 status code within 5 seconds. Failed deliveries are retried with exponential backoff.
Can I filter which webhook events I receive?
Yes. You can subscribe to specific event types in the Warp dashboard. If you only care about delivery confirmations and exceptions, subscribe to DELIVERED and EXCEPTION only. You will not receive events for the types you do not subscribe to.
How does our AI backbone, Orbit, use webhook events?
Our AI backbone, Orbit, monitors every event in real time and flags exceptions before you have to ask. If a shipment misses a scan window, if a driver deviates from the expected route, or if a delivery is at risk of being late, Orbit fires an EXCEPTION event with details about what went wrong and what to do about it.
What happens if my webhook endpoint is down?
Warp retries failed webhook deliveries with exponential backoff for up to 24 hours. If your endpoint returns a non 200 status or times out, the event is queued and retried. You can also pull missed events from the tracking endpoint at any time as a fallback.
Real time events. Zero polling. Proactive exceptions.
Warp webhooks push every scan, GPS update, exception, and delivery to your system the moment it happens. Our AI backbone, Orbit, flags problems before your customers notice. Build tracking features that work in real time.
8 event types · Real time delivery · 24 hour retry window