Shipping belongs to a market and uses read_markets / write_markets. Persisted mode is authoritative: zone and method routes reject until mode is saved as advanced. Switching from simple to advanced clears simple amounts and atomically creates one immutable default catch-all zone. Switching back to simple uses the two-step confirmation handshake and atomically removes every advanced zone, method, and rate. Every paid amount requires the store base currency. Other enabled currencies are optional exact overrides; when omitted, checkout converts the base amount using the current unexpired exchange-rate snapshot in automatic mode or the saved rate in manual mode, with the currency rounding policy. Price tiers require a complete base-currency boundary set and accept complete per-currency boundary overrides. Tiers form contiguous [min,max) ranges. Fetch the limits endpoints before rendering forms; all caps come from the backend contract. Shipping methods may be free, flat, weight, price, item (item-count tiers), or per_item (a unit charge multiplied by shippable quantity). per_item requires one price row with minimum zero and no maximum or currency boundary maps; conversion rounds once after multiplication. Weight boundaries use the saved weight_unit: g, kg, lb, or oz. Omitted units default to grams on creation and preserve the unit on update. Changing the unit reinterprets the submitted boundary numbers. Product and variant weights are converted to grams for matching; each shippable unit is rounded up to a whole gram before quantity is applied. For each selected country, no selected subdivisions means a country fallback. A specific state zone wins over that fallback, then the default zone applies. For example, Uttar Pradesh in one zone and India with no subdivisions in another covers UP separately and the other Indian states through India, in either creation order. Duplicate state claims and duplicate country fallbacks are rejected. Checkout only offers active methods from the matched zone; missing usable rates do not cause a retry in a broader zone. The available-countries fully_claimed field indicates an existing country fallback, not a ban on adding unclaimed states. In StoreAdmin and React Native, General, Shipping Zones, and Methods & Rates share one configuration draft and Save Changes operation.
Endpoints#
Get shipping settings
Get shipping settings.
Returns persisted simple/advanced mode, simple currency maps, shared tax class, and HS code. Zone and method routes reject unless persisted mode is advanced.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Update shipping settings
Update shipping settings.
Save mode=advanced successfully before managing zones or methods. Limits can be fetched before activation. Sending mode=advanced alongside a zone or method does not activate shipping. The settings write switches modes atomically, clears simple amounts, and creates the immutable empty default zone. Configure its methods or add zones in subsequent requests. Advanced to simple returns CONFIRMATION_REQUIRED, then permanently deletes every zone, method, and rate in the confirmed transaction.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
mode
required
|
string |
Simple or advanced. |
shipping_type
|
string |
Free, flat, or threshold in simple mode. |
flat_rate
|
object |
Required base-currency decimal string plus optional exact overrides for other enabled currencies. Zero is allowed. Amounts use a decimal point, without currency symbols or grouping, and must respect currency precision and money limits. Missing overrides use base-currency conversion. |
free_threshold
|
object |
Required base-currency decimal string plus optional exact overrides for other enabled currencies. Every supplied threshold must be greater than zero and within the currency precision and money limit. At or above the threshold, post-discount merchandise qualifies for free shipping. |
threshold_rate
|
object |
Charge below the free-shipping threshold: required base-currency decimal string plus optional exact overrides. Zero is allowed. Missing overrides use base-currency conversion; all amounts respect currency precision and money limits. |
tax_class_id
|
string|null |
Shared market tax class. |
hsn_code
|
string |
Canonicalizable 2-12 digit HS code. |
confirmed
|
boolean |
Confirmation retry flag. |
confirmation_token
|
string |
Token from CONFIRMATION_REQUIRED. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Get shipping zone limits
Get shipping zone limits.
Returns live zone name, description, search, pagination, and per-market limits.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
List available shipping countries
List available shipping countries.
Returns market countries with country-fallback and explicit subdivision claims. fully_claimed means another country fallback exists; unclaimed subdivisions remain selectable. claimed_subdivisions lists explicit claims even when a fallback exists. Use exclude_zone_id while editing so the zone's existing claims remain selectable.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Query parameters
| Name | Type | Description |
|---|---|---|
search
|
string |
Search by country name or ISO country code. |
page
|
integer |
Page number starting at 1. |
per_page
|
integer |
Page size, capped by the service limit. |
exclude_zone_id
|
uuid |
Zone whose existing claims should be ignored while editing. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
List shipping zones
List shipping zones.
Returns all zones in priority order, including the immutable default catch-all and each zone's method count.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Create a shipping zone
Create a shipping zone.
Creates a non-default country/subdivision claim. For each country, no selected subdivisions means its fallback coverage. A separate Uttar Pradesh zone may coexist with India and no subdivisions, in either creation order; India then covers the remaining states. Duplicate country fallbacks or explicit subdivisions are rejected. The default zone is created only by the advanced-mode transition.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Zone name. |
description
|
string |
Zone description. |
countries
|
string[] |
ISO country codes. Each country without selected subdivisions is a fallback for its remaining regions. |
subdivisions
|
string[] |
Subdivision codes belonging to the selected countries. Explicit subdivision zones take precedence over country fallbacks. Duplicate subdivision claims are rejected. |
is_default
|
boolean |
Read-only invariant; false for create and unchanged for update. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Get a shipping zone
Get a shipping zone.
Returns one zone in the market.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Update a shipping zone
Update a shipping zone.
Replaces a zone definition. The default flag cannot be moved or cleared; the default zone cannot contain explicit regions.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Zone name. |
description
|
string |
Zone description. |
countries
|
string[] |
ISO country codes. Each country without selected subdivisions is a fallback for its remaining regions. |
subdivisions
|
string[] |
Subdivision codes belonging to the selected countries. Explicit subdivision zones take precedence over country fallbacks. Duplicate subdivision claims are rejected. |
is_default
|
boolean |
Read-only invariant; false for create and unchanged for update. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Delete a shipping zone
Delete a shipping zone.
Deletes a non-default zone and cascades its methods and rates. If the zone has methods, retry with the confirmation token returned by CONFIRMATION_REQUIRED.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
confirmed
|
boolean |
Set true only when retrying after CONFIRMATION_REQUIRED. |
confirmation_token
|
string |
Single-use token returned by CONFIRMATION_REQUIRED. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Get shipping method limits
Get shipping method limits.
Returns live method name/description and rates-per-method limits.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
List shipping methods
List shipping methods.
Returns methods and exact decimal rates for a zone. Price tiers use min_values/max_values per currency.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Create a shipping method
Create a shipping method.
Creates free, flat, order-weight, order-value, item-count tiers (item), or per-item shipping (per_item). Per-item multiplies the unit charge by total shippable quantity before currency conversion and rounding. A matched weight, value, or quantity tier returns its configured shipping charge once. Every non-free rate requires a base-currency price. Other enabled currencies are optional exact overrides; absent overrides are converted from the base amount using the store currency conversion rate and rounding policy. Tier bounds are contiguous [min,max) ranges beginning at zero. Weight bounds use the saved weight_unit (g, kg, lb, or oz); create defaults to g. Value bounds are post-discount merchandise subtotals, and quantity bounds use the total shippable item quantity.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Method name. |
description
|
string |
Method description. |
rate_type
required
|
string |
free, flat, weight, price, item (item-count tiers), or per_item (unit charge multiplied by shippable quantity). |
weight_unit
|
string |
g, kg, lb, or oz. Defaults to g on create; omission preserves the current unit on update. Weight tier min_value/max_value are expressed in this saved method unit. Changing the unit reinterprets the supplied boundaries. Other rate types do not use the unit. |
is_active
required
|
boolean |
Availability. |
tax_class_id
|
string|null |
Shared market tax class. |
hsn_code
|
string |
Canonicalizable HS code. |
rates
|
array |
Exact-decimal tier rows. prices requires the base currency and may include exact overrides for other enabled currencies; absent overrides are converted. For tier methods, prices is the complete shipping charge. per_item instead requires exactly one price row with min_value=0 and max_value=null, no currency boundary maps; prices is a per-unit charge multiplied by total shippable quantity before FX rounding. Weight and item tiers use scalar min_value/max_value; weight bounds use the method's saved weight_unit and item bounds are quantities. Price tiers require base-currency min_values/max_values and may provide complete per-currency boundary overrides. All bounds use [min,max), begin at zero, and must be contiguous. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Get a shipping method
Get a shipping method.
Returns one method with its full rates.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
methodId
required
|
uuid |
Shipping method ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Update a shipping method
Update a shipping method.
Replaces a method and its complete rate set with the same validation rules as create.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
methodId
required
|
uuid |
Shipping method ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Method name. |
description
|
string |
Method description. |
rate_type
required
|
string |
free, flat, weight, price, item (item-count tiers), or per_item (unit charge multiplied by shippable quantity). |
weight_unit
|
string |
g, kg, lb, or oz. Defaults to g on create; omission preserves the current unit on update. Weight tier min_value/max_value are expressed in this saved method unit. Changing the unit reinterprets the supplied boundaries. Other rate types do not use the unit. |
is_active
required
|
boolean |
Availability. |
tax_class_id
|
string|null |
Shared market tax class. |
hsn_code
|
string |
Canonicalizable HS code. |
rates
|
array |
Exact-decimal tier rows. prices requires the base currency and may include exact overrides for other enabled currencies; absent overrides are converted. For tier methods, prices is the complete shipping charge. per_item instead requires exactly one price row with min_value=0 and max_value=null, no currency boundary maps; prices is a per-unit charge multiplied by total shippable quantity before FX rounding. Weight and item tiers use scalar min_value/max_value; weight bounds use the method's saved weight_unit and item bounds are quantities. Price tiers require base-currency min_values/max_values and may provide complete per-currency boundary overrides. All bounds use [min,max), begin at zero, and must be contiguous. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Delete a shipping method
Delete a shipping method.
Deletes a method and all of its rates. If rates exist, retry with the confirmation token returned by CONFIRMATION_REQUIRED.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
zoneId
required
|
uuid |
Shipping zone ID. |
methodId
required
|
uuid |
Shipping method ID. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
confirmed
|
boolean |
Set true only when retrying after CONFIRMATION_REQUIRED. |
confirmation_token
|
string |
Single-use token returned by CONFIRMATION_REQUIRED. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYmarketIdmust be a valid UUID. -
400STORE_API_INVALID_REQUEST_BODYThe JSON request body is malformed.
-
400SHIPPING_SETTINGS_TYPE_INVALIDThe simple shipping type is not free, flat, or threshold.
-
400TAX_CLASS_NOT_IN_MARKETThe selected tax class does not belong to this market.
-
400SHIPPING_RATE_TYPE_INVALIDThe method rate type is not a Store API-writable manual type.
-
400SHIPPING_RATES_REQUIREDThis rate type requires at least one rate row.
-
400SHIPPING_RATES_LIMITThe method contains more rate rows than the published limit.
-
400SHIPPING_RATE_FLAT_SINGLEA flat method must contain exactly one rate row.
-
400SHIPPING_RATE_PRICES_REQUIREDA paid rate is missing its prices map.
-
400SHIPPING_RATE_TIER_GAPTier boundaries do not cover a contiguous range beginning at zero.
-
400SHIPPING_RATE_TIER_OVERLAPTwo tier boundaries overlap.
-
400SHIPPING_RATE_COORDINATE_MISMATCHA price-tier currency override is incomplete across its prices and boundaries.
-
400SHIPPING_RATE_ITEM_COUNT_INVALIDAn item-quantity boundary is not a valid whole number within the published limit.
-
400SHIPPING_RATE_BASE_PRICE_REQUIREDA rate is missing its required base-currency price.
-
400SHIPPING_RATE_THRESHOLDS_REQUIREDA price tier is missing its currency boundary maps.
-
400SHIPPING_RATE_THRESHOLD_BASE_REQUIREDA price tier is missing its required base-currency boundary.
-
400SHIPPING_RATE_CURRENCY_UNKNOWNA rate contains a currency that is not enabled for the market.
-
400SHIPPING_RATE_PRICE_INVALIDA rate price is not a valid exact decimal.
-
400SHIPPING_RATE_PRICE_NEGATIVEA rate price is negative.
-
400SHIPPING_RATE_PRICE_TOO_LARGEA rate price exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_PRICE_TOO_PRECISEA rate price exceeds that currency's decimal precision.
-
400SHIPPING_RATE_THRESHOLD_INVALIDA price-tier boundary is not a valid exact decimal.
-
400SHIPPING_RATE_THRESHOLD_NEGATIVEA price-tier boundary is negative.
-
400SHIPPING_RATE_THRESHOLD_TOO_LARGEA price-tier boundary exceeds the backend-published monetary limit.
-
400SHIPPING_RATE_THRESHOLD_TOO_PRECISEA price-tier boundary exceeds that currency's decimal precision.
-
400SHIPPING_RATE_MIN_INVALIDA weight or item tier minimum is invalid.
-
400SHIPPING_RATE_MIN_NEGATIVEA weight or item tier minimum is negative.
-
400SHIPPING_RATE_MAX_INVALIDA weight or item tier maximum is invalid.
-
400SHIPPING_RATE_MAX_NEGATIVEA weight or item tier maximum is negative.
-
400SHIPPING_RATE_MIN_ABOVE_MAXA tier minimum is not below its maximum.
-
400SHIPPING_RATE_DATA_INVALIDA stored rate violates the shipping contract.
-
400SHIPPING_ZONE_DEFAULT_DELETE_LOCKEDThe immutable default zone cannot be deleted.
-
400SHIPPING_ZONE_DEFAULT_UNSET_LOCKEDThe immutable default zone cannot be converted to an explicit zone.
-
400SHIPPING_ZONE_DEFAULT_CREATE_LOCKEDOnly the advanced-mode transition can create the default zone.
-
400ZONE_COUNTRY_INVALIDA zone country does not belong to this market.
-
400ZONE_SUBDIVISION_INVALIDA subdivision code is invalid.
-
400ZONE_SUBDIVISION_NOT_IN_COUNTRYA subdivision does not belong to a country selected in the zone.
-
400ZONE_COUNTRY_TAKENAnother zone already provides the fallback for this country. Select unclaimed subdivisions or edit the existing fallback.
-
400ZONE_SUBDIVISION_TAKENAnother zone already claims the subdivision.
-
409SHIPPING_ADVANCED_REQUIREDThe persisted shipping mode must be advanced. First save shipping settings with mode=advanced and wait for success, then retry the zone or method request.
-
409SHIPPING_ZONE_NAME_DUPLICATEAnother zone in this market already has this name.
-
409SHIPPING_METHOD_NAME_DUPLICATEAnother method in this zone already has this name.
-
409SHIPPING_ZONE_LIMIT_REACHEDThe market has reached its published zone limit.
-
409SHIPPING_METHOD_LIMIT_REACHEDThe zone has reached its published method limit.
-
409CONFIRMATION_REQUIREDA destructive mode transition requires confirmation.
-
404MARKET_NOT_FOUNDThe market does not exist in this store.
-
404SHIPPING_ZONE_NOT_FOUNDThe shipping zone does not exist in this market.
-
404SHIPPING_METHOD_NOT_FOUNDThe shipping method does not exist in this zone.
Webhook events#
Shipping events are inserted in the same database transaction as each write. A settings event with mode simple means the market's advanced shipping state was removed; deleting a zone also removes its methods and rates.
Shipping settings updated
Fired when a market's shipping mode or simple shipping settings change.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_settings.id |
string |
Always present |
shipping_settings.market_id |
string |
Selectable in the Payload builder |
shipping_settings.mode |
string |
Selectable in the Payload builder |
shipping_settings.shipping_type |
string |
Selectable in the Payload builder |
shipping_settings.flat_rate |
object |
Selectable in the Payload builder |
shipping_settings.free_threshold |
object |
Selectable in the Payload builder |
shipping_settings.threshold_rate |
object |
Selectable in the Payload builder |
shipping_settings.tax_class_id |
string |
Selectable in the Payload builder |
shipping_settings.hsn_code |
string |
Selectable in the Payload builder |
shipping_settings.created_at |
string |
Selectable in the Payload builder |
shipping_settings.updated_at |
string |
Selectable in the Payload builder |
Shipping zone created
Fired when a shipping zone is created in a market.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_zone.id |
string |
Always present |
shipping_zone.market_id |
string |
Selectable in the Payload builder |
shipping_zone.name |
string |
Selectable in the Payload builder |
shipping_zone.description |
string |
Selectable in the Payload builder |
shipping_zone.countries |
array |
Selectable in the Payload builder |
shipping_zone.subdivisions |
array |
Selectable in the Payload builder |
shipping_zone.is_default |
boolean |
Selectable in the Payload builder |
shipping_zone.priority |
integer |
Selectable in the Payload builder |
shipping_zone.created_at |
string |
Selectable in the Payload builder |
shipping_zone.updated_at |
string |
Selectable in the Payload builder |
Shipping zone updated
Fired when a shipping zone changes.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_zone.id |
string |
Always present |
shipping_zone.market_id |
string |
Selectable in the Payload builder |
shipping_zone.name |
string |
Selectable in the Payload builder |
shipping_zone.description |
string |
Selectable in the Payload builder |
shipping_zone.countries |
array |
Selectable in the Payload builder |
shipping_zone.subdivisions |
array |
Selectable in the Payload builder |
shipping_zone.is_default |
boolean |
Selectable in the Payload builder |
shipping_zone.priority |
integer |
Selectable in the Payload builder |
shipping_zone.created_at |
string |
Selectable in the Payload builder |
shipping_zone.updated_at |
string |
Selectable in the Payload builder |
Shipping zone deleted
Fired when a shipping zone is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_zone.id |
string |
Always present |
shipping_zone.market_id |
string |
Selectable in the Payload builder |
shipping_zone.name |
string |
Selectable in the Payload builder |
Shipping method created
Fired when a shipping method and its rates are created.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_method.id |
string |
Always present |
shipping_method.market_id |
string |
Selectable in the Payload builder |
shipping_method.shipping_zone_id |
string |
Selectable in the Payload builder |
shipping_method.name |
string |
Selectable in the Payload builder |
shipping_method.description |
string |
Selectable in the Payload builder |
shipping_method.tax_class_id |
string |
Selectable in the Payload builder |
shipping_method.hsn_code |
string |
Selectable in the Payload builder |
shipping_method.rate_type |
string |
Selectable in the Payload builder
free, flat, weight, price, item (one charge for the matching quantity tier), or per_item (unit charge multiplied by shippable quantity before currency conversion and rounding). |
shipping_method.weight_unit |
string |
Selectable in the Payload builder
Saved weight-tier unit: g, kg, lb, or oz. Bounds use this unit. Other rate types ignore it. |
shipping_method.is_active |
boolean |
Selectable in the Payload builder |
shipping_method.sort_order |
integer |
Selectable in the Payload builder |
shipping_method.rates[*].id |
string |
Selectable in the Payload builder |
shipping_method.rates[*].min_value |
string |
Selectable in the Payload builder
Inclusive minimum and exclusive maximum. Weight bounds use the saved weight_unit; item bounds use shippable quantity. per_item uses one row beginning at zero with no upper bound. An absent maximum means unbounded. |
shipping_method.rates[*].max_value |
string |
Selectable in the Payload builder
Inclusive minimum and exclusive maximum. Weight bounds use the saved weight_unit; item bounds use shippable quantity. per_item uses one row beginning at zero with no upper bound. An absent maximum means unbounded. |
shipping_method.rates[*].min_values |
object |
Selectable in the Payload builder |
shipping_method.rates[*].max_values |
object |
Selectable in the Payload builder |
shipping_method.rates[*].prices |
object |
Selectable in the Payload builder
Exact-decimal currency map. For per_item these are per-unit charges; for tier methods these are complete shipping charges. Missing currency overrides use base-currency conversion. |
shipping_method.created_at |
string |
Selectable in the Payload builder |
shipping_method.updated_at |
string |
Selectable in the Payload builder |
Shipping method updated
Fired when a shipping method or its rates change.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_method.id |
string |
Always present |
shipping_method.market_id |
string |
Selectable in the Payload builder |
shipping_method.shipping_zone_id |
string |
Selectable in the Payload builder |
shipping_method.name |
string |
Selectable in the Payload builder |
shipping_method.description |
string |
Selectable in the Payload builder |
shipping_method.tax_class_id |
string |
Selectable in the Payload builder |
shipping_method.hsn_code |
string |
Selectable in the Payload builder |
shipping_method.rate_type |
string |
Selectable in the Payload builder
free, flat, weight, price, item (one charge for the matching quantity tier), or per_item (unit charge multiplied by shippable quantity before currency conversion and rounding). |
shipping_method.weight_unit |
string |
Selectable in the Payload builder
Saved weight-tier unit: g, kg, lb, or oz. Bounds use this unit. Other rate types ignore it. |
shipping_method.is_active |
boolean |
Selectable in the Payload builder |
shipping_method.sort_order |
integer |
Selectable in the Payload builder |
shipping_method.rates[*].id |
string |
Selectable in the Payload builder |
shipping_method.rates[*].min_value |
string |
Selectable in the Payload builder
Inclusive minimum and exclusive maximum. Weight bounds use the saved weight_unit; item bounds use shippable quantity. per_item uses one row beginning at zero with no upper bound. An absent maximum means unbounded. |
shipping_method.rates[*].max_value |
string |
Selectable in the Payload builder
Inclusive minimum and exclusive maximum. Weight bounds use the saved weight_unit; item bounds use shippable quantity. per_item uses one row beginning at zero with no upper bound. An absent maximum means unbounded. |
shipping_method.rates[*].min_values |
object |
Selectable in the Payload builder |
shipping_method.rates[*].max_values |
object |
Selectable in the Payload builder |
shipping_method.rates[*].prices |
object |
Selectable in the Payload builder
Exact-decimal currency map. For per_item these are per-unit charges; for tier methods these are complete shipping charges. Missing currency overrides use base-currency conversion. |
shipping_method.created_at |
string |
Selectable in the Payload builder |
shipping_method.updated_at |
string |
Selectable in the Payload builder |
Shipping method deleted
Fired when a shipping method is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
shipping_method.id |
string |
Always present |
shipping_method.market_id |
string |
Selectable in the Payload builder |
shipping_method.name |
string |
Selectable in the Payload builder |