Use GET /v2/shipments with query parameters such as purchased=true and page_size (max 100) to retrieve a page of purchased shipments
Paginate through results using the before_id parameter set to the last shipment ID from the previous page until the has_more field is false
For each shipment, inspect the tracking_code, status, and tracking_details array — tracking_details entries represent individual scan events with datetime, message, and location
Cross-reference shipment status values (pre_transit, in_transit, out_for_delivery, delivered, return_to_sender, failure, unknown) against your internal order management system
For high-volume reconciliation, prefer using EasyPost webhooks (Tracker events) to receive push updates rather than polling the shipments list endpoint
Known gotchas
The shipments list endpoint does not support filtering by status server-side; all status filtering must be done client-side after retrieving pages, which is inefficient for large shipment volumes
Tracking details are populated asynchronously as carrier scans occur; a shipment with status pre_transit may have an empty tracking_details array immediately after purchase
The status field reflects EasyPost's normalised status, not the raw carrier status; use the tracking_details[].message field to see the original carrier scan message
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp