Create a Shippo shipment object via POST https://api.goshippo.com/shipments with address_from, address_to, and parcels (length, width, height, distance_unit, weight, mass_unit); set async to false to receive rates synchronously
The response includes a rates array populated with rate objects from all connected carrier accounts, each containing provider, servicelevel.name, amount, currency, and estimated_days
Filter and sort rates programmatically on your side by delivery speed, carrier preference, or price to present options or select automatically based on business rules
Purchase the chosen rate by POSTing to /transactions with the rate object_id and optionally label_file_type (PDF, PNG, ZPLII)
Retrieve the transaction to get label_url, tracking_number, and tracking_url once status is SUCCESS
Store the object_id of the transaction alongside the order for later void requests if needed via POST /transactions/{object_id}/void
Known gotchas
Setting async: true means rates are not in the shipment response; you must poll GET /shipments/{object_id} until status is SUCCESS before accessing rates — use async: false for synchronous rate-shop flows
Each connected carrier account must be configured and active in the Shippo dashboard; rates only appear for carriers with valid credentials and active accounts
International shipments require customs declarations; omitting the customs_declaration field on cross-border shipments causes transaction creation to fail
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