Compare multi-carrier shipping rates, find cheapest/fastest options, and get shipping recommendations via the Shippo API
"10" not 10).addresses-validate-v2 (see address-validation skill).shipments-create with address_from, address_to (as inline address objects using v1 field names -- street1, city, state, zip, country -- not object IDs), and parcels.rates array contains available options. Present a table: carrier, service level, price, estimated days.Rates expire after 7 days. If a user tries to purchase a rate that was retrieved more than 7 days ago, create a new shipment to get fresh rates.
Map user requests: "overnight" = estimated_days 1, "2-day" = estimated_days <= 2, "within N days" = estimated_days <= N. Filter the rates array accordingly. If nothing matches, show the fastest available option.
Some carriers may return international rates without a customs declaration, but others will not. If no rates are returned, try attaching a customs declaration to the shipment. Some carriers also require a phone number on the destination address for international rate retrieval. Inform the user that customs will be required at label purchase time regardless. See references/customs-guide.md for customs details.
Call rates-at-checkout-create instead of shipments-create. Accepts address_from, address_to, and line_items (each with title, quantity, total_price, currency, weight, weight_unit).
Call rates-list-by-currency-code with the preferred ISO currency code (USD, EUR, GBP, CAD, etc.).
Identify the cheapest (lowest amount), fastest (lowest estimated_days), and best-value options from the rates array. These are not API fields -- compute them by sorting the rates array yourself. State the trade-off: "Option A is $X cheaper but takes Y more days than Option B."
carrier-accounts-list if needed.Get rates:
(optional) addresses-validate-v2 (x2) -> shipments-create (with inline addresses) -> read rates array