Skip to main content
PUT
Declaratively replaces the complete set of currencies assigned to a shop.

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Headers

x-tenant-id
string<uuid>
required

The tenant ID for the target ERP instance.

Path Parameters

salesChannelId
string
required

Sales channel id of the shop whose currencies are replaced. This is a tenant-local, composite identifier and not a UUID (ADR-69) - it is opaque to the caller and must be taken verbatim from a sales channel listing; the internal shop key (kShop) is never accepted here.

Body

application/json

Request model for SaveShopCurrencies command endpoint. Route parameters bind from the route, query parameters from the query string, everything else from the body.

currencies
object[]
required

The complete desired set of currencies for the shop. Any currency currently assigned but not contained in this list is unassigned. Must contain at least one entry, exactly one of which is marked as the default.

Response

Successfully replaced the shop currencies. Returns the resulting assignments with their canonical codes and resolved display names.

Declaratively replaces the complete set of currencies assigned to a shop. The request describes the full desired state - every currency contained in it is assigned and every currency not contained in it is unassigned. The call is therefore idempotent: repeating it with the same body leaves the shop in the same state, and because the currency is addressed by its natural code (ADR-85) rather than by a server-generated surrogate, no clientId or request token is needed to make a retry safe. Exactly one assignment must be marked as the default currency, and the list must not be empty - a shop without any currency cannot price anything, so clearing all assignments is not an accepted target state on this route. Note on the response shape: unlike a command that returns only the minimal necessary data, this one echoes the complete resulting assignment list. That is deliberate - it matches the existing sales channel precedent and the declarative-replace example in ADR-57, and it saves the caller a follow-up read to learn the canonical form and resolved display name of the codes it just submitted. Concurrency: this write is last-writer-wins. It takes no If-Match header and no row version, so two concurrent calls for the same shop overwrite each other without a conflict being reported - the second call simply wins. Callers that need to protect a read-modify-write cycle have to coordinate outside this API. This is a deliberate choice for the first release of the endpoint, not an oversight: the underlying column (bRowversion) is not mapped today, and adding a required precondition later would be a breaking change, so it is called out here rather than left implicit. - Response

currencies
object[]
required

The persisted currency assignments, in the order submitted, with each code normalized to its canonical form and its display name resolved from the Wawi currency master data.