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.
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. 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.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
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.