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

# Create Reward Calendar

> Creates a Reward Calendar offer.

<RequestExample>
  ```bash Create Reward Calendar theme={"system"}
  curl -X POST \
    'https://api.appcharge.com/v2/offer' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'x-publisher-token: <x-publisher-token>' \
    -d '{
      "publisherOfferId": "reward-calendar-1",
      "name": "Weekly Reward Calendar",
      "type": "PopUp",
      "subType": "RewardCalendar",
      "active": true,
      "priority": 1,
      "offerExternalUiId": "reward-calendar-design-1",
      "startOver": false,
      "rewardCalendar": {
        "resetBehavior": "ToCalendarStart",
        "popupTrigger": "ShowAutomatically",
        "rewardCollectionBehavior": "ForcePlayerToCollect"
      },
      "productsSequence": [
        {
          "index": 1,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 100,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 2,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 150,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 3,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 200,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 4,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 250,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 5,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 300,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 6,
          "products": [
            {
              "publisherProductId": "coins",
              "quantity": 350,
              "priority": "Sub"
            }
          ],
          "priceInUsdCents": 0
        },
        {
          "index": 7,
          "products": [
            {
              "publisherProductId": "chest",
              "quantity": 1,
              "priority": "Main"
            }
          ],
          "priceInUsdCents": 0
        }
      ],
      "segments": [
        "New User"
      ]
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Create Reward Calendar theme={"system"}
  {
    "publisherId": "69133d595af23405d88843a5",
    "publisherOfferId": "reward-calendar-1",
    "name": "Weekly Reward Calendar",
    "displayName": "Weekly Reward Calendar",
    "type": "PopUp",
    "subType": "RewardCalendar",
    "active": true,
    "segments": [
      "New User"
    ],
    "offerUi": {
      "offerUiId": "6a1828e5e75e5598d942e257",
      "active": true,
      "offerUiType": "PopUp",
      "offerUiSubType": "RewardCalendar",
      "name": "Weekly Reward Calendar Design",
      "description": "description",
      "backgroundImage": "",
      "rewardCalendar": {
        "collectibleBadgeImage": "https://media.appcharge.com/defaults/reward-calendar/reward_badge.png",
        "lockedBadgeImage": "https://media.appcharge.com/defaults/reward-calendar/reward_badge_locked.png",
        "dayFontColor": "#764cd4",
        "subRewardBackgroundImage": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1779967290083__9f0c1502-10e0-4b75-a670-3748c2ebbdf1",
        "mainRewardBackgroundImage": "",
        "backgroundColor": "#97daf4",
        "headerImage": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1779966861904__a16963b5-db9b-45de-b5c5-cdcc7dcf79f3",
        "collectIconImage": "https://media.appcharge.com/defaults/reward-calendar/default_collected_icon.png",
        "lockedIconImage": "https://media.appcharge.com/defaults/reward-calendar/default_lock_icon.png"
      },
      "externalId": "reward-calendar-design-1"
    },
    "productsSequence": [
      {
        "index": 1,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1770287158114__a4266bfc-297f-47c9-b5e5-16d7fdb987ea"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Coins",
              "createdAt": "2026-02-05T10:26:12.307Z",
              "updatedAt": "2026-02-05T10:26:12.307Z",
              "productId": "698470440b0547d86762f85e"
            },
            "publisherProductId": "coins",
            "quantity": 100,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 2,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1762940780865__0f4b7e05-6051-46c8-9160-d155e9ca2c3b"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Coins",
              "createdAt": "2025-11-12T09:46:28.925Z",
              "updatedAt": "2025-11-12T09:46:28.925Z",
              "productId": "69145774cceb99de11dfe64a"
            },
            "publisherProductId": "coins",
            "quantity": 150,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 3,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1762940945510__6d0b0fbd-1833-4f01-b230-421a5f4bdba9"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Coins",
              "createdAt": "2025-11-12T09:49:10.063Z",
              "updatedAt": "2025-11-12T09:49:10.063Z",
              "productId": "69145816cceb99de11dfe692"
            },
            "publisherProductId": "coins",
            "quantity": 200,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 4,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1763013669345__fda4f44a-19e6-4a9a-b71a-9e55903dfece"
                },
                {
                  "type": "productPrefix",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1763013758566__745ba5f4-582f-401f-b9fe-08cd218bf778"
                }
              ],
              "createdAt": "2025-11-11T13:42:51.928Z",
              "updatedAt": "2025-11-13T06:02:42.481Z",
              "displayName": "Coins",
              "productId": "69133d5bcceb99de11df0200"
            },
            "publisherProductId": "coins",
            "quantity": 250,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 5,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1770287224409__a406068e-4153-4f75-93b9-ea884d6fac82"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Coins",
              "createdAt": "2026-02-05T10:27:18.553Z",
              "updatedAt": "2026-02-05T10:27:18.553Z",
              "productId": "6984708615abbcb66f201dbe"
            },
            "publisherProductId": "coins",
            "quantity": 300,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 6,
        "products": [
          {
            "product": {
              "publisherProductId": "coins",
              "name": "Coins",
              "description": "Coins reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1770287198121__4f7c17dc-7a12-4554-89b2-dd90c51e8114"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Coins",
              "createdAt": "2026-02-05T10:26:41.716Z",
              "updatedAt": "2026-02-05T10:26:41.716Z",
              "productId": "6984706115abbcb66f201dae"
            },
            "publisherProductId": "coins",
            "quantity": 350,
            "priority": "Sub"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      },
      {
        "index": 7,
        "products": [
          {
            "product": {
              "publisherProductId": "chest",
              "name": "Chest",
              "description": "Chest reward.",
              "textFontColorHex": "#FFFFFF",
              "type": "Quantity",
              "prefix": "",
              "suffix": "",
              "images": [
                {
                  "type": "product",
                  "url": "https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1770287158114__a4266bfc-297f-47c9-b5e5-16d7fdb987ea"
                },
                {
                  "type": "productPrefix",
                  "url": ""
                }
              ],
              "displayName": "Chest",
              "createdAt": "2026-02-05T10:26:12.307Z",
              "updatedAt": "2026-02-05T10:26:12.307Z",
              "productId": "698470440b0547d86762f85e"
            },
            "publisherProductId": "chest",
            "quantity": 1,
            "priority": "Main"
          }
        ],
        "priceInUsdCents": 0,
        "badges": []
      }
    ],
    "priority": 1,
    "startOver": false,
    "rewardCalendar": {
      "resetBehavior": "ToCalendarStart",
      "popupTrigger": "ShowAutomatically",
      "rewardCollectionBehavior": "ForcePlayerToCollect"
    },
    "badges": [],
    "createdAt": "2026-06-11T05:09:03.575Z",
    "updatedAt": "2026-06-11T05:09:03.575Z",
    "offerId": "6a2a42ef85ce5ccba45444f3"
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi-reward-calendar.json POST /v2/offer
openapi: 3.0.1
info:
  title: Reward Calendars API
  description: API service for managing Reward Calendar offers.
  version: '1.0'
servers:
  - url: https://api.appcharge.com
security: []
paths:
  /v2/offer:
    post:
      tags:
        - Reward Calendar Offers
      summary: Create Reward Calendar
      description: Creates a Reward Calendar offer.
      operationId: createRewardCalendarOffer
      parameters:
        - name: x-publisher-token
          in: header
          required: true
          description: Publisher token used for authentication.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRewardCalendarOfferDto'
      responses:
        '201':
          description: Reward Calendar offer created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RewardCalendarOfferResponse'
        '400':
          description: Bad request.
        '401':
          description: Unauthorized.
components:
  schemas:
    CreateRewardCalendarOfferDto:
      type: object
      required:
        - publisherOfferId
        - name
        - type
        - subType
        - active
        - priority
        - productsSequence
        - rewardCalendar
      properties:
        publisherOfferId:
          type: string
          description: >-
            Reward Calendar offer ID provided by the publisher. This is the
            offer's **External ID** value in the Publisher Dashboard.
          example: reward-calendar-1
        name:
          type: string
          description: Reward Calendar offer name.
          example: Weekly Reward Calendar
        type:
          type: string
          description: Offer type. For Reward Calendars, use `PopUp`.
          enum:
            - PopUp
          example: PopUp
        subType:
          type: string
          description: Popup offer subtype. For Reward Calendars, use `RewardCalendar`.
          enum:
            - RewardCalendar
          example: RewardCalendar
        active:
          type: boolean
          description: Whether the Reward Calendar offer is active.
          example: true
        priority:
          type: integer
          description: >-
            Display priority for eligible popup offers. Lower numbers appear
            first.
          minimum: 1
          example: 1
        offerUiId:
          type: string
          description: >-
            Internal ID of the Reward Calendar offer design. Required if
            `offerExternalUiId` is not provided.
          example: 69fb22e6dd352b799c65e97e
        offerExternalUiId:
          type: string
          description: >-
            External ID of the Reward Calendar offer design. Required if
            `offerUiId` is not provided.
          example: reward-calendar-design-1
        startOver:
          type: boolean
          description: >-
            Whether the Reward Calendar restarts from Week 1 after the player
            completes all configured weeks.
          default: true
          example: false
        rewardCalendar:
          description: Information about the Reward Calendar behavior configuration.
          allOf:
            - $ref: '#/components/schemas/RewardCalendarBehavior'
        productsSequence:
          type: array
          description: >-
            A list of reward tiles. The array length must be a multiple of
            seven, with one to 10 configured weeks.
          minItems: 7
          maxItems: 70
          items:
            $ref: '#/components/schemas/RewardCalendarProductSequenceItem'
        segments:
          type: array
          description: A list of segments eligible for this offer.
          items:
            type: string
          example:
            - New User
    RewardCalendarOfferResponse:
      allOf:
        - $ref: '#/components/schemas/RewardCalendarOfferResponseBase'
        - type: object
          properties:
            offerId:
              type: string
              description: Internal offer ID.
              example: 69fb22e6dd352b799c65e97f
            createdAt:
              type: string
              format: date-time
              description: Date the Reward Calendar offer was created.
              example: '2026-06-11T05:09:03.575Z'
            updatedAt:
              type: string
              format: date-time
              description: Date the Reward Calendar offer was updated.
              example: '2026-06-11T05:09:03.575Z'
    RewardCalendarBehavior:
      type: object
      description: Information about the Reward Calendar behavior configuration.
      required:
        - resetBehavior
        - popupTrigger
        - rewardCollectionBehavior
      properties:
        resetBehavior:
          type: string
          description: Controls how player progress resets after a missed day.
          enum:
            - ToCalendarStart
            - ToCurrentWeekStart
          example: ToCalendarStart
        popupTrigger:
          type: string
          description: Controls how the Reward Calendar popup opens.
          enum:
            - ShowAutomatically
            - ShowOnBadgeClick
          example: ShowAutomatically
        rewardCollectionBehavior:
          type: string
          description: >-
            Controls whether players must collect a reward immediately or can
            collect it later that day. If you pass `ForcePlayerToCollect`, the
            collectible badge is not shown.
          enum:
            - ForcePlayerToCollect
            - PlayerCanSkipCollection
          example: ForcePlayerToCollect
    RewardCalendarProductSequenceItem:
      type: object
      description: Information about a Reward Calendar reward tile.
      required:
        - index
        - products
        - priceInUsdCents
      properties:
        index:
          type: integer
          description: >-
            Reward tile index. Indexes 1 to 7 define Week 1, indexes 8 to 14
            define Week 2, and so on. The main reward is every seventh index,
            such as 7, 14, and 21.
          minimum: 1
          maximum: 70
          example: 1
        products:
          type: array
          description: A list of products included in this reward tile.
          minItems: 1
          items:
            $ref: '#/components/schemas/RewardCalendarProduct'
        priceInUsdCents:
          type: integer
          description: >-
            Required for schema compatibility. Reward Calendar rewards are
            always free, so set this value to `0`. The reward remains free even
            if you pass a non-zero value.
          example: 0
    RewardCalendarOfferResponseBase:
      type: object
      properties:
        publisherId:
          type: string
          description: Internal publisher ID.
          example: 69133d595af23405d88843a5
        publisherOfferId:
          type: string
          description: >-
            Reward Calendar offer ID provided by the publisher. This is the
            offer's **External ID** value in the Publisher Dashboard.
          example: reward-calendar-1
        name:
          type: string
          description: Reward Calendar offer name.
          example: Weekly Reward Calendar
        displayName:
          type: string
          description: Reward Calendar offer display name.
          example: Weekly Reward Calendar
        type:
          type: string
          description: Offer type. For Reward Calendars, use `PopUp`.
          enum:
            - PopUp
          example: PopUp
        subType:
          type: string
          description: Popup offer subtype. For Reward Calendars, use `RewardCalendar`.
          enum:
            - RewardCalendar
          example: RewardCalendar
        active:
          type: boolean
          description: Whether the Reward Calendar offer is active.
          example: true
        priority:
          type: integer
          description: >-
            Display priority for eligible popup offers. Lower numbers appear
            first.
          minimum: 1
          example: 1
        startOver:
          type: boolean
          description: >-
            Whether the Reward Calendar restarts from Week 1 after the player
            completes all configured weeks.
          example: true
        rewardCalendar:
          description: Information about the Reward Calendar behavior configuration.
          allOf:
            - $ref: '#/components/schemas/RewardCalendarBehaviorResponse'
        offerUi:
          $ref: '#/components/schemas/RewardCalendarOfferUiResponse'
        productsSequence:
          type: array
          description: >-
            A list of reward tiles. The array length must be a multiple of
            seven, with one to 10 configured weeks.
          minItems: 7
          maxItems: 70
          items:
            $ref: '#/components/schemas/RewardCalendarProductSequenceItemResponse'
        segments:
          type: array
          description: A list of segments eligible for this offer.
          items:
            type: string
          example:
            - New User
        badges:
          type: array
          description: Badges attached to the offer.
          items:
            type: object
            additionalProperties: true
    RewardCalendarProduct:
      type: object
      description: Information about a product included in a Reward Calendar reward tile.
      required:
        - publisherProductId
        - quantity
        - priority
      properties:
        publisherProductId:
          type: string
          description: Product ID provided by the publisher.
          example: coins
        quantity:
          oneOf:
            - type: integer
            - type: string
          description: Number of units included in the reward.
          example: 100
        priority:
          type: string
          description: Product display priority.
          enum:
            - Sub
            - Main
          example: Sub
    RewardCalendarBehaviorResponse:
      type: object
      description: Information about the Reward Calendar behavior configuration.
      properties:
        resetBehavior:
          type: string
          description: Controls how player progress resets after a missed day.
          enum:
            - ToCalendarStart
            - ToCurrentWeekStart
          example: ToCalendarStart
        popupTrigger:
          type: string
          description: Controls how the Reward Calendar popup opens.
          enum:
            - ShowAutomatically
            - ShowOnBadgeClick
          example: ShowAutomatically
        rewardCollectionBehavior:
          type: string
          description: >-
            Controls whether players must collect a reward immediately or can
            collect it later that day. If `rewardCollectionBehavior` is
            `ForcePlayerToCollect`, the collectible badge is not shown.
          enum:
            - ForcePlayerToCollect
            - PlayerCanSkipCollection
          example: ForcePlayerToCollect
    RewardCalendarOfferUiResponse:
      type: object
      description: Reward Calendar offer design details returned with the offer.
      properties:
        offerUiId:
          type: string
          description: Internal ID of the Reward Calendar offer design.
          example: 6a1828e5e75e5598d942e257
        active:
          type: boolean
          description: Whether the offer design is active.
          example: true
        offerUiType:
          type: string
          enum:
            - PopUp
          description: Type of offer design.
          example: PopUp
        offerUiSubType:
          type: string
          enum:
            - RewardCalendar
          description: Offer design subtype.
          example: RewardCalendar
        name:
          type: string
          description: Offer design name.
          example: Weekly Reward Calendar Design
        description:
          type: string
          description: Offer design description.
          example: description
        backgroundImage:
          type: string
          description: Background image URL returned for the offer design.
          example: ''
        rewardCalendar:
          $ref: '#/components/schemas/RewardCalendarOfferUiDesignResponse'
        externalId:
          type: string
          description: External ID of the Reward Calendar offer design.
          example: reward-calendar-design-1
    RewardCalendarProductSequenceItemResponse:
      type: object
      description: Information about a Reward Calendar reward tile.
      required:
        - priceInUsdCents
      properties:
        index:
          type: integer
          description: >-
            Reward tile index. Indexes 1 to 7 define Week 1, indexes 8 to 14
            define Week 2, and so on. The main reward is every seventh index,
            such as 7, 14, and 21.
          minimum: 1
          maximum: 70
          example: 1
        products:
          type: array
          description: A list of products included in this reward tile.
          minItems: 1
          items:
            $ref: '#/components/schemas/RewardCalendarProductResponse'
        priceInUsdCents:
          type: integer
          description: >-
            Required for schema compatibility. Reward Calendar rewards are
            always free, so set this value to `0`. The reward remains free even
            if you pass a non-zero value.
          example: 0
        badges:
          type: array
          description: Badges attached to this reward tile.
          items:
            type: object
            additionalProperties: true
    RewardCalendarOfferUiDesignResponse:
      type: object
      description: Reward Calendar offer design configuration.
      properties:
        collectibleBadgeImage:
          type: string
          description: >-
            Collectible badge image URL. This badge is not shown when
            `rewardCollectionBehavior` is `ForcePlayerToCollect`.
          example: >-
            https://media.appcharge.com/defaults/reward-calendar/reward_badge.png
        lockedBadgeImage:
          type: string
          description: Locked badge image URL.
          example: >-
            https://media.appcharge.com/defaults/reward-calendar/reward_badge_locked.png
        dayFontColor:
          type: string
          description: Day number font color.
          example: '#764cd4'
        subRewardBackgroundImage:
          type: string
          description: Background image URL for reward tiles on Days 1-6.
          example: >-
            https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1779967290083__9f0c1502-10e0-4b75-a670-3748c2ebbdf1
        mainRewardBackgroundImage:
          type: string
          description: Background image URL for the Day 7 reward tile.
          example: ''
        backgroundColor:
          type: string
          description: Reward Calendar background color.
          example: '#97daf4'
        headerImage:
          type: string
          description: Header image URL.
          example: >-
            https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1779966861904__a16963b5-db9b-45de-b5c5-cdcc7dcf79f3
        collectIconImage:
          type: string
          description: Icon image URL displayed after a player collects a reward.
          example: >-
            https://media.appcharge.com/defaults/reward-calendar/default_collected_icon.png
        lockedIconImage:
          type: string
          description: Icon image URL displayed on rewards that are not available yet.
          example: >-
            https://media.appcharge.com/defaults/reward-calendar/default_lock_icon.png
    RewardCalendarProductResponse:
      type: object
      description: Information about a product included in a Reward Calendar reward tile.
      properties:
        product:
          $ref: '#/components/schemas/RewardCalendarProductDetailsResponse'
        publisherProductId:
          type: string
          description: Product ID provided by the publisher.
          example: coins
        quantity:
          oneOf:
            - type: integer
            - type: string
          description: Number of units included in the reward.
          example: 100
        priority:
          type: string
          description: Product display priority.
          enum:
            - Sub
            - Main
          example: Sub
    RewardCalendarProductDetailsResponse:
      type: object
      description: Product details returned for a Reward Calendar reward.
      properties:
        publisherProductId:
          type: string
          description: Product ID provided by the publisher.
          example: coins
        name:
          type: string
          description: Product name.
          example: Coins
        description:
          type: string
          description: Product description.
          example: Coins reward.
        textFontColorHex:
          type: string
          description: Product text font color in hex format.
          example: '#FFFFFF'
        type:
          type: string
          description: Product type.
          example: Quantity
        prefix:
          type: string
          description: Product quantity prefix.
          example: ''
        suffix:
          type: string
          description: Product quantity suffix.
          example: ''
        images:
          type: array
          description: Product images.
          items:
            $ref: '#/components/schemas/RewardCalendarProductImageResponse'
        displayName:
          type: string
          description: Product display name.
          example: Coins
        createdAt:
          type: string
          format: date-time
          description: Date the product was created.
          example: '2026-02-05T10:26:12.307Z'
        updatedAt:
          type: string
          format: date-time
          description: Date the product was updated.
          example: '2026-02-05T10:26:12.307Z'
        productId:
          type: string
          description: Internal product ID.
          example: 698470440b0547d86762f85e
    RewardCalendarProductImageResponse:
      type: object
      description: Product image details.
      properties:
        type:
          type: string
          description: Product image type.
          example: product
        url:
          type: string
          description: Product image URL.
          example: >-
            https://media-staging.appcharge.com/media/69133d595af23405d88843a5/1770287158114__a4266bfc-297f-47c9-b5e5-16d7fdb987ea

````