What this audit checks
Authentication & access
- apikey query-string parameter still authorises requests (no 401/403 on /restapi/shipment/v2/track)
- Consignor number maps to an active PostNord business contract (no ‘unknown consignor’)
- country_of_origin enum value (SE/NO/DK/FI) matches the live contract pricing tier
- Sandbox vs production apikey not crossed (probe returns real shipments, not sandbox stubs)
On-time delivery & transit
- Pan-Nordic OTD < 90% rolling 30D (actual_delivery vs expected_delivery)
- Per-country OTD divergence: any of SE/NO/DK/FI more than 5pp below the pan-Nordic average
- Avg transit days breach: intra-EU corridor > 3d or SE-NO border corridor > 5d
- Sunday-delivery success rate < 85% where the service is offered by postcode
Exceptions & failed deliveries
- Exception rate > 3% rolling 30D (status Exception across shipments)
- AttemptedDelivery without subsequent Delivered within 48h (first-attempt failure)
- MyPack Collect parcels uncollected past the pickup-point hold window
- Refused / ReturnedToSender rate spike vs prior period
Damaged / lost parcels
- Lost-parcel rate (status Lost) > 0.3% rolling 90D
- Damaged-parcel claim rate > 0.5% rolling 90D
- Return-label (RMA) parcels stuck InTransit and never Received
- Claim value as % of PostNord shipping spend > 1% rolling 90D
Tracking data completeness
- Tracking-event gap > 24h intra-EU (SE/DK/FI) on in-transit shipments
- Tracking-event gap > 3d on SE-NO non-EU border (AwaitingCustoms stall)
- Shipments with a tracking_number but zero tracking_event rows (silent parcels)
- Delivered status with no recorded actual_delivery timestamp (OTD-uncomputable)
Cross-platform fulfilment SLA (the kill-shot area)
- Cross-platform: shipments past expected_delivery joined to commerce_sibling orders -> revenue at risk per Nordic channel
- Cross-platform: Nordic commerce order with no PostNord shipment after 48h -> dispatch SLA breach
- Cross-platform: SE-NO parcels stuck AwaitingCustoms > 3d -> proactive commercial-invoice / IOSS fix candidates
- Cross-platform: PostNord cost_sek per to_country_code more than 10% above Bring / DPD sibling on the same corridor -> pan-Nordic pricing arbitrage
Severity thresholds
Data sources
GET https://atapi2.postnord.com/restapi/shipment/v2/shipments- Shipment list (status / OTD / cost / customs flag)GET https://atapi2.postnord.com/restapi/shipment/v2/track- Tracking events (continuity + border stalls)POST https://atapi2.postnord.com/restapi/shipment/v2/shipments- Label generation (write-side, print-failure probe)POST https://atapi2.postnord.com/restapi/shipment/v2/returns- Return-label (RMA) creation and status