Elastic Path Promotions Standard API

The Promotions Standard API from Elastic Path — 3 operation(s) for promotions standard.

Operations 6

GET /v2/promotions Get all Promotions #
POST /v2/promotions Create a Promotion #
GET /v2/promotions/{promotionID} Get a Promotion #
PUT /v2/promotions/{promotionID} Update a Promotion #
DELETE /v2/promotions/{promotionID} Delete a Promotion #
GET /v2/promotions/{promotionID}/history Get a Promotion History #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/elastic-path-promotions-standard-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

elastic-path-promotions-standard-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Introduction Promotions Standard API
  description: "Promotions Standard offer the flexibility to provide different types of discounts to all your customers or specific customers. You can apply promotions automatically to all purchases, or alternatively, create promotion codes that customers must enter to receive a discount.\n\nYou can have multiple promotions active at the same time. Promotions are active in a fixed duration, with defined start and end dates. However, you can manually stop a promotion at any time.\n\nFor testing your promotions when scheduling a future date for your shopping cart, you can use the [Preview Cart API](/docs/api/carts/create-a-cart#preview-cart).\n\nWhen [Creating a Free Gift Promotion](/docs/api/promotions/create-a-promotion), set the promotion to automatic and enable the `auto_add_free_gift` feature. This way, the shopper will see the free gift in their shopping cart when the target product is added to the cart, and the discount will be applied. This eliminates the need for an additional step to apply the code for the gift discount. However, if you desire more control over when or how the free gift is added, you can choose to use a promotion code and disable the **Automatically add free gift items to the cart** toggle in Commerce Manager. See [Creating Free Gift Promotions](/docs/commerce-manager/promotions-standard/item-level-promotions/free-gift-promotions). For a seamless process, ensure that the currencies of automatically added gift items match with those of the items that initiate free gifts. Additionally, ensure that the free gift item is within the same catalog as the eligible items.\n\nFor inventory-managed products, ensure that you have sufficient inventory available to run the promotion. If there is insufficient stock of free gift items for all eligible free products, the free gifts won't be added to the cart.\n\nPromotions Standard can be:\n\n- [Cart-level promotions](#cart-level-promotions): The promotion applies to the entire cart.\n- [Item-level promotions](#item-level-promotions): The promotion applies to individual items in a cart.\n\n:::note\n\nThe shipping prices do not impact eligibility for item-level and cart-level promotions.\n\n:::\n\nAll items in the cart are eligible for cart-level promotions, even if they already have item-level promotions applied. You can select a few products and exclude them from a cart-level promotion. However, the store that uses a simple calculation method does not support promotions with the exclude setting.\n\n### Cart-level Promotions\n\nCart-level promotions are applied to all items in the cart. Cart-level promotions include:\n\n- Fixed discount: Reduces the cart total by a fixed amount, such as $5.00 off.\n- Percentage discount: Reduces the cart total e by a specific percentage, such as 10% off.\n\nThe following image shows a cart before and after applying a 10% Off promotion. With the discount applied, the price for each item is reduced by 10% and the cart total reflects the reduction.\n\n![Each item in the cart shows a price that is 10% less than the catalog price.](/assets/promotions-cart-10-percent-off.png)\n\nAll items in the cart are eligible for cart-level promotions, even if they already have item-level promotions applied. You can select a few products and exclude them from a cart-level promotion. However, the store that uses a [simple calculation method](https://elasticpath.dev/guides/How-To/Carts/calculate-totals#simple-calculation-method) does not support promotions with the `exclude` setting.\n\n### Item-level Promotions\n\nItem-level promotions are applied to each item that qualifies for the promotion. In a shopping cart, the price of each item reflects the discount applied to each item. With the `max_applications_per_cart` setting, you can limit the number of purchases of an item at the sale price in a cart. For more information, see the Promotions API section.\n\nItem-level promotions include the following promotion types:\n\n- X for Y: Offers bulk discount based on unit price, such as 2-for-1 sales.\n- X for amount: Offers a bulk discount based on a fixed price, such as 3-for-$20 sales.\n- Bundle: Offers bulk discount when selected products are purchased together. For example, Buy any two items from the list for $100.\n- Item fixed discount: Reduces the price of multiple items by a fixed amount, such as $5.00 off.\n- Percentage item discount: Reduces the product price for multiple items by a specific percentage, such as 10% off. You can also count the number of usages of the promotion per SKU item and limit the usage of the promotion per item. For example, if the usage of the promotion is limited to ten and the shopper purchases two of the same item and three of the another item, five uses of the promotion is deducted from the total usage limit.\n- Free Gift: Offers a free item when a specific product or a group of products are purchased.\n\n  :::caution\n\n  - Item-level promotions are only supported by the line calculation method. For more information about this method, see the [Calculation Method](/docs/api/settings/settings-introduction#calculation-method) section.\n  - The `max_discount_value` setting specifies the maximum possible discount for the cart. To avoid the conflict with the promotions and the promotion to work, we recommend not to use this setting for the following promotions:\n\n    - Cart-level fixed discount\n    - Item fixed discount\n    - X for Y discount\n    - X for amount discount\n    - Bundle\n    - Free gift\n\n  - The `max_applications_per_cart` setting, which specifies the maximum number of applications of a promotion per cart, is applicable to line-item promotions only. For example, in a store that offers *buy SKU1 get a free gift* promotion with maximum application per cart set to one, the buyer can only use the free gift promotion once per cart. If maximum application per cart is not set, the buyer can use the promotion multiple times. You can also set maximum application per cart to zero to remove any usage limit.\n  - The `exclude` array consists of productIDs or SKUs of products to be excluded from the cart-level promotions, such as `fixed_discount` and `percent_discount`. However, the stores that use simple calculation method do not support excluding products from promotions.\n  - Already existing promotions created before September 28, 2022 will not have `created_by` and `updated_by` attributes in their response body.\n\n  :::\n\nYou can create codes for a promotion so that customers receive the discount only when the code is provided.\n\n### Multiple promotions for the same SKU\n\nYou can have multiple promotions for the same SKU. However, each instance of the SKU in the cart is eligible for only one item-level promotion.\n\n:::note\n\nThe promotions are applied in the order of date of creation of the promotions. The oldest promotion is applied first and the newest promotion is applied last. For each instance of a SKU that matches the criteria in the oldest promotion, the promotion is applied. For the remaining instances of the SKU, each instance is compared to the criteria for the next oldest promotion.\n\n:::\n\nFor example, a cart consists of 1 *BestEver Coffee Maker* and 2 *BestEver Coffee Grinders*. The following promotions are available and applied automatically without a code:\n\n- An existing *BestEver Coffee Maker* + *Grinder* bundle promotion for $200.00. The bundle discount is distributed among the items in the bundle depending on the price of each item.\n- A newly added *BestEver Coffee Grinders* 10% Off percentage item discount promotion.\n\nIn this example, *BestEver Coffee Maker* costs $150 and *BestEver Coffee Grinder* costs $100. The promotions work in the following order:\n\n1. The $50 bundle discount is distributed among the items depending on the cost. In this example, the cost proportion of products is 3:2 and the *BestEver Coffee Maker* gets $30 discount and *BestEver Coffee Grinder* gets $20 discount.\n2. The second promotion is applied to the remaining *BestEver Coffee Grinders* item, and the price is reduced to $90.\n3. The cart total after both discounts is $290 instead of $350.\n\n### Understanding how Promotions work with Bundles\n\n#### Discounting Promotion Bundles\n\nBundles offer a bulk discount when selected products are purchased together. For example, for a bundle promotion, (SKU1 or SKU2 ) + SKU3, the promotion is applied if the bundle includes either SKU1 and SKU3 or SKU2 and SKU3. This setup encourages the purchase of multiple items together at a discounted rate.\n\n#### Discounting Product Bundles via promotions\n\nFor both Cart-level promotions and Item-level promotions, discounts are applied at the bundle level that can have fixed bundle price or automatic/cumulative pricing.\n\nIt is important to note that promotions do not apply to components within a bundle even if the individual item within the components qualifies for promotion. See the following examples:\n\n  - **Example 1**: Consider that Playtend Games offers a bundle that includes a game console, the Playtend Invaders Game, and the Invaders Controller. If there is an existing Item Percent Discount for the Playtend Invaders Game when sold separately, this discount will not apply when the game is part of the bundle. This ensures that the bundle pricing strategy is maintained.\n  - **Example 2**: In the case of Attribute-based promotions, consider a bundle that consists of *Item A* with attribute *Brand A* and *Item B* with attribute *Brand B*. If *Item A* with attribute *Brand A* qualifies for Item Percent Discount promotion, this discount is not applied to the bundle since the *Item A* is a component item within the bundle.\n\nTo learn how to create a bundle, see [Create a Bundle](/docs/api/pxm/products/create-product).\n\n### Condensed Promotion\n\nA condensed promotion is essentially an object that contains specific meta information about a promotion applied to the cart or order.\n\nCondensed promotions can be retrieved from the following endpoints:\n\n- [Get a Cart](/docs/carts-orders/Includes#get-retrieve-promotions-from-a-cart): This endpoint displays cart-level condensed promotions within the included object. If `?include=items` is specified, the included object also contains cart item-level promotions. The relationships field at the cart level has a promotions section only when `?include=promotions` is specified.\n- [Get Cart Items](/docs/carts-orders/Includes#get-retrieve-promotions-from-cart-items): This endpoint shows both cart-level and item-level discounts in a condensed format within the included object.\n- [Get an Order](/docs/carts-orders/Includes#get-retrieve-promotions-from-an-order): This endpoint displays order-level condensed promotions within the included object.\n- [Get Order items](/docs/carts-orders/Includes#get-retrieve-promotions-from-order-items): This endpoint displays both order-level and item-level promotions in the included object.\n\nThis applies to both Promotions Standard and [Rule Promotions](/docs/promotions-builder/overview).\n"
  contact:
    name: Elastic Path
    url: https://elasticpath.com
  license:
    name: MIT
    url: assets/LICENSE
  version: 26.0504.7552059
  x-version-timestamp: 2026-05-04 17:39:21+00:00
servers:
- url: https://useast.api.elasticpath.com
  description: US East Production Server
  variables: {}
- url: https://euwest.api.elasticpath.com
  description: EU West Production Server
  variables: {}
security:
- bearerAuth: []
tags:
- name: Promotions Standard
paths:
  /v2/promotions:
    parameters:
    - $ref: '#/components/parameters/Authorization'
    get:
      tags:
      - Promotions Standard
      summary: Get all Promotions
      description: "Returns all promotions.\n\n:::note\n\nYou can use pagination with this resource. For more information, see [pagination](/guides/Getting-Started/pagination).\n\n:::\n\n### Filtering\n\nThe following operators and attributes are available when filtering on this endpoint. See [Supported Filtering Characters](https://elasticpath.dev/guides/Getting-Started/filtering#supported-characters).\n\nUse `code` filter to search codes within promotions.\n\n| Attribute | Type | Operator     | Example                            |\n|:-----|:---------|:---------|:----------------------------------------|\n| `code` |  `string`   | `eq` | `eq(code,some_code)`          | \n\nFor filtering advanced promotion usages, pass the `EP-Public-Search-Type=cm_search` header. Advanced search filtering is only applicable when the promotion code is consumed and the promotion is not deleted.\n\n| Attribute | Type | Operator     | Example                            |\n|:-----|:---------|:---------|:----------------------------------------|\n| `promo_id`                    | `string`        |  `eq`\t                  | `eq(promo_id, 69c63c9d-8ccf-44b1-8e98-1e7feebfb581)` |\n| `promo_name`                  |`string`\t      | `eq`, `like`\t              | `eq(promo_name,cart percent discount)` |\n| `promo_type`                  | `string`\t      | `eq`\t                  | `eq(promo_type,fixed_discount)` |\n| `promo_status`                | `string`\t      | `eq`\t                  | `eq(promo_status,Running)` |\n| `promo_checkouts`            | `string`\t      | `eq`,`gt`, `ge`, `lt`, `le`\t      | `eq(promo_checkouts,2)` |\n| `promo_skus_prod_ids`         |\t`string`\t  | `eq`, `like`\t              | `eq(promo_skus_prod_ids, sku1)` |\n| `promo_start_date`            |\t`string`\t| `eq`, `gt`, `gr`, `lt`, `le`      | `eq(promo_start_date,2023-01-01)` |\n| `promo_end_date`              |\t`string`  | `eq`, `gt`, `gr`, `lt`, `le`\t  | `eq(promo_end_date,2050-06-15)` |\n| `code_id`\t                  | `string`  | `eq`                  | `eq(promo_id,2ea0cd1d-43a9-441b-b03f-3cab84aaee0c):eq(code_id,14b55e6c-3f80-436e-a90a-4de5f0e36240)`  |\n| `code_code`                   |  `string` | `eq`, `like`                | \t`eq(code_code,cart_fixed_10)` |\n| `code_used`\t                  | `string`  | `eq`, `gt`, `gr`, `lt`, `le`\t  | `eq(code_used,2)` |\n| `code_created_date`           |\t`string`\t| `eq`, `gt`, `gr`, `lt`, `le`\t  | `eq(code_created_date,2023-11-15)` |\n| `order_id`                    |\t`string`  | `eq`, `like`\t              | `eq(order_id,ccb13673-627c-4976-88da-f77c542b528f)`  |\n| `order_customer_email`\t      | `string`  | `eq`, `like`\t              | `like(order_customer_email,andy*)`  |\n| `order_created_date`\t      |  `string`\t| `eq`, `gt`, `gr`,`lt`, `le`\t      |  `le(order_created_date,2023-11-15)`  | \n"
      operationId: getAllPromotions
      parameters:
      - name: page[offset]
        in: query
        description: The number of records to offset the results by.
        style: form
        explode: true
        schema:
          type: string
          examples:
          - '0'
      - name: page[limit]
        in: query
        description: The number of records per page.
        style: form
        explode: true
        schema:
          type: string
          examples:
          - '10'
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Data.PromotionObject'
                    links:
                      $ref: '#/components/schemas/Response.PageLinks'
                    meta:
                      $ref: '#/components/schemas/Response.Meta.Promotions'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
    post:
      tags:
      - Promotions Standard
      summary: Create a Promotion
      description: "You can use this endpoint to create the following types of promotion:\n - Cart Fixed Discount Promotion\n - Cart Percent Discount Promotion\n - X for Y Discount Promotion\n - X for Amount Discount Promotion\n - Fixed Bundle Discount Promotion\n - Item Fixed Discount Promotion\n - Item Percent Discount Promotion\n - Free Gift Promotion\n\n### The `schema` object\n\nPromotions are defined by schemas that are used internally to verify promotions and calculate discounts. You must define a schema when you create the promotion. For more information, see the schema.exclude criteria and the targeting fields criteria.\n\n#### The `schema.exclude` criteria\n\nWhen creating a promotion, you can specify when it **should not** be applied. The promotion will not be applied on any cart (or cart item, depending on the promotion type) that fulfills at least one of the `schema.exclude` criteria. The following criteria can be set to exclude items from a promotion:\n\n- `schema.exclude.targets`\n- `schema.exclude.nodes`\n- `schema.exclude.attributes`\n- `schema.exclude.conditions`\n\nFor example, if you want to create a promotion with value as *SKU1* in `schema.exclude.targets` and and color *yellow* and size *small* in `schema.exclude.attributes`, then any products with *SKU1* or the color *yellow* or the size *small* will be excluded from the promotion.\n\nTo exclude products from a promotion based on multiple conditions at the same time, use `schema.exclude.conditions`. For example, use `schema.exclude.conditions` to exclude items that are both *yellow* in color and *small* in size.\n\n#### The targeting fields criteria\n\nWhen creating a promotion, you can also specify when it **should** be applied. To define the targeted products, use the following fields:\n\n  - `schema.target_catalogs`\n  - `schema.targets`\n  - `schema.target_nodes`\n  - `schema.target_attributes`\n  - `schema.target_conditions`\n\nThe cart item's catalog is verified if you define the `schema.target_catalogs` field. If the item is in any of the targeted catalogs specified in `schema.target_catalogs`, the promotion will be applied. If the item is not in any of the catalogs, the promotion will not be applied.\n\nThen, the cart item is verified to see if it fulfills at least one criteria of any of the four other targeting fields. In other words, the `schema` targeting fields such as `schema.targets`, `schema.target_nodes`, `schema.target_attributes` and `schema.target_conditions` create *OR* targeting conditions.\n\nFor example, if you create a promotion with values as *SKU1* in `schema.targets` and color *yellow* and size *small* in `schema.target_attributes`, then it will be applied to any products with *SKU1* or the color *yellow* or the size *small*.\n\nTo create a promotion that targets products based on multiple conditions at the same time, use `schema.target_conditions`. For example, use it to target items that are both *yellow* in color and *small* in size.\n\n:::note\n\nFor Cart Fixed Discount Promotion and Cart Percent Discount Promotion, the cart item's catalog is verified if you define the `schema.target_catalogs` field. If the item is in any of the targeted catalogs specified in `schema.target_catalogs`, the promotion will be applied. If the item is not in any of the catalogs, the promotion will not be applied.\n\n:::\n\n:::caution\n\n- Line-item discounts are only supported by the line calculation method. For more information about this method, see the Calculation Method section.\n- Hierarchy-based promotions are not supported for fixed bundle discount promotion and free gift promotion. To promote a bundle, create the bundle in Product Experience Manager, and then create a promotion for that bundle. For more information, see Bundles in Product Experience Manager.\n- For Free Gift Promotion, we recommend using `auto_add_free_gift` feature with `automatic` setting enabled. When `automatic` is set to `true`, it indicates that promotions are added automatically, and discounts are applied accordingly. If you enable the `auto_add_free_gift`, but do not enable the `automatic` setting, gift items will be added without discounts. In this case, shoppers need to apply coupon codes twice, first to add the gift item and then to apply the discount.\n\n:::\n"
      operationId: createAPromotion
      parameters: []
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              required:
              - data
              properties:
                data:
                  $ref: '#/components/schemas/Data.PromotionObject'
        required: false
      responses:
        '201':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - properties:
                    data:
                      type: object
                      $ref: '#/components/schemas/Data.PromotionObject'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
  /v2/promotions/{promotionID}:
    parameters:
    - $ref: '#/components/parameters/Authorization'
    get:
      tags:
      - Promotions Standard
      summary: Get a Promotion
      description: Retrieves a promotion.
      operationId: getAPromotion
      parameters:
      - name: promotionID
        in: path
        description: The ID of the promotion.
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - properties:
                    data:
                      $ref: '#/components/schemas/Data.PromotionObject'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
    put:
      tags:
      - Promotions Standard
      summary: Update a Promotion
      description: "Use this endpoint to update a specific promotion.\n\n:::note\n\n  You can re-enable an expired promotion by updating the end date to a future date. However, when you enable a promotion again, all codes previously attached to it are deleted to make sure that duplicate promotion codes do not exist on different promotions.\n\n:::\n\n### Errors\n\nWhen extending the end date of an expired promotion with over 1000 codes, you will receive the following error response. In such cases, we recommend duplicating the promotion, allowing you to set the new end dates and create promotion codes as needed.\n\n```json\n{\n    \"errors\": [\n        {\n            \"status\": 422,\n            \"source\": \"request\",\n            \"title\": \"Unprocessable Entity\",\n            \"detail\": \"\"\n        }\n    ]\n}\n```\n"
      operationId: updateAPromotion
      parameters:
      - name: promotionID
        in: path
        description: The unique promotion identifier.
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/Data.PromotionObject'
        required: false
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - properties:
                    data:
                      type: object
                      $ref: '#/components/schemas/Data.PromotionObject'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
    delete:
      tags:
      - Promotions Standard
      summary: Delete a Promotion
      description: Use this endpoint to delete a specific promotion.
      operationId: deleteAPromotion
      parameters:
      - name: promotionID
        in: path
        description: The ID of the promotion that you want to delete.
        required: true
        style: simple
        schema:
          type: string
      responses:
        '204':
          description: No Content
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
  /v2/promotions/{promotionID}/history:
    parameters:
    - $ref: '#/components/parameters/Authorization'
    get:
      tags:
      - Promotions Standard
      summary: Get a Promotion History
      description: Use this endpoint to retrieve a promotion history.
      operationId: getAPromotionHistory
      parameters:
      - name: promotionID
        in: path
        description: The ID of the promotion.
        required: true
        style: simple
        schema:
          type: string
      responses:
        '200':
          description: ''
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Response.Data'
                - properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Data.PromotionObject'
                    links:
                      $ref: '#/components/schemas/Response.PageLinks'
                    meta:
                      $ref: '#/components/schemas/Response.Meta.Promotions'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response.Error'
              example:
              - errors:
                - status: 401
                  title: Unauthorized
      deprecated: false
components:
  schemas:
    Data.Conditions:
      title: Data.Conditions
      type: object
      properties:
        or:
          type: array
          items:
            type: object
            properties:
              and:
                type: array
                items:
                  oneOf:
                  - $ref: '#/components/schemas/Data.AttributeObject'
                  - $ref: '#/components/schemas/Data.NodesObject'
    Data.ItemFixedDiscountPromotion:
      title: Data.ItemFixedDiscountPromotion
      allOf:
      - $ref: '#/components/schemas/Data.BasePromotions'
      - type: object
        properties:
          schema:
            allOf:
            - $ref: '#/components/schemas/Data.Promotions.Schema.TargetCatalogs'
            - $ref: '#/components/schemas/Data.Promotions.Schema.Targets'
            - $ref: '#/components/schemas/Data.Promotions.Schema.TargetNodes'
            - $ref: '#/components/schemas/Data.Promotions.Schema.TargetAttributes'
            - $ref: '#/components/schemas/Data.Promotions.Schema.AmountAndCurrencyArray'
            - $ref: '#/components/schemas/Data.Promotions.Schema.Exclude'
    Data.PromotionObject:
      type: object
      oneOf:
      - $ref: '#/components/schemas/Data.CartFixedDiscountPromotion'
      - $ref: '#/components/schemas/Data.CartPercentDiscountPromotion'
      - $ref: '#/components/schemas/Data.ItemFixedDiscountPromotion'
      - $ref: '#/components/schemas/Data.ItemPercentDiscountPromotion'
      - $ref: '#/components/schemas/Data.XForYDiscountPromotion'
      - $ref: '#/components/schemas/Data.XForAmountDiscountPromotion'
      - $ref: '#/components/schemas/Data.FixedBundleDiscountPromotion'
      - $ref: '#/components/schemas/Data.FreeGiftPromotion'
      discriminator:
        propertyName: promotion_type
        mapping:
          fixed_discount: '#/components/schemas/Data.CartFixedDiscountPromotion'
          percent_discount: '#/components/schemas/Data.CartPercentDiscountPromotion'
          item_fixed_discount: '#/components/schemas/Data.ItemFixedDiscountPromotion'
          item_percent_discount: '#/components/schemas/Data.ItemPercentDiscountPromotion'
          x_for_y: '#/components/schemas/Data.XForYDiscountPromotion'
          x_for_amount: '#/components/schemas/Data.XForAmountDiscountPromotion'
          bundle_fixed_discount: '#/components/schemas/Data.FixedBundleDiscountPromotion'
          bundle_gift: '#/components/schemas/Data.FreeGiftPromotion'
      required:
      - promotion_type
      properties:
        promotion_type:
          type: string
          enum:
          - fixed_discount
          - percent_discount
          - item_fixed_discount
          - item_percent_discount
          - x_for_y
          - x_for_amount
          - bundle_fixed_discount
          - bundle_gift
    Response.PageLinks:
      type: object
      properties:
        current:
          description: Always the current page.
          type: string
        first:
          description: Always the first page.
          type: string
        last:
          description: If there is only one page, it returns `null`.
          type: string
        next:
          description: If there is only one page, it returns `null`.
          type: string
        prev:
          description: If the user is on the first page, it returns `null`.
          type: string
    Response.PaginationResults:
      type: object
      properties:
        total:
          description: The total number of results.
          type: integer
    Response.PaginationPage:
      type: object
      properties:
        current:
          description: The current page.
          type: integer
        limit:
          description: The maximum number of records per page for this response. You can set this value up to 100.
          type: integer
        offset:
          description: The current offset by number of records, not pages. Offset is zero-based.
          type: integer
        total:
          description: The total page count.
          type: integer
    Data.FreeGiftPromotion:
      title: Data.FreeGiftPromotion
      allOf:
      - $ref: '#/components/schemas/Data.BasePromotions'
      - type: object
        properties:
          schema:
            allOf:
            - $ref: '#/components/schemas/Data.Promotions.Schema.TargetCatalogs'
            - $ref: '#/components/schemas/Data.Promotions.Schema.Requirements'
            - $ref: '#/components/schemas/Data.Promotions.Schema.Gifts'
    Data.Promotions.Schema.TargetNodes:
      title: Data.Promotions.Schema.TargetNodes
      type: object
      properties:
        target_nodes:
          description: Specifies the unique identifiers of the nodes to be applied for the promotion in addition to the product SKUs applied in targets. You can also define `schema.target_nodes` without defining the `schema.targets` if the promotion is intended for a certain node. You cannot define "targets":"all" and `schema.target_nodes` within the same schema. This will result in a validation error.
          type: array
          items:
            type: string
            examples:
            - ff7d62d4-740c-43ac-97cd-a7b0c32221c2
    Data.Promotions.Schema.AmountAndCurrencyArray:
      title: Data.Promotions.Schema.AmountAndCurrencyArray
      type: object
      required:
      - currencies
      properties:
        currencies:
          type: array
          items:
            $ref: '#/components/schemas/Data.Promotions.Schema.Currencies.AmountAndCurrency'
    Data.XForYDiscountPromotion:
      title: Data.XForYDiscountPromotion
      allOf:
      - $ref: '#/components/schemas/Data.BasePromotions'
      - type: object
        properties:
          schema:
            allOf:
            

# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elastic-path/refs/heads/main/openapi/elastic-path-promotions-standard-api-openapi.yml