POST to /v2/shipments with 'from_address', 'to_address', 'parcel', and a 'carrier_accounts' array containing all carrier account IDs you want to shop; EasyPost returns rates from all connected carriers in the response
Sort the 'rates' array by 'rate' (cost) or 'delivery_days'; apply business rules (e.g., exclude carriers with delivery_days > 3, minimum coverage requirements)
Select the best rate object and POST to /v2/shipments/{id}/buy with the chosen 'rate' id and optional 'insurance' amount
The buy response includes the purchased label URL, tracking code, and postage_label object; download and print the label
Implement rate TTL awareness: EasyPost rate quotes are valid for a limited time (typically minutes to hours depending on carrier); rebuy will fail if the rate has expired
Known gotchas
Rates returned by EasyPost for carrier-shared accounts use EasyPost's negotiated rates; rates for your own carrier account (BYOCA) reflect your account's negotiated rates — the two can differ significantly
Not all carriers return rates simultaneously; some carriers may time out and be absent from a rate response — implement a fallback if a preferred carrier rate is missing
The cheapest rate is not always the right choice for fragile or time-sensitive goods; weight delivery confidence and transit time in your selection logic, not just price
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