Quote Dropship Label Rates
POST/api/purchase-orders/:purchase_order/dropship-labels/quote
Returns live carrier rates for shipping the purchase order from the supplier's dropship warehouse to the customer, for the given packages and ship date. Nothing is purchased. Use a returned service_token with Create Dropship Label to pin a service; omit it to buy the cheapest allowed rate.
purchase-orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Body fields:
- ship_date (string, optional, Y-m-d): today or later in the supplier's timezone, at most 90 days ahead. Defaults to today.
Package fields (
packages, 1–10 entries, required): - packages.*.weight (number, required, > 0)
- packages.*.weight_unit (string, required): lb, oz, kg, g
- packages.*.length / width / height (number, required, > 0)
- packages.*.dimension_unit (string, required): in, cm
Rates are filtered to the supplier's allowed services when the supplier restricts them. Rate limited to 60 requests per minute.
Domain failures return 422 with {message, reason} where reason is one of: no_provider (no label-capable shipping integration is assigned to the supplier or set as the default), not_eligible (the purchase order cannot get a label — e.g. not a dropship order, closed, or the supplier uses their own labels), purchase_failed (the carrier/provider refused the purchase), already_in_progress, relabel_limit_reached, invalid_state (the label's status does not allow the action) or provider_unavailable (the shipping provider could not be reached).
Authentication: Requires Bearer token.
Requires permission: purchase_orders.update
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.