Currencies

Currencies are store configuration, not catalog data. Reads use read_currencies; writes use write_currencies and go through the same storefront-service validation as the admin — the gateway only checks scope and resolves the store from the token.

Three facts shape every call. The base currency is fixed when the store is created: it cannot be created, edited, disabled, or deleted through any API, and every price the API returns is denominated in it unless a market currency applies. Multi-currency is a plan capability resolved server-side — a request cannot claim it. And rates are decimal strings: send conversion_rate exactly as typed ("0.0105"), never as a float, or precision is lost.

In automatic-rate mode the platform manages rates from the market table and manual adds, rate edits, and deletes are rejected; in manual mode you own each rate and the market rate is only a reference. Bulk currency operations are intentionally admin-only and absent here.

Endpoints#

List currencies

GET read_currencies

List the store's currencies with their settings.

Returns every currency the store has configured — the base plus any added — each with its conversion rate, rounding mode, and enabled state, alongside the store-level currency settings: whether multi-currency is enabled and allowed by the plan, whether rates are automatic, the available rounding modes, and the per-store currency cap.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

Enabled currencies

GET read_currencies

The lean priceable set: currencies a shopper can actually pay in.

Returns only the enabled currencies with the fields needed to display prices — code, name, symbol, decimals, conversion rate, rounding mode — with the base flagged. This is the endpoint to build a storefront currency selector from; it deliberately carries no settings or plan metadata.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

Base currency

GET read_currencies

Fetch the store's base currency.

A single indexed read for the currency every price in the API is denominated in (unless a market currency applies). The base is fixed when the store is created and never changes.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

All exchange rates

GET read_currencies

Current market rates for every supported currency, relative to the store's base.

Returns the full market rate table computed against the store's base currency. Each entry carries the rate in both directions as decimal strings — rate is how much base one unit of the currency buys, rate_inverse is how many units one base unit buys — plus the table's last update time.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

One exchange rate

GET read_currencies

Current market rate for one currency code.

Returns the market rate for a single ISO currency code relative to the store's base, in both directions, with its last update time. Useful when suggesting a rate while a merchant sets a manual one.

Path parameters

Name Type Description
code required string

ISO 4217 currency code.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 400 BILLING_EXCHANGE_RATE_UNAVAILABLE

    No market rate exists for this currency code.

Get a currency

GET read_currencies

Fetch one store currency by id.

Returns the currency if it belongs to the token's store, with its conversion rate, rounding mode, and enabled state.

Path parameters

Name Type Description
id required string

Store currency id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 404 CURRENCY_NOT_FOUND

    Currency does not exist in this store.

Add a currency

POST write_currencies

Add a currency to the store with a manual conversion rate.

Adds a non-base currency. conversion_rate is a positive decimal string meaning 1 <base> = rate <code> — send the exact string, never a float. Fails when multi-currency is off or not in the plan, when automatic rates are on (rates are market-managed then), at the per-store currency cap, or for an unknown/duplicate code. is_base is never accepted.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
code required string

ISO 4217 currency code to add.

Example: "EUR"
conversion_rate required string

Positive decimal string: 1 base = rate code.

Example: "0.0105"

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 400 CURRENCY_INVALID_CODE

    Not a supported ISO 4217 currency code.

  • 400 CURRENCY_ALREADY_EXISTS

    The store already has this currency.

  • 400 CURRENCY_LIMIT_REACHED

    Per-store currency cap has been reached.

  • 400 CURRENCY_CONVERSION_RATE_POSITIVE

    conversion_rate must be a positive decimal.

  • 400 CURRENCY_CONVERSION_RATE_TOO_PRECISE

    conversion_rate exceeds the allowed decimal precision.

  • 400 CURRENCY_AUTO_MODE_ADD_FORBIDDEN

    Currencies cannot be added manually while automatic rates are on.

  • 400 CURRENCY_PLAN_UNSUPPORTED

    The store's plan does not include multi-currency.

  • 400 CURRENCY_MULTI_CURRENCY_DISABLED

    Multi-currency is turned off for this store.

Update a currency

PUT write_currencies

Change a currency's rate, enabled state, and rounding mode.

Updates a non-base currency. The base currency is immutable and requests against it are rejected. In automatic-rate mode the rate is market-managed and manual rate changes are rejected.

Path parameters

Name Type Description
id required string

Store currency id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
conversion_rate required string

Positive decimal string: 1 base = rate code.

Example: "0.0105"
is_enabled required boolean

Whether shoppers can use this currency.

Example: true
rounding_mode required string

One of the store's rounding modes (see currencies.list).

Example: "nearest_99"

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 404 CURRENCY_NOT_FOUND

    Currency does not exist in this store.

  • 400 CURRENCY_BASE_EDIT_FORBIDDEN

    The base currency cannot be edited.

  • 400 CURRENCY_CONVERSION_RATE_POSITIVE

    conversion_rate must be a positive decimal.

  • 400 CURRENCY_INVALID_ROUNDING_MODE

    rounding_mode is not one of the store's rounding modes.

  • 400 CURRENCY_AUTO_MODE_RATE_FORBIDDEN

    Rates are market-managed while automatic rates are on.

Remove a currency

DELETE write_currencies

Remove a non-base currency from the store.

Deletes the currency. The base currency cannot be deleted, and a currency still referenced by a market must be removed from that market first.

Path parameters

Name Type Description
id required string

Store currency id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 404 CURRENCY_NOT_FOUND

    Currency does not exist in this store.

  • 400 CURRENCY_BASE_DELETE_FORBIDDEN

    The base currency cannot be deleted.

  • 400 CURRENCY_MARKET_USAGE_IN_USE

    The currency is used by a market; remove it from the market first.

  • 400 CURRENCY_AUTO_MODE_DELETE_FORBIDDEN

    Currencies cannot be deleted manually while automatic rates are on.

Set rounding mode

PUT write_currencies

Set the price rounding rule for one currency.

Sets how converted prices are tidied for this currency. The base currency never rounds — it is the source of truth — so requests against it are rejected.

Path parameters

Name Type Description
id required string

Store currency id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
rounding_mode required string

One of the store's rounding modes (see currencies.list).

Example: "nearest_95"

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 404 CURRENCY_NOT_FOUND

    Currency does not exist in this store.

  • 400 CURRENCY_INVALID_ROUNDING_MODE

    rounding_mode is not one of the store's rounding modes.

  • 400 CURRENCY_BASE_ROUNDING_FORBIDDEN

    The base currency never rounds.

Toggle multi-currency

PUT write_currencies

Turn selling in additional currencies on or off.

Enables or disables multi-currency for the store. The plan capability is resolved server-side — a plan without multi-currency cannot enable it regardless of the request.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
enabled required boolean

Whether multi-currency selling is on.

Example: true

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 400 CURRENCY_PLAN_UNSUPPORTED

    The store's plan does not include multi-currency.

Toggle automatic rates

PUT write_currencies

Switch between market-managed and manual exchange rates.

Turning automatic rates ON requires no manually-added currencies to exist. Turning them OFF snapshots the current market rates onto each enabled currency, which you then own as manual rates.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
enabled required boolean

Whether exchange rates follow the market automatically.

Example: true

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    Token's per-window quota exceeded. Retry after the Retry-After header.

  • 400 CURRENCY_AUTO_ENABLE_BLOCKED

    Remove manually-added currencies before enabling automatic rates.

  • 400 CURRENCY_AUTO_RATES_NOT_ENABLED

    Automatic rates require multi-currency to be on.