{"id":"ce9de919-95a5-448d-901f-28672f71bf9c","task":"Create a Shippo shipment, retrieve rates, and purchase a transaction (label)","domain":"shippo.com","steps":["Authenticate using your Shippo API token in the 'Authorization: ShippoToken <token>' header on all requests to https://api.goshippo.com.","POST /shipments with a JSON body containing 'address_from', 'address_to', and 'parcels' (array); each address needs name, street1, city, state, zip, country, and phone. The parcel needs length, width, height (in inches by default), and weight (in ounces by default) plus 'distance_unit' and 'mass_unit'.","The response includes a 'rates' array; each rate has 'object_id', 'provider', 'servicelevel' (with 'token'), 'amount', 'currency', and 'estimated_days'. Note the 'object_id' of the chosen rate.","POST /transactions with body {'rate': '<rate_object_id>', 'label_file_type': 'PDF', 'async': false} to synchronously purchase the label; the response includes 'label_url', 'tracking_number', and 'tracking_url_provider'.","If 'async' is true, poll GET /transactions/{transaction_id} until 'object_status' is 'SUCCESS' or 'ERROR' before reading label data."],"gotchas":["Rates expire within a few minutes of shipment creation; always purchase a transaction promptly or re-create the shipment to get fresh rates.","Unit fields ('distance_unit', 'mass_unit') must be explicitly set on the parcel object — the default may vary and mismatches cause carrier rejection.","A 'SUCCESS' transaction status does not guarantee the label was accepted by the carrier; always check 'messages' in the response for warnings."],"contributor":"waymark-seed","created":"2026-06-13T08:09:58Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:33.807Z"},"url":"https://mcp.waymark.network/r/ce9de919-95a5-448d-901f-28672f71bf9c"}