Get rates
Returns available shipping rates for a shipment from multiple carriers, sorted by price.
Response notes.
rate is the price you pay and is the only field to build pricing logic on. zone is informational and often null — not every carrier reports one, and zones are not comparable between carriers. rate_id is an opaque token, valid for 6 hours; pass it to POST /v1/labels to buy the rate you were shown.
Parcel units. weight_unit defaults to oz and dimension_unit to in. Large light boxes are priced on dimensional weight, so a 16×16×16 in parcel costs the same at 1 lb as at 16 lb.Parameters
Request Body
from_address
object
Required
Origin address — either a saved address ID (string) or an inline object. Same fields as
street1, city, zip are required.
state is required only for
country (string, optional, default
to_address.street1, city, zip are required.
state is required only for
US, CA and AU addresses.country (string, optional, default
US).to_address
object
Required
Destination address — either a saved address ID (string) or an inline object.
street1 (string, required) · street2 (string, optional)
city (string, required)
state (string) — required only for
zip (string, required)
country (string, optional, default
name, company, phone, email (optional)
residential (boolean, optional) — override. Omit and the address is classified for you.
International: set
street1 (string, required) · street2 (string, optional)
city (string, required)
state (string) — required only for
US, CA and AU addresses. Most countries have no province system; omit it or send null.zip (string, required)
country (string, optional, default
US) — two-letter ISO codename, company, phone, email (optional)
residential (boolean, optional) — override. Omit and the address is classified for you.
International: set
country to any destination and rates come back the same way. You do not need a customs declaration to quote — but POST /v1/labels will require a customs object to buy one.parcel
object
Required
Package dimensions and weight, as an inline object. All four of length, width, height and weight are required and must be positive numbers. Optional: weight_unit (
A saved parcel ID is not supported. Passing a string here returns 400
oz default | lb | g | kg) and dimension_unit (in default | cm).A saved parcel ID is not supported. Passing a string here returns 400
PARCEL_ID_NOT_SUPPORTED — there is no saved-parcel store to resolve it against, and guessing the geometry would quote a price the purchase could not honour.carrier_account_ids
array
Keep only rates quoted on these carrier accounts — the
carrier_account_id value returned on each rate. Every organization has one account per carrier with atoship; list them with GET /v1/carrier-accounts. Use this to choose between an atoship account and your own linked (BYOCA) account when both quote the same carrier, which carriers cannot distinguish. Takes precedence over carriers — when both are supplied, carriers is ignored; services still applies on top. A filter matching nothing returns an empty data array.carriers
array
Keep only rates from these carriers. Matching ignores case and punctuation, so
USPS, usps and U.S.P.S. are equivalent. Ignored when carrier_account_ids is supplied. A filter matching nothing returns an empty data array — it never falls back to the unfiltered set.services
array
Keep only these services. Matching ignores case and punctuation and accepts any of: the full service name (
"USPS Ground Advantage"), the name without its carrier prefix ("Ground Advantage"), or the code-style token ("usps_ground_advantage"). Combines with carriers as AND.options
object
Optional accessorials.
signature_confirmation (boolean) requires a signature on delivery — there are no signature levels, only true/false. The signature fee is already included in the returned rate, and requesting it returns FEWER options, because carriers that cannot guarantee a signature are excluded rather than shipping your parcel unsigned. saturday_delivery (boolean) behaves the same way. insurance_amount (number) declares a value for insurance.ship_date
string
Ship date,
YYYY-MM-DD or an ISO 8601 timestamp with offset. Rates that depend on the day of the week are priced against it. Send the same value to POST /v1/labels.skip_address_validation
boolean
Skip destination address validation. Use only after the caller has confirmed a suggested address — skipping it on an unverified address ships to whatever was typed.
Returns
200
Rates calculated successfully
400
Invalid request data.
PARCEL_ID_NOT_SUPPORTED — parcel was sent as a saved-parcel ID string; send an inline object.PACKAGING_NOT_SUPPORTED — the requested packaging is not available.INSURANCE_NOT_AVAILABLE — coverage cannot be quoted for this shipment.
401
Authentication required
404
Address not found (when
from_address/to_address is given as a saved ID)
Related
Labels
POST/api/v1/rates