---
schema_version: "1"
id: e9e4f561bc6d84e35f3e552a3f29cdd5de909ebb5cba98eeaf5db03351e5b6a9
title: Promotions
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/commerce-cloud/commerce-api/references/generated-api-specs/promotions.md
canonical_url: https://developer.salesforce.com/docs/commerce/commerce-api/references/promotions
source_site: developer.salesforce.com
content_type: documentation
content_hash: cf761a85b533313350e3c9998b02b46a131c0ebdc52c9991768e018eb938184e
products:
  - B2C Commerce API
  - Salesforce APIs
---
Promotions

# Promotions

[Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/promotions/promotions-oas-v1-public.yaml)

## API Overview

Use the Promotions API to create, update, delete, and search for promotion information on your site. Promotions are configured with rules that define the type of promotion, conditions, and discounts.

This API can be used to synchronize promotion data in the commerce platform with third-party promotion management systems. This API can also be called from a custom promotion management application. In sandbox environments, the Promotions API is useful for creating and updating test data, for example, with integration testing or as part of a continuous integration or continuous deployment process.

For more information, see [Campaigns and Promotions](https://help.salesforce.com/s/articleView?id=cc.b2c_campaigns_and_promotions.htm&type=5) in the B2C Commerce documentation.

### Authentication & Authorization

The client requesting the promotion information must have access to the Promotion resource. For resource access, you must use a client ID and client secret from Account Manager to request an access token. The access token is used as a bearer token and added to the Authorization header of your API request. The client must first authenticate against Account Manager to log in.

You must include the relevant scope(s) in the client ID used to generate the token. For details, see [Authorization Scopes Catalog.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/auth-z-scope-catalog.html)

For detailed setup instructions, see [Authorization for Admin APIs](https://developer.salesforce.com/docs/commerce/commerce-api/guide/authorization-for-admin-apis.html).

### Response Details

#### Timeouts

Admin API requests must respond within 60 seconds. If a response exceeds this threshold, an HTTP 504 status code is returned. For details, see [Timeouts and Limits.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/timeouts-limits.html)

#### Error Handling

Error responses follow the [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) problem detail format. To trace errors, include a `correlation-id` header in your request — the response returns it as `x-correlation-id`. For details, see [HTTP Status Codes and Errors.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/error-response-codes.html)

### Use Cases

**Note**: A promotion can be created, enabled, and assigned exclusivity using the API, but qualifier and discounted criteria must be assigned in Business Manager.

#### Shipping Promotions

Use the Promotions API to configure shipping promotions.

You can configure shipping promotions based on an order and on individual products or product combinations. You can also configure product-specific shipping cost (fixed or surcharge).

**Note**: Product-related shipping discounts are considered product promotions.

In a multiple ship-to scenario, B2C Commerce determines which shipments use any of the discounted shipping methods and applies the discount from most expensive to least expensive until meeting the maximum applications limit, if specified.

For example, create a shipping promotion that gives the customer free shipping when their purchase exceeds $50.

For more detail, see [Shipping Promotions](https://help.salesforce.com/s/articleView?id=cc.b2c_shipping_promotions.htm&type=5) in the B2C Commerce documentation.

#### Product Promotions

Use the Promotions API to configure product promotions.

You can define product promotions for specific products, groups of products or brands, or amounts of products purchased. You can define conditions that require customers to purchase from a set of products.

A product promotion is prorated, calculated, and rounded once per product in the order. A product promotion is different than an order promotion, which is calculated once at the order level, and rounded off once, if necessary.

For example, create a product promotion that discounts a second item by 50% when the customer buys two.

For more detail, see [Product Promotions](https://help.salesforce.com/s/articleView?id=cc.b2c_product_promotions.htm&type=5) in the B2C Commerce documentation.

#### Order Promotions

Use the Promotions API to configure order promotions.

You can configure order promotions for percentage discounts, fixed price discounts, and free shipping. You can offer a bonus product or a choice of bonus products, and you can tier order discounts.

An order promotion is calculated once at the order level, and rounded off once, if necessary. An order promotion is different than a product promotion, where the promotion is prorated, calculated, and rounded per product in the order.

For example, create an order promotion that discounts an entire order when the customer buys 3 qualifying items.

For more detail, see [Order Promotions](https://help.salesforce.com/s/articleView?id=cc.b2c_order_promotions.htm&type=5) in the B2C Commerce documentation.

### Related APIs

*   [Shopper Promotions](https://developer.salesforce.com/docs/commerce/commerce-api/references/shopper-promotions?meta=Summary) — Retrieve active promotions visible to shoppers.
*   [Campaigns](https://developer.salesforce.com/docs/commerce/commerce-api/references/campaigns?meta=Summary) — Manage campaigns that group promotions.
*   [Assignments](https://developer.salesforce.com/docs/commerce/commerce-api/references/assignments?meta=Summary) — Assign promotions and discounts to campaigns.

**Version:** 1.2.0

## Servers

*   `https://{shortCode}.api.commercecloud.salesforce.com/pricing/promotions/v1`
    *   `shortCode (default shortCode) An eight-character string assigned to a realm for routing purposes. See [Base URL and Request Formation.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html)`

## Security

*   `AmOAuth2` (oauth2) AccountManager OAuth 2.0 bearer token Authentication.
    *   OAuth flow clientCredentials (tokenUrl: https://account.demandware.com/dwsso/oauth2/access\_token)
    *   Scope sfcc.promotions: promotions READONLY
    *   Scope sfcc.promotions.rw: promotions read/write
    *   OAuth flow authorizationCode (authorizationUrl: https://account.demandware.com/dwsso/oauth2/authorize, tokenUrl: https://account.demandware.com/dwsso/oauth2/access\_token, refreshUrl: https://account.demandware.com/dwsso/oauth2/access\_token)

## Operations

### POST Search for promotions.

`POST /organizations/{organizationId}/promotions`

Operation ID: `promotionsSearch`. Security: AmOAuth2 (sfcc.promotions, sfcc.promotions.rw).

The SearchRequest document contains a search object that allows you to filter using various attributes.

Use the following searchable query attributes to narrow down the search:

| Attribute | Type |
| --- | --- |
| id | String |
| name | String |
| currecyCode | String |
| exclusivity | String |
| enabled | Boolean |

Note that only searchable attributes can be used in sorting. Additionally, the following attribute can be used to sort:

| Attribute | Type |
| --- | --- |
| promotionClass | String |

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `SearchRequest`.

#### Responses

*   **200** Promotions information searched successfully.
    
    Media type: `application/json`. Schema: `PromotionSearchResult`.
    
*   **400** Returned when the query is ill-formed.

### GET Retrieve promotion information.

`GET /organizations/{organizationId}/promotions/{id}`

Operation ID: `getPromotion`. Security: AmOAuth2 (sfcc.promotions, sfcc.promotions.rw).

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Responses

*   **200** Retrieved promotion information successfully.
    
    Media type: `application/json`. Schema: `Promotion`.
    
    _Example: GetPromotion_
    
    ```
    {
      "archived": false,
      "assignmentInformation": {
        "active": true,
        "activeCampaignAssignments": [
          {
            "campaignId": "coupon-campaign",
            "coupons": [
              "shipping-promotion-coupon"
            ],
            "description": "Coupon Shipping Promotion",
            "enabled": true,
            "promotionId": "my-shipping-promotion",
            "schedule": {}
          }
        ],
        "campaignId": "coupon-campaign",
        "enabled": true,
        "schedule": {},
        "scheduleType": "none"
      },
      "creationDate": "2020-01-09T16:50:32.000Z",
      "disableGloballyExcluded": false,
      "enabled": true,
      "exclusivity": "no",
      "id": "my-shipping-promotion",
      "lastModified": "2020-01-09T16:50:32.000Z",
      "name": {
        "default": "Coupon Shipping Promotion"
      },
      "promotionClass": "shipping",
      "c_customString": "Custom Value"
    }
    ```
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example: getPromotion404_
    
    ```
    {
      "title": "Promotion Not Found",
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/promotion-not-found",
      "detail": "No promotion with ID 'not-existing-promotion' in site 'SiteGenesis' could be found.",
      "promotionId": "not-existing-promotion",
      "siteId": "SiteGenesis"
    }
    ```
    

### PUT Create a promotion using the information provided.

`PUT /organizations/{organizationId}/promotions/{id}`

Operation ID: `createPromotion`. Security: AmOAuth2 (sfcc.promotions.rw).

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `Promotion`.

_Example: PutPromotion_

```
{
  "enabled": true,
  "name": {
    "default": "__PROMOTION_ID__"
  },
  "exclusivity": "class",
  "promotionClass": "order",
  "c_customString": "Custom Value"
}
```

#### Responses

*   **200** Promotion created successfully.
    
    Media type: `application/json`. Schema: `Promotion`.
    
    _Example: PutPromotion_
    
    ```
    {
      "archived": false,
      "assignmentInformation": {
        "active": false,
        "activeCampaignAssignments": [],
        "campaignId": "coupon-campaign",
        "enabled": true,
        "schedule": {},
        "scheduleType": "none"
      },
      "creationDate": "2020-01-13T20:22:09.189Z",
      "disableGloballyExcluded": false,
      "enabled": true,
      "exclusivity": "class",
      "id": "my-promotion",
      "lastModified": "2020-01-13T20:22:09.199Z",
      "name": {
        "default": "__PROMOTION_ID__"
      },
      "promotionClass": "order",
      "c_customString": "Custom Value"
    }
    ```
    
*   **400** Returned when the ID in the request does not match the ID in the document.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example: IdConflict400_
    
    ```
    {
      "title": "Id Conflict",
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/id-conflict",
      "detail": "The ID in the request body ('his-promotion') doesn't match the ID in the URL ('my-promotion').",
      "bodyID": "his-promotion",
      "urlID": "my-promotion"
    }
    ```
    

### DELETE Delete a promotion for a specified ID.

`DELETE /organizations/{organizationId}/promotions/{id}`

Operation ID: `deletePromotion`. Security: AmOAuth2 (sfcc.promotions.rw).

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Responses

*   **204** Deleted the promotion successfully.

### PATCH Update a promotion with the specified information.

`PATCH /organizations/{organizationId}/promotions/{id}`

Operation ID: `updatePromotion`. Security: AmOAuth2 (sfcc.promotions.rw).

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `Promotion`.

_Example: PromotionsPatch_

```
{
  "enabled": false,
  "name": {
    "default": "__PROMOTION_ID__"
  },
  "exclusivity": "class",
  "promotionClass": "order",
  "c_customString": "Custom Value"
}
```

#### Responses

*   **200** Updated the promotion using the information provided. Fields that can be updated: name, ID, enabled
    
    Media type: `application/json`. Schema: `Promotion`.
    
    _Example: PutPromotion_
    
    ```
    {
      "archived": false,
      "assignmentInformation": {
        "active": false,
        "activeCampaignAssignments": [],
        "campaignId": "coupon-campaign",
        "enabled": false,
        "schedule": {},
        "scheduleType": "none"
      },
      "creationDate": "2020-01-13T20:22:09.189Z",
      "disableGloballyExcluded": false,
      "enabled": false,
      "exclusivity": "class",
      "id": "my-promotion",
      "lastModified": "2020-01-13T20:31:25.795Z",
      "name": {
        "default": "__PROMOTION_ID__"
      },
      "promotionClass": "order",
      "c_customString": "Custom Value"
    }
    ```
    
*   **404** Returned when there is no promotion found with the given ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example GetPromotion: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### GET Retrieve the discount rule for a promotion.

`GET /organizations/{organizationId}/promotions/{id}/discount-rule`

Operation ID: `getPromotionDiscountRule`. Security: AmOAuth2 (sfcc.promotions, sfcc.promotions.rw).

Returns the discount rule, product qualifiers, and payment-method qualifiers for the promotion.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Responses

*   **200** Retrieved the discount rule successfully.
    
    Media type: `application/json`. Schema: `DiscountRule`.
    
    _Example: GetPromotionDiscountRule_
    
    ```
    {
      "promotionRule": {
        "promotionClass": "order",
        "discount": {
          "type": "amount",
          "amount": {
            "currencyMnemonic": "USD",
            "value": 15
          }
        },
        "tiers": [
          {
            "threshold": 100,
            "conditionType": "order_total",
            "discount": {
              "type": "amount",
              "amount": {
                "currencyMnemonic": "USD",
                "value": 15
              }
            }
          }
        ],
        "discountOnlyQualifyingProducts": false,
        "disableGlobalExcludedProducts": false
      },
      "qualifyingProducts": {
        "includedProducts": [
          {
            "conditions": [
              {
                "type": "category",
                "operator": "is_equal",
                "catalogId": "storefront-catalog-m-en",
                "values": [
                  "electronics"
                ]
              }
            ]
          }
        ]
      },
      "paymentMethodQualifiers": {
        "methodIds": [
          "CREDIT_CARD.Visa"
        ]
      }
    }
    ```
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example getPromotionDiscountRule404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### PUT Create or replace the discount rule for a promotion.

`PUT /organizations/{organizationId}/promotions/{id}/discount-rule`

Operation ID: `createPromotionDiscountRule`. Security: AmOAuth2 (sfcc.promotions.rw).

Replaces the entire discount rule, product qualifiers, and payment-method qualifiers for the promotion.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `DiscountRule`.

_Example: PutPromotionDiscountRule_

```
{
  "promotionRule": {
    "promotionClass": "order",
    "discount": {
      "type": "amount",
      "amount": {
        "currencyMnemonic": "USD",
        "value": 15
      }
    },
    "tiers": [
      {
        "threshold": 100,
        "conditionType": "order_total",
        "discount": {
          "type": "amount",
          "amount": {
            "currencyMnemonic": "USD",
            "value": 15
          }
        }
      }
    ]
  },
  "qualifyingProducts": {
    "includedProducts": [
      {
        "conditions": [
          {
            "type": "category",
            "operator": "is_equal",
            "catalogId": "storefront-catalog-m-en",
            "values": [
              "electronics"
            ]
          }
        ]
      }
    ]
  }
}
```

#### Responses

*   **200** Discount rule replaced successfully.
    
    Media type: `application/json`. Schema: `DiscountRule`.
    
    _Example PutPromotionDiscountRule: same as GET /organizations/{organizationId}/promotions/{id}/discount-rule 200 response._
    
*   **201** Discount rule created successfully.
    
    Media type: `application/json`. Schema: `DiscountRule`.
    
    _Example PutPromotionDiscountRule: same as GET /organizations/{organizationId}/promotions/{id}/discount-rule 200 response._
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example putPromotionDiscountRule404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### DELETE Delete the discount rule for a promotion.

`DELETE /organizations/{organizationId}/promotions/{id}/discount-rule`

Operation ID: `deletePromotionDiscountRule`. Security: AmOAuth2 (sfcc.promotions.rw).

Removes the discount rule and its qualifiers from the promotion, resetting it to a shell with no discount configuration.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Responses

*   **204** Deleted the discount rule successfully.
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example deletePromotionDiscountRule404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### PATCH Update the discount rule for a promotion.

`PATCH /organizations/{organizationId}/promotions/{id}/discount-rule`

Operation ID: `updatePromotionDiscountRule`. Security: AmOAuth2 (sfcc.promotions.rw).

Updates the discount rule, product qualifiers, or payment-method qualifiers for the promotion. The merge is at top-level-section granularity: any of promotionRule, qualifyingProducts, discountedProducts, excludedProducts, or paymentMethodQualifiers that is omitted is left unchanged, and any that is supplied fully replaces that section. In particular a supplied promotionRule replaces the entire rule - send the complete rule (including all tiers) to preserve tiers, since a promotionRule that omits tiers clears them. It is not a field-level (deep) merge.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `DiscountRule`.

_Example: PatchPromotionDiscountRule_

```
{
  "promotionRule": {
    "promotionClass": "order",
    "discount": {
      "type": "percentage",
      "percentage": 10
    },
    "discountOnlyQualifyingProducts": false,
    "disableGlobalExcludedProducts": false
  }
}
```

#### Responses

*   **200** Discount rule updated successfully.
    
    Media type: `application/json`. Schema: `DiscountRule`.
    
    _Example PatchPromotionDiscountRule: same as GET /organizations/{organizationId}/promotions/{id}/discount-rule 200 response._
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example patchPromotionDiscountRule404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### GET Retrieve the compatibility settings for a promotion.

`GET /organizations/{organizationId}/promotions/{id}/compatibility`

Operation ID: `getPromotionCompatibility`. Security: AmOAuth2 (sfcc.promotions, sfcc.promotions.rw).

Returns the stacking / exclusivity settings that control how this promotion combines with other promotions.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Responses

*   **200** Retrieved the compatibility settings successfully.
    
    Media type: `application/json`. Schema: `PromotionCompatibility`.
    
    _Example: GetPromotionCompatibility_
    
    ```
    {
      "exclusivity": "class",
      "exclusivityGroup": "SummerSale",
      "combinablePromotions": [
        "10%offOrder"
      ],
      "mutuallyExclusivePromotions": [
        "20%offOrder"
      ]
    }
    ```
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example getPromotionCompatibility404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### PUT Create or replace the compatibility settings for a promotion.

`PUT /organizations/{organizationId}/promotions/{id}/compatibility`

Operation ID: `createPromotionCompatibility`. Security: AmOAuth2 (sfcc.promotions.rw).

Replaces the stacking / exclusivity settings for the promotion.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `PromotionCompatibility`.

_Example: PutPromotionCompatibility_

```
{
  "exclusivity": "class",
  "exclusivityGroup": "SummerSale",
  "combinablePromotions": [
    "10%offOrder"
  ],
  "mutuallyExclusivePromotions": [
    "20%offOrder"
  ]
}
```

#### Responses

*   **200** Compatibility settings replaced successfully.
    
    Media type: `application/json`. Schema: `PromotionCompatibility`.
    
    _Example: PutPromotionCompatibility_
    
    ```
    {
      "exclusivity": "class",
      "exclusivityGroup": "SummerSale",
      "combinablePromotions": [
        "10%offOrder"
      ],
      "mutuallyExclusivePromotions": [
        "20%offOrder"
      ]
    }
    ```
    
*   **201** Compatibility settings created successfully.
    
    Media type: `application/json`. Schema: `PromotionCompatibility`.
    
    _Example: PutPromotionCompatibility_
    
    ```
    {
      "exclusivity": "class",
      "exclusivityGroup": "SummerSale",
      "combinablePromotions": [
        "10%offOrder"
      ],
      "mutuallyExclusivePromotions": [
        "20%offOrder"
      ]
    }
    ```
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example putPromotionCompatibility404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

### PATCH Update the compatibility settings for a promotion.

`PATCH /organizations/{organizationId}/promotions/{id}/compatibility`

Operation ID: `updatePromotionCompatibility`. Security: AmOAuth2 (sfcc.promotions.rw).

Partially updates the stacking / exclusivity settings for the promotion. Each field (exclusivity, exclusivityGroup, combinablePromotions, mutuallyExclusivePromotions) that is omitted is left unchanged. A supplied combinablePromotions or mutuallyExclusivePromotions replaces that list wholesale - the entries are not merged into the existing list, so send the complete list.

#### Parameters

*   `id` (path, string, required) The ID of the promotion to create.  
    Minimum length: 1.
*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `siteId` (query, SiteId, required) The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites.
    
    _Example: SiteId_
    
    ```
    RefArch
    ```
    

#### Request body

Media type: `application/json`. Schema: `PromotionCompatibility`.

_Example: PatchPromotionCompatibility_

```
{
  "exclusivity": "class",
  "exclusivityGroup": "SummerSale",
  "combinablePromotions": [
    "10%offOrder"
  ],
  "mutuallyExclusivePromotions": [
    "20%offOrder"
  ]
}
```

#### Responses

*   **200** Compatibility settings updated successfully.
    
    Media type: `application/json`. Schema: `PromotionCompatibility`.
    
    _Example: PatchPromotionCompatibility_
    
    ```
    {
      "exclusivity": "class",
      "exclusivityGroup": "SummerSale",
      "combinablePromotions": [
        "10%offOrder"
      ],
      "mutuallyExclusivePromotions": [
        "20%offOrder"
      ]
    }
    ```
    
*   **404** Returned when there is no promotion found for the specified ID for the requested site.
    
    Media type: `application/json`. Schema: `ErrorResponse`.
    
    _Example patchPromotionCompatibility404: same as GET /organizations/{organizationId}/promotions/{id} 404 response._
    

## Schemas

### OrganizationId

An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).

Type: `string`.

Pattern: ^f\_ecom\_\[a-z\]{4}\_(prd|stg|dev|s\[0-9\]{2}|\[0-9\]{3})$. Example: `f_ecom_zzxy_prd`.

### SiteId

The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites

Type: `string`.

Minimum length: 1. Maximum length: 32. Example: `RefArch`.

### SearchRequest

Document representing a search request for retrieving items within the Data API. The query is a potentially complex set of expressions. The fields and expands that each query supports are defined within the search resource.

*   `limit` (_integer (int32)_) Maximum records to retrieve per request, not to exceed 200.  
    Minimum: 1. Maximum: 200. Example: `10`.
*   `query` (_Query_, required)
*   `sorts` (_array of Sort_) The list of sort clauses configured for the search request. Sort clauses are optional. See the description of the search endpoint for details on the default sorting behavior that is used when explicit sorts are not passed.
*   `offset` (_Offset_)

### PromotionSearchResult

Document representing a promotion search result.

Includes all fields of `PaginatedSearchResult`.

*   `hits` (_array of Promotion_, required) The sorted array of promotion search hits. Can be empty.

### Promotion

Document representing a promotion. Unless otherwise stated, attributes of this document are not supported when using the Open Commerce API to update multiple promotions at once.

*   `archived` (_boolean_) Determines if this promotion is archived. This attribute is allowed to be updated when using the Open Commerce API to update multiple promotions at once.  
    Example: `true`.
*   `assignmentInformation` (_object_) Information about the assignments and assignment schedules of this promotion.
    
    Includes all fields of `PromotionAssignmentInformation`.
    
*   `creationDate` (_string (date-time)_) Returns the value of attribute 'creationDate'.
*   `currencyCode` (_string_) The ISO 4217 mnemonic code of the currency this promotion is restricted to. If not populated, then there is no currency restriction on the promotion.  
    Maximum length: 3.
*   `disableGloballyExcluded` (_boolean_) Determines if this promotion ignores the global product exclusions for promotions.  
    Example: `true`.
*   `enabled` (_boolean_) Determines if this promotion is enabled. This attribute is allowed to be updated when using the Open Commerce API to update multiple promotions at once.  
    Example: `true`.
*   `exclusivity` (_string_) Determines if the promotion can be combined with other promotions of the same promotion class or if it cannot be combined with any other promotions. This attribute is allowed to be updated when using the Open Commerce API to update multiple promotions at once.  
    Allowed values: `no`, `class`, `global`.
*   `id` (_string_) The ID for the promotion.
*   `lastModified` (_string (date-time)_) Returns the value of attribute 'lastModified'.
*   `name` (_object_) The user supplied name of this promotion, which can be localized.
    
    Additional properties: `string`.
    
*   `promotionClass` (_string_) The class of the promotion. If the promotion class is modified, then the promotion rule and all of its values, such as whether or not to disable global product exclusions, are reset.  
    Allowed values: `product`, `shipping`, `order`.
*   `tags` (_array of Tag_) Returns the list of tags assigned to this promotion. If used to set the tags on a promotion, the promotion will only have the tags passed in the input. Any existing tags are removed.

Additional properties: `any`.

Additional Property Support

This type supports additional properties passed along with the defined properties of this API. To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a `c_`. The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix.

Example: `c_trackingId`.

### ErrorResponse

*   `title` (_string_, required) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization  
    Maximum length: 256. Example: `You do not have enough credit`.
*   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
    Maximum length: 2048. Example: `NotEnoughMoney`.
*   `detail` (_string_, required) A human-readable explanation specific to this occurrence of the problem.  
    Example: `Your current balance is 30, but that costs 50`.
*   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
    Maximum length: 2048. Example: `/account/12345/msgs/abc`.

### DiscountRule

The discount-rule document for a promotion, managed as a sub-resource at /promotions/{id}/discount-rule. It holds the discount rule (shape selected by promotionClass), the product qualifiers, and the payment-method qualifiers. The promotion shell (id, name, enabled, promotionClass) is managed separately on the parent /promotions/{id} resource.

*   `promotionRule` (_object_) The discount rule for this promotion. Its shape is selected by the parent promotion's promotionClass (product, order, or shipping) and holds the discount, tiers, BOGO, thresholds, max-applications, and class-specific flags.
    
    Includes all fields of `PromotionRule`.
    
*   `qualifyingProducts` (_object_) The products a customer must purchase for the promotion to apply.
    
    Includes all fields of `ProductSpecification`.
    
*   `discountedProducts` (_object_) The products that receive the discount. Valid only for a product-class promotion; supplying it for an order or shipping promotion is rejected with a 400.
    
    Includes all fields of `ProductSpecification`.
    
*   `excludedProducts` (_object_) The products excluded from both qualifying for and receiving the discount. Valid only for an order-class promotion; supplying it for a product or shipping promotion is rejected with a 400.
    
    Includes all fields of `ProductSpecification`.
    
*   `paymentMethodQualifiers` (_object_) The payment methods the promotion is restricted to.
    
    Includes all fields of `PromotedPaymentMethods`.
    

Additional properties: `any`.

Additional Property Support

This type supports additional properties passed along with the defined properties of this API. To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a `c_`. The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix.

Example: `c_trackingId`.

### PromotionCompatibility

The compatibility (stacking / exclusivity) document for a promotion, managed as a sub-resource at /promotions/{id}/compatibility. It controls how this promotion combines with other promotions of the same class.

*   `exclusivity` (_string_) Determines if the promotion can be combined with other promotions of the same promotion class, cannot be combined with any other promotion, or has no exclusivity restriction.  
    Allowed values: `no`, `class`, `global`. Example: `class`.
*   `exclusivityGroup` (_string_) The ID of the exclusivity group this promotion belongs to. Only meaningful when exclusivity restricts combination to promotions within the same group.  
    Maximum length: 256. Example: `SummerSale`.
*   `combinablePromotions` (_array of string_) The set of promotion or promotion-group IDs this promotion can be combined with.  
    Items: Maximum length: 256. Example: `10%offOrder`.
*   `mutuallyExclusivePromotions` (_array of string_) The set of promotion or promotion-group IDs this promotion cannot be combined with.  
    Items: Maximum length: 256. Example: `20%offOrder`.

Additional properties: `any`.

Additional Property Support

This type supports additional properties passed along with the defined properties of this API. To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a `c_`. The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix.

Example: `c_trackingId`.

### Query

A set of objects that define criteria used to select records. A query can contain one of the following:

*   `MatchAllQuery`

*   Matches all documents.

*   `TermQuery`

*   Matches one or more documents against one or more document fields.

*   `TextQuery`

*   Matches text against one or more fields.

*   `BoolQuery`

*   Allows construction of a logical expression of multiple queries.

*   `FilteredQuery`

*   Allows a filter to be applied to a query.

*   `NestedQuery`

*   Allows you to query on nested documents.
*   _Only supported by some Commerce APIs. For more details, see the endpoint descriptions in the API documentation._

Minimum properties: 1. Maximum properties: 1.

*   `boolQuery` (_BoolQuery_)
*   `filteredQuery` (_FilteredQuery_)
*   `matchAllQuery` (_MatchAllQuery_)
*   `nestedQuery` (_NestedQuery_)
*   `termQuery` (_TermQuery_)
*   `textQuery` (_TextQuery_)

_Example_

```
{
  "filteredQuery": {
    "query": {
      "textQuery": {
        "fields": [
          "couponId"
        ],
        "searchPhrase": "disabled"
      }
    },
    "filter": {
      "termFilter": {
        "field": "enabled",
        "operator": "is",
        "values": [
          false
        ]
      }
    }
  }
}
```

### Sort

Document representing a sort request. Each API has a different default sort configuration that can be modified in the request.

*   `field` (_string_, required) The name of the field to sort on.  
    Maximum length: 256. Example: `couponId`.
*   `sortOrder` (_string_) The sort order to be applied when sorting. When omitted, the default sort order (asc) is used.  
    Allowed values: `asc`, `desc`. Default: `asc`. Example: `asc`.

_Example_

```
{
  "field": "couponId",
  "sortOrder": "desc"
}
```

### Offset

The zero-based index of the first hit/data to include in the result.

Type: `integer (int32)`.

Default: `0`. Minimum: 0. Example: `0`.

### PaginatedSearchResult

Document representing a generic search result. Each search resource should extend this to define what is returned in the `hits`.

Includes all fields of `PaginatedResultBase`.

*   `query` (_Query_, required)
*   `sorts` (_array of Sort_) The sorting that was applied to the result.
*   `hits` (_array of object_) The sorted array of search hits. Can be empty.

_Example_

```
{
  "limit": 1,
  "hits": [
    {
      "couponId": "coupon1",
      "creationDate": "2019-10-20T12:00:00Z",
      "description": "This coupon is used to give 10% off stuff.",
      "enabled": false,
      "exportedCodeCount": 0,
      "lastModified": "2019-10-30T04:23:59Z",
      "redemptionCount": 3,
      "redemptionLimits": {
        "limitPerCode": 1,
        "limitPerCustomer": 1,
        "limitPerTimeFrame": {
          "limit": 2,
          "redemptionTimeFrame": 24
        }
      },
      "singleCode": "MyCode",
      "systemCodesConfig": {
        "codePrefix": "SG",
        "numberOfCodes": 500000
      },
      "totalCodesCount": 50,
      "type": "single_code"
    }
  ],
  "query": {
    "textQuery": {
      "fields": [
        "id",
        "description"
      ],
      "searchPhrase": "stuff"
    }
  },
  "sorts": [
    {
      "field": "couponId",
      "sortOrder": "desc"
    }
  ],
  "offset": 2,
  "total": 8
}
```

### PromotionAssignmentInformation

*   `abtestId` (_string_) If there is only one assignment, and that assignment is an A/B test segment, the ID of the A/B test the segment belongs to. Otherwise, empty.
*   `abtestSegmentId` (_string_) If there is only one assignment, and that assignment is an A/B test segment, the ID of the A/B test segment. Otherwise, empty.
*   `active` (_boolean_, required) True if the individual assignment or the multiple assignments are currently active.  
    Example: `true`.
*   `activeAbtestAssignments` (_array of PromotionAbtestGroupAssignment_) A list of currently active A/B tests this is assigned to.
*   `activeCampaignAssignments` (_array of PromotionCampaignAssignment_, required) A list of currently active campaigns this is assigned to.
*   `campaignId` (_string_, required) If there is only one assignment, and that assignment is a campaign, the ID of the campaign. Otherwise, empty.
*   `enabled` (_boolean_, required)  
    Example: `true`.
*   `endDate` (_string (date-time)_) The end date of the container of the assignment (a Campaign or ABTest). If scheduleType is scheduleType : "multiple" or scheduleType : "none", then then result is null. Also, a null date returns null.
*   `schedule` (_object_, required) The schedule of the assignment (a Campaign or ABTest). If scheduleType is scheduleType : "multiple" or scheduleType : "none", then then result is null.
    
    Includes all fields of `Schedule`.
    
*   `scheduleType` (_string_, required) If there is only one active assignment, or no active assignments and one upcoming assignment, this is that type of assignment (scheduleType : "campaign" or scheduleType : "abtest"). If there are no assignments, it is scheduleType : "none", otherwise, scheduleType : "multiple".  
    Allowed values: `none`, `campaign`, `abtest`, `multiple`.
*   `startDate` (_string (date-time)_) The start date of the container of the assignment (a Campaign or ABTest). If scheduleType is scheduleType : "multiple" or scheduleType : "none", then then result is null. Also, a null date returns null.
*   `upcomingAbtestAssignments` (_array of PromotionAbtestGroupAssignment_) A list of upcoming A/B tests this is assigned to.
*   `upcomingCampaignAssignments` (_array of PromotionCampaignAssignment_) A list of upcoming campaigns this is assigned to.

### Tag

Document representing a tag

*   `tagId` (_string_, required) The ID of the tag.

### PromotionRule

The discount rule for a promotion. The concrete shape is selected by promotionClass: a product promotion uses ProductPromotionRule, an order promotion uses OrderPromotionRule, and a shipping promotion uses ShippingPromotionRule.

Discriminator: `promotionClass` selects the concrete type. Mapping: `product` → `ProductPromotionRule`, `order` → `OrderPromotionRule`, `shipping` → `ShippingPromotionRule`.

One of: `ProductPromotionRule`, `OrderPromotionRule`, `ShippingPromotionRule`.

### ProductSpecification

A set of product conditions. A product matches when it satisfies the included-products groups and none of the excluded-products groups.

*   `includedProducts` (_array of ProductConditionGroup_) The condition groups a product must match.
*   `excludedProducts` (_array of ProductConditionGroup_) The condition groups that exclude a product.

### PromotedPaymentMethods

The payment methods a promotion is restricted to.

*   `methodIds` (_array of string_) The payment method IDs. Each is either a payment method ID or a credit card type prefixed with CREDIT\_CARD (for example CREDIT\_CARD.Visa).  
    Items: Maximum length: 256. Example: `CREDIT_CARD.Visa`.

### BoolQuery

A boolean query allows construction of full logical expression trees that are composed of other queries (usually term queries and text queries). A boolean query has three sets of clauses:

*   `must`, which combines as an `AND` operator.
*   `should`, which combines as an `OR` operator.
*   `must_not`, which combines as a `NOT` operator.

If `must`, `mustNot`, or `should` appear in the same boolean query, they are combined logically using the `AND` operator. For example:

```
(must-1 AND must-1 AND ...)
  AND (should-1 OR should-2 OR ...)
  AND NOT (must_not-1 OR must_not-2 OR ...)
```

*   `must` (_array of Query_) List of queries to be evaluated as an `AND` operator.
*   `mustNot` (_array of Query_) List of queries to be evaluated as a `NOT` operator.
*   `should` (_array of Query_) List of queries to be evaluated as an `OR` operator.

_Example_

```
{
  "must": [
    {
      "textQuery": {
        "fields": [
          "couponId"
        ],
        "searchPhrase": "DEAL"
      }
    },
    {
      "textQuery": {
        "fields": [
          "description"
        ],
        "searchPhrase": "Big bargain deal"
      }
    }
  ],
  "mustNot": [
    {
      "termQuery": {
        "fields": [
          "enabled"
        ],
        "operator": "is",
        "values": [
          false
        ]
      }
    }
  ]
}
```

### FilteredQuery

Allows to filter the result of a possibly complex query using a possibly complex filter.

*   `filter` (_Filter_, required)
*   `query` (_Query_, required)

_Example_

```
{
  "query": {
    "textQuery": {
      "fields": [
        "couponId"
      ],
      "searchPhrase": "disabled"
    }
  },
  "filter": {
    "termFilter": {
      "field": "enabled",
      "operator": "is",
      "values": [
        false
      ]
    }
  }
}
```

### MatchAllQuery

Matches all documents (namespace and document type). This query comes in handy if you just want to filter a search result or really do not have any constraints.

### NestedQuery

Allows you to query nested documents that are part of a larger document. Say, for example, that you have a main product with variations in one big document, and you want to constrain a search to main products that have variations that match multiple constraints.

A `NestedQuery` is only supported by some Commerce APIs. For more details, see the endpoint descriptions in the API documentation.

*   `path` (_string_, required) The path to the nested document.  
    Maximum length: 2048. Example: `order.shippingAddresses`.
*   `query` (_Query_, required)
*   `scoreMode` (_string_) Indicates how scores for matching child objects affect the root parent document’s relevance score.  
    Allowed values: `avg`, `total`, `max`, `none`. Example: `avg`.

_Example_

```
{
  "path": "order.shippingAddresses",
  "query": {
    "boolQuery": {
      "must": [
        {
          "boolQuery": {
            "must": [
              {
                "termQuery": {
                  "fields": [
                    "order.shippingAddresses.firstName"
                  ],
                  "operator": "is",
                  "values": [
                    "John"
                  ]
                }
              }
            ]
          }
        },
        {
          "boolQuery": {
            "must": [
              {
                "termQuery": {
                  "fields": [
                    "order.shippingAddresses.lastName"
                  ],
                  "operator": "is",
                  "values": [
                    "Doe"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  },
  "scoreMode": "avg"
}
```

### TermQuery

A term query matches one or more values against one or more document fields. A document is considered a hit if one of the values matches exactly with at least one of the given fields. The operator `is` can only take one value, while `one_of` can take multiple values. If multiple fields are specified, they are combined using a logical `OR` operator.

**Limitations:**

*   The `greater` and `less` operators are not supported under certain conditions. Both operators are permitted unless the API documentation states otherwise.
*   A subset of Commerce APIs handle queries with multiple fields differently. If the query has multiple fields, the query is internally handled as a logical `OR` of `DisjointMaxQueries` (with the dismax matching a value against all fields). The dismax makes sure that a document carrying a single term in multiple fields does not get higher scores than a document matching multiple terms in multiple fields.

*   `fields` (_array of Field_, required) The document fields that the values are matched against, combined with the operator.  
    Minimum items: 1.
*   `operator` (_string_, required) Returns the operator to use for the term query.  
    Allowed values: `is`, `one_of`, `is_null`, `is_not_null`, `less`, `greater`, `not_in`, `neq`. Example: `is`.
*   `values` (_array of string | number | boolean | integer_) The values that the fields are compared against, combined with the operator.  
    Items: Example: `myCouponId`.

### TextQuery

A text query is used to match some text (for example, a search phrase possibly consisting of multiple terms) against one or more fields. When multiple fields are provided, the phrase conceptually forms a logical `OR` over the fields. In this case, the terms of the phrase basically have to match within the text, that would result in concatenating all given fields.

*   `fields` (_array of Field_, required) The document fields that the search phrase matches against.  
    Minimum items: 1.
*   `searchPhrase` (_string_, required) A search phrase, which can include multiple terms separated by spaces.  
    Example: `campaign summer`.

_Example_

```
{
  "fields": [
    "couponId"
  ],
  "searchPhrase": "limit"
}
```

### PaginatedResultBase

Schema defining generic pageable result. Each response schema of a resource requiring pagination should extend this schema. If you use this extend this schema directly, it needs to be defined what data is returned. Allowed names for the data field is `data`.

Includes all fields of `ResultBase`.

*   `offset` (_Offset_, required)

### PromotionAbtestGroupAssignment

*   `abtestDescription` (_string_, required)
*   `abtestId` (_string_, required)
*   `enabled` (_boolean_, required)  
    Example: `true`.
*   `schedule` (_Schedule_, required)
*   `segmentDescription` (_string_, required)
*   `segmentId` (_string_, required)

### PromotionCampaignAssignment

Document representing a promotion campaign assignment.

*   `campaign` (_object_) The campaign.
    
    Includes all fields of `Campaign`.
    
*   `campaignId` (_string_, required) The ID of the campaign.  
    Minimum length: 1. Maximum length: 256.
*   `coupons` (_array of string_) The sorted array of assigned coupon IDs.
*   `customerGroups` (_array of string_) The sorted array of assigned customer groups.
*   `description` (_string_, required) The description of the promotion campaign assignment.  
    Maximum length: 4000.
*   `enabled` (_boolean_, required) True if the assignment resource is enabled.  
    Example: `true`.
*   `promotion` (_object_) The promotion.
    
    Includes all fields of `Promotion`.
    
*   `promotionId` (_string_, required) The ID of the promotion.  
    Minimum length: 1. Maximum length: 256.
*   `rank` (_integer (int32)_) The rank of promotion campaign assignment.
*   `schedule` (_object_, required) The schedule of the assignment resource.
    
    Includes all fields of `Schedule`.
    
*   `sourceCodeGroups` (_array of string_) The sorted array of assigned source code groups.

### Schedule

Document representing a time schedule. Defines an optional validity window (startDate/endDate) and an optional recurrence. Omitting a bound leaves that side of the window open (unbounded).

*   `startDate` (_string (date-time)_) The date to start validity. ISO8601 date time format: yyyy-MM-dd'T'HH:mm:ssZ.  
    Example: `2026-01-01T00:00:00.000Z`.
*   `endDate` (_string (date-time)_) The date to end of validity. ISO8601 date time format: yyyy-MM-dd'T'HH:mm:ssZ.  
    Example: `2026-01-31T23:59:59.000Z`.
*   `recurrence` (_object_) The recurrence of the schedule by day of week and time of day. Not all schedules support a recurrence.
    
    Includes all fields of `Recurrence`.
    

### ProductPromotionRule

The discount rule for a product promotion.

*   `promotionClass` (_string_, required) The promotion class discriminator. Always product for a product promotion rule.  
    Allowed values: `product`. Example: `product`.
*   `discount` (_object_) The discount applied by this rule.
    
    Includes all fields of `Discount`.
    
*   `tiers` (_array of TieredDiscount_) The tiered discounts, applied by threshold. Empty or absent for a non-tiered rule.
*   `bogo` (_object_) The buy-one-get-one discount. Present only for a buy-X-get-Y product promotion.
    
    Includes all fields of `BogoDiscount`.
    
*   `maxApplications` (_integer (int32)_) The maximum number of times the discount can be applied.  
    Minimum: 1. Example: `1`.
*   `identicalProducts` (_boolean_) Determines if the qualifying and discounted products must all be identical.  
    Example: `false`.
*   `prorate` (_boolean_) Determines if the discount is prorated across the eligible items.  
    Example: `false`.
*   `disableGlobalExcludedProducts` (_boolean_) Determines if this rule ignores the site-level global product exclusions. Distinct from the promotion-level disableGloballyExcluded flag.  
    Default: `false`. Example: `false`.

### OrderPromotionRule

The discount rule for an order promotion.

*   `promotionClass` (_string_, required) The promotion class discriminator. Always order for an order promotion rule.  
    Allowed values: `order`. Example: `order`.
*   `discount` (_object_) The discount applied by this rule.
    
    Includes all fields of `Discount`.
    
*   `tiers` (_array of TieredDiscount_) The tiered discounts, applied by threshold. Empty or absent for a non-tiered rule.
*   `discountOnlyQualifyingProducts` (_boolean_) Determines if only the qualifying products are discounted.  
    Example: `false`.
*   `excludeDiscountedProducts` (_boolean_) Determines if products that already received a product-level discount are excluded.  
    Example: `false`.
*   `disableGlobalExcludedProducts` (_boolean_) Determines if this rule ignores the site-level global product exclusions. Distinct from the promotion-level disableGloballyExcluded flag.  
    Default: `false`. Example: `false`.
*   `enableUpsells` (_boolean_) Determines if the promotion is returned as an approaching promotion to encourage upsell.  
    Example: `false`.
*   `upsellThreshold` (_object_) The amount by which the merchandise total may fall short of the purchase condition and still upsell.
    
    Includes all fields of `Money`.
    

### ShippingPromotionRule

The discount rule for a shipping promotion.

*   `promotionClass` (_string_, required) The promotion class discriminator. Always shipping for a shipping promotion rule.  
    Allowed values: `shipping`. Example: `shipping`.
*   `discount` (_object_) The discount applied by this rule.
    
    Includes all fields of `Discount`.
    
*   `tiers` (_array of TieredDiscount_) The tiered discounts, applied by threshold. Empty or absent for a non-tiered rule.
*   `shippingMethodQualifiers` (_object_) The shipping methods the promotion applies to. Shipping-class only.
    
    Includes all fields of `PromotedShippingMethods`.
    
*   `prohibitNonqualifyingProducts` (_boolean_) Determines if the shipment must contain only qualifying products for the discount to apply.  
    Example: `false`.
*   `disableGlobalExcludedProducts` (_boolean_) Determines if this rule ignores the site-level global product exclusions. Distinct from the promotion-level disableGloballyExcluded flag.  
    Default: `false`. Example: `false`.
*   `maxApplications` (_integer (int32)_) The maximum number of times the discount can be applied.  
    Minimum: 1. Example: `1`.

### ProductConditionGroup

A group of product conditions.

*   `conditions` (_array of ProductCondition_) The conditions in this group.

### Filter

Contains a set of objects that define criteria used to select records. A filter can contain one of the following:

*   `TermFilter`

*   Matches records where a field (or fields) exactly matches some simple value (including `null`).

*   `RangeFilter`

*   Matches records where a field value lies within a specified range.

*   `Range2Filter`

*   Matches records in a specified range across fields.

*   `QueryFilter`

*   Matches records based on a query.

*   `BoolFilter`

*   Provides filtering of records using a set of filters combined using a logical operator.

Minimum properties: 1. Maximum properties: 1.

*   `boolFilter` (_BoolFilter_)
*   `queryFilter` (_QueryFilter_)
*   `range2Filter` (_Range2Filter_)
*   `rangeFilter` (_RangeFilter_)
*   `termFilter` (_TermFilter_)

### Field

Name of the field. Might be a custom field name prefixed with c\_.

Type: `string`.

Maximum length: 260. Example: `couponId`.

### ResultBase

Schema defining generic list result. Each response schema of a resource requiring a list response should extend this schema. Additionally it needs to be defined what data is returned.

*   `limit` (_integer (int32)_, required) Maximum records to retrieve per request. The limit with its constraints (minimum, maximum, default) is defined by the request parameter `limit` of the endpoint returning this schema.  
    Example: `10`.
*   `total` (_Total_, required)

### Campaign

Document representing a campaign.

*   `campaignId` (_CampaignId_, required)
*   `coupons` (_array of string_) The array of assigned coupon IDs, not sorted.
    
    _Example_
    
    ```
    [
      "20%offOrder",
      "10%offWelcomeNewUser"
    ]
    ```
    
*   `creationDate` (_string (date-time)_) Returns the value of attribute 'creationDate'.  
    Example: `2019-10-03T19:36:56.000Z`.
*   `customerGroups` (_array of string_) The array of assigned customer groups, not sorted.
    
    _Example_
    
    ```
    [
      "BigShoppers",
      "NorthAmericanShoppers"
    ]
    ```
    
*   `description` (_string_) The description of the campaign.  
    Maximum length: 4000.
*   `enabled` (_boolean_) The enabled flag for campaign.  
    Example: `true`.
*   `endDate` (_string (date-time)_) The date the scenario ends.
*   `lastModified` (_string (date-time)_) Returns the value of attribute 'lastModified'.  
    Example: `2019-10-03T19:36:56.000Z`.
*   `sourceCodeGroups` (_array of string_) The array of assigned source code groups, not sorted.
    
    _Example_
    
    ```
    [
      "affiliate-email",
      "gaming-email"
    ]
    ```
    
*   `startDate` (_string (date-time)_) The date the scenario begins.  
    Example: `2019-10-03T19:36:56.000Z`.

Additional properties: `any`.

Additional Property Support

This type supports additional properties passed along with the defined properties of this API. To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a `c_`. The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix.

Example: `c_trackingId`.

### Recurrence

Document representing a schedule recurrence.

*   `dayOfWeek` (_array of string_) The days of week for recurrence.  
    Items: Allowed values: `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday`. Example: `monday`.
*   `timeOfDay` (_object_) The time of the day for recurrence.
    
    Includes all fields of `TimeOfDay`.
    

### Discount

A discount value object. The type determines which value field applies: amount, fixed\_price, total\_fixed\_price, and fixed\_price\_shipping use amount; percentage and percent\_off\_options use percentage; price\_book\_price uses priceBookId; bonus and bonus\_choice use bonusProducts; free\_shipping carries no value. Valid types depend on the enclosing promotion class - the schema does not enforce this, so the backend rejects an out-of-class type: product rules accept amount, percentage, fixed\_price, total\_fixed\_price, price\_book\_price, bonus, bonus\_choice, free\_shipping, fixed\_price\_shipping, percent\_off\_options; order rules accept amount, percentage, bonus, bonus\_choice; shipping rules accept fixed\_price, percentage, amount. A BOGO discount is a stricter product subset: fixed\_price, price\_book\_price, percentage, amount.

*   `type` (_string_, required) The kind of discount.  
    Allowed values: `amount`, `percentage`, `fixed_price`, `total_fixed_price`, `price_book_price`, `bonus`, `bonus_choice`, `free_shipping`, `fixed_price_shipping`, `percent_off_options`. Example: `amount`.
*   `amount` (_object_) The monetary value, for amount, fixed\_price, total\_fixed\_price, and fixed\_price\_shipping discounts.
    
    Includes all fields of `Money`.
    
*   `percentage` (_object_) The percentage off, for percentage and percent\_off\_options discounts.
    
    Includes all fields of `Percentage`.
    
*   `priceBookId` (_string_) The price book the discounted price is taken from, for a price\_book\_price discount.  
    Maximum length: 256. Example: `usd-list-prices`.
*   `bonusProducts` (_array of ProductId_) The bonus products offered, for bonus and bonus\_choice discounts.

### TieredDiscount

A single discount tier - a threshold and the discount applied once the threshold is met. All tiers in the same rule MUST carry the same conditionType - the backend applies one condition-type to the whole tier set and rejects mixed values.

*   `threshold` (_number (double)_, required) The threshold at which this tier's discount applies.  
    Minimum: 0. Example: `100`.
*   `conditionType` (_string_, required) The kind of threshold. All tiers in the same rule MUST send the same value. Valid values depend on the promotion class - product: product\_quantity, product\_amount; order: order\_total, product\_quantity, product\_combination; shipping: shipment\_total, product\_quantity, product\_combination.  
    Allowed values: `product_quantity`, `product_amount`, `order_total`, `product_combination`, `shipment_total`. Example: `order_total`.
*   `discount` (_object_, required) The discount applied at this tier.
    
    Includes all fields of `Discount`.
    

### BogoDiscount

A buy-one-get-one discount. In Business Manager the Type selector (Buy X / Get Y) is Product-class only.

*   `threshold` (_number (double)_) The quantity of eligible products required.  
    Minimum: 0. Example: `1`.
*   `discount` (_object_) The discount applied to the bonus product; typically fixed\_price, percentage, or amount.
    
    Includes all fields of `Discount`.
    
*   `eligibleQuantity` (_integer (int32)_) The number of eligible products that earn the bonus.  
    Minimum: 1. Example: `1`.
*   `requireExactEligibleQuantity` (_boolean_) Determines if exactly the eligible quantity is required, rather than at least.  
    Example: `false`.

### Money

A combination of a Currency and an amount of that Currency.

*   `currencyMnemonic` (_CurrencyCode_)
*   `value` (_number (double)_) The amount of money for the given currency.  
    Example: `1234.56`.

### PromotedShippingMethods

The shipping methods a shipping promotion applies to.

*   `methodIds` (_array of string_) The shipping method IDs.  
    Items: Maximum length: 256. Example: `001`.

### ProductCondition

A single product condition - a condition type, a comparison operator, and one or more values. Each condition type supports a specific operator (for example, category supports is\_equal, is\_exactly, is\_child\_of; brand and attribute add exists / does\_not\_exist).

*   `type` (_string_, required) The kind of product condition.  
    Allowed values: `brand`, `product_id`, `category`, `price`, `inventory`, `attribute`, `product_set`, `price_book`, `option`. Example: `category`.
*   `operator` (_string_) The comparison operator, as a lower\_snake\_case token. The valid set depends on the condition type: category: is\_equal, is\_exactly, is\_direct\_child\_of, is\_child\_of, is\_direct\_parent\_of, is\_parent\_of, is\_sibling\_of; brand: exists, does\_not\_exist, is\_equal, is\_not\_equal, starts\_with, ends\_with, contains, does\_not\_contain; product\_id: is\_equal, is\_not\_equal, starts\_with, ends\_with, contains, does\_not\_contain; price: less\_than, greater\_than, ends\_with; inventory: less\_than, greater\_than; attribute: less\_than, greater\_than, equals, is\_not\_equal, exists, does\_not\_exist, starts\_with, ends\_with, contains, does\_not\_contain; product\_set: is\_equal, exists; price\_book: storefront\_price\_in\_recursive, storefront\_price\_in, price\_in; option: is\_equal, exists, does\_not\_exist.  
    Maximum length: 256. Example: `is_equal`.
*   `values` (_array of string_) The values compared against.  
    Items: Maximum length: 256. Example: `electronics`.
*   `catalogId` (_string_) The id of the catalog that owns the categories listed in `values`. Required when `type` is \`category; ignored for every other condition type.  
    Maximum length: 256. Example: `storefront-catalog-m-en`.
*   `attributeId` (_string_) The id of the custom product attribute to compare. Required when `type` is `attribute`; ignored for every other condition type.  
    Maximum length: 256. Example: `color`.
*   `optionId` (_string_) The id of the product option to compare. Required when `type` is `option`; ignored for every other condition type.  
    Maximum length: 256. Example: `memorySize`.

### BoolFilter

Allows you to combine other filters into (possibly recursive) logical expression trees. A boolean filter is composed of a logical operator (`AND`, `OR`, `NOT`) and a list of filters that the operator relates to. Multiple filters can be negated with a single `NOT` operator, even when the filters are combined with the `AND` operator.

*   `filters` (_array of Filter_) A list of filters that are logically combined by an operator.
*   `operator` (_string_, required) The logical operator that is used to combine the filters.  
    Allowed values: `and`, `or`, `not`. Example: `and`.

_Example_

```
{
  "operator": "and",
  "filters": [
    {
      "termFilter": {
        "field": "id",
        "operator": "is",
        "values": [
          "myId"
        ]
      }
    },
    {
      "termFilter": {
        "field": "couponId",
        "operator": "is",
        "values": [
          "couponOne"
        ]
      }
    }
  ]
}
```

### QueryFilter

Wraps any query and allows it to be used as a filter.

*   `query` (_Query_, required)

### Range2Filter

Allows you to restrict a search result to hits where a range defined by specified attributes has a certain relationship to a specified range.

The first range (R1) is defined by a pair of attributes (`fromField` and `toField`) that specify the extent of a range, such as attributes `validFrom` and `validTo`.

The second range (R2) is defined by `fromValue` and `toValue`.

The filter mode specifies the method used to compare the two ranges:

*   `overlap`: R1 overlaps fully or partially with R2.
*   `containing`: R1 contains R2.
*   `contained`: R1 is contained in R2.

The range filter supports several value types, and relies on the natural sorting of the value type for range interpretation. Value ranges can be open-ended, but only at one end of the range. You can configure whether the lower bounds and upper bounds are inclusive or exclusive.

A range 2 filter is useful for general restrictions that can be shared between searches (like a static date range) because the filter result is cached in memory. Range filters are not appropriate if the range is expected to be different for every query (for example, if the user controls the date range down to the hour via a UI control). Range filters are inclusive by default.

*   `filterMode` (_string_) Compare mode: overlap, containing, or contained.  
    Allowed values: `overlap`, `containing`, `contained`. Default: `overlap`. Example: `overlap`.
*   `fromField` (_object_, required) The field name of the field that starts the first range.  
    Example: `validFrom`.
    
    Includes all fields of `Field`.
    
    Example: `validFrom`.
    
*   `fromInclusive` (_boolean_) A flag indicating if the lower bound of the second range is inclusive. To make the lower bound exclusive, set to `false`.  
    Default: `true`. Example: `true`.
*   `fromValue` (_any_) The lower bound of the second range. If not specified, the range is open-ended with respect to the lower bound. You can't leave both the lower and upper bounds open-ended.  
    Example: `2007-01-01T00:00:00.000Z`.
*   `toField` (_object_, required) The field name of the field that ends the first range.  
    Example: `validTo`.
    
    Includes all fields of `Field`.
    
    Example: `validTo`.
    
*   `toInclusive` (_boolean_) A flag indicating if the upper bound of the second range is inclusive. To make the lower bound exclusive, set to `false`.  
    Default: `true`. Example: `true`.
*   `toValue` (_any_) The upper bound of the second range. If not specified, the range is open-ended with respect to the upper bound. You can't leave both the upper and lower bounds open-ended.  
    Example: `2017-01-01T00:00:00.000Z`.

_Example_

```
{
  "fromField": "validFrom",
  "toField": "validTo",
  "filterMode": "overlap",
  "fromValue": "2007-01-01T00:00:00.000Z",
  "toValue": "2017-01-01T00:00:00.000Z"
}
```

### RangeFilter

Allows you to restrict a search result to hits that have values for a given attribute that fall within a given value range. The range filter supports several value types and relies on the natural sorting of the value type for range interpretation. Value ranges can be open-ended, but only at one end of the range. You can configure whether the lower bounds and upper bounds are inclusive or exclusive.

A range filter is useful for general restrictions that can be shared between searches (like a static date range) because the filter result is cached in memory. Range filters are not appropriate if the range is expected to be different for every query (for example, if the user controls the date range down to the hour via a UI control). Range filters are inclusive by default.

*   `field` (_object_, required) The search field.  
    Example: `validFrom`.
    
    Includes all fields of `Field`.
    
    Example: `validFrom`.
    
*   `from` (_string (date-time) | integer | number_) The lower bound of the filter range. If not specified, the range is open-ended with respect to the lower bound. You can't leave both the lower and upper bounds open-ended.
    
    One of: `string (date-time)`, `integer`, `number`.
    
    *   _string (date-time)_
        
        Type: `string (date-time)`.
        
        Example: `2007-01-01T00:00:00.000Z`.
        
    *   _integer_
        
        Type: `integer`.
        
        Example: `1`.
        
    *   _number_
        
        Type: `number`.
        
        Example: `1`.
        
*   `fromInclusive` (_boolean_) A flag indicating if the lower bound of the range is inclusive. To make the lower bound exclusive, set to `false`.  
    Default: `true`. Example: `true`.
*   `to` (_string (date-time) | integer | number_) The upper bound of the filter range. If not specified, the range is open-ended with respect to the upper bound. You can't leave both the upper and lower bounds open-ended.
    
    One of: `string (date-time)`, `integer`, `number`.
    
    *   _string (date-time)_
        
        Type: `string (date-time)`.
        
        Example: `2007-01-02T00:00:00.000Z`.
        
    *   _integer_
        
        Type: `integer`.
        
        Example: `2`.
        
    *   _number_
        
        Type: `number`.
        
        Example: `2`.
        
*   `toInclusive` (_boolean_) A flag indicating if the upper bound of the range is inclusive. To make the upper bound exclusive, set to `false`.  
    Default: `true`. Example: `true`.

### TermFilter

Allows you to restrict a search result to hits that match exactly one of the values configured for the filter. A term filter is useful for general restrictions that can be shared between searches. Use term filters whenever the criteria you filter on is a shared property of multiple searches (for example, like filtering by an order status). Use term filters for fields that have a discrete and small set of values only.

*   `field` (_object_, required) The filter field.
    
    Includes all fields of `Field`.
    
*   `operator` (_string_, required) The operator used to compare the field's values with the given values.  
    Allowed values: `is`, `one_of`, `is_null`, `is_not_null`, `less`, `greater`, `not_in`, `neq`. Example: `is`.
*   `values` (_array of string_) The filter values.  
    Items: Example: `myId`.

_Example_

```
{
  "field": "id",
  "operator": "is",
  "values": [
    "myId"
  ]
}
```

### Total

The total number of hits that match the search's criteria. This can be greater than the number of results returned as search results are pagenated.

Type: `integer (int32)`.

Default: `0`. Minimum: 0. Example: `10`.

### CampaignId

The ID of the campaign.

Type: `string`.

Minimum length: 1. Maximum length: 256. Example: `NewYearCampaign`.

### TimeOfDay

Document representing a time schedule within a single day.

*   `timeFrom` (_string_) The time to start from. Time format: HH:mm or HH:mm:ss. Seconds are ignored and set to 0.  
    Pattern: ^(\[01\]\[0-9\]|2\[0-3\]):\[0-5\]\[0-9\](https://developer.salesforce.com/docs/commerce/commerce-api/references/:/[0-5/]/[0-9/])?$. Example: `09:00:00`.
*   `timeTo` (_string_) The time to end on. Time format: HH:mm or HH:mm:ss. Seconds are ignored and set to 0.  
    Pattern: ^(\[01\]\[0-9\]|2\[0-3\]):\[0-5\]\[0-9\](https://developer.salesforce.com/docs/commerce/commerce-api/references/:/[0-5/]/[0-9/])?$. Example: `17:00:00`.

### Percentage

A percentage value, from 0 to 100.

Type: `number (double)`.

Minimum: 0. Maximum: 100. Example: `10`.

### ProductId

The id (SKU) of the product.

Type: `string`.

Minimum length: 1. Maximum length: 100. Example: `apple-ipod-classic`.

### CurrencyCode

A three letter uppercase currency code conforming to the [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) standard, or the string `N/A` indicating that a currency is not applicable.

Type: `string`.

Pattern: ^(\[A-Z\]\[A-Z\]\[A-Z\]|N/A)$. Example: `USD`.