Architecture
Push, not poll.
Carriers push events to Shipto the moment they happen. We validate the signature, normalize the status, persist the event, and fire into Klaviyo — asynchronously, via SQS.
01
DHL or USPS sends a webhook
Signed payload arrives at our carrier endpoint.
02
We validate + normalize
Signature verified, carrier dialect translated to a unified status.
03
Klaviyo metric fires
Your flows trigger. Customer gets your email, not the carrier email.
POST /webhooks/carrier/dhl
{
"event": "shipment.delivered",
"id": "shp_9F2014",
"tracking": "1234567890",
"carrier": "dhl",
"status": "delivered",
"location": {
"city": "New York",
"country": "US"
},
"signature": "v1=8c4b…"
}
→ normalized → TrackingStatus::delivered → Klaviyo metric fires