Add carriers (UPS, FedEx, USPS, etc.) to your Shippo account and obtain your Shippo API token from the dashboard
POST sender and recipient address objects to https://api.goshippo.com/addresses/ and validate them using the validate=true query parameter
POST a parcel object to https://api.goshippo.com/parcels/ with length, width, height, and weight fields
POST a shipment object to https://api.goshippo.com/shipments/ referencing the address and parcel object IDs; set async=false to receive rates synchronously
Choose the desired rate from the rates array in the shipment response and POST its object_id to https://api.goshippo.com/transactions/ to purchase the label
Retrieve the label_url from the transaction response to download the printable label
Known gotchas
Setting async=true on the shipment call returns an object_status of QUEUED; the rates array will be empty until the status transitions to SUCCESS, requiring a polling loop or webhook
Shippo automatically refunded unused USPS labels in the past, but this policy changed — you must now explicitly POST to https://api.goshippo.com/refunds/ within 90 days to reclaim postage for unused labels
Carrier account credentials stored in Shippo can expire or be revoked; a carrier returning no rates (empty rates array) often indicates a credential issue rather than service unavailability
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