> ## Documentation Index
> Fetch the complete documentation index at: https://developer.jtl-software.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Declaratively replaces the complete set of currencies assigned to a shop.

> 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.



## OpenAPI

````yaml /openapi/erp/2.1.json put /v2/sales-channels/{salesChannelId}/shop/currencies
openapi: 3.0.0
info:
  title: JTL-WAWI API (Cloud)
  description: "JTL-Wawi-Version: 2.2.0-alpha.9415+Sha.4655524\r\n# Introduction\r\n\r\nWelcome to the JTL-WAWI technical API documentation. This guide is here to help developers understand how our REST API works and how it can be integrated into your existing systems. We'll delve into the details of authentication and data manipulation processes, providing clear examples along the way. Whether you're a developer or an IT professional, this documentation aims to give you a practical understanding, laying the groundwork for effectively using the JTL-WAWI API to enhance your processes.\r\n\r\n# Authentication\r\n\r\nYou register your application with the API by sending a POST request with the required information and corresponding keys. You can find the exact request details at https://developer.jtl-software.com/products/erp/swagger/appregistration. This information has to include the following:\r\n\r\n* AppId\r\n* DisplayName\r\n* Description\r\n* Version\r\n* ProviderName\r\n* ProviderWebsite\r\n* MandatoryApiScopes\r\n\r\nThis data is crucial for identifying and registering your application with the API. The API uses it to generate a temporary authentication ID that allows your application to access the necessary resources. After successful validation of this information, you will receive the API key required for future authentication and API requests.\r\n\r\nBefore you can begin the registration process, you must open JTL-Wawi (new interface) and start the registration process under 'Admin->App registration'. Only at this point are you authorised to send the first API call. This step in JTL-Wawi ensures that your application is properly registered and has permission to use the API.\r\n\r\nThe API will send you an authentication ID in the form of a token. Once you have received this token and successfully completed the registration in JTL-Wawi, you will send another request to the API by including this authentication ID in the URL path.\r\n\r\nAfter successful validation of this second request by the API and confirmation of the correct information, you will be provided with the actual API key. It is important to note that this API key will not be displayed again!\r\n\r\nThis API key will be used in the future to authenticate requests to the API. It is of utmost importance that you securely store the API key upon receipt, as it cannot be retrieved from any other location in the system."
  contact:
    name: JTL-Software-GmbH
    url: https://developer.jtl-software.com/
    email: partner@jtl-software.com
  version: '2.1'
  x-application-version: 2.2.0.0
servers:
  - url: https://api.jtl-cloud.com/erp
    description: Production Environment Cloud API Gateway
security: []
tags:
  - name: WMS
    description: >-
      <p data-section-id='tag/WMS' class='stable_summary'></p>Query all pick
      lists for a specific wms warehouse that are not completed.
  - name: Wawi App
    description: >-
      <p data-section-id='tag/Wawi App' class='stable_summary'></p>Get a
      specific customer
  - name: Warehouses
    description: >-
      <p data-section-id='tag/Warehouses' class='stable_summary'></p>Queries all
      storage locations for a given warehouse.
  - name: Units
    description: Development
  - name: Transaction Status
    description: >-
      <p data-section-id='tag/Transaction Status'
      class='stable_summary'></p>Queries all transaction statuses for a sales
      order.
  - name: Tax
    description: >-
      <p data-section-id='tag/Tax' class='stable_summary'></p>Returns the tax
      rate for the given item.
  - name: Inventory
    description: >-
      <p data-section-id='tag/Inventory' class='stable_summary'></p>Queries
      stocks for a specific item, warehouse or storage location.
  - name: Sales Order
    description: Planned
  - name: Sales Invoice Correction
    description: Planned
  - name: Return
    description: >-
      <p data-section-id='tag/Return' class='beta_summary'></p>Create a new
      return with associated items and packages.
  - name: Item
    description: >-
      <p data-section-id='tag/Item' class='beta_summary'></p>Queries all
      responsible persons.
  - name: Refund
    description: Planned
  - name: Property
    description: >-
      <p data-section-id='tag/Property' class='stable_summary'></p>Queries all
      properties of items.
  - name: Printer
    description: >-
      <p data-section-id='tag/Printer' class='beta_summary'></p>Retrieves all
      installed printers.
  - name: Master Data
    description: >-
      <p data-section-id='tag/Master Data' class='stable_summary'></p>Queries
      all on hold reasons for sales orders.
  - name: Manufacturer
    description: Development
  - name: Label
    description: Development
  - name: Sales Invoice
    description: Planned
  - name: Info
    description: >-
      <p data-section-id='tag/Info' class='stable_summary'></p>Returns the
      status of the API.
  - name: Features
    description: >-
      <p data-section-id='tag/Features' class='stable_summary'></p>Returns the
      available feature sets with release state and API version.
  - name: Extensibility
    description: Planned
  - name: Shipment
    description: Development
  - name: Delivery Note
    description: Planned
  - name: Custom Field
    description: Development
  - name: Customer
    description: >-
      <p data-section-id='tag/Customer' class='stable_summary'></p>Deletes a
      specific customer.
  - name: Authentication
    description: >-
      <p data-section-id='tag/Authentication'
      class='deprecated_summary'></p>DEPRECATED seit Wawi 2.2.0: No-Op. Seit
      Wawi 2.1.0 registriert sich die Wawi selbst per JWT.
  - name: Attribute
    description: Development
  - name: Sales Quotation
    description: >-
      <p data-section-id='tag/Sales Quotation' class='beta_summary'></p>Execute
      the printing of a sales quotation
  - name: Production
  - name: Resources
  - name: Company
  - name: Sales Orders
  - name: Marketplace Order
  - name: Marketplace Offer
  - name: Marketplace Invoicing
  - name: Sales Channel
  - name: Payment
  - name: Warehouse Assistant
  - name: Worker
paths:
  /v2/sales-channels/{salesChannelId}/shop/currencies:
    put:
      tags:
        - wawi
        - Sales Channel
      summary: >-
        Declaratively replaces the complete set of currencies assigned to a
        shop.
      description: >-
        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.
      operationId: Shop_SaveShopCurrencies
      parameters:
        - name: salesChannelId
          in: path
          required: true
          description: >-
            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.
          schema:
            type: string
        - name: x-tenant-id
          in: header
          required: true
          schema:
            type: string
            format: uuid
          description: The tenant ID for the target ERP instance.
      requestBody:
        x-name: SaveShopCurrenciesRequest
        description: ''
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/JTL.Wawi.Verkaufskanaele.PublicApi.Endpoints.V2.Shop.SaveShopCurrenciesRequest
        required: true
        x-position: 1
      responses:
        '200':
          description: >-
            Successfully replaced the shop currencies. Returns the resulting
            assignments with their canonical codes and resolved display names.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.SaveShopCurrenciesCommandResponse
        '400':
          description: >-
            The currency list is empty; no assignment or more than one
            assignment is marked as the default; a submitted CurrencyCode does
            not match the accepted form; a submitted CurrencyCode does not
            resolve to a currency in the Wawi currency master data; or the same
            currency is named more than once (compared case-insensitively). No
            assignment is changed.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/FastEndpoints.ProblemDetails'
        '401':
          description: Unauthorized.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/FastEndpoints.ProblemDetails'
        '403':
          description: Forbidden.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/FastEndpoints.ProblemDetails'
        '404':
          description: >-
            Malformed or invalid sales channel id, or no shop exists for the
            specified sales channel id.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/FastEndpoints.ProblemDetails'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/FastEndpoints.ProblemDetails'
      security:
        - oauth2-authorization-code:
            - saleschannels.write
        - oauth2-client-credentials:
            - saleschannels.write
components:
  schemas:
    JTL.Wawi.Verkaufskanaele.PublicApi.Endpoints.V2.Shop.SaveShopCurrenciesRequest:
      type: object
      description: >-
        Request model for SaveShopCurrencies command endpoint.

        Route parameters bind from the route, query parameters from the query
        string, everything else from the body.
      additionalProperties: false
      required:
        - currencies
      properties:
        currencies:
          type: array
          description: >-
            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.
          items:
            $ref: >-
              #/components/schemas/JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.ShopCurrencyCodeAssignment
    JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.SaveShopCurrenciesCommandResponse:
      type: object
      description: >-
        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
      additionalProperties: false
      required:
        - currencies
      properties:
        currencies:
          type: array
          description: >-
            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.
          items:
            $ref: >-
              #/components/schemas/JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.ShopCurrencyListItem
    FastEndpoints.ProblemDetails:
      type: object
      additionalProperties: false
      properties:
        type:
          type: string
          default: https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1
        title:
          type: string
          default: One or more validation errors occurred.
        status:
          type: integer
          format: int32
          default: 400
        instance:
          type: string
          default: /api/route
        traceId:
          type: string
          default: 0HMPNHL0JHL76:00000001
        detail:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/FastEndpoints.ProblemDetails_Error'
    JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.ShopCurrencyCodeAssignment:
      type: object
      description: >-
        A single currency to assign to a shop, identified by its currency code
        rather than by the internal surrogate key (ADR-85).
      additionalProperties: false
      required:
        - currencyCode
        - isDefault
      properties:
        currencyCode:
          type: string
          description: >-
            Code of the currency to assign, in ISO 4217 alpha-3 form (EUR) or in
            the ISO 4217 private-use namespace for tenant-defined currencies
            that carry no standard code (x-loyalty). This is the identifier of
            the currency (ADR-85) - the internal surrogate key (kWaehrung) is
            never accepted here. Matched case-insensitively, so eur and EUR name
            the same currency; the response always carries the canonical form
            (uppercase for ISO codes, lowercase x- prefix for tenant-defined
            ones). Only the FORM of the code is validated - membership in the
            ISO 4217 register is not verified, because the Wawi ships no
            register; the code must however resolve to a currency that exists in
            the Wawi currency master data, otherwise the request is rejected
            with 400. Retirement of withdrawn codes (aliasing,
            Deprecation/Sunset headers, 410 Gone) is deliberately out of scope
            here - it needs the central code registry from the pending ADR-85
            implementation tickets.
        isDefault:
          type: boolean
          description: >-
            This currency is the shop default currency. Exactly one assignment
            in the request must set this flag.
    JTL.Wawi.Verkaufskanaele.PublicApi.DataTransferObjects.V2.Shop.ShopCurrencyListItem:
      type: object
      description: A single currency assigned to a shop, as persisted by the save command.
      additionalProperties: false
      required:
        - currencyCode
        - isDefault
      properties:
        currencyCode:
          type: string
          description: >-
            Code of the assigned currency in its canonical form - uppercase for
            ISO 4217 alpha-3 codes, lowercase x- prefix for tenant-defined
            codes. This is the identifier of the currency (ADR-85); the internal
            surrogate key (kWaehrung) is not exposed.
        name:
          type: string
          description: >-
            Display name of the currency as stored in the Wawi currency master
            data, or null if unset.
        isDefault:
          type: boolean
          description: This currency is the shop default currency.
    FastEndpoints.ProblemDetails_Error:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          default: Error or field name
        reason:
          type: string
          default: Error reason
        code:
          type: string
        severity:
          type: string
  securitySchemes:
    oauth2-authorization-code:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.jtl-cloud.com/oauth2/auth
          tokenUrl: https://auth.jtl-cloud.com/oauth2/token
          scopes:
            inventories.write: Grants permission to modify stock levels.
            inventory.read: Grants permission to read stock levels.
            inventory.write: Grants permission to modify stock levels.
            items.read: Grants permission to read item data.
            items.write: Grants permission to create and modify item data.
            saleschannels.read: Grants permission to read sales channels.
            saleschannels.write: Grants permission to create and modify sales channels.
            all.read: Allows the application to read all data.
            customers.read: Grants permission to read customer data.
            customers.write: Grants permission to create and modify customer data.
            customfields.read: Grants permission to read custom fields.
            customfields.write: Grants permission to create and modify custom fields.
            deliveries.read: Grants permission to read deliveries.
            deliveries.write: Grants permission to create and modify deliveries.
            deliverynotes.print: Grants permission to print and output delivery notes.
            deliverynotes.read: Grants permission to read delivery notes.
            deliverynotes.write: Grants permission to create and modify delivery notes.
            extensibility.integration: >-
              Grants permission to manage extensions and integrations of the
              JTL-Wawi.
            inventories.read: Grants permission to read stock levels.
            invoices.read: Grants permission to read invoices.
            invoices.write: Grants permission to create and modify invoices.
            labels.read: Grants permission to read labels.
            labels.write: Grants permission to create and modify labels.
            masterdata.read: >-
              Read master data such as shipping methods, payment methods, color
              codes and tax classes.
            orders.read: Grants permission to read orders.
            picklists.read: Grants permission to read pick lists.
            picklists.write: Grants permission to create and modify pick lists.
            returns.read: Grants permission to read returns.
            returns.write: Grants permission to create and modify returns.
            salesinvoicecorrections.read: Grants permission to read invoice corrections.
            salesinvoicecorrections.write: Grants permission to create and modify invoice corrections.
            salesorders.print: Grants permission to print and output sales orders.
            salesorders.read: Grants permission to read sales orders.
            salesorders.write: Grants permission to create and modify sales orders.
            system.config.read: Grants permission to read the system configuration.
            system.config.write: Grants permission to modify the system configuration.
            taxes.read: Grants permission to read tax data.
            warehouse.read: Grants permission to read warehouse data.
            wawiapp.all: Grants access to Wawi app related operations.
            currencies.read: Grants read access to currencies.
            jera.read: Grants read access to JERA internal endpoints.
            paymentmethods.read: Grants read access to payment methods.
            payments.read: Ermöglicht den Lesezugriff auf Zahlungen.
            payments.write: Ermöglicht den Schreibzugriff auf Zahlungen.
            salesinvoicecorrections.print: Grants permission to print and output invoice corrections.
            salesinvoices.print: Grants permission to print and output sales invoices.
            salesinvoices.read: Grants read access to sales invoices.
            salesinvoices.write: Grants write access to sales invoices.
            salesquotations.print: Grants permission to print and output sales quotations.
            salesquotations.read: Grants read access to sales quotations.
            salesquotations.write: Grants write access to sales quotations.
            system.worker.read: Worker-Synchronisationen lesen
            system.worker.write: Worker-Synchronisationen schreiben
            resources.read: Grants permission to read resource management data.
            resources.write: Grants permission to create and modify resource management data.
            pps.read: Grants permission to read production data.
            pps.write: Grants permission to create and modify production data.
            channels.read: Grants permission to read marketplace channels.
            invoices.print: >-
              Grants permission to print marketplace external documents
              (invoices, credit notes).
            marketplaceoffers.read: Grants permission to read marketplace offers and offer failures.
            marketplaceoffers.write: Grants permission to create and modify marketplace offers.
            notifications.read: Grants permission to read marketplace notifications.
            orders.write: >-
              Grants permission to modify marketplace order data (exclude/reset
              cancellation, payment, return and shipping uploads).
            masterdata.write: Write master data
            taxes.write: Grants permission to create and modify tax data.
            application.runas: >-
              Allows the application to execute requests on behalf of another
              user.
    oauth2-client-credentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.jtl-cloud.com/oauth2/token
          scopes:
            inventories.write: Grants permission to modify stock levels.
            inventory.read: Grants permission to read stock levels.
            inventory.write: Grants permission to modify stock levels.
            items.read: Grants permission to read item data.
            items.write: Grants permission to create and modify item data.
            saleschannels.read: Grants permission to read sales channels.
            saleschannels.write: Grants permission to create and modify sales channels.
            all.read: Allows the application to read all data.
            customers.read: Grants permission to read customer data.
            customers.write: Grants permission to create and modify customer data.
            customfields.read: Grants permission to read custom fields.
            customfields.write: Grants permission to create and modify custom fields.
            deliveries.read: Grants permission to read deliveries.
            deliveries.write: Grants permission to create and modify deliveries.
            deliverynotes.print: Grants permission to print and output delivery notes.
            deliverynotes.read: Grants permission to read delivery notes.
            deliverynotes.write: Grants permission to create and modify delivery notes.
            extensibility.integration: >-
              Grants permission to manage extensions and integrations of the
              JTL-Wawi.
            inventories.read: Grants permission to read stock levels.
            invoices.read: Grants permission to read invoices.
            invoices.write: Grants permission to create and modify invoices.
            labels.read: Grants permission to read labels.
            labels.write: Grants permission to create and modify labels.
            masterdata.read: >-
              Read master data such as shipping methods, payment methods, color
              codes and tax classes.
            orders.read: Grants permission to read orders.
            picklists.read: Grants permission to read pick lists.
            picklists.write: Grants permission to create and modify pick lists.
            returns.read: Grants permission to read returns.
            returns.write: Grants permission to create and modify returns.
            salesinvoicecorrections.read: Grants permission to read invoice corrections.
            salesinvoicecorrections.write: Grants permission to create and modify invoice corrections.
            salesorders.print: Grants permission to print and output sales orders.
            salesorders.read: Grants permission to read sales orders.
            salesorders.write: Grants permission to create and modify sales orders.
            system.config.read: Grants permission to read the system configuration.
            system.config.write: Grants permission to modify the system configuration.
            taxes.read: Grants permission to read tax data.
            warehouse.read: Grants permission to read warehouse data.
            wawiapp.all: Grants access to Wawi app related operations.
            currencies.read: Grants read access to currencies.
            jera.read: Grants read access to JERA internal endpoints.
            paymentmethods.read: Grants read access to payment methods.
            payments.read: Ermöglicht den Lesezugriff auf Zahlungen.
            payments.write: Ermöglicht den Schreibzugriff auf Zahlungen.
            salesinvoicecorrections.print: Grants permission to print and output invoice corrections.
            salesinvoices.print: Grants permission to print and output sales invoices.
            salesinvoices.read: Grants read access to sales invoices.
            salesinvoices.write: Grants write access to sales invoices.
            salesquotations.print: Grants permission to print and output sales quotations.
            salesquotations.read: Grants read access to sales quotations.
            salesquotations.write: Grants write access to sales quotations.
            system.worker.read: Worker-Synchronisationen lesen
            system.worker.write: Worker-Synchronisationen schreiben
            resources.read: Grants permission to read resource management data.
            resources.write: Grants permission to create and modify resource management data.
            pps.read: Grants permission to read production data.
            pps.write: Grants permission to create and modify production data.
            channels.read: Grants permission to read marketplace channels.
            invoices.print: >-
              Grants permission to print marketplace external documents
              (invoices, credit notes).
            marketplaceoffers.read: Grants permission to read marketplace offers and offer failures.
            marketplaceoffers.write: Grants permission to create and modify marketplace offers.
            notifications.read: Grants permission to read marketplace notifications.
            orders.write: >-
              Grants permission to modify marketplace order data (exclude/reset
              cancellation, payment, return and shipping uploads).
            masterdata.write: Write master data
            taxes.write: Grants permission to create and modify tax data.
            application.runas: >-
              Allows the application to execute requests on behalf of another
              user.

````