0. GET /v1/packaging-types → optional: discover packaging type codes and custom box ids
0a. GET /v1/carriers → optional: discover carrier codes
0b. GET /v1/carrier-services → optional: discover service codes for a carrier
1. POST /v1/rate → pick rateResponseId from rates[] (sorted; use badges/sort as needed)
2. POST /v1/ship/{rateResponseId} → orderId, trackingNumber, metadata.trackingUrl (check data.status)
3. GET /v1/labels/{orderId} → optional: refresh available[] if labels omitted on ship
4. GET /v1/labels/{orderId}/{code} → 302 → download label file (repeat per type)
5. GET /v1/track/{orderId} → transitStatus, updated
6. DELETE /v1/shipments/{orderId} → optional: cancel shipment (check data.status)