2026-12-15
Status-file shipments in the shipper API
- Added: GET /shipper/shipments also lists the shipments your status feeds name for carriers not on the platform, merged newest first with your carriers' orders: `source: "external"`, id `ext_…`, the carrier as the files name it (`carrier.id` is `ext:<key>`), your reference as `trackingNumber`, a status-file `status` (ExternalStatus), the latest ETA as `expectedBy`, plus `lastEventAt` and `lastPlace`. One the files name that is already a linked carrier's order is listed once, as that order.
- Added: Every shipment carries `source` — `carrier` or `external` (Shipment is now a union on it). GET /shipper/shipments takes `source=carrier|external`, `carrierId=ext:<key>`, and status-file statuses in `status`.
- Added: GET /shipper/shipments/ext_… answers an ExternalShipmentDetail: the list fields plus the status files' updates, newest first. Once it matched a linked carrier's order, the answer is that order.
- Added: The `shipment.updated` webhook fires for each new status-file update of an external shipment: `trigger` `status_file.<status>`, `shipment` its ExternalShipmentDetail.
- Changed: If your integration reads only carriers' orders, pass `source=carrier` (or skip items whose `source` is `external`); webhook receivers can switch on `shipment.source`.