Create a shipment via POST /v2/shipments in the usual way, providing to_address, from_address, and parcel.
After the shipment is created, retrieve SmartRates by calling GET /v2/shipments/{shipment_id}/smartrate — no request body or additional query params are required.
The response returns an array of rates, each enriched with a time_in_transit object containing delivery-time percentiles: percentile_50, percentile_75, percentile_85, percentile_90, percentile_95, percentile_97, percentile_99 (number of days).
Select a rate based on the percentile that matches your SLA confidence requirement — for example, use percentile_90 to ensure 90% of shipments arrive within that many days.
Purchase the selected rate via POST /v2/shipments/{shipment_id}/buy with the chosen rate id, as usual.
Known gotchas
The endpoint is GET /v2/shipments/:id/smartrate with no body parameters — do not pass delivery_accuracy or similar fields; they are not accepted and the percentile data is returned automatically.
SmartRate estimates are carrier- and lane-specific and depend on EasyPost's historical data; not all carrier/service combinations will have SmartRate data — check for null percentile values before relying on them.
SmartRate is a separate retrieval step after shipment creation; it is not included in the initial POST /v2/shipments response by default.
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