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 shipment milestone — pickup, cross-dock scans, linehaul, delivery — plus exceptions. Your system gets a POST request the moment something happens. No polling. No check calls. No stale data.
24,000+ FTL carriers · 14,000+ cargo vans and box trucks · 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 a webhook event for every meaningful status change across the shipment lifecycle that GET /api/v1/track and /api/v1/events report. Each delivery carries the event name, a timestamp, and a data object with the shipment context for that event. The stages below are the lifecycle milestones; the literal event string your endpoint receives may be Warp's internal status code (the tracking API surfaces codes such as needCarrier), so switch on it and confirm the exact values by firing POST /api/v1/developer/webhook/test or reading GET /api/v1/events.
bookedShipment confirmed and scheduledBookingarrivedAtPickupDriver at the origin dockPickuppickupSuccessfulFreight picked up and scanned in — BOL availablePickupinRouteToWarehouseEn route to the cross dockCross-dockarrivedAtWarehouseAt the cross dock, sorting to the outbound linehaulCross-dockdepartedFromWarehouseLeft the cross dock on the outbound truckCross-dockinRouteToDeliveryLinehaul rolling toward the destinationLinehaularrivedAtDeliveryDriver at the destination dockDeliverydeliveredDelivered — POD capturedDeliveryexceptionIssue flagged by Orbit or the driver (late pickup risk, missed scan, delay)Any stageWebhook payload: the envelope
Every delivery is a plain JSON POST with three fields: event (the milestone name), timestamp (when it happened), and data (the shipment context for that event). There is no signature header — deliveries are unsigned today, which is why your registered URL should carry an unguessable secret. Don't integrate against an example payload: fire POST /api/v1/developer/webhook/test and build against the exact data shape your endpoint receives.
POST to your webhook URL
{
"event": "delivered",
"timestamp": "2026-08-17T14:22:00Z",
"data": {
// Shipment context for the event. Inspect the exact
// shape your account receives:
// POST /api/v1/developer/webhook/test
}
}Exception events
Our AI backbone, Orbit, monitors every shipment in real time. When Orbit detects a risk — a late pickup, a missed scan window, a delay at the cross dock — an exception event arrives through the same envelope, before the problem becomes a missed delivery. In many cases Warp ops is already re-planning the load by the time your system receives the event; tracking carries the revised ETA.
Setting up a webhook listener
Webhooks are available on self-serve. First, sign in once at /agents/account to link your Warp account — this is required before the API can manage your webhook, and calls made before it return 409 WARP_SESSION_REQUIRED. Then register your webhook URL with POST /api/v1/developer/webhook — or skip the API and add it in the dashboard: sign in at customer.wearewarp.com, open Settings, and paste your URL into the Webhook URLfield under API Access. Either way your endpoint then receives a POST request for every event. Deliveries are not signed today — put an unguessable secret in your registered URL and reject requests that lack it. Respond with a 2xx promptly and do the heavy work after you've acknowledged. Here is a minimal Express.js listener that routes events by type.
Express.js webhook listener
// Express.js webhook listener — deliveries are unsigned,
// so the unguessable path segment IS the authentication
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhooks/warp/:secret', (req, res) => {
if (req.params.secret !== process.env.WARP_WEBHOOK_PATH_SECRET) {
return res.status(404).end();
}
// Envelope: { event, timestamp, data }
const { event, timestamp, data } = req.body;
switch (event) {
case 'pickupSuccessful':
// Update your TMS: shipment picked up, BOL available
updateShipmentStatus(data, 'picked_up');
break;
case 'delivered':
// Close out the order, trigger invoicing
markDelivered(data);
break;
case 'exception':
// Alert your ops team
notifyOpsTeam(data);
break;
default:
// Log every other milestone for the audit trail
logEvent(event, timestamp, data);
}
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 pickup, linehaul, and delivery milestones land 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: push plus a pollable source of truth
Treat webhooks as the real-time push and the API as the system of record. Every status change is persisted on the Warp side regardless of webhook delivery, so if your endpoint is down or misses a delivery, nothing is lost — pull the full event history any time from GET /api/v1/events or the current status from GET /api/v1/track. Build your handler idempotent so a duplicate delivery is harmless.
- -Every status change is persisted server-side. Nothing is lost if your endpoint is temporarily down.
- -Fallback: GET /api/v1/events returns the full event history at any time; GET /api/v1/track returns current status.
- -Acknowledge fast: respond 2xx promptly and queue the heavy work.
- -Be idempotent: dedupe on event + timestamp so a duplicate delivery is a no-op.
- -Verify your endpoint before going live: POST /api/v1/developer/webhook/test fires a test delivery.
Frequently asked questions
What events does Warp send via webhooks?
Warp sends a webhook event for every status change in the shipment lifecycle — the same production milestone sequence the API reports: booked, arrivedAtPickup, pickupSuccessful, inRouteToWarehouse, arrivedAtWarehouse, departedFromWarehouse, inRouteToDelivery, arrivedAtDelivery, delivered, plus exception events when something needs attention. Each delivery is a JSON POST shaped { event, timestamp, data }. Fire POST /api/v1/developer/webhook/test to inspect the exact payload your endpoint receives.
How do I set up a webhook listener for Warp events?
Webhooks are self-serve: register your destination with POST /api/v1/developer/webhook { "url": "https://..." } using your wak_live_* key (sign in once at wearewarp.com/agents/account first), or add it in the dashboard: sign in at customer.wearewarp.com, open Settings, and paste your URL into the Webhook URL field under API Access. Warp then sends a POST request to your URL for every shipment event. Deliveries are not signed today, so include an unguessable secret in your registered URL and reject requests that lack it. Respond with a 2xx promptly, treat delivery as at-least-once (dedupe on event + timestamp), and keep GET /api/v1/track as your fallback source of truth.
Can I filter which webhook events I receive?
Your registered URL receives every shipment event, so filter in your handler: switch on the event field and act only on the milestones you care about — for example delivered for invoicing and exception events for ops alerts — and log the rest for your audit trail. One URL per account; POST replaces it, DELETE removes it.
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 surfaces an exception event through the same webhook envelope with details about what went wrong.
What happens if my webhook endpoint is down?
Nothing is lost: every status change is persisted on the Warp side regardless of webhook delivery, so treat webhooks as the real-time push and the API as the system of record. If your endpoint misses deliveries, recover the full picture any time with GET /api/v1/track?booking_id=… or GET /api/v1/events. Build your handler idempotent so a replayed or duplicate event is harmless.
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