Shipping rate quotes: quotes carrier rates for one lane.
POST
/api/shipping/rate-quotes
deprecated
Requires: Shipping.RateQuotes, merchant scope.
The quote runs through the merchant's own shipping provider binding. The request names a saved ship-from origin or supplies one inline, names saved parcel presets or supplies parcels inline, and gives the destination. The response carries the outcome and, on success, the rate options. A merchant with no enabled shipping provider receives the `NotConfigured` outcome rather than an error. Quotes are rate limited per merchant; a caller over the ceiling receives `Shipping:QuoteRateLimitExceeded` with HTTP 429.
Signed in, you can send this request to your own sandbox merchant from the console and read the answer. Sign in to try it.
Example request
Every block below sends the same request. Replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a ShippingRateQuoteRequestDto. See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|---|---|
merchantId
required |
string (uuid) | The merchant the quote is for. The caller must be authorized over this merchant; an API key quotes only for the merchant it belongs to. nullable |
originId
required |
string (uuid) | The id of a saved ship-from origin belonging to the merchant. Give this or `origin`, not both. Conditional: When OriginId is not null. nullable |
origin
required |
all of Address | A ship-from address supplied inline, for a quote from a location the merchant has not saved. Give this or `originId`, not both. Conditional: When Origin is not null. |
destination
required |
all of Address | The address the parcels ship to. |
destinationIsResidential
required |
boolean | Whether the destination is a residence. Some carriers price residential delivery differently; leave unset when unknown and the provider applies its own default. nullable |
parcelPresetIds
required |
array of string (uuid) | The ids of saved parcel presets belonging to the merchant, one per parcel in the shipment. Give this or `parcels`, not both. nullable |
parcels
required |
array of ShippingRateQuoteParcelDto | The parcels supplied inline, one per parcel in the shipment. Give this or `parcelPresetIds`, not both. nullable |
carriers
required |
array of string | Optional provider-specific carrier account identifiers to restrict the quote to. When omitted the provider quotes every carrier the binding allows. nullable |
serviceLevels
required |
array of string | Optional provider-specific service level tokens to restrict the quote to. When omitted the provider returns every service level the binding allows. nullable |
currency
required |
string | The ISO 4217 currency the quotes should be expressed in. When omitted the platform's configured default currency is requested. Conditional: When Currency is not empty. nullable |
This request body has no documented fields.
Responses
200 OK
Body: ShippingRateQuoteResultDto
Each item has these fields.
| Field | Type | Description |
|---|---|---|
outcome
required |
all of ShippingRateOutcome | What happened. `quotes` carries options only when this is `Success`. |
isSuccess
required |
boolean | Whether `outcome` is `Success`. read only |
providerName
required |
string | The name of the provider that answered. The platform's fallback provider answers when the merchant has no enabled binding, with the outcome `NotConfigured`. nullable |
quoteId
required |
string (uuid) | The identifier the platform recorded this quote under, when the outcome is success. A checkout that lets a shopper choose a service sends this identifier and the chosen option's `optionId` back, never an amount: the server re-reads the recorded quote and charges the amount it stored. Absent for a non-success outcome. nullable |
expiresAt
required |
string (date-time) | When the recorded quote stops being honored, in UTC. A selection submitted after this instant is refused and the lane has to be quoted again. Absent when `quoteId` is absent. nullable |
quotes
required |
array of ShippingRateQuoteDto | The rate options, ordered as the provider returned them. Empty unless the outcome is success. nullable |
messages
required |
array of string | Provider or platform messages explaining a non-success outcome. Never carries a credential, a URL or a raw exception. nullable |
This response has no documented body fields.
403 Forbidden
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
401 Unauthorized
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
400 Bad Request
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
404 Not Found
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
501 Not Implemented
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
500 Internal Server Error
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded, or because something a later retry can clear stopped it. A rate limit refusal carries an `application/problem+json` body: wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling. Any other refusal carries the standard error envelope as `application/json`, and its `error.code` names the cause.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.