What this audit checks
Authentication & access
- Basic Auth on /user/ still issues a GeoSession JWT (no 401)
- GeoSession JWT cache hit-rate > 95% (re-auth churn signal)
- Geoclient identifier valid (no ‘invalid client’ responses)
- Sandbox vs production base URL flagged correctly
On-time delivery & SLA (the customer-promise area)
- Carrier OTD < 95% rolling 30D (DPDLocal contracted SLA breach)
- OTD trending down >5pp WoW (early degradation signal)
- First-attempt delivery rate < 85% (address-quality / recipient signal)
- Predict slot accuracy < 92% (the brand-promise window)
- Sunday delivery success < 90% on services that support it
- Median transit time > contracted service transit_days for 3+ days
Exceptions, claims & failed pickups
- Exception rate > 3% rolling 30D
- Exception spike > 2sigma vs trailing 30D baseline (sudden break)
- Open claims unresolved > 7 days (CS coverage gap)
- Open claims unresolved > 14 days (abandoned cash + churn risk)
- Failed pickup rate > 3% (carrier-side relationship decay)
- Refused-parcel rate > 1% (customer-side / address-quality signal)
- Returned-to-sender rate > 1% rolling 30D
UK route & postcode intelligence
- Any UK postcode-area OTD < 90% (regional weakness)
- Highlands / NI / IoM transit time > 5 days (out-of-zone signal)
- Single-route concentration > 80% volume (carrier dependency risk)
- Route OTD degraded >5pp WoW for 3+ days (sustained issue)
Cost & service-mix economics
- Avg cost / shipment up >10% vs prior period
- Premium-service uplift (Predict / Sunday / EU) > 40% over standard
- High-cost shipment outliers > 2x avg (investigate routing / surcharges)
- Service-mix shift WoW: standard-share dropping >10pp (margin pressure)
- Claim value as % of DPDLocal revenue > 2% rolling 90D
Cross-platform: revenue at risk (the kill-shot area)
- Cross-platform: late shipments joined to commerce_sibling orders -> revenue at risk per channel
- Cross-platform: 3PL-vs-carrier delay attribution (ShipBob warehouse_dispatch vs DPDLocal in-transit) -> who owns the late delivery
- Cross-platform: open claims with no Jira tracker_item -> CS coverage gap (silent unhappy customers)
- Cross-platform: late-delivery refund-propensity x sibling.order.total -> $ exposed to chargeback / churn this week
- Cross-platform: claims aged >14d that ALSO have a Jira ticket aged >14d -> abandoned-finding loop (both sides waiting)
Severity thresholds
Data sources
GET https://api.dpdlocal.co.uk/user/- Auth probe + GeoSession JWT issuanceGET https://api.dpdlocal.co.uk/shipping/shipment- Shipment list + status (OTD, transit time)GET https://api.dpdlocal.co.uk/shipping/tracking/{consignment_id}- Tracking events for late / exception detectionGET https://api.dpdlocal.co.uk/shipping/collection- Collection bookings + failed-pickup detectionGET https://api.dpdlocal.co.uk/shipping/claim- Open / settled claim list + age / valueGET https://api.dpdlocal.co.uk/shipping/service- Service catalogue (transit_days, supports_sunday, supports_predict)