View as Markdown

llms.txt

The API reference isn't available right now

This instance couldn't load its API specification. The reference returns as soon as the specification is readable again.

Back to the API reference

No such operation

This instance documents no operation under that identifier. It may have been renamed, or it may belong to a feature this installation hasn't enabled.

Back to the API reference

This reference may be out of date

This instance couldn't reach its API specification on the last attempt, so this page shows the copy fetched before that. Anything added or changed since then is missing here, and the reference updates itself as soon as the specification is readable again. Last fetched 2026-10-22 22:09 UTC.

API reference Shipping

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. An inline parcel whose weight is not above zero and at most 100,000, or whose length, width or height is not above zero and at most 10,000, is refused with HTTP 400: each failing measure is a `validationErrors` entry on `parcels[n].Weight`, `parcels[n].Length`, `parcels[n].Width` or `parcels[n].Height` carrying the code `Shipping:ParcelMeasureOutOfRange`.

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.

Code sample language

cURL

curl -X POST "{{BASE_URL}}/api/shipping/rate-quotes" \
  -H "api-key: {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
  "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destination": {}
}'

PowerShell

$headers = @{
    'api-key' = '{{API_KEY}}'
}

$body = @'
{
  "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destination": {}
}
'@

$response = Invoke-RestMethod -Method POST -Uri '{{BASE_URL}}/api/shipping/rate-quotes' `
    -Headers $headers -ContentType 'application/json' -Body $body

npm install @winkpg/winkpg-api

TypeScript (SDK)

import { Configuration, ShippingApi } from '@winkpg/winkpg-api';

const api = new ShippingApi(new Configuration({
  basePath: '{{BASE_URL}}',
  apiKey: '{{API_KEY}}',
}));

const { data } = await api.shippingRateQuoteGetQuote({
  "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destination": {}
});

TypeScript (raw HTTP)

const response = await fetch('{{BASE_URL}}/api/shipping/rate-quotes', {
  method: 'POST',
  headers: {
    "api-key": "{{API_KEY}}",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "destination": {}
  }),
});

const data = await response.json();

dotnet add package WinkPg.Api.Client

C# (SDK)

using WinkPg.Api.Client.Api;
using WinkPg.Api.Client.Client;
using System.Text.Json;

var config = new Configuration { BasePath = "{{BASE_URL}}" };
config.AddApiKey("api-key", "{{API_KEY}}");

var api = new ShippingApi(config);
var body = JsonSerializer.Deserialize<ShippingRateQuoteRequestDto>("""
    {
      "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "destination": {}
    }
    """);

var result = await api.ShippingRateQuoteGetQuoteAsync(body);

C# (raw HTTP)

using System.Text;

using var http = new HttpClient { BaseAddress = new Uri("{{BASE_URL}}") };

var request = new HttpRequestMessage(new HttpMethod("POST"), "/api/shipping/rate-quotes");
request.Headers.Add("api-key", "{{API_KEY}}");

request.Content = new StringContent("""
    {
      "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "destination": {}
    }
    """, Encoding.UTF8, "application/json");

var response = await http.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();

pip install winkpg-api

Python (SDK)

import winkpg_api

configuration = winkpg_api.Configuration(host="{{BASE_URL}}")
configuration.api_key["ApiKey"] = "{{API_KEY}}"

with winkpg_api.ApiClient(configuration) as client:
    api = winkpg_api.ShippingApi(client)
    body = winkpg_api.ShippingRateQuoteRequestDto.from_dict({
      "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "destination": {}
    })
    result = api.shipping_rate_quote_get_quote(body)

pip install requests

Python (raw HTTP)

import requests

headers = {
    "api-key": "{{API_KEY}}",
    "Content-Type": "application/json",
}

body = {
  "merchantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destination": {}
}

response = requests.request(
    "POST",
    "{{BASE_URL}}/api/shipping/rate-quotes",
    headers=headers,
    json=body,
)
response.raise_for_status()
data = response.json()

Parameters

Name In Type Description
suppressNulls required query boolean If true, omit properties with null values.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
origin required Address 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.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

Fields of Address:

Field Type Description
id required string (uuid) Gets the unique identifier for the address. read only
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
address1 required string Gets or sets the first line of the address (e.g., street address). nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
address2 required string Gets or sets the second line of the address (e.g., apartment, suite, unit, building, floor, etc.). nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
city required string Gets or sets the city of the address. nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
state required string Gets or sets the state or region of the address. nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
province required string Gets or sets the province of the address (if applicable). nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
zip required string Gets or sets the ZIP code of the address. Conditional: Conditional (see validator source). Pattern: ^\d{5}(-\d{4})?$. Conditional: When IsUsCountry(Country) is false. Max length: 20. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
postalCode required string Gets or sets the postal code of the address. nullablemax length 20
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
country required string Gets or sets the country of the address. Defaults to "USA". nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
isMailing required boolean Gets or sets a value indicating whether this address is a mailing address.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
isDefault required boolean Gets or sets a value indicating whether this address is the default address.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This body has no documented fields.

destination required Address Address The address the parcels ship to.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

Fields of Address:

Field Type Description
id required string (uuid) Gets the unique identifier for the address. read only
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
address1 required string Gets or sets the first line of the address (e.g., street address). nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
address2 required string Gets or sets the second line of the address (e.g., apartment, suite, unit, building, floor, etc.). nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
city required string Gets or sets the city of the address. nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
state required string Gets or sets the state or region of the address. nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
province required string Gets or sets the province of the address (if applicable). nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
zip required string Gets or sets the ZIP code of the address. Conditional: Conditional (see validator source). Pattern: ^\d{5}(-\d{4})?$. Conditional: When IsUsCountry(Country) is false. Max length: 20. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
postalCode required string Gets or sets the postal code of the address. nullablemax length 20
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
country required string Gets or sets the country of the address. Defaults to "USA". nullablemax length 100
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
isMailing required boolean Gets or sets a value indicating whether this address is a mailing address.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
isDefault required boolean Gets or sets a value indicating whether this address is the default address.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This body has no documented fields.

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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
parcelPresetIds required array of string (uuid) array of The ids of saved parcel presets belonging to the merchant, one per parcel in the shipment. Give this or `parcels`, not both. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
parcels required array of ShippingRateQuoteParcelDto array of ShippingRateQuoteParcelDto The parcels supplied inline, one per parcel in the shipment. Give this or `parcelPresetIds`, not both. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

Fields of each ShippingRateQuoteParcelDto:

Field Type Description
weight required number (double) The packed weight of the parcel, in `weightUnit`. greater than 0max 100000
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
weightUnit required ShippingWeightUnit ShippingWeightUnit The unit `weight` is given in. Defaults to pounds.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
Gram Grams.
Kilogram Kilograms.
Ounce Ounces (avoirdupois).
Pound Pounds (avoirdupois).
length required number (double) The longest outer side of the parcel, in `dimensionUnit`. greater than 0max 10000
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
width required number (double) The second outer side of the parcel, in `dimensionUnit`. greater than 0max 10000
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
height required number (double) The third outer side of the parcel, in `dimensionUnit`. greater than 0max 10000
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
dimensionUnit required ShippingDimensionUnit ShippingDimensionUnit The unit the three sides are given in. Defaults to inches.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
Centimeter Centimetres.
Inch Inches.

This body has no documented fields.

carriers required array of string array of Optional provider-specific carrier account identifiers to restrict the quote to. When omitted the provider quotes every carrier the binding allows. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
serviceLevels required array of string array of Optional provider-specific service level tokens to restrict the quote to. When omitted the provider returns every service level the binding allows. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This request body has no documented fields.

Responses

200 OK

Body: ShippingRateQuoteResultDto ShippingRateQuoteResultDto Each item has these fields.

Field Type Description
outcome required ShippingRateOutcome ShippingRateOutcome What happened. `quotes` carries options only when this is `Success`.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
Success The provider answered with at least one quote.
NoRatesForLane The provider answered, and no carrier it reaches serves this origin, destination and parcel combination. Not an error: the page shows no options and the merchant checks the lane.
NotConfigured No provider is configured or enabled. The null provider's only answer.
Misconfigured A provider is configured but its own settings are incomplete or invalid (a missing credential, an unusable carrier account filter). An administrator fixes this on the settings page.
AuthenticationFailed The provider rejected the credential (HTTP 401 or 403).
RateLimited The provider throttled the caller (HTTP 429).
InvalidRequest The provider rejected the request as malformed or unsupported (any other 4xx).
ProviderUnavailable The provider could not be reached or answered with a server-side fault: a transport failure, an open circuit, or a 5xx.
Timeout The call did not complete within QuoteTimeoutSeconds.
MalformedResponse The provider answered 2xx with a body the response mapper could not read.
isSuccess required boolean Whether `outcome` is `Success`. read only
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
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
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
quotes required array of ShippingRateQuoteDto array of ShippingRateQuoteDto The rate options, ordered as the provider returned them. Empty unless the outcome is success. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

Fields of each ShippingRateQuoteDto:

Field Type Description
optionId required string (uuid) The platform's identifier for this option within the recorded quote, when the quote was recorded. What a selection sends back alongside the quote's identifier. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
carrier required string The carrier's name as the provider reports it, for example UPS or USPS. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
serviceLevelCode required string The provider's service level token, for example `usps_priority`. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
serviceLevelName required string The service level's display name, for example Priority Mail. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
amount required number (double) The quoted shipping amount, in `currency`.
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
currency required string The ISO 4217 currency of `amount`. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
estimatedTransitDays required integer (int32) The carrier's estimated transit time in days, when the provider reports one. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
providerRateId required string The provider's own identifier for this rate. Opaque to the platform; a later label purchase through the same provider would refer to it. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This body has no documented fields.

messages required array of string array of Provider or platform messages explaining a non-success outcome. Never carries a credential, a URL or a raw exception. nullable
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

403 Forbidden

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

401 Unauthorized

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

400 Bad Request

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

404 Not Found

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

501 Not Implemented

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

This response has no documented body fields.

500 Internal Server Error

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

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. The error reference lists the values `error.code` can take. 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. The error reference lists the values `error.code` can take.

Body: RemoteServiceErrorResponse RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

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 RemoteServiceErrorResponse Each item has these fields.

Field Type Description
error required RemoteServiceErrorInfo RemoteServiceErrorInfo
Values: Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.

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.

Codes declared by Shipping

Authentication

    Reconnecting to the server

    Could not reconnect

    This session has ended

    Attempt 1

    Your work on this page is still here. Retrying keeps it; reloading starts the page again.

    The server no longer holds this page's state, so it has to be loaded again.