openapi: 3.1.0
info:
  title: Management API
  version: ''
  description: |
    The Management API allows you to programmatically do what the Campaign Manager
    does. Use this API for back-office operations such as campaign
    and coupon management, maintenance jobs, and bulk operations.

    For more background information about this API, see
    [Management API overview](https://docs.talon.one/docs/dev/management-api/overview).

    > [!note] **Are you looking for a different API?**
    > - To integrate with Talon.One directly and send real-time data, see the [Integration API](https://docs.talon.one/integration-api).
    > - To integrate with Talon.One from a CEP or CDP platform, see the [Third-party API](https://docs.talon.one/third-party-api).

    ## Authentication

    Management API keys are scoped to a user account and become invalid if the user is
    deactivated or removed from the organization. Use a dedicated service account to
    create keys for production integrations.

    For details on generating and managing API keys, see
    [Manage Management API keys](https://docs.talon.one/docs/product/account/dev-tools/manage-mapi-keys).

    ## Security

    Consider the following recommendations:
    - Store API keys securely via environment variables or by using a secret management system.
    - Only call this API from backend services.
    - Implement HTTPS for all communication with the API to ensure data privacy and security.
    - Create [user roles](https://docs.talon.one/docs/product/account/account-settings/manage-roles)
      reflecting your own company hierarchies.

    ## Response codes and error handling

    Talon.One uses conventional HTTP response codes to indicate the success or failure of an API request.
    Codes in the `2xx` range indicate success. Codes in the `4xx` range indicate the request failed based
    on the information provided. Codes in the `5xx` range indicate an error with Talon.One servers.

    Error responses include a `message` that summarizes what went wrong. Use it for logging and debugging.

    When a request has one or more specific problems, the `errors` array lists each one separately:
    - `title` gives a short description of the problem
    - `source` shows where the error originated, for example, using a `pointer` property indicating the
      problematic property in the request body.

    | Code | Description | Action |
    |------|-------------|--------|
    | `2xx` | Success | None. |
    | `400` | Bad request | Fix the request (for example, a missing or invalid parameter). Not retryable. |
    | `401` | Unauthorized | Provide a valid API key. Not retryable. |
    | `404` | Not found | Check the resource path or ID. Not retryable. |
    | `409` | Conflict | If you are creating a resource, use a unique resource name/ID. Generally not retryable. |
    | `429` | Rate limit exceeded | Retry with exponential backoff. |
    | `5xx` | Server error | Retry with exponential backoff. |

    ## URL encoding

    Encode all path and query parameter values that contain special characters. This applies to
    customer profile IDs, session IDs, coupon codes, and any other user-supplied string passed as
    a URL segment or query parameter.

    For example, encode a `10$OFF_NOW` coupon code as `10%24OFF_NOW` before
    including it in a request URL.

    Requests with unencoded special characters may be misrouted or return unexpected errors.

    For more information, see [HTML URL Encoding Reference](https://www.w3schools.com/tags/ref_urlencode.asp).

    ## MCP server (closed beta)

    Talon.One provides an MCP server that gives AI agents
    read-only access to your campaigns, customers, coupons, and loyalty programs,
    so they can answer questions about your campaigns and customers in plain language.

    Agents can explain campaign rule logic, check campaign status and budgets, analyze customer point
    balances and tier status, and investigate failed API requests.

    To connect, append `/v1/mcp/entrypoint` to your Talon.One deployment URL and authenticate with an MCP
    connection API key generated in **Campaign Manager > Account > Tools > MCP Connections**.

    The server is compatible with Claude Desktop, Claude Code, Cursor, Gemini CLI, ChatGPT CLI,
    Codex CLI, and other stdio-compatible MCP clients.

    For more information, see [Talon.One MCP server](https://docs.talon.one/docs/dev/mcp).

    ## Rate limiting

    This API is **not** meant to be used in real-time integrations that directly serve your end users.
    It supports a maximum of **3 requests per second** for each of these endpoints.
    For real-time integrations use the [Integration API](https://docs.talon.one/integration-api).
servers:
  - url: https://yourbaseurl.talon.one
security:
  - manager_auth: []
  - management_key: []
tags:
  - name: Accounts and users
    description: |
      Represents account and user management, including billing email addresses and user invitations.
  - name: Achievements
    description: |
      Represents achievements that reward a customer profile for performing a number of specific actions or reaching a transactional milestone within a defined period.

      For example, you can use achievements to award your customers when they purchase five cups of coffee in one week or when they purchase items worth $3000 in three months.
  - name: Additional costs
    description: |
      Represents an extra fee applied to the cart, for example, shipping fees or processing fees.

      See the [docs](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs).
  - name: Analytics
    description: |
      Represents analytics used to retrieve statistical data about the performance of campaigns within an Application.
  - name: Applications
    description: |
      Represents an Application in the Campaign Manager.
      An Application is the target of every Integration API request to Talon.One.

      One Application can hold various API keys used for Integration API requests.

      You may have multiple Applications within one account,
      for example staging and production, or different international markets.

      See the [docs](https://docs.talon.one/docs/product/applications/overview).
  - name: Attributes
    description: |
      Represents a piece of information related to one of the entities available in the Campaign Manager. Use
      them to create highly customized rules.

      See the [docs](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes).
  - name: Audiences
    description: |
      Represents lists of customer profiles that allow you to target specific groups of customers in your campaigns.
      Audiences can be synced from customer data platforms or created directly in Talon.One.

      See the [docs](https://docs.talon.one/docs/product/audiences/overview).
  - name: Campaign access groups
    description: |
      Represents the campaign access groups you can create in your Applications to organize your campaigns based on the type of campaign or the team in charge.

      See the [docs](https://docs.talon.one/docs/product/account/account-settings/managing-campaign-groups).
  - name: Campaign templates
    description: |
      Represents templates used to generate campaigns from.
  - name: Campaigns
    description: |
      Represents the primary resource used to control the behavior of the Talon.One Rule Engine.
      They combine rulesets, coupons, and limits into a single unit.

      See the [docs](https://docs.talon.one/docs/product/campaigns/overview).
  - name: Catalogs
    description: |
      Represents a catalog of cart items with unique SKUs. Cart item catalogs allow you to synchronize your entire inventory with Talon.One.

      See the [docs](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs).
  - name: Collections
    description: |
      Represents a collection of arbitrary values that you can use inside rules. For example, a list of SKUs.

      See the [docs](https://docs.talon.one/docs/product/campaigns/managing-collections).
  - name: Coupons
    description: |
      Represents unique codes belonging to a particular campaign. Coupons don't define any behavior on their own.
      Instead the campaign ruleset can include rules that validate coupons and carry out particular effects.

      See the [docs](https://docs.talon.one/docs/product/campaigns/coupons/coupon-page-overview).
  - name: Customer data
    description: |
      Represents the data of a customer, including sessions and events used for reporting and debugging in the Campaign Manager.
  - name: Events
    description: |
      Represents a single occurrence of a specific customer action, for example, updating the cart or signing up for a newsletter.

      There are 2 types of events:
      - **Built-in events:** They are triggered by various endpoints, such as the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint. [Learn more](https://docs.talon.one/docs/dev/concepts/entities/events).
      - **Custom events:** They are triggered by the [Track event](https://docs.talon.one/integration-api#tag/Events/operation/trackEventV2) endpoint.
  - name: Experiments
    description: |
      Represents an A/B testing configuration within a campaign that splits customer sessions across multiple variants to compare rule effects against each other.
  - name: Giveaways
    description: |
      Represents a program that rewards customers with giveaways, such as free gift cards.

      See the [docs](https://docs.talon.one/docs/product/giveaways/overview).
  - name: Logs
    description: |
      Represents the Talon.One logs, which contain all incoming and outgoing requests.
  - name: Loyalty
    description: |
      Represents loyalty programs or concepts related to them.

      Loyalty programs can be _profile-based_ or _card-based_, depending on whether loyalty points are linked
      to [customer profiles](https://docs.talon.one/docs/product/applications/displaying-customer-profiles) or [loyalty cards](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview).

      See [the Product docs](https://docs.talon.one/docs/product/loyalty-programs/overview) for more information.
  - name: Loyalty cards
    description: |
      Represents loyalty cards.

      [Loyalty cards](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview) allow your customers to collect and spend loyalty points within a card-based loyalty program.
  - name: Referrals
    description: |
      Represents a referral code shared between a customer (advocate) and a prospect (friend).

      A referral is defined by:
      - an advocate: person who invited their friend via referral program.
      - a friend: person who receives the invite from an advocate.
      - a referral code: code to be redeemed by the advocate(s) once they referred their friend.

      See the [docs](https://docs.talon.one/docs/product/campaigns/referrals/referral-overview).
  - name: Roles
    description: |
      Represents a set of permissions assigned to a user.

      See the [docs](https://docs.talon.one/docs/product/account/account-settings/managing-roles).
  - name: Sessions
    description: |
      Represents a session used for authentication purposes.
      Create one with the [Create session](#tag/Sessions/operation/createSession) endpoint.
  - name: Store budgets
    description: Represents store budgets. You can set a store budget to limit the total amount an individual store can spend in a campaign.
  - name: Stores
    description: |
      Represents physical or digital stores, branches, and franchises.
  - name: Value maps
    description: Represents the value maps that the user can create within a campaign ruleset.
  - name: Webhooks
    description: |
      Represents webhooks, which send information from Talon.One to the URI of your choice.

      See the [docs](https://docs.talon.one/docs/dev/getting-started/webhooks).
paths:
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/ledger_balances:
    get:
      operationId: getLoyaltyLedgerBalances
      summary: Get customer's loyalty balances (Management API)
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve loyalty ledger balances for the given Integration ID in the
        specified loyalty program.

        You can filter balances by date and subledger ID, and include tier-related
        information in the response.

        > [!note] **Note**
        > - For most use cases, especially real-time integrations, use the Integration API endpoint:
            [Get customer's loyalty balances](https://docs.talon.one/integration-api#tag/Loyalty/operation/getLoyaltyBalances).
        > - If no filtering options are applied, you retrieve all loyalty balances on the current date for the given integration ID.

        Loyalty balances are calculated when Talon.One receives your request using
        the points stored in our database, so retrieving a large number of balances
        at once can impact performance.

        For more information, see:

        - [Managing card-based loyalty program
        data](https://docs.talon.one/docs/product/loyalty-programs/card-based/managing-loyalty-cards)

        - [Managing profile-based loyalty program
        data](https://docs.talon.one/docs/product/loyalty-programs/profile-based/managing-pb-lp-data)
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the profile-based loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          schema:
            type: integer
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
        - name: endDate
          in: query
          required: false
          description: |
            Used to return expired, active, and pending loyalty balances before this
            timestamp. You can enter any past, present, or future timestamp value.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: subledgerId
          in: query
          required: false
          description: The ID of the subledger used to filter the data. Leave this value empty ("") to query the main ledger.
          example: subledger1
          schema:
            type: string
        - name: includeTiers
          in: query
          required: false
          description: |
            Indicates whether tier information is included in the response.

            When set to `true`, the response includes information about the current tier and the number of points required to move to next tier.
          example: false
          schema:
            type: boolean
            default: false
        - name: includeProjectedTier
          in: query
          required: false
          description: |
            Indicates whether the customer's projected tier information is included in the response.

            When set to `true`, the response includes information about the customer's active points and the name of the projected tier.

            **Note** We recommend filtering by `subledgerId` for better performance.
          example: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyBalancesWithTiers'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/ledger_transactions:
    get:
      operationId: getLoyaltyProgramProfileLedgerTransactions
      summary: List customer's loyalty transactions (Management API)
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve paginated results of loyalty transaction logs for the given
        Integration ID in the specified loyalty program.

        You can filter transactions by date or by ledger (subledger or main ledger). If no filters are applied, the last 50
        loyalty transactions for the given integration ID are returned.

        > [!note] **Note**
        > - For most use cases, especially real-time integrations, use the Integration API endpoint:
        >   [List customer's loyalty transactions](https://docs.talon.one/integration-api#tag/Loyalty/operation/getLoyaltyProgramProfileTransactions).
        > - To retrieve all loyalty program transaction logs in a given loyalty program, use the
        >   [List loyalty program transactions](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyProgramTransactions) endpoint.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the profile-based loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          schema:
            type: integer
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
        - name: customerSessionIDs
          in: query
          required: false
          description: |
            Filter the results by a list of customer session IDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?customerSessionIDs=id1&customerSessionIDs=id2`.

            The response contains only data associated with the specified sessions.
          example:
            - session_integration_id_1
            - session_integration_id_1
          schema:
            type: array
            items:
              type: string
        - name: transactionUUIDs
          in: query
          required: false
          description: |
            Filter the results by a list of transaction UUIDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.

            The response contains only data associated with the specified transactions.
          example:
            - dc608634-0100-40d9-b371-e964476bbe0f
            - 9e829590-05cf-407b-b4c0-5f28468a81e1
          schema:
            type: array
            items:
              type: string
        - name: subledgerId
          in: query
          required: false
          description: The ID of the subledger used to filter the data. Leave this value empty ("") to query the main ledger.
          example: subledger1
          schema:
            type: string
        - name: loyaltyTransactionType
          in: query
          required: false
          description: |
            Filter results by loyalty transaction type:
            - `manual`: Loyalty transaction that was done manually.
            - `session`: Loyalty transaction that resulted from a customer session.
            - `import`: Loyalty transaction that was imported from a CSV file.
          example: manual
          schema:
            type: string
            enum:
              - manual
              - session
              - import
        - name: startDate
          in: query
          required: false
          description: |
            Date and time from which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: false
          description: |
            Date and time by which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 50
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 50
        - $ref: '#/components/parameters/skip'
        - name: awaitsActivation
          in: query
          required: false
          description: |
            If `true`: Filters results to include only point transactions that have action-based activation and have not expired.

            If `false`: Returns a `400` response.
          example: true
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LedgerTransactionLogEntryIntegrationAPI'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications:
    get:
      operationId: getApplications
      summary: List Applications
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all the Applications in the current account.
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Application'
  /v1/applications/{applicationId}:
    get:
      operationId: getApplication
      summary: Get Application
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the Application specified by the ID.
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/applicationId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
  /v1/applications/{applicationId}/campaigns:
    get:
      operationId: getCampaigns
      summary: List campaigns
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the campaigns of the specified application that match your filter criteria.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - name: campaignState
          in: query
          description: |
            Filter results by the state of the campaign.

            - `enabled`: Campaigns that are scheduled, running (activated), or expired.
            - `running`: Campaigns that are running (activated).
            - `disabled`: Campaigns that are disabled.
            - `expired`: Campaigns that are expired.
            - `archived`: Campaigns that are archived.
          example: enabled
          required: false
          schema:
            type: string
            enum:
              - enabled
              - disabled
              - archived
              - scheduled
              - running
              - expired
              - staged
        - name: name
          in: query
          description: Filter results performing case-insensitive matching against the name of the campaign.
          example: campaign1
          required: false
          schema:
            type: string
        - name: tags
          in: query
          description: |
            Filter results performing case-insensitive matching against the tags of the campaign.
          example:
            - tag1
            - tag2
          required: false
          schema:
            type: array
            items:
              type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign start time timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign start time timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: endBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign end time timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: endAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the campaign end time timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: campaignGroupId
          in: query
          description: Filter results to campaigns owned by the specified campaign access group ID.
          example: 12
          required: false
          schema:
            type: integer
        - name: templateId
          in: query
          description: The ID of the campaign template this campaign was created from.
          example: 18
          schema:
            type: integer
        - name: storeId
          in: query
          description: Filter results to campaigns linked to the specified store ID.
          example: 23
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Campaign'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}:
    get:
      operationId: getCampaign
      summary: Get campaign
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the given campaign.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
    put:
      operationId: updateCampaign
      summary: Update campaign
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the given campaign.

        > [!important] You cannot use this endpoint to update campaigns if [campaign staging and
        > revisions](https://docs.talon.one/docs/product/applications/managing-general-settings#campaign-staging-and-revisions)
        > is enabled for your Application.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaign'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
    delete:
      operationId: deleteCampaign
      summary: Delete campaign
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the given campaign.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '204':
          description: No Content
  /v1/applications/{applicationId}/campaigns/{campaignId}/copy:
    post:
      operationId: copyCampaignToApplications
      summary: Copy the campaign into the specified Application
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Copy the campaign into all specified Applications.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignCopy'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Campaign'
  /v1/applications/{applicationId}/campaigns_search:
    post:
      operationId: getCampaignByAttributes
      summary: List campaigns that match the given attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a list of all the campaigns that match a set of attributes.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - name: campaignState
          in: query
          description: |
            Filter results by the state of the campaign.

            - `enabled`: Campaigns that are scheduled, running (activated), or expired.
            - `running`: Campaigns that are running (activated).
            - `disabled`: Campaigns that are disabled.
            - `expired`: Campaigns that are expired.
            - `archived`: Campaigns that are archived.
          example: enabled
          required: false
          schema:
            type: string
            enum:
              - enabled
              - disabled
              - archived
              - scheduled
              - running
              - expired
              - staged
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignSearch'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Campaign'
  /v1/applications/{applicationId}/campaigns/{campaignId}/rulesets:
    get:
      operationId: getRulesets
      summary: List campaign rulesets
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all rulesets of this campaign. A ruleset is a revision of the rules of a campaign.
        **Important:** The response also includes deleted rules.
        You should only consider the latest revision of the returned rulesets.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Ruleset'
  /v1/applications/{applicationId}/campaigns/{campaignId}/rulesets/{rulesetId}:
    get:
      operationId: getRuleset
      summary: Get ruleset
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the specified ruleset.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: rulesetId
          in: path
          description: The ID of the ruleset.
          example: 29
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ruleset'
  /v2/applications/{applicationId}/campaigns/{campaignId}/rulesets/{rulesetId}:
    get:
      operationId: getRulesetV2
      summary: Get ruleset (V2)
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the specified ruleset as a JSON object.
      tags:
        - Campaigns
      x-scalar-stability: experimental
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: rulesetId
          in: path
          description: The ID of the ruleset.
          example: 29
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RulesetV2'
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons:
    post:
      operationId: createCoupons
      summary: Create coupons
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create coupons according to some pattern. Up to 20.000 coupons can be created without a unique prefix. When a unique prefix is provided, up to 200.000 coupons can be created.
      tags:
        - Coupons
      parameters:
        - name: silent
          in: query
          description: |
            Possible values: `yes` or `no`.
            - `yes`: Increases the performance of the API call by returning a 204 response.
            - `no`: Returns a 200 response that contains the updated customer profiles.
          example: yes
          required: false
          schema:
            type: string
            default: yes
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCoupons'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Coupon'
        '204':
          description: No Content
    put:
      operationId: updateCouponBatch
      summary: Update coupons
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update all coupons or a specific batch of coupons in the given campaign.

        You can find the `batchId` on the **Coupons** page of your campaign in the
        Campaign Manager, or you can use [List coupons](#tag/Coupons/operation/getCouponsWithoutTotalCount).

        > [!note] **Note**
        > - Only send sequential requests to this endpoint.
        > - Requests to this endpoint time out after 30 minutes. If you hit a timeout, contact our support team.
        > - With this `PUT` endpoint, if you do not explicitly set a value for the `startDate` and `expiryDate` properties in your request, it is automatically set to `null`.

        To update a specific coupon, use [Update coupon](#tag/Coupons/operation/updateCoupon).
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCouponBatch'
        description: body
        required: true
      responses:
        '204':
          description: No Content
    delete:
      operationId: deleteCoupons
      summary: Delete coupons
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Deletes all the coupons matching the specified criteria.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: value
          in: query
          description: Filter results performing case-insensitive matching against the coupon code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: SUMMER10
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startsAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon start date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startsBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon start date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: expiresAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon expiration date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: expiresBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon expiration date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            - `expired`: Matches coupons in which the expiration date is set and in the past.
            - `validNow`: Matches coupons in which start date is null or in the past and expiration date is null or in the future.
            - `validFuture`: Matches coupons in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: batchId
          in: query
          description: Filter results by batches of coupons
          example: nfinccze
          required: false
          schema:
            type: string
        - name: usable
          in: query
          description: |
            - `true`: only coupons where `usageCounter < usageLimit` will be returned.
            - `false`: only coupons where `usageCounter >= usageLimit` will be returned.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: referralId
          in: query
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          example: 47
          required: false
          schema:
            type: integer
        - name: recipientIntegrationId
          in: query
          description: |
            Filter results by match with a profile ID specified in the coupon's `RecipientIntegrationId` field.
          example: customer1
          required: false
          schema:
            type: string
        - name: exactMatch
          in: query
          description: Filter results to an exact case-insensitive matching against the coupon code
          example: false
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '204':
          description: No Content
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons_with_recipients:
    post:
      operationId: createCouponsForMultipleRecipients
      summary: Create coupons for multiple recipients
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create coupons according to some pattern for up to 1000 recipients.
      tags:
        - Coupons
      parameters:
        - name: silent
          in: query
          description: |
            Possible values: `yes` or `no`.
            - `yes`: Increases the performance of the API call by returning a 204 response.
            - `no`: Returns a 200 response that contains the updated customer profiles.
          example: yes
          required: false
          schema:
            type: string
            default: yes
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCouponsForMultipleRecipients'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Coupon'
        '204':
          description: No Content
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons_async:
    post:
      operationId: createCouponsAsync
      summary: Create coupons asynchronously
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create up to 5,000,000 coupons asynchronously. You should typically use this enpdoint when you create at least 20,001 coupons. You receive an email when the creation is complete.

        If you want to create less than 20,001 coupons, you can use the [Create coupons](https://docs.talon.one/management-api#tag/Coupons/operation/createCoupons) endpoint.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCouponCreationJob'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncCouponCreationResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons_deletion_jobs:
    post:
      operationId: createCouponsDeletionJob
      summary: Creates a coupon deletion job
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        This endpoint handles creating a job to delete coupons asynchronously.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCouponDeletionJob'
        description: body
        required: true
      responses:
        '202':
          description: The deletion request has been accepted and will be processed asynchronously
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncCouponDeletionJobResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons/no_total:
    get:
      operationId: getCouponsWithoutTotalCount
      summary: List coupons
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all the coupons matching the specified criteria.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: value
          in: query
          description: Filter results performing case-insensitive matching against the coupon code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: SUMMER10
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            Either "expired", "validNow", or "validFuture". The first option matches coupons in which the expiration date is set and in the past. The second matches coupons in which start date is null or in the past and expiration date is null or in the future, the third matches coupons in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            Either "true" or "false". If "true", only coupons where `usageCounter < usageLimit` will be returned, "false" will return only coupons where `usageCounter >= usageLimit`.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: redeemed
          in: query
          description: |
            - `true`: only coupons where `usageCounter > 0` will be returned.
            - `false`: only coupons where `usageCounter = 0` will be returned.
            - This field cannot be used in conjunction with the `usable` query parameter.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: referralId
          in: query
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          example: 47
          required: false
          schema:
            type: integer
        - name: recipientIntegrationId
          in: query
          description: Filter results by match with a profile ID specified in the coupon's RecipientIntegrationId field.
          example: customer1
          required: false
          schema:
            type: string
        - name: batchId
          in: query
          description: Filter results by batches of coupons
          example: nfinccze
          required: false
          schema:
            type: string
        - name: exactMatch
          in: query
          description: Filter results to an exact case-insensitive matching against the coupon code.
          example: false
          required: false
          schema:
            type: boolean
            default: false
        - name: expiresBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon expiration date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: expiresAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon expiration date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startsBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon start date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: startsAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon start date timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valuesOnly
          in: query
          description: Filter results to only return the coupon codes (`value` column) without the associated coupon data.
          example: false
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Coupon'
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons/{couponId}:
    put:
      operationId: updateCoupon
      summary: Update coupon
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the specified coupon.

        > [!note]
        > With this `PUT` endpoint, if you do not explicitly set a value for the `startDate`, `expiryDate`,
        > and `recipientIntegrationId` properties in your request, it is automatically set to `null`.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: couponId
          in: path
          description: |
            The internal ID of the coupon code. You can find this value in the `id` property from the
            [List coupons](https://docs.talon.one/management-api#tag/Coupons/operation/getCouponsWithoutTotalCount) endpoint response.
          example: '1194'
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCoupon'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Coupon'
    delete:
      operationId: deleteCoupon
      summary: Delete coupon
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the specified coupon.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: couponId
          in: path
          description: |
            The internal ID of the coupon code. You can find this value in the `id` property from the
            [List coupons](https://docs.talon.one/management-api#tag/Coupons/operation/getCouponsWithoutTotalCount) endpoint response.
          example: '1194'
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
  /v1/applications/{applicationId}/campaigns/{campaignId}/coupons_search_advanced/no_total:
    post:
      operationId: searchCouponsAdvancedWithoutTotalCount
      summary: List coupons that match the given attributes in campaign (without total count)
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the coupons whose attributes match the query criteria in the given campaign.

        The match is successful if all the attributes of the request are found in a
        coupon, even if the coupon has more attributes that are not present on the request.

        > [!note] The total count is not included in the response.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: value
          in: query
          description: Filter results performing case-insensitive matching against the coupon code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: SUMMER10
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            Either "expired", "validNow", or "validFuture". The first option matches coupons in which the expiration date is set and in the past. The second matches coupons in which start date is null or in the past and expiration date is null or in the future, the third matches coupons in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            Either "true" or "false". If "true", only coupons where `usageCounter < usageLimit` will be returned, "false" will return only coupons where `usageCounter >= usageLimit`.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: referralId
          in: query
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          example: 47
          required: false
          schema:
            type: integer
        - name: recipientIntegrationId
          in: query
          description: Filter results by match with a profile ID specified in the coupon's RecipientIntegrationId field.
          example: customer1
          required: false
          schema:
            type: string
        - name: exactMatch
          in: query
          description: Filter results to an exact case-insensitive matching against the coupon code.
          example: false
          required: false
          schema:
            type: boolean
            default: false
        - name: batchId
          in: query
          description: Filter results by batches of coupons
          example: nfinccze
          required: false
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/AttributeQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Coupon'
  /v1/applications/{applicationId}/coupons_search_advanced/no_total:
    post:
      operationId: searchCouponsAdvancedApplicationWideWithoutTotalCount
      summary: List coupons that match the given attributes (without total count)
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the coupons whose attributes match the query criteria in all the
        campaigns of the given Application.

        The match is successful if all the attributes of the request are found in a
        coupon, even if the coupon has more attributes that are not present on the request.

        > [!note] The total count is not included in the response.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - name: value
          in: query
          description: Filter results performing case-insensitive matching against the coupon code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: SUMMER10
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            Either "expired", "validNow", or "validFuture". The first option matches coupons in which the expiration date is set and in the past. The second matches coupons in which start date is null or in the past and expiration date is null or in the future, the third matches coupons in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            Either "true" or "false". If "true", only coupons where `usageCounter < usageLimit` will be returned, "false" will return only coupons where `usageCounter >= usageLimit`.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: referralId
          in: query
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          example: 47
          required: false
          schema:
            type: integer
        - name: recipientIntegrationId
          in: query
          description: Filter results by match with a profile ID specified in the coupon's RecipientIntegrationId field.
          example: customer1
          required: false
          schema:
            type: string
        - name: batchId
          in: query
          description: Filter results by batches of coupons
          example: nfinccze
          required: false
          schema:
            type: string
        - name: exactMatch
          in: query
          description: Filter results to an exact case-insensitive matching against the coupon code.
          example: false
          required: false
          schema:
            type: boolean
            default: false
        - name: campaignState
          in: query
          description: |
            Filter results by the state of the campaign.

            - `enabled`: Campaigns that are scheduled, running (activated), or expired.
            - `running`: Campaigns that are running (activated).
            - `disabled`: Campaigns that are disabled.
            - `expired`: Campaigns that are expired.
            - `archived`: Campaigns that are archived.
          example: enabled
          required: false
          schema:
            type: string
            enum:
              - enabled
              - disabled
              - archived
              - scheduled
              - running
              - expired
              - staged
      requestBody:
        $ref: '#/components/requestBodies/AttributeQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Coupon'
  /v1/applications/{applicationId}/campaigns/{campaignId}/referrals/{referralId}:
    delete:
      operationId: deleteReferral
      summary: Delete referral
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the specified referral.
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: referralId
          in: path
          description: The ID of the referral code.
          example: '2154'
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
    put:
      operationId: updateReferral
      summary: Update referral
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the specified referral.
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: referralId
          in: path
          description: The ID of the referral code.
          example: '2154'
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateReferral'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Referral'
  /v1/applications/{applicationId}/campaigns/{campaignId}/referrals/no_total:
    get:
      operationId: getReferralsWithoutTotalCount
      summary: List referrals
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all referrals of the specified campaign.
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: code
          in: query
          description: Filter results performing case-insensitive matching against the referral code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: JVM8JH8F
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the referral creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the referral creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            Either "expired", "validNow", or "validFuture". The first option matches referrals in which the expiration date is set and in the past. The second matches referrals in which start date is null or in the past and expiration date is null or in the future, the third matches referrals in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            Either "true" or "false". If "true", only referrals where `usageCounter < usageLimit` will be returned, "false" will return only referrals where `usageCounter >= usageLimit`.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: advocate
          in: query
          required: false
          description: Filter results by match with a profile ID specified in the referral's AdvocateProfileIntegrationId field.
          example: customer1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Referral'
  /v1/campaign_groups:
    get:
      operationId: getCampaignGroups
      summary: List campaign access groups
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the campaign access groups in the current account.
      tags:
        - Campaign access groups
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CampaignGroup'
  /v1/campaign_groups/{campaignGroupId}:
    get:
      operationId: getCampaignGroup
      summary: Get campaign access group
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a campaign access group specified by its ID.
      tags:
        - Campaign access groups
      parameters:
        - name: campaignGroupId
          in: path
          description: The ID of the campaign access group.
          example: 37
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignGroup'
  /v1/campaign_templates:
    get:
      operationId: getCampaignTemplates
      summary: List campaign templates
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a list of campaign templates.
      tags:
        - Campaign templates
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: state
          in: query
          description: Filter results by the state of the campaign template.
          example: draft
          required: false
          schema:
            type: string
            enum:
              - draft
              - enabled
              - disabled
        - name: name
          in: query
          description: Filter results performing case-insensitive matching against the name of the campaign template.
          example: template1
          required: false
          schema:
            type: string
        - name: tags
          in: query
          description: |
            Filter results performing case-insensitive matching against the tags of the campaign template. When used in conjunction with the "name" query parameter, a logical OR will be performed to search both tags and name for the provided values.
          example: tag1
          required: false
          schema:
            type: string
        - in: query
          description: Filter results by user ID.
          example: 34
          required: false
          name: userId
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CampaignTemplate'
  /v1/applications/{applicationId}/experiments:
    get:
      operationId: listExperiments
      summary: List experiments
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all experiments of the specified Application that match your filter criteria.
      tags:
        - Experiments
      parameters:
        - name: applicationId
          in: path
          required: true
          description: The ID of the Application. It is displayed in your Talon.One deployment URL.
          example: 42
          schema:
            type: integer
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 1000
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 1000
        - name: skip
          in: query
          required: false
          description: The number of items to skip when paging through large result sets.
          example: 100
          schema:
            type: integer
        - name: sort
          in: query
          required: false
          description: |
            The field by which results should be sorted. By default, results are sorted in ascending order. To sort them in descending order, prefix the field name with `-`.

            **Note:** You may not be able to use all fields for sorting. This is due to performance limitations.
          example: name
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - totalResultSize
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Experiment'
  /v1/applications/{applicationId}/experiments/{experimentId}:
    get:
      operationId: getExperiment
      summary: Get experiment in Application
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the given experiment associated with the Application.
      tags:
        - Experiments
      parameters:
        - name: applicationId
          in: path
          required: true
          description: The ID of the Application. It is displayed in your Talon.One deployment URL.
          example: 42
          schema:
            type: integer
        - name: experimentId
          in: path
          description: The ID of the experiment.
          example: 1
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Experiment'
  /v1/applications/{applicationId}/create_campaign_from_template:
    post:
      operationId: createCampaignFromTemplate
      summary: Create campaign from campaign template
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Use the campaign template referenced in the request body to create
        a new campaign in one of the connected Applications.

        If the template was created from a campaign with rules referencing [campaign collections](https://docs.talon.one/docs/product/campaigns/managing-collections),
        the corresponding collections for the new campaign are created automatically.
      tags:
        - Campaign templates
      parameters:
        - $ref: '#/components/parameters/applicationId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTemplateCampaign'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateTemplateCampaignResponse'
  /v1/loyalty_programs:
    get:
      operationId: getLoyaltyPrograms
      summary: List loyalty programs
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the loyalty programs of the account.
      tags:
        - Loyalty
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LoyaltyProgram'
  /v1/loyalty_programs/{loyaltyProgramId}:
    get:
      operationId: getLoyaltyProgram
      summary: Get loyalty program
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the specified [loyalty
        program](https://docs.talon.one/docs/product/loyalty-programs/overview).

        To list all loyalty programs in your Application, use [List loyalty
        programs](#tag/Loyalty/operation/getLoyaltyPrograms).

        To list the loyalty programs that a customer profile is part of, use
        [List customer data](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/getCustomerInventory).
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyProgram'
  /v1/loyalty_programs/{loyaltyProgramId}/dashboard:
    get:
      operationId: getDashboardStatistics
      summary: Get statistics for loyalty dashboard
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the statistics displayed on the specified loyalty program's
        dashboard, such as the total active points, pending points, spent points, and expired
        points.

        > [!important] The returned data does not include the current day. All statistics
        > are updated daily at 11:59 PM in the loyalty program time zone.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
        - name: subledgerId
          in: query
          required: false
          description: The ID of the subledger by which we filter the data.
          example: subledger1
          schema:
            type: string
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LoyaltyDashboardData'
  /v1/loyalty_programs/{loyaltyProgramId}/import_points:
    post:
      operationId: importLoyaltyPoints
      summary: Import loyalty points
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the loyalty points you want to import into a
        given loyalty program.

        Send the file as multipart data.

        Depending on the type of loyalty program, you can import points into a given
        customer profile or loyalty card.

        The CSV file contains the following columns:

        - `customerprofileid` (optional): For profile-based loyalty programs, the
          integration ID of the customer profile where the loyalty points are
          imported.
          **Note**: If the customer profile does not exist, it will be created. The profile will not be visible in any Application
          until a session or profile update is received for that profile.
        - `identifier` (optional): For card-based loyalty programs, the identifier of the loyalty card where the loyalty points are imported.
        - `amount`: The amount of points to award to the customer profile.
        - `startdate` (optional): The earliest date when the points can be redeemed. The points are `active` from this date until the expiration date.
          This parameter accepts one of the following values:
            - A timestamp string in RFC3339 format.
            - `immediate`
            - `on_action`
          **Note**: Empty or missing values default to `immediate`.
        - `expirydate` (optional): The latest date when the points can be redeemed.
          The points are `expired` after this date.
          **Note**: It must be an RFC3339 timestamp string or string `unlimited`. Empty or missing values are considered `unlimited`.
          If passed, `validityDuration` should be omitted.
        - `validityDuration` (optional): The duration for which the points remain active, relative to the
          activation date. The time format is an **integer** followed by one letter indicating the time unit.<br />
          Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.

          Available units:

          - `s`: seconds
          - `m`: minutes
          - `h`: hours
          - `D`: days
          - `W`: weeks
          - `M`: months
          - `Y`: years

          You can round certain units up or down:

          - `_D` for rounding down days only. Signifies the start of the day.
          - `_U` for rounding up days, weeks, months and years. Signifies the end of
          the day, week, month or year.

          If passed, `expirydate` should be omitted.
        - `subledgerid` (optional): The ID of the subledger that should received the points.
        - `reason` (optional): The reason why these points are awarded.

        You can use the time zone of your choice. It is converted to UTC internally by Talon.One.

        > [!note] For existing customer profiles and loyalty cards, the imported
        > points are added to any previous active or pending points, depending on the
        > value provided for `startdate`. If `startdate` matches the current date, the
        > imported points are _active_. If it is later, the points are _pending_ until
        > the date provided for `startdate` is reached.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example for profile-based programs

        ```text
        customerprofileid,amount,startdate,expirydate,subledgerid,reason
        URNGV8294NV,100,2009-11-10T23:00:00Z,2009-11-11T23:00:00Z,subledger1,appeasement
        ```

        ## Example for card-based programs

        ```text
        identifier,amount,startdate,expirydate,subledgerid,reason
        summer-loyalty-card-0543,100,2009-11-10T23:00:00Z,2009-11-11T23:00:00Z,subledger1,appeasement
        ```
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
        - name: notificationsEnabled
          in: query
          description: |
            Indicates whether the points import triggers notifications about its effects. For example, a notification is sent if the import upgrades a customer's tier or offsets their negative points balance.

            This parameter is optional and defaults to `true`.
          example: true
          required: false
          schema:
            type: boolean
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
  /v1/loyalty_programs/{loyaltyProgramId}/import_customers_tiers:
    post:
      operationId: importLoyaltyCustomersTiers
      summary: Import customers into loyalty tiers
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing existing customers to be assigned to existing
        tiers.

        Send the file as multipart data.

        > [!important] This endpoint only works with loyalty programs with advanced
        > tiers (with expiration and downgrade policy) feature enabled.

        The CSV file should contain the following columns:

        - `subledgerid` (optional): The ID of the subledger. If this field is empty,
        the main ledger will be used.
        - `customerprofileid`: The integration ID of the customer profile to whom
        the tier should be assigned.
        - `tiername`: The name of an existing tier to assign to the customer.
        - `expirydate`: The expiry date of the tier when the tier is
        reevaluated. It should be a future date.

        About customer assignment to a tier:

        - If the customer isn't already in a tier, the customer is assigned to the
        specified tier during the tier import.
        - If the customer is already in the tier that's specified in the CSV file,
        only the expiry date is updated.

        > [!note] We recommend importing customers into the tier that matches their
        > current balance. If a customer is imported into a lower tier, any session
        > or points update automatically upgrades them to the tier they qualify for.

        To update a customer's tier, you can
        [add](/management-api#tag/Loyalty/operation/addLoyaltyPoints) or
        [deduct](/management-api#tag/Loyalty/operation/removeLoyaltyPoints) their
        loyalty points.

        You can use the time zone of your choice. It is converted to UTC internally
        by Talon.One.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example

        ```csv
        subledgerid,customerprofileid,tiername,expirydate
        SUB1,alexa,Gold,2024-03-21T07:32:14Z
        ,george,Silver,2025-04-16T21:12:37Z
        SUB2,avocado,Bronze,2026-05-03T11:47:01Z
        ```
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/import_join_dates:
    post:
      operationId: importLoyaltyJoinDates
      summary: Import join dates for a loyalty program
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing customer profile IDs and their join dates for the
        specified loyalty program. Send the file as multipart data.

        > [!important] This endpoint only works with profile-based loyalty programs.

        The CSV file **must** contain the following columns:

        - `customerprofileid`: The integration ID of the customer profile whose join
          date you want to update.
        - `newjoindate`: The new join date for the customer in RFC3339 format. You
          can use the time zone of your choice. It is converted to UTC internally
          by Talon.One.

        **Note**:
        - Customer profiles must already exist. If a referenced profile does not exist, the import fails with a `400` error.
        - If a join date already exists for a profile, the uploaded date replaces it.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example

        ```csv
        customerprofileid,newjoindate
        customer1,2024-03-21T07:32:14Z
        customer2,2025-04-16T21:12:37Z
        customer3,2026-05-03T11:47:01Z
        ```
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the profile-based loyalty program. You can get the ID with the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}:
    get:
      operationId: getLoyaltyPoints
      summary: Get customer's full loyalty ledger
      deprecated: true
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the loyalty ledger for this profile integration ID.

        To get the `integrationId` of the profile from a `sessionId`, use the
        [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint.

        **Important:** To get loyalty transaction logs for a given Integration ID in a loyalty program,
        we recommend using the Integration API's [Get customer's loyalty logs](https://docs.talon.one/integration-api#tag/Loyalty/operation/getLoyaltyProgramProfileTransactions).
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyLedger'
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/add_points:
    put:
      operationId: addLoyaltyPoints
      summary: Add points to customer profile
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Add points in the specified loyalty program for the given customer.

        To get the `integrationId` of the profile from a `sessionId`, use the
        [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/AddLoyaltyPoints'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/deduct_points:
    put:
      operationId: removeLoyaltyPoints
      summary: Deduct points from customer profile
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Deduct points from the specified loyalty program and specified customer
        profile.

        > [!note] **Note**
        > - Only active points can be deducted.
        > - Only pending points are rolled back when a session is cancelled or reopened.

        To get the `integrationId` of the profile from a `sessionId`, use the
        [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
        endpoint.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/DeductLoyaltyPoints'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/export_log:
    get:
      operationId: exportLoyaltyLedger
      summary: Export customer's transaction logs
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing a customer's transaction logs in the loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The generated file can contain the following columns:

        - `customerprofileid`: The ID of the profile.
        - `customersessionid`: The ID of the customer session.
        - `rulesetid`: The ID of the rule set.
        - `rulename`: The name of the rule.
        - `programid`: The ID of the loyalty program.
        - `type`: The transaction type, such as `addition` or `subtraction`.
        - `name`: The reason for the transaction.
        - `subledgerid`: The ID of the subledger, when applicable.
        - `startdate`: The start date of the program.
        - `expirydate`: The expiration date of the program.
        - `id`: The ID of the transaction.
        - `created`: The timestamp of the creation of the loyalty program.
        - `amount`: The number of points in that transaction.
        - `archived`: Whether the session related to the transaction is archived.
        - `campaignid`: The ID of the campaign.
        - `flags`: The flags of the transaction, when applicable. The `createsNegativeBalance` flag indicates whether the transaction results in a negative balance.
        - `transactionUUID`: Unique identifier of the transaction in the UUID format.
      tags:
        - Loyalty
      parameters:
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    customerprofileid,customersessionid,rulesetid,rulename,programid,type,name,subledgerid,startdate,expirydate,id,created,amount,archived,campaignid,flags,transactionuuid,validityduration
                    8NHOS78H,06b0fafb-ccbf-42c7-b44b-d858e8b525022,1691,test,37,subtraction,10% of current total,,immediate,unlimited,60803,2022-11-29 16:16:10,100.00,false,5,createsNegativeBalance,8c122fb1-1874-4ee2-b7e2-e7b5f8b7b801,""
                    EB780RDN,06b0fafb-ccbf-42c7-b44b-d858e8b525022,1691,test,37,addition,Reimbursed loyalty points,,on_action,unlimited,60804,2022-11-29 16:16:23,100.00,false,5,,8c122fb1-1874-4ee2-b7e2-e7b5f8b7b801,"30D"
  /v1/loyalty_programs/{loyaltyProgramId}/export_join_dates:
    get:
      operationId: exportLoyaltyJoinDates
      summary: Export customers' loyalty program join dates
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the join dates of all customers in the loyalty program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The generated file can contain the following columns:

        - `loyaltyProgramID`: The ID of the loyalty program.
        - `profileIntegrationID`: The integration ID of the customer profile.
        - `joinDate`: The customer's loyalty program join date in RFC3339 format.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier of the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    loyaltyProgramID,profileIntegrationID,joinDate
                    40,8786NTHSAO8,2024-05-29T15:04:05Z
                    40,2735HATHOH8,2023-11-13T07:12:34Z
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/export_customers_tiers:
    get:
      operationId: exportCustomersTiers
      summary: Export customers' tier data
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the tier information for customers of the specified loyalty program.

        The generated file contains the following columns:

        - `programid`: The identifier of the loyalty program. It is displayed in your Talon.One deployment URL.
        - `subledgerid`: The ID of the subledger associated with the loyalty program. This column is empty if the loyalty program has no subledger. In this case, refer to the export file name to get the ID of the loyalty program.
        - `customerprofileid`: The ID used to integrate customer profiles with the loyalty program.
        - `tiername`: The name of the tier.
        - `startdate`: The tier start date in RFC3339.
        - `expirydate`: The tier expiry date in RFC3339.

        You can filter the results by providing the following optional input parameters:

        - `subledgerIds` (optional): Filter results by an array of subledger IDs. If no value is provided, all subledger data for the specified loyalty program will be exported.
        - `tierNames` (optional): Filter results by an array of tier names. If no value is provided, all tier data for the specified loyalty program will be exported.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - name: subledgerIds
          in: query
          required: false
          description: An array of subledgers IDs to filter the export by.
          example:
            - subledger1
            - subledger2
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: tierNames
          in: query
          required: false
          description: An array of tier names to filter the export by.
          example:
            - tier1
            - tier2
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    programid,subledgerid,customerprofileid,tiername,startdate,expirydate
                    1,SUB1,Dinesh,Golden,2023-08-02T15:04:05Z07:00,2024-08-02T15:04:05Z07:00
                    1,SUB2,Gilfoyle,Silver,2023-03-21T03:45:12Z05:00,2026-03-21T03:45:12Z05:00
  /v1/loyalty_programs/{loyaltyProgramId}/statistics:
    get:
      operationId: getLoyaltyStatistics
      summary: Get loyalty program statistics
      deprecated: true
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        > [warning] This endpoint is deprecated.

        To retrieve statistics for a loyalty program, use the
        [Get statistics for loyalty dashboard](/management-api#tag/Loyalty/operation/getDashboardStatistics)
        endpoint.

        Retrieve the statistics of the specified loyalty program, such as the
        total active points, pending points, spent points, and expired points.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyDashboardData'
  /v1/loyalty_programs/{loyaltyProgramId}/export_customer_balances:
    get:
      operationId: exportLoyaltyBalances
      summary: Export customer loyalty balances
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the balance of each customer in the loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The generated file can contain the following columns:

        - `loyaltyProgramID`: The ID of the loyalty program.
        - `loyaltySubledger`: The name of the subledger, when applicable.
        - `profileIntegrationID`: The integration ID of the customer profile.
        - `currentBalance`: The current point balance.
        - `pendingBalance`: The number of pending points.
        - `expiredBalance`: The number of expired points.
        - `spentBalance`: The number of spent points.
        - `currentTier`: The tier that the customer is in at the time of the export.
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - name: endDate
          in: query
          required: false
          description: |
            Used to return expired, active, and pending loyalty balances before this
            timestamp. You can enter any past, present, or future timestamp value.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
            > - This parameter does not affect the `currentTier` field in the CSV file, which shows the customer's tier at the time of export.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: balances
          in: query
          required: false
          description: |
            Filters which balance fields are included in the CSV export. `currentBalance`
            is always returned.

            By default, all balance fields are included. When this parameter is provided, only the
            listed fields contain values and the rest are returned empty.

            Accepted values:
            - `currentBalance`
            - `pendingBalance`
            - `expiredBalance`
            - `spentBalance`
            - `negativeBalance`

            Multiple values must be provided as a comma-separated list.
          example: currentBalance,pendingBalance
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    loyaltyProgramID,loyaltySubledger,profileIntegrationID,currentBalance,pendingBalance,expiredBalance,spentBalance,currentTier
                    40,,8786NTHSAO8,10.00,0.00,0.00,0.00,First
                    40,,2735HATHOH8,20.00,0.00,0.00,0.00,First
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/export_customer_balance:
    get:
      operationId: exportLoyaltyBalance
      summary: Export customer loyalty balance to CSV
      deprecated: true
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        To export customer loyalty balances to CSV, use the [Export customer loyalty
        balances to CSV](/management-api#tag/Loyalty/operation/exportLoyaltyBalances) endpoint.

        Download a CSV file containing the balance of each customer in the loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          description: The identifier for the loyalty program.
          example: '45'
          required: true
          schema:
            type: string
        - name: endDate
          in: query
          required: false
          description: |
            Used to return expired, active, and pending loyalty balances before this
            timestamp. You can enter any past, present, or future timestamp value.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: balances
          in: query
          required: false
          description: |
            Filters which balance fields are included in the CSV export. `currentBalance`
            is always returned.

            By default, all balance fields are included. When this parameter is provided, only the
            listed fields contain values and the rest are returned empty.

            Accepted values:
            - `currentBalance`
            - `pendingBalance`
            - `expiredBalance`
            - `spentBalance`
            - `negativeBalance`

            Multiple values must be provided as a comma-separated list.
          example: currentBalance,pendingBalance
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/transactions:
    get:
      operationId: getLoyaltyProgramTransactions
      summary: List loyalty program transactions
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve loyalty program transaction logs in a given loyalty program with
        filtering options applied. Manual and imported transactions are also
        included.

        > [!note] **Note**
        > - If no filters are applied, the last 50 loyalty transactions for the given loyalty program are returned.
        > - To get loyalty transaction logs for a given Integration ID in
        >   a loyalty program, we recommend using the Integration API's [Get customer's loyalty
        >   logs](https://docs.talon.one/integration-api#tag/Loyalty/operation/getLoyaltyProgramProfileTransactions).
      tags:
        - Loyalty
      parameters:
        - name: loyaltyProgramId
          in: path
          required: true
          description: |
            Identifier of the loyalty program. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
          schema:
            type: integer
        - name: loyaltyTransactionType
          in: query
          required: false
          description: |
            Filter results by loyalty transaction type:
            - `manual`: Loyalty transaction that was done manually.
            - `session`: Loyalty transaction that resulted from a customer session.
            - `import`: Loyalty transaction that was imported from a CSV file.
          example: manual
          schema:
            type: string
            enum:
              - manual
              - session
              - import
        - name: subledgerId
          in: query
          required: false
          description: The ID of the subledger by which we filter the data.
          example: subledger1
          schema:
            type: string
        - name: customerSessionIDs
          in: query
          required: false
          description: |
            Filter the results by a list of customer session IDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?customerSessionIDs=id1&customerSessionIDs=id2`.

            The response contains only data associated with the specified sessions.
          example:
            - session_integration_id_1
            - session_integration_id_1
          schema:
            type: array
            items:
              type: string
        - name: transactionUUIDs
          in: query
          required: false
          description: |
            Filter the results by a list of transaction UUIDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.

            The response contains only data associated with the specified transactions.
          example:
            - dc608634-0100-40d9-b371-e964476bbe0f
            - 9e829590-05cf-407b-b4c0-5f28468a81e1
          schema:
            type: array
            items:
              type: string
        - name: startDate
          in: query
          required: false
          description: |
            Date and time from which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: false
          description: |
            Date and time by which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 50
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 50
        - $ref: '#/components/parameters/skip'
        - name: awaitsActivation
          in: query
          required: false
          description: |
            If `true`: Filters results to include only point transactions that have action-based activation and have not expired.

            If `false`: Returns a `400` response.
          example: true
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LoyaltyProgramTransaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/import_cards:
    post:
      operationId: importLoyaltyCards
      summary: Import loyalty cards
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the loyalty cards that you want to use in your
        card-based loyalty program.

        Send the file as multipart data.

        It contains the following columns for each card:

        - `identifier` (required): The identifier of the loyalty card,
        which must match the regular expression `^[A-Za-z0-9._%+@-]+$`.
        - `state` (required): The state of the loyalty card. It can be `active` or
        `inactive`.
        - `customerprofileids` (optional): An array of strings representing the
        identifiers of the customer profiles linked to the loyalty card. The
        identifiers should be separated with a semicolon (;).
        - `attributes` (optional): A JSON object that contains the loyalty card's custom
        attributes and their values. These attributes must be created and connected to this
        loyalty program before they can be assigned to the cards through this endpoint.

        > [!note] Your CSV file must contain less than 500,000 rows. Requests time out after 30 seconds.

        ## Example

        ```csv
        identifier,state,customerprofileids,attributes
        123-456-789AT,active,Alexa001;UserA,'{""my_attributes"": ""10_off""}"
        ```
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/batch:
    post:
      operationId: createBatchLoyaltyCards
      summary: Create loyalty cards
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a batch of loyalty cards in a specified [card-based loyalty
        program](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types).

        Customers can use loyalty cards to collect and spend loyalty points.

        > [!important] **Note**
        > - The specified card-based loyalty program must have a defined card code
        >   format that is used to generate the loyalty card codes.
        > - Trying to create more than 20,000 loyalty cards in a single request
        >   returns an error message with a `400` status code.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoyaltyCardBatch'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyCardBatchResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/export_card_balances:
    get:
      operationId: exportLoyaltyCardBalances
      summary: Export all card transaction logs
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the balances of all cards in the loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:
        - `loyaltyProgramID`: The ID of the loyalty program.
        - `loyaltySubledger`: The name of the subdleger, when applicatble.
        - `cardIdentifier`: The identifier of the loyalty card, which must match the regular
        expression `^[A-Za-z0-9._%+@-]+$`.
        - `cardState`:The state of the loyalty card. It can be `active` or
        `inactive`.
        - `currentBalance`: The current point balance.
        - `pendingBalance`: The number of pending points.
        - `expiredBalance`: The number of expired points.
        - `spentBalance`: The number of spent points.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: endDate
          in: query
          required: false
          description: |
            Used to return expired, active, and pending loyalty balances before this
            timestamp. You can enter any past, present, or future timestamp value.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: balances
          in: query
          required: false
          description: |
            Filters which balance fields are included in the CSV export. By default,
            all balance fields are included. When this parameter is provided, only the
            listed fields contain values and the rest are returned empty.

            Accepted values:
            - `currentBalance`
            - `pendingBalance`
            - `expiredBalance`
            - `spentBalance`
            - `negativeBalance`

            Multiple values must be provided as a comma-separated list.

            **Note:**
            - The `negativeBalance` value is not supported for card balance exports.
            - Providing an unsupported or invalid value returns a `400 Bad Request` error.
          example: currentBalance,pendingBalance
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    loyaltyProgramID,loyaltySubledger,cardIdentifier,cardState,currentBalance,pendingBalance,expiredBalance,spentBalance
                    40,,111,active,10,0,0,0,5
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards:
    get:
      operationId: getLoyaltyCards
      summary: List loyalty cards
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        For the given card-based loyalty program, list the loyalty cards that match your filter criteria.
      tags:
        - Loyalty cards
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: identifier
          description: |
            The card code by which to filter loyalty cards in the response.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-054
          in: query
          required: false
          schema:
            type: string
            minLength: 4
        - name: profileId
          in: query
          description: Filter results by customer profile ID.
          example: 44
          required: false
          schema:
            type: integer
            minimum: 1
        - name: batchId
          in: query
          description: Filter results by loyalty card batch ID.
          example: UY83CTT4
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LoyaltyCard'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/export:
    get:
      operationId: exportLoyaltyCards
      summary: Export loyalty cards
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the loyalty cards from a specified loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:

        - `identifier`: The unique identifier of the loyalty card.
        - `created`: The date and time the loyalty card was created.
        - `status`: The status of the loyalty card.
        - `userpercardlimit`: The maximum number of customer profiles that can be linked to the card.
        - `customerprofileids`: Integration IDs of the customer profiles linked to the card.
        - `blockreason`: The reason for transferring and blocking the loyalty card.
        - `generated`: An indicator of whether the loyalty card was generated.
        - `batchid`: The ID of the batch the loyalty card is in.
        - `attributes`: The custom attributes of this loyalty card.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: batchId
          in: query
          description: Filter results by loyalty card batch ID.
          example: UY83CTT4
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: |
            Only return loyalty cards created before this timestamp.

            **Note:** This must be an RFC3339 timestamp string.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: |
            Only return loyalty cards created after this timestamp.

            **Note:** This must be an RFC3339 timestamp string.
          required: false
          example: 2024-04-15T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    identifier,created,status,userpercardlimit,customerprofileids,blockreason,generated,batchid,attributes
                    CARD-1234,2020-06-10T09:05:27.993483Z,active,3,['profile1'],card limit reached,false,gwedcbfp,{"ForumPosts": 17}
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}:
    delete:
      operationId: deleteLoyaltyCard
      summary: Delete loyalty card
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the given loyalty card.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      responses:
        '204':
          description: No Content
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    put:
      operationId: updateLoyaltyCard
      summary: Update loyalty card
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the details of a specific loyalty card. You can set the card's status to `active` or `inactive` through this endpoint. At least one of `status` or `attributes` must be provided.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLoyaltyCardRequest'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyCard'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    get:
      operationId: getLoyaltyCard
      summary: Get loyalty card
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the given loyalty card.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoyaltyCard'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/add_points:
    put:
      operationId: addLoyaltyCardPoints
      summary: Add points to card
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Add points to the given loyalty card in the specified card-based loyalty program.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty
            card. You can get the ID with the [List loyalty
            programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with the [List loyalty cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards) endpoint.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      requestBody:
        $ref: '#/components/requestBodies/AddLoyaltyPoints'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/deduct_points:
    put:
      operationId: deductLoyaltyCardPoints
      summary: Deduct points from card
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Deduct points from the given loyalty card in the specified card-based loyalty program.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      requestBody:
        $ref: '#/components/requestBodies/DeductLoyaltyPoints'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/export_log:
    get:
      operationId: exportLoyaltyCardLedger
      summary: Export card's ledger log
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing a loyalty card ledger log of the loyalty
        program.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/logs:
    get:
      operationId: getLoyaltyCardTransactionLogs
      summary: List card's transactions (Management API)
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the transaction logs for the given [loyalty card](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview)
        within the specified [card-based loyalty program](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types)
        with filtering options applied.

        > [!note] For most use cases, especially real-time integrations, use the Integration API endpoint:
        > [List card's transactions](https://docs.talon.one/integration-api#tag/Loyalty-cards/operation/getLoyaltyCardTransactions).

        If no filtering options are applied, the last 50 loyalty transactions for
        the given loyalty card are returned.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
        - name: startDate
          in: query
          required: false
          description: |
            Date and time from which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          required: false
          description: |
            Date and time by which results are returned. Results are filtered by
            transaction creation date.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: subledgerId
          in: query
          required: false
          description: The ID of the subledger by which we filter the data.
          example: subledger1
          schema:
            type: string
        - name: customerSessionIDs
          in: query
          required: false
          description: |
            Filter the results by a list of customer session IDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?customerSessionIDs=id1&customerSessionIDs=id2`.

            The response contains only data associated with the specified sessions.
          example:
            - session_integration_id_1
            - session_integration_id_1
          schema:
            type: array
            items:
              type: string
        - name: transactionUUIDs
          in: query
          required: false
          description: |
            Filter the results by a list of transaction UUIDs.

            To include multiple IDs, repeat the parameter for each one, for example,
            `?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.

            The response contains only data associated with the specified transactions.
          example:
            - dc608634-0100-40d9-b371-e964476bbe0f
            - 9e829590-05cf-407b-b4c0-5f28468a81e1
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - hasMore
                properties:
                  hasMore:
                    type: boolean
                    description: true means there is more data in the source collection to request..
                    example: true
                  data:
                    type: array
                    description: List of loyalty card transaction logs.
                    items:
                      $ref: '#/components/schemas/CardLedgerTransactionLogEntry'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/transfer:
    put:
      operationId: transferLoyaltyCard
      summary: Transfer card data
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Transfer loyalty card data, such as linked customers, loyalty balances and
        transactions, from a given loyalty card to a new, automatically created
        loyalty card.

        > [!important] **Note**
        > - The original card is automatically blocked once the new card is created,
            and it cannot be activated again.
        > - The default status of the new card is _active_.
      tags:
        - Loyalty cards
      parameters:
        - name: loyaltyProgramId
          in: path
          description: |
            Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
            the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 33
          required: true
          schema:
            type: integer
        - name: loyaltyCardId
          in: path
          description: |
            Identifier of the loyalty card. You can get the identifier with
            the [List loyalty
            cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
            endpoint.

            **Important**: The loyalty card ID requires [URL
            encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
            contains special characters. For example, you must encode `NewCard2026%`
            as `NewCard2026%25`.
          example: summer-loyalty-card-0543
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 108
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferLoyaltyCard'
        description: body
        required: true
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/giveaways/pools/{poolId}/import:
    post:
      operationId: importPoolGiveaways
      summary: Import giveaway codes into a giveaway pool
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the giveaway codes that should be created. Send
        the file as multipart data.

        The CSV file contains the following columns:

        - `code` (required): The code of your giveaway, for instance, a gift card redemption code.
        - `startdate`:  The start date in RFC3339 of the code redemption period.
        - `enddate`: The last date in RFC3339 of the code redemption period.
        - `attributes`: A JSON object describing _custom_ giveaway attribute names and their values, enclosed with double quotation marks.<br />
          For example, if you created a [custom attribute](https://docs.talon.one/docs/dev/concepts/attributes#custom-attributes)
          called `provider` associated with the giveaway entity, the object in the CSV file, when opened in a text editor, must be: `"{"provider": "myPartnerCompany"}"`.

        The `startdate` and `enddate` have nothing to do with the _validity_ of the
        codes. They are only used by the Rule Engine to award the codes or not.

        You can use the time zone setting of your choice. The values are converted
        to UTC internally by Talon.One.

        > [!note] **Note**
        > - We recommend limiting your file size to 500MB.
        > - You can import the same code multiple times. Duplicate codes are treated and distributed to customers as unique codes.

        ## Example

        ```text
        code,startdate,enddate,attributes
        GIVEAWAY1,2020-11-10T23:00:00Z,2022-11-11T23:00:00Z,"{""provider"":
        ""Amazon""}"
        GIVEAWAY2,2020-11-10T23:00:00Z,2022-11-11T23:00:00Z,"{""provider"":
        ""Amazon""}"
        GIVEAWAY3,2021-01-10T23:00:00Z,2022-11-11T23:00:00Z,"{""provider"":
        ""Aliexpress""}"
        ```
      tags:
        - Giveaways
      parameters:
        - name: poolId
          description: The ID of the pool. You can find it in the Campaign Manager, in the **Giveaways** section.
          in: path
          example: 8
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
  /v1/giveaways/pools/{poolId}/export:
    get:
      operationId: exportPoolGiveaways
      summary: Export giveaway codes of a giveaway pool
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the giveaway codes of a specific giveaway
        pool.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:

        - `id`: The internal ID of the giveaway.
        - `poolid`: The internal ID of the giveaway pool.
        - `code`: The giveaway code.
        - `startdate`: The validity start date in RFC3339 of the giveaway (can be empty).
        - `enddate`: The validity end date in RFC3339 of the giveaway (can be empty).
        - `attributes`: Any custom attributes associated with the giveaway code (can be empty).
        - `used`: An indication of whether the giveaway is already awarded.
        - `importid`: The ID of the import which created the giveaway.
        - `created`: The creation time of the giveaway code.
        - `profileintegrationid`: The third-party integration ID of the customer
           profile that was awarded the giveaway. Can be empty if the giveaway was not
           awarded.
        - `profileid`: The internal ID of the customer profile that was awarded the
           giveaway. Can be empty if the giveaway was not awarded or an internal ID
           does not exist.
      tags:
        - Giveaways
      parameters:
        - name: poolId
          description: The ID of the pool. You can find it in the Campaign Manager, in the **Giveaways** section.
          in: path
          example: 8
          required: true
          schema:
            type: integer
        - name: createdBefore
          description: Timestamp that filters the results to only contain giveaways created before this date. Must be an RFC3339 timestamp string.
          in: query
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          description: Timestamp that filters the results to only contain giveaways created after this date. Must be an RFC3339 timestamp string.
          in: query
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    id,poolid,code,startdate,enddate,attributes,used,importid,created,profileintegrationid,profileid
                    1,7,af18bc3839799451fb6d6b6467cf4c25e,2023-04-11T12:47:47Z,2024-04-11T12:47:47Z,"{""attribute"": ""value""}",true,2,2023-04-11T12:47:47Z,R195412,35
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/collections:
    get:
      operationId: listAccountCollections
      summary: List collections in account
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List account-level collections in the account.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: name
          in: query
          description: Filter by collection name.
          example: collection1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CollectionWithoutPayload'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    post:
      operationId: createAccountCollection
      summary: Create account-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create an account-level collection.
      tags:
        - Collections
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCollection'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '409':
          description: Conflict. A collection with this name already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/collections/{collectionId}:
    get:
      operationId: getAccountCollection
      summary: Get account-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a given account-level collection.
      tags:
        - Collections
      parameters:
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    put:
      operationId: updateAccountCollection
      summary: Update account-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Edit the description of a given account-level collection and enable or disable the collection in the specified Applications.
      tags:
        - Collections
      parameters:
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCollection'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '409':
          description: Conflict. A collection with this name already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    delete:
      operationId: deleteAccountCollection
      summary: Delete account-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete a given account-level collection.
      tags:
        - Collections
      parameters:
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      responses:
        '204':
          description: No Content
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/collections/{collectionId}/items:
    get:
      operationId: getCollectionItems
      summary: Get collection items
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve items from a given collection.

        You can retrieve items from both account-level collections and campaign-level collections using this endpoint.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CollectionItem'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/collections:
    get:
      operationId: listCollectionsInApplication
      summary: List collections in Application
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List campaign-level collections from all campaigns in a given Application.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: name
          in: query
          description: Filter by collection name.
          example: collection1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CollectionWithoutPayload'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/collections:
    get:
      operationId: listCollections
      summary: List collections in campaign
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List collections in a given campaign.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: name
          in: query
          description: Filter by collection name.
          example: collection1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CollectionWithoutPayload'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    post:
      operationId: createCollection
      summary: Create campaign-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a campaign-level collection in a given campaign.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCampaignCollection'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /v1/applications/{applicationId}/campaigns/{campaignId}/collections/{collectionId}:
    get:
      operationId: getCollection
      summary: Get campaign-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a given campaign-level collection.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in Application](#tag/Collections/operation/listCollectionsInApplication) endpoint.
          example: 44
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    put:
      operationId: updateCollection
      summary: Update campaign-level collection's description
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Edit the description of a given campaign-level collection.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in Application](#tag/Collections/operation/listCollectionsInApplication) endpoint.
          example: 44
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignCollection'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    delete:
      operationId: deleteCollection
      summary: Delete campaign-level collection
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete a given campaign-level collection.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in Application](#tag/Collections/operation/listCollectionsInApplication) endpoint.
          example: 44
          schema:
            type: integer
      responses:
        '204':
          description: No Content
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/collections/{collectionId}/import:
    post:
      operationId: importAccountCollection
      summary: Import data into existing account-level collection
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the collection of string values that should be
        attached as payload for collection.

        The file should be sent as multipart data.

        The import **replaces** the initial content of the collection.

        The CSV file **must** only contain the following column:

        - `item`: the values in your collection.

        A collection is limited to 500,000 items.

        ## Example

        ```
        item
        Adidas
        Nike
        Asics
        ```

        > [!note] Before sending a request to this endpoint, ensure the data in the
        > CSV to import is different from the data currently stored in the collection.
      tags:
        - Collections
      parameters:
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/collections/{collectionId}/import:
    post:
      operationId: importCollection
      summary: Import data into existing campaign-level collection
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the collection of string values that should be
        attached as payload for collection.

        The file should be sent as multipart data.

        The import **replaces** the initial content of the collection.

        The CSV file **must** only contain the following column:

        - `item`: the values in your collection.

        A collection is limited to 500,000 items.

        ## Example

        ```
        item
        Adidas
        Nike
        Asics
        ```

        > [!note] Before sending a request to this endpoint, ensure the data in the
        > CSV to import is different from the data currently stored in the collection.
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in Application](#tag/Collections/operation/listCollectionsInApplication) endpoint.
          example: 44
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/collections/{collectionId}/export:
    get:
      operationId: exportAccountCollectionItems
      summary: Export account-level collection's items
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing items from a given account-level collection.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).
      tags:
        - Collections
      parameters:
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in account](#tag/Collections/operation/listAccountCollections) endpoint.
          example: 22
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    item
                    SKU1
                    SKU2
                    SKU3
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/collections/{collectionId}/export:
    get:
      operationId: exportCollectionItems
      summary: Export campaign-level collection's items
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing items from a given campaign-level collection.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).
      tags:
        - Collections
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: collectionId
          in: path
          required: true
          description: The ID of the collection. You can get it with the [List collections in Application](#tag/Collections/operation/listCollectionsInApplication) endpoint.
          example: 44
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    item
                    SKU1
                    SKU2
                    SKU3
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/health_report:
    get:
      operationId: getApplicationApiHealth
      summary: Get Application health
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Display the health of the Application and show the last time the Application
        was used.

        You can also find this information in the Campaign Manager. In your Application, click **Settings** > **Integration API Keys**.
        See the [docs](https://docs.talon.one/docs/dev/tutorials/monitoring-integration-status).
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/applicationId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationApiHealth'
  /v1/applications/{applicationId}/access_logs/no_total:
    get:
      operationId: getAccessLogsWithoutTotalCount
      summary: Get access logs for Application
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the list of API calls sent to the specified Application.
      tags:
        - Logs
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: path
          in: query
          description: Only return results where the request path matches the given regular expression.
          example: pattern1
          schema:
            type: string
        - name: method
          in: query
          description: Only return results where the request method matches the given regular expression.
          example: get
          schema:
            type: string
            enum:
              - get
              - put
              - post
              - delete
              - patch
        - name: status
          in: query
          description: Filter results by HTTP status codes.
          example: success
          required: false
          schema:
            type: string
            enum:
              - success
              - error
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/AccessLogEntry'
  /v1/applications/{applicationId}/campaigns/{campaignId}/analytics:
    get:
      operationId: getCampaignAnalytics
      summary: Get analytics of campaigns
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve statistical data about the performance of the given campaign.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: granularity
          in: query
          description: The time interval between the results in the returned time-series.
          example: 1 hour
          schema:
            type: string
            enum:
              - 1 hour
              - 1 day
              - 1 week
              - 1 month
              - 1 year
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CampaignAnalytics'
  /v1/applications/{applicationId}/customers:
    get:
      operationId: getApplicationCustomers
      summary: List application's customers
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all the customers of the specified application.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: integrationId
          in: query
          description: Filter results performing an exact matching against the profile integration identifier.
          example: customer1
          required: false
          schema:
            type: string
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationCustomer'
  /v1/applications/{applicationId}/customer_search:
    post:
      operationId: getApplicationCustomersByAttributes
      summary: List application customers matching the given attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a list of the application customers matching the provided criteria.

        The match is successful if all the attributes of the request are found in a profile, even if the profile has more attributes that are not present on the request.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
      requestBody:
        $ref: '#/components/requestBodies/CustomerProfileSearchQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationCustomer'
  /v1/customer_search/no_total:
    post:
      operationId: getCustomersByAttributes
      summary: List customer profiles matching the given attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a list of the customer profiles matching the provided criteria.

        The match is successful if all the attributes of the request are found in a profile, even if the profile has more attributes that are not present on the request.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: sandbox
          in: query
          description: Indicates whether you are pointing to a sandbox or live customer.
          example: false
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        $ref: '#/components/requestBodies/CustomerProfileSearchQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomerProfile'
  /v1/customers/{customerId}:
    get:
      operationId: getCustomerProfile
      summary: Get customer profile
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return the details of the specified customer profile.

        > [!note]
        > You can retrieve the same information via the Integration API, which can save you extra API requests. Consider these options:
        > - Request the customer profile to be part of the response content using
        >   [Update Customer Session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2).
        > - Send an empty update with the [Update Customer Profile](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/updateCustomerProfileV2) endpoint with `runRuleEngine=false`.
      tags:
        - Customer data
      parameters:
        - name: customerId
          in: path
          description: |
            The value of the `id` property of a customer profile. Get it with the
            [List Application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
          example: 3778
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerProfile'
  /v1/customers/no_total:
    get:
      operationId: getCustomerProfiles
      summary: List customer profiles
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all customer profiles.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: sandbox
          in: query
          description: Indicates whether you are pointing to a sandbox or live customer.
          example: false
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomerProfile'
  /v1/applications/{applicationId}/customers/{customerId}:
    get:
      operationId: getApplicationCustomer
      summary: Get application's customer
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the customers of the specified application.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: customerId
          in: path
          description: |
            The value of the `id` property of a customer profile. Get it with the
            [List Application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
          example: 3778
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationCustomer'
  /v1/applications/{applicationId}/customer_activity_reports/no_total:
    get:
      operationId: getCustomerActivityReportsWithoutTotalCount
      summary: Get Activity Reports for Application Customers
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch summary reports for all application customers based on a time range. Instead of having the total number of results
        in the response, this endpoint only mentions whether there are more results.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/applicationId'
        - name: name
          in: query
          description: Only return reports matching the customer name.
          example: customer1
          required: false
          schema:
            type: string
        - name: integrationId
          in: query
          description: Filter results performing an exact matching against the profile integration identifier.
          example: customer1
          required: false
          schema:
            type: string
        - name: campaignName
          in: query
          description: Only return reports matching the campaign name.
          example: campaign1
          required: false
          schema:
            type: string
        - name: advocateName
          in: query
          description: Only return reports matching the current customer referrer name.
          example: advocate1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomerActivityReport'
  /v1/applications/{applicationId}/customer_activity_reports/{customerId}:
    get:
      operationId: getCustomerActivityReport
      summary: Get customer's activity report
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch the summary report of a given customer in the given application, in a time range.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/applicationId'
        - name: customerId
          in: path
          description: |
            The value of the `id` property of a customer profile. Get it with the
            [List Application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
          example: 3778
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerActivityReport'
  /v1/applications/{applicationId}/customers/{customerId}/analytics:
    get:
      operationId: getCustomerAnalytics
      summary: Get customer's analytics report
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch analytics for a given customer in the given application.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - name: customerId
          in: path
          description: |
            The value of the `id` property of a customer profile. Get it with the
            [List Application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
          example: 3778
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAnalytics'
  /v1/applications/{applicationId}/sessions:
    get:
      operationId: getApplicationSessions
      summary: List Application sessions
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all the sessions of the specified Application.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: partialMatch
          in: query
          required: false
          description: |-
            Enables partial matching for a single text search field. When enabled, the search term matches anywhere within the field value (case-insensitive). Minimum 3 characters required for partial matches; shorter inputs automatically fall back to exact match.

            **Note:** Use with one of: `integrationId`, `profile`, `coupon`, `referral`, or `storeIntegrationId`.
          example: false
          schema:
            type: boolean
            default: false
        - name: profile
          in: query
          required: false
          description: Filter by sessions with this profile integration ID. By default, requires exact match. Use `partialMatch=true` to search for partial matches (minimum 3 characters).
          example: customer1
          schema:
            type: string
        - name: state
          in: query
          required: false
          description: Filter by sessions with this state. Must be exact match.
          example: open
          schema:
            type: string
            enum:
              - open
              - closed
              - partially_returned
              - cancelled
        - name: createdBefore
          in: query
          description: Only return events created before this date. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Only return events created after this date. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: coupon
          in: query
          required: false
          description: Filter by sessions with this coupon. By default, requires exact match. Use `partialMatch=true` to search for partial matches (minimum 3 characters).
          example: SUMMER10
          schema:
            type: string
        - name: referral
          in: query
          required: false
          description: Filter by sessions with this referral. By default, requires exact match. Use `partialMatch=true` to search for partial matches (minimum 3 characters).
          example: WPCNAQ5C
          schema:
            type: string
        - name: integrationId
          in: query
          required: false
          description: Filter by sessions with this integration ID. By default, requires exact match. Use `partialMatch=true` to search for partial matches (minimum 3 characters).
          example: STORE-123-REGION-WEST
          schema:
            type: string
        - name: storeIntegrationId
          in: query
          required: false
          description: The integration ID of the store. You choose this ID when you create a store. By default, requires exact match. Use `partialMatch=true` to search for partial matches (minimum 3 characters).
          example: store1
          schema:
            type: string
        - $ref: '#/components/parameters/applicationId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationSession'
  /v1/applications/{applicationId}/sessions_search:
    post:
      operationId: getApplicationSessionsByCustomerAttributes
      summary: List Application sessions matching the given customer attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a list of the Application sessions matching the provided customer profile
        attributes.

        The match is successful if all the attributes of the request are found in a
        profile, even if the profile has more attributes that are not present on the
        request.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.
            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
      requestBody:
        $ref: '#/components/requestBodies/CustomerProfileSearchQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationSession'
  /v1/applications/{applicationId}/sessions/{sessionId}:
    get:
      operationId: getApplicationSession
      summary: Get Application session
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the details of the given session.
        You can list the sessions with the [List Application sessions](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: sessionId
          in: path
          description: |
            The **internal** ID of the session. You can get the ID with the [List Application sessions](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
          example: 2533
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationSession'
  /v1/applications/{applicationId}/events/no_total:
    get:
      operationId: getApplicationEventsWithoutTotalCount
      summary: List Applications events
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Lists all events recorded for an application. Instead of having the total number of results in the response, this endpoint only mentions whether there are more results.
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: type
          in: query
          required: false
          description: Comma-separated list of types by which to filter events. Must be exact match(es).
          example: talon_session_created,talon_session_updated
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Only return events created before this date. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Only return events created after this date. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: session
          in: query
          required: false
          description: Session integration ID filter for events. Must be exact match.
          example: session1
          schema:
            type: string
        - name: profile
          in: query
          required: false
          description: Profile integration ID filter for events. Must be exact match.
          example: profile1
          schema:
            type: string
        - name: customerName
          in: query
          required: false
          description: Customer name filter for events. Will match substrings case-insensitively.
          example: customer1
          schema:
            type: string
            minLength: 2
        - name: customerEmail
          in: query
          required: false
          description: Customer e-mail address filter for events. Will match substrings case-insensitively.
          example: john@doe.com
          schema:
            type: string
            minLength: 2
        - name: couponCode
          in: query
          required: false
          description: Coupon code
          example: SUMMER10
          schema:
            type: string
        - name: referralCode
          in: query
          required: false
          description: Referral code
          example: WPCNAQ5C
          schema:
            type: string
        - name: ruleQuery
          in: query
          description: Rule name filter for events
          example: rule1
          required: false
          schema:
            type: string
        - name: campaignQuery
          in: query
          description: Campaign name filter for events
          example: campaign1
          required: false
          schema:
            type: string
        - name: effectType
          in: query
          description: The type of effect that was triggered. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
          example: rejectCoupon
          required: false
          schema:
            type: string
        - $ref: '#/components/parameters/applicationId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationEvent'
  /v1/applications/{applicationId}/event_types:
    get:
      operationId: getApplicationEventTypes
      summary: List Applications event types
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get all of the distinct values of the Event `type` property for events recorded in the application.

        See also: [Track an event](https://docs.talon.one/integration-api#tag/Events/operation/trackEventV2)
      tags:
        - Customer data
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      type: string
  /v1/audiences:
    get:
      operationId: getAudiences
      summary: List audiences
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get all audiences created in the account. To create an audience, use [Create audience](https://docs.talon.one/integration-api#tag/Audiences/operation/createAudienceV2).
      tags:
        - Audiences
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Audience'
  /v1/audiences/analytics:
    get:
      operationId: getAudiencesAnalytics
      summary: List audience analytics
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a list of audience IDs and their member count.
      tags:
        - Audiences
      parameters:
        - $ref: '#/components/parameters/sort'
        - name: audienceIds
          in: query
          required: true
          description: The IDs of one or more audiences, separated by commas, by which to filter results. Do not provide more than 1000 audience IDs.
          example: audience1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/AudienceAnalytics'
  /v1/audiences/{audienceId}/memberships:
    get:
      operationId: getAudienceMemberships
      summary: List audience members
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get a paginated list of the customer profiles in a given audience.

        A maximum of 1000 customer profiles per page is allowed.
      tags:
        - Audiences
      parameters:
        - name: audienceId
          in: path
          required: true
          description: The ID of the audience.
          example: 10
          schema:
            type: integer
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: profileQuery
          in: query
          description: The filter to select a profile.
          example: profile1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomerProfile'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/audiences/{audienceId}/memberships/import:
    post:
      operationId: importAudiencesMemberships
      summary: Import audience members
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the integration IDs of the members you want to
        add to an audience.

        The file should be sent as multipart data and should contain only the
        following column (required):

        - `profileintegrationid`: The integration ID of the customer profile.

        The import **replaces** the previous list of audience members.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example

        ```text
        profileintegrationid
        charles
        alexa
        ```
      tags:
        - Audiences
      parameters:
        - name: audienceId
          in: path
          required: true
          description: The ID of the audience.
          example: 10
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/audiences/{audienceId}/memberships/export:
    get:
      operationId: exportAudiencesMemberships
      summary: Export audience members
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the integration IDs of the members of an
        audience.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The file contains the following column:

        - `profileintegrationid`: The integration ID of the customer profile.
      tags:
        - Audiences
      parameters:
        - name: audienceId
          in: path
          required: true
          description: The ID of the audience.
          example: 10
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    profileintegrationid
                    URNGV8294NV
                    BZGGC2454PA
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/profile/{integrationId}/friends:
    get:
      operationId: getApplicationCustomerFriends
      summary: List friends referred by customer profile
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List the friends referred by the specified customer profile in this Application.
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/applicationId'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: integrationId
          in: path
          required: true
          description: The Integration ID of the Advocate's Profile.
          example: advocate1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationReferee'
  /v1/applications/{applicationId}/price_history:
    post:
      operationId: priceHistory
      summary: Get summary of price history
      x-scalar-stability: experimental
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch the historical price data for a given SKU within a defined timeframe.
      tags:
        - Catalogs
      parameters:
        - $ref: '#/components/parameters/applicationId'
      requestBody:
        $ref: '#/components/requestBodies/PriceHistory'
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PriceHistoryResponse'
  /v1/attributes:
    post:
      operationId: createAttribute
      summary: Create custom attribute
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a _custom attribute_ in this account.
        [Custom attributes](https://docs.talon.one/docs/dev/concepts/attributes) allow you
        to add data to Talon.One domain entities like campaigns, coupons,
        customers and so on.

        These attributes can then be given values when creating/updating these entities, and these values can be
        used in your campaign rules.

        For example, you could define a `zipCode` field for customer sessions,
        and add a rule to your campaign that only allows certain ZIP codes.

        These attributes are shared across all Applications in your account and are never required.
      tags:
        - Attributes
      requestBody:
        $ref: '#/components/requestBodies/NewAttribute'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attribute'
    get:
      operationId: getAttributes
      summary: List custom attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return all the custom attributes for the account.
      tags:
        - Attributes
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: entity
          in: query
          required: false
          description: Returned attributes will be filtered by supplied entity.
          example: entity1
          schema:
            type: string
        - name: applicationIds
          in: query
          required: false
          description: Returned attributes will be filtered by supplied application ids
          example: 1,2,3
          schema:
            type: string
        - name: loyaltyProgramIds
          in: query
          required: false
          description: Returned attributes will be filtered by the specified loyalty program ids, separated by commas. You can only use this parameter when `entity` is `LoyaltyCard`.
          example: 1,2
          schema:
            type: string
        - name: type
          in: query
          required: false
          description: Returned attributes will be filtered by supplied type
          example: string
          schema:
            type: string
        - name: kind
          in: query
          required: false
          description: Returned attributes will be filtered by supplied kind (builtin or custom)
          example: builtin
          schema:
            type: string
            enum:
              - builtin
              - custom
            x-generate-enum-go: true
        - name: search
          in: query
          required: false
          description: Returned attributes will be filtered by searching case insensitive through Attribute name, description and type
          example: string
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Attribute'
  /v1/attributes/{attributeId}:
    get:
      operationId: getAttribute
      summary: Get custom attribute
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the specified custom attribute.
      tags:
        - Attributes
      parameters:
        - name: attributeId
          in: path
          required: true
          description: The ID of the attribute. You can find the ID in the Campaign Manager's URL when you display the details of an attribute in **Account** > **Tools** > **Attributes**.
          example: 31
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attribute'
    put:
      operationId: updateAttribute
      summary: Update custom attribute
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update an existing custom attribute. Once created, the only property of a custom attribute that can be
        changed is the description.

        To change the `type` or `name` property of a custom attribute, create a new attribute and
        update any relevant integrations and rules to use the new attribute.
      tags:
        - Attributes
      parameters:
        - name: attributeId
          in: path
          required: true
          description: The ID of the attribute. You can find the ID in the Campaign Manager's URL when you display the details of an attribute in **Account** > **Tools** > **Attributes**.
          example: 31
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/NewAttribute'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attribute'
  /v1/attributes/{attributeId}/allowed_list/import:
    post:
      operationId: importAllowedList
      summary: Import allowed values for attribute
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing a list of [picklist
        values](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes#picklist-values)
        for the specified attribute.

        The file should be sent as multipart data.

        The import **replaces** the previous list of allowed values for this
        attribute, if any.

        The CSV file **must** only contain the following column:

        - `item`: The values in your allowed list, for example a list of SKUs.

        An allowed list is limited to 500,000 items.

        ## Example

        ```text
        item
        CS-VG-04032021-UP-50D-10
        CS-DV-04042021-UP-49D-12
        CS-DG-02082021-UP-50G-07
        ```
      tags:
        - Attributes
      parameters:
        - name: attributeId
          in: path
          required: true
          description: The ID of the attribute. You can find the ID in the Campaign Manager's URL when you display the details of an attribute in **Account** > **Tools** > **Attributes**.
          example: 31
          schema:
            type: integer
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/catalogs/{catalogId}/items:
    get:
      operationId: listCatalogItems
      summary: List items in a catalog
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return a paginated list of cart items in the given catalog.
      tags:
        - Catalogs
      parameters:
        - name: catalogId
          description: The ID of the catalog. You can find the ID in the Campaign Manager in **Account** > **Tools** > **Cart item catalogs**.
          example: 30
          in: path
          required: true
          schema:
            type: integer
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: sku
          in: query
          description: Filter results by one or more SKUs. Must be exact match.
          example:
            - SKU-1
            - SKU-2
          style: form
          schema:
            type: array
            items:
              type: string
        - name: productNames
          in: query
          description: Filter results by one or more product names. Must be exact match.
          example:
            - product1
            - product2
          style: form
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CatalogItem'
  /v1/additional_costs:
    post:
      operationId: createAdditionalCost
      summary: Create additional cost
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create an [additional cost](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs).

        These additional costs are shared across all applications in your account, and are never required.
      tags:
        - Additional costs
      requestBody:
        $ref: '#/components/requestBodies/NewAdditionalCost'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountAdditionalCost'
    get:
      operationId: getAdditionalCosts
      summary: List additional costs
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Returns all the defined additional costs for the account.
      tags:
        - Additional costs
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/AccountAdditionalCost'
  /v1/additional_costs/{additionalCostId}:
    get:
      operationId: getAdditionalCost
      summary: Get additional cost
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Returns the additional cost.
      tags:
        - Additional costs
      parameters:
        - name: additionalCostId
          description: |
            The ID of the additional cost. You can find the ID the the Campaign Manager's URL when you display the details of the cost in **Account** > **Tools** > **Additional costs**.
          example: 2
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountAdditionalCost'
    put:
      operationId: updateAdditionalCost
      summary: Update additional cost
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Updates an existing additional cost. Once created, the only property of an additional cost that cannot be changed is the `name` property (or **API name** in the Campaign Manager). This restriction is in place to prevent accidentally breaking live integrations.
      tags:
        - Additional costs
      parameters:
        - name: additionalCostId
          description: |
            The ID of the additional cost. You can find the ID the the Campaign Manager's URL when you display the details of the cost in **Account** > **Tools** > **Additional costs**.
          example: 2
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/NewAdditionalCost'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountAdditionalCost'
  /v1/webhooks:
    get:
      operationId: getWebhooks
      summary: List webhooks
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all webhooks.
      tags:
        - Webhooks
      parameters:
        - name: applicationIds
          in: query
          description: |
            Checks if the given catalog or its attributes are referenced in the specified Application ID.

            **Note**: If no Application ID is provided, we check for all connected Applications.
          example: '33'
          required: false
          schema:
            type: string
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: creationType
          in: query
          description: Filter results by creation type.
          example: webhooks
          required: false
          schema:
            type: string
            enum:
              - templateWebhooks
              - webhooks
        - name: visibility
          in: query
          description: Filter results by visibility.
          example: visible
          required: false
          schema:
            type: string
            enum:
              - visible
              - hidden
        - name: outgoingIntegrationsTypeId
          in: query
          description: Filter results by outgoing integration type ID.
          example: 15
          required: false
          schema:
            type: integer
        - name: title
          in: query
          description: Filter results performing case-insensitive matching against the webhook title.
          example: title1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookWithOutgoingIntegrationDetails'
  /v1/webhooks/{webhookId}:
    get:
      operationId: getWebhook
      summary: Get webhook
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Returns a webhook by its id.
      tags:
        - Webhooks
      parameters:
        - name: webhookId
          description: |
            The ID of the webhook. You can find the ID in the Campaign Manager's URL when you display the details of the webhook in **Account** > **Webhooks**.
          example: 11
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
  /v1/message_logs:
    get:
      operationId: getMessageLogs
      summary: List message log entries
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve all message log entries.
      tags:
        - Logs
      parameters:
        - name: messageID
          in: query
          description: Filter results by message ID.
          example: message1
          required: false
          schema:
            type: string
        - name: changeType
          in: query
          description: Filter results by change type.
          example: CampaignEvaluationTreeChanged
          required: false
          schema:
            type: string
            enum:
              - CampaignEvaluationTreeChanged
              - CampaignNotification
              - CouponCreated
              - CouponUpdated
              - CouponDeleted
              - AsyncCouponsCreated
              - CouponsDeleted
              - CouponsUpdated
              - CouponCodeExpiring
              - StrikethroughPrice
              - LoyaltyPointsAdded
              - LoyaltyPointsDeducted
              - LoyaltyPointsExpiring
              - LoyaltyPointsPendingToActive
              - LoyaltyAddedDeductedPointsBalances
              - LoyaltyCardAddedDeductedPointsBalances
              - TierWillDowngrade
              - TierUpgrade
              - TierDowngrade
              - LoyaltyCardPointsAdded
              - LoyaltyCardPointsDeducted
              - LoyaltyCardPointsExpiring
        - name: notificationIDs
          in: query
          description: Filter results by notification ID (include up to 30 values, separated by a comma).
          example: 23,46
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results where request and response times to return entries before parameter value, expected to be an RFC3339 timestamp string. Use UTC time.
          required: false
          example: 2024-05-29T15:04:05Z
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results where request and response times to return entries after parameter value, expected to be an RFC3339 timestamp string. Use UTC time.
          required: false
          example: 2024-05-29T15:04:05Z
          schema:
            type: string
            format: date-time
        - name: cursor
          in: query
          description: |
            A specific unique value in the database. If this value is not given, the server fetches results starting with the first record.
          example: U3dhZ2dlciByb2Nrcw==
          required: false
          schema:
            type: string
            format: byte
        - name: period
          in: query
          description: |
            Filter results by time period. Choose between the available relative time frames.
          example: 15m
          required: false
          schema:
            type: string
            enum:
              - 15m
              - 30m
              - 1h
              - 4h
              - 1d
              - 2d
        - in: query
          name: isSuccessful
          description: |
            Indicates whether to return log entries with either successful or unsuccessful HTTP response codes. When set to`true`, only log entries with `2xx` response codes are returned. When set to `false`, only log entries with `4xx` and `5xx` response codes are returned.
          example: false
          required: false
          schema:
            type: boolean
        - in: query
          name: entityType
          description: |
            The entity type the log is related to.
          example: application
          required: true
          schema:
            type: string
            enum:
              - application
              - loyalty_program
              - webhook
        - name: applicationId
          in: query
          description: Filter results by Application ID.
          example: 19
          required: false
          schema:
            type: number
        - name: campaignId
          in: query
          description: Filter results by campaign ID.
          example: 49
          schema:
            type: number
        - in: query
          name: loyaltyProgramId
          description: Identifier of the loyalty program.
          example: 40
          required: false
          schema:
            type: integer
        - in: query
          name: responseCode
          description: Filter results by response status code.
          example: 200
          required: false
          schema:
            type: integer
        - in: query
          name: webhookIDs
          description: Filter results by webhook ID (include up to 30 values, separated by a comma).
          example: 23,46
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageLogEntries'
  /v1/event_types:
    get:
      operationId: getEventTypes
      summary: List event types
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch all event type definitions for your account.
      tags:
        - Events
      parameters:
        - name: name
          in: query
          description: Filter results to event types with the given name. This parameter implies `includeOldVersions`.
          example: event1
          schema:
            type: string
        - name: includeOldVersions
          in: query
          description: Include all versions of every event type.
          example: false
          schema:
            type: boolean
            default: false
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/EventType'
  /v1/applications/{applicationId}/campaigns/{campaignId}/import_coupons:
    post:
      operationId: importCoupons
      summary: Import coupons
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the coupons that should be created. The file
        should be sent as multipart data.

        The CSV file contains the following columns:

        - `value` (required): The coupon code. Must be at least 3 characters long. We recommend using alphanumeric characters.
          There is no maximum length but limiting the code to 30 characters
          ensures it is fully readable in the Campaign Manager.
          The code should be unique unless you set `skipDuplicates` to `true`.
        - `expirydate`: The end date in RFC3339 of the code redemption period.
        - `startdate`: The start date in RFC3339 of the code redemption period.
        - `recipientintegrationid`: The integration ID of the recipient of the coupon.
          Only the customer with this integration ID can redeem this code. Available only for personal codes.
        - `limitval`: The maximum number of redemptions of this code. For unlimited redemptions, use `0`. Defaults to `1` when not provided.
        - `discountlimit`: The total discount value that the code can give. This is typically used to represent a gift card value.
        - `attributes`: A JSON object describing _custom_ coupon attribute names and their values, enclosed with double quotation marks.<br />
          For example, if you created a [custom attribute](https://docs.talon.one/docs/dev/concepts/attributes#custom-attributes)
          called `category` associated with the coupon entity, the object in the CSV file, when opened in a text editor, must be: `"{"category": "10_off"}"`.

        You can use the time zone of your choice. It is converted to UTC internally by Talon.One.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example

        ```text
        "value","expirydate","startdate","recipientintegrationid","limitval","attributes","discountlimit"
        COUP1,2018-07-01T04:00:00Z,2018-05-01T04:00:00Z,cust123,1,"{""Category"":
        ""10_off""}",2.4
        ```

        Once imported, you can find the `batchId` in the Campaign Manager or by using [List coupons](#tag/Coupons/operation/getCouponsWithoutTotalCount).
      tags:
        - Coupons
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: skipDuplicates
          in: query
          required: false
          description: |
            An indicator of whether to skip duplicate coupon values instead of causing an error.
            Duplicate values are ignored when `skipDuplicates=true`.
          example: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
  /v1/applications/{applicationId}/export_coupons:
    get:
      operationId: exportCoupons
      summary: Export coupons
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the coupons that match the given properties.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file can contain the following columns:

        - `accountid`: The ID of your deployment.
        - `applicationid`: The ID of the Application this coupon is related to.
        - `attributes`: A json object describing _custom_ referral attribute names and their values.
        - `batchid`: The ID of the batch this coupon is part of.
        - `campaignid`: The ID of the campaign this coupon is related to.
        - `counter`: The number of times this coupon has been redeemed.
        - `created`: The creation date in RFC3339 of the coupon code.
        - `deleted`: Whether the coupon code is deleted.
        - `deleted_changelogid`: The ID of the delete event in the logs.
        - `discount_counter`: The amount of discount given by this coupon.
        - `discount_limitval`: The maximum discount amount that can be given be this coupon.
        - `expirydate`: The end date in RFC3339 of the code redemption period.
        - `id`: The internal ID of the coupon code.
        - `importid`: The ID of the import job that created this coupon.
        - `is_reservation_mandatory`: Whether this coupon requires a reservation to be redeemed.
        - `limits`: The limits set on this coupon.
        - `limitval`: The maximum number of redemptions of this code.
        - `recipientintegrationid`: The integration ID of the recipient of the coupon.
           Only the customer with this integration ID can redeem this code. Available only for personal codes.
        - `referralid`: The ID of the referral code that triggered the creation of this coupon (create coupon effect).
        - `reservation`: Whether the coupon can be reserved for multiple customers.
        - `reservation_counter`: How many times this coupon has been reserved.
        - `reservation_limitval`: The maximum of number of reservations this coupon can have.
        - `startdate`: The start date in RFC3339 of the code redemption period.
        - `value`: The coupon code.
      tags:
        - Coupons
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: campaignId
          in: query
          description: Filter results by campaign ID.
          example: 49
          schema:
            type: number
        - $ref: '#/components/parameters/sort'
        - name: value
          in: query
          description: Filter results performing case-insensitive matching against the coupon code. Both the code and the query are folded to remove all non-alpha-numeric characters.
          example: SUMMER10
          required: false
          schema:
            type: string
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            Either "expired", "validNow", or "validFuture". The first option matches coupons in which the expiration date is set and in the past. The second matches coupons in which start date is null or in the past and expiration date is null or in the future, the third matches coupons in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            Either "true" or "false". If "true", only coupons where `usageCounter < usageLimit` will be returned, "false" will return only coupons where `usageCounter >= usageLimit`.
          example: 'false'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: referralId
          in: query
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          example: 47
          required: false
          schema:
            type: integer
        - name: recipientIntegrationId
          in: query
          description: Filter results by match with a profile id specified in the coupon's RecipientIntegrationId field.
          example: customer1
          required: false
          schema:
            type: string
        - name: batchId
          in: query
          description: Filter results by batches of coupons
          example: nfinccze
          required: false
          schema:
            type: string
        - name: exactMatch
          in: query
          description: Filter results to an exact case-insensitive matching against the coupon code.
          example: false
          required: false
          schema:
            type: boolean
            default: false
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
        - name: campaignState
          in: query
          description: |
            Filter results by the state of the campaign.

            - `enabled`: Campaigns that are scheduled, running (activated), or expired.
            - `running`: Campaigns that are running (activated).
            - `disabled`: Campaigns that are disabled.
            - `expired`: Campaigns that are expired.
            - `archived`: Campaigns that are archived.
          example: enabled
          required: false
          schema:
            type: string
            enum:
              - enabled
              - disabled
              - archived
              - scheduled
              - running
              - expired
              - staged
        - name: valuesOnly
          in: query
          description: Filter results to only return the coupon codes (`value` column) without the associated coupon data.
          example: false
          required: false
          schema:
            type: boolean
            default: false
        - name: deletedBefore
          in: query
          description: |-
            Timestamp that filters the results to only contain coupons deleted before this date. Must be an RFC3339 timestamp string. You can use any time zone setting. Talon.One will convert to UTC internally.

            **Note:** Only coupons deleted in the last 7 days will appear in the results.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: deletedAfter
          in: query
          description: |-
            Timestamp that filters the results to only contain coupons deleted after this date. Must be an RFC3339 timestamp string. You can use any time zone setting. Talon.One will convert to UTC internally.

            **Note:** Only coupons deleted in the last 7 days will appear in the results.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    id,created,campaignid,value,expirydate,startdate,attributes,applicationid,deleted,deleted_changelogid,accountid,referralid,recipientintegrationid,importid,batchid,reservation,limits,limitval,counter,discount_counter,discount_limitval
                    20191301,2022-04-26T11:02:38Z,3882,COUP1,2022-04-27T10:56:47Z,2022-04-26T10:56:47Z,"{""test"": ""premium""}",270,,0,1,,cust123,671,axghjfdy,,"[]",1,0,0,1.5
  /v1/applications/{applicationId}/export_referrals:
    get:
      operationId: exportReferrals
      summary: Export referrals
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the referrals that match the given
        parameters.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:

        - `code`: The referral code.
        - `advocateprofileintegrationid`: The profile ID of the advocate.
        - `startdate`: The start date in RFC3339 of the code redemption period.
        - `expirydate`: The end date in RFC3339 of the code redemption period.
        - `limitval`: The maximum number of redemptions of this code. Defaults to `1` when left blank.
        - `attributes`: A json object describing _custom_ referral attribute names and their values.
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: campaignId
          in: query
          description: Filter results by campaign ID.
          example: 49
          schema:
            type: number
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the referral creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the referral creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: valid
          in: query
          description: |
            - `expired`: Matches referrals in which the expiration date is set and in the past.
            - `validNow`: Matches referrals in which start date is null or in the past and expiration date is null or in the future.
            - `validFuture`: Matches referrals in which start date is set and in the future.
          example: validNow
          required: false
          schema:
            type: string
            enum:
              - expired
              - validNow
              - validFuture
        - name: usable
          in: query
          description: |
            - `true`, only referrals where `usageCounter < usageLimit` will be returned.
            - `false`, only referrals where `usageCounter >= usageLimit` will be returned.
          example: 'true'
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: batchId
          in: query
          description: Filter results by batches of referrals
          example: nfinccze
          schema:
            type: string
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    id,created,campaignid,advocateprofileintegrationid,friendprofileintegrationid,startdate,expirydate,code,importid,attributes,batchid,counter,limitval
                    687,2021-09-10 09:21:06,3882,UGAV4628K,,,,3LFC-4BPC,,"{}",pimcxobg,0,9999
  /v1/applications/{applicationId}/export_effects:
    get:
      operationId: exportEffects
      summary: Export triggered effects
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the triggered effects that match the given
        attributes.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The generated file can contain the following columns:

        - `applicationid`: The ID of the Application.
        - `campaignid`: The ID of the campaign.
        - `couponid`: The ID of the coupon, when applicable to the effect.
        - `created`: The timestamp of the effect.
        - `event_type`: The name of the event. See the [docs](https://docs.talon.one/docs/dev/concepts/entities/events).
        - `eventid`: The internal ID of the effect.
        - `name`: The effect name. See the [docs](https://docs.talon.one/docs/dev/integration-api/api-effects).
        - `profileintegrationid`: The ID of the customer profile, when applicable.
        - `props`: The [properties](https://docs.talon.one/docs/dev/integration-api/api-effects) of the effect.
        - `ruleindex`: The index of the rule.
        - `rulesetid`: The ID of the rule set.
        - `sessionid`: The internal ID of the session that triggered the effect.
        - `profileid`: The internal ID of the customer profile.
        - `sessionintegrationid`: The integration ID of the session.
        - `total_revenue`: The total revenue.
        - `store_integration_id`: The integration ID of the store. You choose this ID when you create a store.
      tags:
        - Analytics
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: campaignId
          in: query
          description: Filter results by campaign ID.
          example: 49
          schema:
            type: number
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    created,name,applicationid,campaignid,rulesetid,ruleindex,sessionintegrationid,profileintegrationid,sessionid,profileid,eventid,event_type,total_revenue,props,couponid,store_id,store_integration_id
                    2021-06-02T21:14:16Z,rejectCoupon,270,0,0,0,newsession1,,9168,0,95797,talon_session_created,265.00,"{""value"": ""XMAS20"", ""rejectionReason"": ""CouponNotFound""}",,115,STORE-001
                    2021-09-01T13:04:04Z,setDiscountPerItem,270,3882,13599,0,test_flattening_2,integid_4,9707,4800,98806,talon_session_updated,405.00,"{""name"": ""10% off per item#1"", ""value"": 11.0, ""position"": 1}",,116,STORE-002
  /v1/applications/{applicationId}/export_customer_sessions:
    get:
      operationId: exportCustomerSessions
      summary: Export customer sessions
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the customer sessions that match the request.

        > [!important] Archived sessions cannot be exported. See the [retention
        > policy](https://docs.talon.one/docs/dev/server-infrastructure-and-data-retention).

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        - `id`: The internal ID of the session.
        - `firstsession`: Whether this is a first session.
        - `integrationid`: The integration ID of the session.
        - `applicationid`: The ID of the Application.
        - `profileid`: The internal ID of the customer profile.
        - `profileintegrationid`: The integration ID of the customer profile.
        - `created`: The timestamp when the session was created.
        - `state`: The [state](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states)
           of the session.
        - `cartitems`: The cart items in the session.
        - `discounts`: The discounts in the session.
        - `total`: The total value of cart items and additional costs in the session, before any discounts are applied.
        - `attributes`: The attributes set in the session.
        - `closedat`: Timestamp when the session was closed.
        - `cancelledat`: Timestamp when the session was cancelled.
        - `referral`: The referral code in the session.
        - `identifiers`: The identifiers in the session.
        - `additional_costs`: The [additional costs](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs)
           in the session.
        - `updated`: Timestamp of the last session update.
        - `store_integration_id`: The integration ID of the store.
        - `coupons`: Coupon codes in the session.
      tags:
        - Analytics
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: profileIntegrationId
          in: query
          description: Only return sessions for the customer that matches this customer integration ID.
          example: customer1
          required: false
          schema:
            type: string
        - name: dateFormat
          in: query
          description: Determines the format of dates in the export document.
          example: excel
          required: false
          schema:
            type: string
            enum:
              - excel
              - ISO8601
        - name: customerSessionState
          in: query
          description: Filter results by state.
          example: open
          required: false
          schema:
            type: string
            enum:
              - open
              - closed
              - partially_returned
              - cancelled
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    id,firstsession,integrationid,applicationid,profileid,profileintegrationid,created,state,cartitems,discounts,total,attributes,closedat,cancelledat,referral,identifiers,additional_costs,updated,store_integration_id,coupons
                    12328,true,62791173fbf323ee5cfd96f3,270,6111,dxclwds,2022-05-09T13:05:31Z,open,"[{""sku"": ""B00004TKVY"", ""name"": ""Gravel bike - \""Aisle of Man\"""", ""price"": 1800, ""weight"": 6, ""category"": ""gravelbikes"", ""position"": 0, ""quantity"": 1, ""attributes"": {""color"": [""black,white""], ""material"": ""titanium""}, ""returnedQuantity"": 0, ""remainingQuantity"": 1}]","{}",1850.00,"{""ShippingCost"": 50, ""PaymentMethod"": ""creditcard"", ""ShippingMethod"": ""Standard""}",0001-01-01T00:00:00Z,0001-01-01T00:00:00Z,,"null","{""ShippingCost"": {""price"": 50}}",2022-05-09T13:13:28Z,"STORE-001","[""SORRY5QMUJRWA""]"
  /v1/applications/{applicationId}/campaigns/{campaignId}/import_referrals:
    post:
      operationId: importReferrals
      summary: Import referrals
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the referrals that should be created.

        The file should be sent as multipart data.

        The CSV file contains the following columns:

        - `code` (required): The referral code.
        - `advocateprofileintegrationid` (required): The profile ID of the advocate.
        - `startdate`: The start date in RFC3339 of the code redemption period.
        - `expirydate`: The end date in RFC3339 of the code redemption period.
        - `limitval`: The maximum number of redemptions of this code. Defaults to `1` when left blank.
        - `attributes`: A JSON object describing _custom_ referral attribute names and their values, enclosed with double quotation marks.<br />
          For example, if you created a [custom attribute](https://docs.talon.one/docs/dev/concepts/attributes#custom-attributes)
          called `category` associated with the referral entity, the object in the CSV file, when opened in a text editor, must be: `"{"category": "10_off"}"`.

        You can use the time zone of your choice. It is converted to UTC internally by Talon.One.

        > [!important] When you import a CSV file with referrals,
        > a [customer profile](https://docs.talon.one/docs/dev/concepts/entities/customer-profiles)
        > is **not** automatically created for each `advocateprofileintegrationid`
        > column value. Use the [Update customer profile](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/updateCustomerProfileV2)
        > endpoint or the [Update multiple customer profiles](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/updateCustomerProfilesV2)
        > endpoint to create the customer profiles.

        > [!note] We recommend limiting your file size to 500 MB.

        ## Example

        ```text
        code,startdate,expirydate,advocateprofileintegrationid,limitval,attributes
        REFERRAL_CODE1,2020-11-10T23:00:00Z,2021-11-11T23:00:00Z,integid_4,1,"{""my_attribute"":
        ""10_off""}"
        REFERRAL_CODE2,2020-11-10T23:00:00Z,2021-11-11T23:00:00Z,integid1,1,"{""my_attribute"":
        ""20_off""}"
        ```
      tags:
        - Referrals
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
  /v1/users:
    get:
      operationId: getUsers
      summary: List users in account
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve all users in your account.
      tags:
        - Accounts and users
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
  /v1/users/{userId}:
    get:
      operationId: getUser
      summary: Get user
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the data (including an invitation code) for a user. Non-admin users can only get their own profile.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
    put:
      operationId: updateUser
      summary: Update user
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the details of a specific user.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUser'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
    delete:
      operationId: deleteUser
      summary: Delete user
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete a specific user.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: No Content
  /v1/provisioning/okta:
    get:
      operationId: oktaEventHandlerChallenge
      summary: Validate Okta API ownership
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Validate the ownership of the API through a challenge-response mechanism.

        This challenger endpoint is used by Okta to confirm that communication between Talon.One and Okta is correctly configured and accessible
        for provisioning and deprovisioning of Talon.One users, and that only Talon.One can receive and respond to events from Okta.
      tags:
        - Accounts and users
      responses:
        '200':
          description: OK
  /v1/provisioning/scim/Groups:
    get:
      operationId: scimGetGroups
      summary: List SCIM groups
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a paginated list of groups created using the SCIM protocol with an identity provider, for example, Microsoft Entra ID.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      responses:
        '200':
          description: List of SCIM groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimGroupsListResponse'
    post:
      operationId: scimCreateGroup
      summary: Create SCIM group
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new Talon.One group using the SCIM Group provisioning protocol with an identity provider, for example, Microsoft Entra ID, and assign members from the payload to the new group.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      requestBody:
        $ref: '#/components/requestBodies/ScimNewGroup'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimGroup'
  /v1/provisioning/scim/Groups/{groupId}:
    get:
      operationId: scimGetGroup
      summary: Get SCIM group
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve data for a specific group created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      parameters:
        - name: groupId
          in: path
          description: The ID of the group.
          example: 44
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimGroup'
    delete:
      operationId: scimDeleteGroup
      summary: Delete SCIM group
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete a specific group created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      parameters:
        - name: groupId
          in: path
          description: The ID of the group.
          example: 44
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: No Content
    put:
      operationId: scimReplaceGroupAttributes
      summary: Update SCIM group
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the details of a specific group created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID. This endpoint replaces all attributes of the given group with the attributes provided in the request payload.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      parameters:
        - name: groupId
          in: path
          description: The ID of the group.
          example: 44
          required: true
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/ScimNewGroup'
      responses:
        '200':
          description: Group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimGroup'
    patch:
      operationId: scimPatchGroup
      summary: Update SCIM group attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update certain attributes of a group created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID. This endpoint allows for selective adding, removing, or replacing of specific group attributes while other attributes remain unchanged.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      tags:
        - Accounts and users
      parameters:
        - name: groupId
          in: path
          description: The ID of the group.
          example: 44
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScimPatchRequest'
        description: body
        required: true
      responses:
        '200':
          description: Group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimGroup'
  /v1/provisioning/scim/Users:
    get:
      operationId: scimGetUsers
      summary: List SCIM users
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a paginated list of users that have been provisioned using the SCIM protocol with an identity provider, for example, Microsoft Entra ID.
      tags:
        - Accounts and users
      responses:
        '200':
          description: List of SCIM users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimUsersListResponse'
    post:
      operationId: scimCreateUser
      summary: Create SCIM user
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new Talon.One user using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
      tags:
        - Accounts and users
      requestBody:
        $ref: '#/components/requestBodies/ScimNewUser'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimUser'
  /v1/provisioning/scim/Users/{userId}:
    get:
      operationId: scimGetUser
      summary: Get SCIM user
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve data for a specific Talon.One user created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimUser'
    delete:
      operationId: scimDeleteUser
      summary: Delete SCIM user
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete a specific Talon.One user created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: No Content
    put:
      operationId: scimReplaceUserAttributes
      summary: Update SCIM user
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the details of a specific Talon.One user created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.

        This endpoint replaces all attributes of the specific user with the attributes provided in the request payload.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/ScimNewUser'
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimUser'
    patch:
      operationId: scimPatchUser
      summary: Update SCIM user attributes
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update certain attributes of a specific Talon.One user created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.

        This endpoint allows for selective adding, removing, or replacing specific attributes while leaving other attributes unchanged.
      tags:
        - Accounts and users
      parameters:
        - name: userId
          in: path
          description: The ID of the user.
          example: 33
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScimPatchRequest'
        description: body
        required: true
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimUser'
  /v1/provisioning/scim/ResourceTypes:
    get:
      operationId: scimGetResourceTypes
      summary: List supported SCIM resource types
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a list of resource types supported by the SCIM provisioning protocol.

        Resource types define the various kinds of resources that can be managed via the SCIM API, such as users, groups, or custom-defined resources.
      tags:
        - Accounts and users
      responses:
        '200':
          description: List of resource types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimResourceTypesListResponse'
  /v1/provisioning/scim/ServiceProviderConfig:
    get:
      operationId: scimGetServiceProviderConfig
      summary: Get SCIM service provider configuration
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the configuration settings of the SCIM service provider. It provides details about the features and capabilities supported by the SCIM API, such as the different operation settings.
      tags:
        - Accounts and users
      responses:
        '200':
          description: Service configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimServiceProviderConfigResponse'
  /v1/provisioning/scim/Schemas:
    get:
      operationId: scimGetSchemas
      summary: List supported SCIM schemas
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve a list of schemas supported by the SCIM provisioning protocol.

        Schemas define the structure and attributes of the different resources that can be managed via the SCIM API, such as users, groups, and any custom-defined resources.
      tags:
        - Accounts and users
      responses:
        '200':
          description: List of schemas supported by the SCIM provisioning protocol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScimSchemasListResponse'
  /v1/users/delete:
    post:
      operationId: deleteUserByEmail
      summary: Delete user by email address
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        [Delete a specific user](https://docs.talon.one/docs/product/account/account-settings/managing-users#deleting-a-user) by their email address.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteUserRequest'
        description: body
        required: true
      responses:
        '204':
          description: No Content
  /v1/users/activate:
    post:
      operationId: activateUserByEmail
      summary: Enable user by email address
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Enable a [disabled user](https://docs.talon.one/docs/product/account/account-settings/managing-users#disabling-a-user) by their email address.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivateUserRequest'
        description: body
        required: true
      responses:
        '204':
          description: No Content
  /v1/users/deactivate:
    post:
      operationId: deactivateUserByEmail
      summary: Disable user by email address
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        [Disable a specific user](https://docs.talon.one/docs/product/account/account-settings/managing-users#disabling-a-user) by their email address.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeactivateUserRequest'
        description: body
        required: true
      responses:
        '204':
          description: No Content
  /v1/users/invite:
    post:
      operationId: inviteUserExternal
      summary: Invite user from identity provider
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        [Invite a user](https://docs.talon.one/docs/product/account/account-settings/managing-users#inviting-a-user) from an external identity provider to Talon.One by sending an invitation to their email address.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewExternalInvitation'
        description: body
        required: true
      responses:
        '204':
          description: Invitation email sent
  /v1/changes:
    get:
      operationId: getChanges
      summary: Get audit logs for an account
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Retrieve the audit logs displayed in **Accounts > Audit logs**.
      tags:
        - Logs
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: applicationId
          in: query
          description: Filter results by Application ID.
          example: 19
          required: false
          schema:
            type: number
        - name: entityPath
          in: query
          description: Filter results on a case insensitive matching of the url path of the entity
          example: example/url/path
          required: false
          schema:
            type: string
        - in: query
          description: Filter results by user ID.
          example: 34
          required: false
          name: userId
          schema:
            type: integer
        - name: createdBefore
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the change creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: createdAfter
          in: query
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the change creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          required: false
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: managementKeyId
          in: query
          description: Filter results that match the given management key ID.
          example: 16
          required: false
          schema:
            type: integer
        - name: includeOld
          in: query
          description: When this flag is set to false, the state without the change will not be returned. The default value is true.
          example: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Change'
  /v2/invites:
    post:
      operationId: createInviteV2
      summary: Invite user
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new user in the account and send an invitation to their email
        address.

        > [!note] The invitation token is valid for 24 hours after the email has
        > been sent. You can resend an invitation to a user with the [Resend
        > invitation email](https://docs.talon.one/management-api#tag/Accounts-and-users/operation/createInviteEmail)
        > endpoint.
      tags:
        - Accounts and users
      requestBody:
        $ref: '#/components/requestBodies/NewInvitation'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
  /v1/invite_emails:
    post:
      operationId: createInviteEmail
      summary: Resend invitation email
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Resend an email invitation to an existing user.

        > [!note] The invitation token is valid for 24 hours after the email has been sent.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewInviteEmail'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewInviteEmail'
  /v1/password_recovery_emails:
    post:
      operationId: createPasswordRecoveryEmail
      summary: Request a password reset
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Send an email with a password recovery link to the email address of an
        existing account.

        > [!note] The password recovery link expires 30 minutes after this endpoint is triggered.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewPasswordEmail'
        description: body
        required: true
      responses:
        '204':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewPasswordEmail'
  /v1/reset_password:
    post:
      operationId: resetPassword
      summary: Reset password
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Consumes the supplied password reset token and updates the password for
        the associated account.
      tags:
        - Accounts and users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewPassword'
        description: body
        required: true
      responses:
        '204':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewPassword'
  /v1/accounts/{accountId}:
    get:
      operationId: getAccount
      summary: Get account details
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return the details of your companies Talon.One account.
      tags:
        - Accounts and users
      parameters:
        - name: accountId
          in: path
          description: |
            The identifier of the account. Retrieve it via the
            [List users in account](https://docs.talon.one/management-api#tag/Accounts-and-users/operation/getUsers) endpoint in the `accountId`
            property.
          example: 28
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
  /v1/accounts/{accountId}/analytics:
    get:
      operationId: getAccountAnalytics
      summary: Get account analytics
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return the analytics of your Talon.One account.
      tags:
        - Accounts and users
      parameters:
        - name: accountId
          in: path
          description: |
            The identifier of the account. Retrieve it via the
            [List users in account](https://docs.talon.one/management-api#tag/Accounts-and-users/operation/getUsers) endpoint in the `accountId`
            property.
          example: 28
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountAnalytics'
  /v1/sessions:
    post:
      operationId: createSession
      summary: Create session
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a session to use the Management API endpoints.

        Use the value of the `token` property provided in the response as bearer
        token in other API calls.

        A token is valid for 3 months. In accordance with best pratices, use your
        generated token for all your API requests. Do **not** regenerate a token for each request.

        This endpoint has a rate limit of 3 to 6 requests per second per account,
        depending on your setup.

        > [!note]
        > Instead of using a session, you can also use the <a href="https://docs.talon.one/docs/product/account/dev-tools/managing-mapi-keys">Management API key feature</a>
        > in the Campaign Manager to decide which endpoints can be used with a given key.
      tags:
        - Sessions
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginParams'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
    delete:
      operationId: destroySession
      summary: Destroy session
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Destroys the session.
      tags:
        - Sessions
      responses:
        '204':
          description: No Content
  /v1/exports:
    get:
      operationId: getExports
      summary: Get exports
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all past exports
      tags:
        - Logs
      parameters:
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - name: applicationId
          in: query
          description: Filter results by Application ID.
          example: 19
          required: false
          schema:
            type: number
        - name: campaignId
          in: query
          description: Filter by the campaign ID on which the limit counters are used.
          example: 8
          required: false
          schema:
            type: integer
        - name: entity
          in: query
          required: false
          description: The name of the entity type that was exported.
          example: Coupon
          schema:
            type: string
            enum:
              - Coupon
              - Referral
              - Effect
              - CustomerSession
              - LoyaltyLedger
              - LoyaltyLedgerLog
              - Collection
              - AudienceMembership
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Export'
  /v2/roles:
    get:
      operationId: listAllRolesV2
      summary: List roles
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all roles.
      tags:
        - Roles
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - totalResultSize
                  - data
                properties:
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/RoleV2'
  /v2/roles/{roleId}:
    get:
      operationId: getRoleV2
      summary: Get role
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the details of a specific role. To see all the roles, use the [List roles](/management-api#tag/Roles/operation/listAllRolesV2) endpoint.
      tags:
        - Roles
      parameters:
        - name: roleId
          in: path
          description: |
            The ID of role.

            **Note**: To find the ID of a role, use the [List roles](/management-api#tag/Roles/operation/listAllRolesV2) endpoint.
          example: 9
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleV2'
    put:
      operationId: updateRoleV2
      summary: Update role
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update a specific role.
      tags:
        - Roles
      parameters:
        - name: roleId
          in: path
          description: |
            The ID of role.

            **Note**: To find the ID of a role, use the [List roles](/management-api#tag/Roles/operation/listAllRolesV2) endpoint.
          example: 9
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleV2Base'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleV2'
  /v1/applications/{applicationId}/campaigns/{campaignId}/value_maps/{valueMapId}/export:
    get:
      operationId: exportCampaignValueMap
      summary: Export campaign value map
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing all the value map items in a campaign. If
        there are multiple versions of the value map, only the items of the current
        version are exported.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The generated file can contain the following columns:

        - `identifier`: The value of the attribute in the targeted item, for example, an item's SKU.
        - `value`: The value that is associated with the identifier, for example, the item's price.
      tags:
        - Value maps
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: valueMapId
          required: true
          in: path
          description: |
            The ID of the value map.
          example: 17
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    identifier,value
                    sku-123,10.11
                    sku-234,595
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/stores:
    get:
      operationId: listStores
      summary: List stores
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all stores for a specific Application.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/skip'
        - $ref: '#/components/parameters/sort'
        - name: withTotalResultSize
          in: query
          description: |
            When this flag is set, the result includes the total number of results for this query. This might decrease performance on large data sets.

            - When `true`: `totalResultSize` contains the total number of results for this query.
            - When `false`: Only `hasMore` is returned, and it is set to `true` when there are more results than shown on the page.
          example: false
          schema:
            type: boolean
        - name: campaignId
          in: query
          description: Filter results by campaign ID.
          example: 49
          schema:
            type: number
        - name: name
          description: The name of the store.
          example: store1
          required: false
          in: query
          schema:
            type: string
        - name: integrationId
          description: The integration ID of the store.
          example: storeId1
          required: false
          in: query
          schema:
            type: string
        - name: query
          description: Filter results by `name` or `integrationId`.
          example: name
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  totalResultSize:
                    type: integer
                    example: 1
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Store'
    post:
      operationId: createStore
      summary: Create store
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new store in a specific Application.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
      requestBody:
        $ref: '#/components/requestBodies/NewStore'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Store'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict. A store with this integration ID already exists for this application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/stores/{storeId}:
    get:
      operationId: getStore
      summary: Get store
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get store details for a specific store ID.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: storeId
          required: true
          in: path
          description: |
            The ID of the store.
            You can get this ID with the [List stores](#tag/Stores/operation/listStores) endpoint.
          example: '17'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Store'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    put:
      operationId: updateStore
      summary: Update store
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update store details for a specific store ID.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: storeId
          required: true
          in: path
          description: |
            The ID of the store.
            You can get this ID with the [List stores](#tag/Stores/operation/listStores) endpoint.
          example: '17'
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/NewStore'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Store'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    delete:
      operationId: deleteStore
      summary: Delete store
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the specified store.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: storeId
          required: true
          in: path
          description: |
            The ID of the store.
            You can get this ID with the [List stores](#tag/Stores/operation/listStores) endpoint.
          example: '17'
          schema:
            type: string
      responses:
        '204':
          description: No Content
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/export:
    get:
      operationId: exportCampaignStores
      summary: Export stores
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the stores linked to a specific campaign.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following column:

        - `store_integration_id`: The identifier of the store.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    store_integration_id
                    STORE-001
                    STORE-002
                    STORE-003
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/cart_item_filters:
    get:
      operationId: listApplicationCartItemFilters
      summary: List Application cart item filters
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return all the Application cart item filters for a specific Application.
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 50
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
        - $ref: '#/components/parameters/skip'
        - name: name
          in: query
          description: |
            Filter by the display name of the Application cart item filter in the Application.

            **Note**: If no `name` is provided, all the Application cart item filters in the Application are returned.
          example: cartItemFilter1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApplicationCIF'
  /v1/applications/{applicationId}/cart_item_filters/{cartItemFilterId}/expressions/{expressionId}:
    get:
      operationId: getApplicationCartItemFilterExpression
      summary: Get Application cart item filter expression
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get an Application cart item filter expression for a specific Application.
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: cartItemFilterId
          in: path
          description: The ID of the Application cart item filter. You can get this ID with the [List Application cart item filters](https://docs.talon.one/management-api#tag/Applications/operation/listApplicationCartItemFilters) endpoint.
          example: 20
          required: true
          schema:
            type: integer
        - name: expressionId
          in: path
          description: The ID of the Application cart item filter expression.
          example: 19
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationCIFExpression'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores:
    delete:
      operationId: disconnectCampaignStores
      summary: Disconnect stores
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Disconnect the stores linked to a specific campaign.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/import:
    post:
      operationId: importCampaignStores
      summary: Import stores
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing the stores you want to link to a specific campaign.

        Send the file as multipart data.

        The CSV file **must** only contain the following column:
        - `store_integration_id`: The identifier of the store.

        The import **replaces** the previous list of stores linked to the campaign.
      tags:
        - Stores
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/budgets:
    post:
      operationId: createCampaignStoreBudget
      summary: Create campaign store budget
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new store budget for a given campaign.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCampaignStoreBudget'
        description: body
        required: true
      responses:
        '201':
          description: Created
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    get:
      operationId: listCampaignStoreBudgetLimits
      summary: List campaign store budget limits
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Return the store budget limits for a given campaign.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: action
          in: query
          description: The action that this budget is limiting.
          example: setDiscount
          required: false
          schema:
            type: string
            enum:
              - setDiscount
        - name: period
          in: query
          description: |
            The period to which the limit applies.

            **Note**: For budgets with no period, set this to `overall`.
          example: weekly
          required: false
          schema:
            type: string
            enum:
              - overall
              - daily
              - weekly
              - monthly
              - yearly
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ListCampaignStoreBudgets'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      operationId: deleteCampaignStoreBudgets
      summary: Delete campaign store budgets
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the store budgets for a given campaign.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: action
          in: query
          description: The action that this budget is limiting.
          example: setDiscount
          required: false
          schema:
            type: string
            enum:
              - setDiscount
        - name: period
          in: query
          description: |
            The period to which the limit applies.

            **Note**: For budgets with no period, set this to `overall`.
          example: weekly
          required: false
          schema:
            type: string
            enum:
              - overall
              - daily
              - weekly
              - monthly
              - yearly
      responses:
        '204':
          description: Deleted
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/budgets/summary:
    get:
      operationId: summarizeCampaignStoreBudget
      summary: Get summary of campaign store budgets
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Fetch a summary of all store budget information for a given campaign.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SummaryCampaignStoreBudget'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/budgets/import:
    post:
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                upFile:
                  description: The CSV file containing the data that is being imported.
                  type: string
                  format: binary
      operationId: importCampaignStoreBudget
      summary: Import campaign store budgets
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Upload a CSV file containing store budgets for a given campaign.

        Send the file as multipart data.

        The CSV file **must** only contain the following columns:
        - `store_integration_id`: The identifier of the store.
        - `limit`: The budget limit for the store.

        The import **replaces** the previous list of store budgets.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: action
          in: query
          description: The action that this budget is limiting.
          example: setDiscount
          required: false
          schema:
            type: string
            enum:
              - setDiscount
        - name: period
          in: query
          description: |
            The period to which the limit applies.

            **Note**: For budgets with no period, set this to `overall`.
          example: weekly
          required: false
          schema:
            type: string
            enum:
              - overall
              - daily
              - weekly
              - monthly
              - yearly
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/stores/budgets/export:
    get:
      operationId: exportCampaignStoreBudgets
      summary: Export campaign store budgets
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing the store budgets for a given campaign.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:

        - `store_integration_id`: The identifier of the store.
        - `limit`: The budget limit for the store.
      tags:
        - Store budgets
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: action
          in: query
          description: The action that this budget is limiting.
          example: setDiscount
          required: false
          schema:
            type: string
            enum:
              - setDiscount
        - name: period
          in: query
          description: |
            The period to which the limit applies.

            **Note**: For budgets with no period, set this to `overall`.
          example: weekly
          required: false
          schema:
            type: string
            enum:
              - overall
              - daily
              - weekly
              - monthly
              - yearly
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    store_integration_id,limit
                    STORE-001,10
                    STORE-002,20
                    STORE-003,30
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/applications/{applicationId}/campaigns/{campaignId}/achievements:
    post:
      operationId: createAchievement
      summary: Create achievement
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a new achievement in a specific campaign.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAchievement'
        description: body
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Achievement'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '409':
          description: Conflict. An achievement with this name or title already exists.
    get:
      operationId: listAchievements
      summary: List achievements
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        List all the achievements for a specific campaign.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 50
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
        - $ref: '#/components/parameters/skip'
        - name: title
          in: query
          description: |
            Filter by the display name for the achievement in the campaign manager.

            **Note**: If no `title` is provided, all the achievements from the campaign are returned.
          example: achievement1
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  hasMore:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Achievement'
  /v1/applications/{applicationId}/campaigns/{campaignId}/achievements/{achievementId}:
    get:
      operationId: getAchievement
      summary: Get achievement
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Get the details of a specific achievement.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: achievementId
          in: path
          description: The ID of the achievement. You can get this ID with the [List achievement](https://docs.talon.one/management-api#tag/Achievements/operation/listAchievements) endpoint.
          example: 45
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Achievement'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    put:
      operationId: updateAchievement
      summary: Update achievement
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Update the details of a specific achievement.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: achievementId
          in: path
          description: The ID of the achievement. You can get this ID with the [List achievement](https://docs.talon.one/management-api#tag/Achievements/operation/listAchievements) endpoint.
          example: 45
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAchievement'
        description: body
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Achievement'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
    delete:
      operationId: deleteAchievement
      summary: Delete achievement
      description: |-
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Delete the specified achievement.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: achievementId
          in: path
          description: The ID of the achievement. You can get this ID with the [List achievement](https://docs.talon.one/management-api#tag/Achievements/operation/listAchievements) endpoint.
          example: 45
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: No Content
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaigns/{campaignId}/achievements/{achievementId}/export:
    get:
      operationId: exportAchievements
      summary: Export achievement customer data
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing a list of all the customers who have participated in and are currently participating in the given achievement.

        The CSV file contains the following columns:
        - `profileIntegrationID`: The integration ID of the customer profile participating in the achievement.
        - `title`: The display name of the achievement in the Campaign Manager.
        - `target`: The required number of actions or the transactional milestone to complete the achievement.
        - `progress`: The current progress of the customer in the achievement.
        - `status`: The status of the achievement. Can be one of: ['inprogress', 'completed', 'expired'].
        - `startDate`: The date on which the customer profile started the achievement in RFC3339.
        - `endDate`: The date on which the achievement ends and resets for the customer profile in RFC3339.
        - `completionDate`: The date on which the customer profile completed the achievement in RFC3339.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - $ref: '#/components/parameters/campaignId'
        - name: achievementId
          in: path
          description: The ID of the achievement. You can get this ID with the [List achievement](https://docs.talon.one/management-api#tag/Achievements/operation/listAchievements) endpoint.
          example: 45
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    profileIntegrationID,title,target,progress,status,startDate,endDate,completionDate
                    user1231,CoffeeFree10Orders,10.00,5,inprogress,2023-12-10T11:42:25+01:00,2024-01-10T11:42:25+01:00,
                    user341,CoffeeFree10Orders,10.00,10,completed,2023-12-10T11:42:25+01:00,2024-01-10T11:42:25+01:00,2023-12-20T10:24:34+01:00
        '400':
          description: Bad request
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '404':
          description: Not found
          content:
            application/csv:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/applications/{applicationId}/campaign_analytics/export:
    get:
      operationId: exportApplicationCampaignAnalytics
      summary: Export Application analytics aggregated by campaign
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Download a CSV file containing analytics data aggregated by campaign for the
        campaigns of an Application.

        > [!tip] If the exported CSV file is too large to view, you can
        > [split it into multiple files](https://www.google.com/search?q=split+CSV+into+multiple+files).

        The CSV file contains the following columns:

        - `campaign_id`: The ID of the campaign. This column also contains labels
          for the [total and influenced values](https://docs.talon.one/docs/product/campaigns/analytics/application-dashboard#display-the-analytics-data).
        - `start_date`: The start of the aggregation time frame in UTC.
        - `end_date`: The end of the aggregation time frame in UTC.
        - `revenue`: The total, pre-discount value of all items purchased in a customer session.
        - `sessions`: The number of all closed sessions.
        - `average_session_value`: The average customer session value, calculated by dividing the revenue value by the number of sessions.
        - `average_items_per_session`: The number of items from sessions divided by the number of sessions.
        - `coupons`: The number of times a coupon was successfully redeemed in sessions.
        - `discounts`: The total value of discounts given for cart items in sessions.
      tags:
        - Campaigns
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - name: campaignIds
          in: query
          required: false
          description: |
            Filter by one or more Campaign IDs, separated by a comma.

            **Note:** If no campaigns are specified, data for all the campaigns in the Application is returned.
          example:
            - '11'
            - '20'
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: rangeStart
          in: query
          required: true
          description: |
            Only return results from after this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
        - name: rangeEnd
          in: query
          required: true
          description: |
            Only return results from before this timestamp.

            > [!note] **Note**
            > - This must be an RFC3339 timestamp string.
            > - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
            >   considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
          example: 2024-05-29T15:04:05+07:00
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/csv:
              schema:
                type: string
                format: csv
              examples:
                response:
                  value: |
                    campaign_id,start_date,end_date,revenue,sessions,average_session_value,average_items_per_session,coupons,discounts
                    Total,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,751916.88,5919,127.03,3.96,N/A,N/A
                    Influenced,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,525816.00,5246,100.23,4.46,374,47675.73
                    41,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,284089.80,3105,91.49,4.62,247,8435.65
                    75,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,416001.81,4771,87.19,4.52,0,16768.71
                    178,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,313390.53,1098,285.42,4.81,65,16097.05
                    195,2025-02-01T00:00:00+00:00,2025-02-07T00:00:00+00:00,34345.86,595,57.72,4.58,62,6374.32
  /v1/applications/{applicationId}/achievement_progress/{integrationId}:
    get:
      operationId: getCustomerProfileAchievementProgress
      summary: List customer achievements
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        For the given customer profile, list all the achievements that match your filter criteria.
      tags:
        - Achievements
      parameters:
        - $ref: '#/components/parameters/applicationId'
        - in: path
          required: true
          name: integrationId
          description: |
            The integration identifier for this customer profile. Must be:
            - Unique within the deployment.
            - Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.

            Once set, you cannot update this identifier.
          example: customer1
          schema:
            type: string
        - name: pageSize
          in: query
          required: false
          description: The number of items in the response.
          example: 50
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
        - $ref: '#/components/parameters/skip'
        - name: achievementId
          in: query
          description: The ID of the achievement. You can get this ID with the [List achievement](https://docs.talon.one/management-api#tag/Achievements/operation/listAchievements) endpoint.
          example: 41
          required: false
          schema:
            type: integer
        - name: title
          in: query
          required: false
          description: Filter results by the `title` of an achievement.
          example: achievement1
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - hasMore
                  - data
                properties:
                  hasMore:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/AchievementProgressWithDefinition'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseWithStatus'
  /v1/coupon_rejections:
    get:
      operationId: generateCouponRejections
      summary: Summarize coupon redemption failures in session
      description: |
        > [!note] Management API endpoints are **not** meant to be used in real-time integrations that directly serve your end users. Rate limit: 3 requests per second.

        Create a summary of the reasons for coupon redemption failures in a given customer session.
      tags:
        - Coupons
      parameters:
        - name: sessionIntegrationId
          in: query
          description: The integration ID of the session to summarize.
          example: cc53e4fa-547f-4f5e-8333-76e05c381f67
          required: true
          schema:
            type: string
        - name: applicationId
          in: query
          description: Filter results by Application ID.
          example: 19
          schema:
            type: number
        - name: language
          in: query
          description: |
            The [ISO-639](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) code of the language
            in which the summary will be generated.
          example: en
          schema:
            type: string
        - name: couponCode
          in: query
          description: The coupon code for which to get the rejection reason.
          example: SUMMER2025
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CouponFailureSummary'
webhooks: {}
components:
  securitySchemes:
    manager_auth:
      type: apiKey
      name: Authorization
      in: header
      description: |
        This authentication scheme relies on a bearer token that you can use to
        access all the endpoints of the Management API.

        To create the token:

        1. Get a bearer token by calling the
        [createSession](#tag/Sessions/operation/createSession) endpoint.
        1. Use the `token` property of the response in the HTTP header of your
        next queries: `Authorization: Bearer $TOKEN`.

        A token is valid for 3 months. In accordance with best pratices, use
        your generated token for all your API requests. Do **not** regenerate a token for each
        request.

        > [!note]
        > We recommend that you use a [Management API key](https://docs.talon.one/management-api#section/Authentication/management_key)
        > instead of a bearer token.
    management_key:
      type: apiKey
      name: Authorization
      in: header
      description: |
        The API key authentication gives you access to the endpoints selected by
        the admin who created the key.

        Using an API key is the recommended authentication method.

        The key must be generated by an admin and given to the developer that
        requires it:

        1. Sign in to the Campaign Manager and click **Account** > **Tools** >
        **Management API Keys**.
        1. Click **Create Key** and give it a name.
        1. Set an expiration date.
           **Tip**: Avoid choosing expiration dates that fall at the end of the year or during other high-traffic periods.
        1. Choose the endpoints the key should give access to.
        1. Click **Create Key**.
        1. Share it with your developer.

        The developer can now use the API key in the HTTP header, prefixing it
        with `ManagementKey-v1`:

        ```
        Authorization: ManagementKey-v1 bd9479c59e16f9dbc644d33aa74d58270fe13bf3
        ```
  schemas:
    Entity:
      type: object
      required:
        - id
        - created
      properties:
        id:
          type: integer
          description: The internal ID of this entity.
          example: 6
        created:
          type: string
          format: date-time
          description: The time this entity was created.
          example: 2020-06-10T09:05:27.993483Z
    IntegrationEntity:
      type: object
      required:
        - integrationId
        - created
      properties:
        integrationId:
          type: string
          format: string
          example: URNGV8294NV
          maxLength: 1000
          description: The integration ID set by your integration layer.
        created:
          type: string
          format: date-time
          description: The time this entity was created.
          example: 2020-02-07T08:15:22Z
    ApplicationEntity:
      type: object
      required:
        - applicationId
      properties:
        applicationId:
          type: integer
          description: The ID of the Application that owns this entity.
          example: 322
    IntegrationStoreEntity:
      type: object
      properties:
        storeIntegrationId:
          type: string
          minLength: 1
          maxLength: 1000
          description: The integration ID of the store. You choose this ID when you create a store.
          example: STORE-001
    Product:
      type: object
      description: The specific properties of the product this item belongs to, if available.
      required:
        - name
      properties:
        name:
          type: string
          description: The product the item belongs to.
          example: sample_product
    AdditionalCost:
      type: object
      required:
        - price
      properties:
        price:
          title: Price of additional cost
          type: number
          example: 4.5
    PriceDetail:
      type: object
      properties:
        price:
          type: number
          format: float
          description: The value of this price type.
          example: 90
        adjustmentContextId:
          type: string
          description: The context identifier of the selected price adjustment.
          example: summer25
        adjustmentReferenceId:
          type: string
          format: uuid
          description: The reference identifier of the selected price adjustment for this SKU.
          example: 68851723-e6fa-488f-ace9-112581e6c19b
        adjustmentEffectiveFrom:
          type: string
          format: date-time
          description: The date and time from which the price adjustment is effective.
          example: 2025-05-25T00:00:00Z
        adjustmentEffectiveUntil:
          type: string
          format: date-time
          description: The date and time until which the price adjustment is effective.
          example: 2025-05-30T00:00:00Z
    CartItem:
      type: object
      required:
        - sku
        - quantity
      properties:
        name:
          title: Name of item
          type: string
          description: Name of item.
          example: Air Glide
        sku:
          title: SKU of item
          type: string
          description: Stock keeping unit of item.
          minLength: 1
          example: SKU1241028
        quantity:
          title: Quantity of item
          type: integer
          description: |
            Number of units of this item. Due to [cart item flattening](https://docs.talon.one/docs/product/rules/understanding-cart-item-flattening),
            if you provide a quantity greater than 1, the item will be split in as many items as the provided quantity.
            This will impact the number of **per-item** effects triggered from your campaigns.
          minimum: 1
          example: 1
        returnedQuantity:
          title: Returned quantity of item
          type: integer
          readOnly: true
          description: Number of returned items, calculated internally based on returns of this item.
          example: 1
        remainingQuantity:
          title: Remaining quantity of item
          type: integer
          readOnly: true
          description: Remaining quantity of the item, calculated internally based on returns of this item.
          example: 1
        price:
          title: Price of item
          type: number
          description: |
            Price of the item in the currency defined by your Application. This field is required if this item is not part of a [catalog](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs). If it is part of a catalog, setting a price here overrides the price from the catalog.
          example: 99.99
        category:
          title: Item category
          type: string
          description: Type, group or model of the item.
          example: shoes
        product:
          $ref: '#/components/schemas/Product'
          title: Item product
        weight:
          title: Weight of item
          type: number
          description: Weight of item in grams.
          example: 1130
        height:
          title: Height of item
          type: number
          description: Height of item in mm.
        width:
          title: Width of item
          type: number
          description: Width of item in mm.
        length:
          title: Length of item
          type: number
          description: Length of item in mm.
        position:
          title: Position of Cart Item
          type: number
          readOnly: true
          description: Position of the Cart Item in the Cart (calculated internally).
        attributes:
          title: Item attributes
          type: object
          description: |
            Use this property to set a value for the attributes of your choice. [Attributes](https://docs.talon.one/docs/dev/concepts/attributes) represent any information to attach to this cart item.

            Custom _cart item_ attributes must be created in the Campaign Manager before you set them with this property.

            **Note:** Any previously defined attributes that you do not include in the array will be removed.
          example:
            image: 11.jpeg
            material: leather
        additionalCosts:
          type: object
          description: |
            Use this property to set a value for the additional costs of this item, such as a shipping cost. They must be created in the Campaign Manager
            before you set them with this property. See [Managing additional costs](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs).
          additionalProperties:
            $ref: '#/components/schemas/AdditionalCost'
          example:
            shipping:
              price: 9
        catalogItemID:
          title: The catalog item ID
          type: integer
          readOnly: true
          description: The catalog item ID.
        selectedPriceType:
          title: Price Type
          type: string
          readOnly: true
          description: The selected price type for this cart item (e.g. the price for members only).
          example: member
        adjustmentReferenceId:
          title: Price Adjustment ID
          type: string
          format: uuid
          readOnly: true
          description: The reference ID of the selected price adjustment for this cart item. Only returned if the selected price resulted from a price adjustment.
          example: 68851723-e6fa-488f-ace9-112581e6c19b
        adjustmentEffectiveFrom:
          title: Price Adjustment Start Date
          type: string
          format: date-time
          readOnly: true
          description: The date and time from which the price adjustment is effective. Only returned if the selected price resulted from a price adjustment that contains this field.
          example: 2021-09-12T10:12:42Z
        adjustmentEffectiveUntil:
          title: Price Adjustment Expiry Date
          type: string
          format: date-time
          readOnly: true
          description: The date and time until which the price adjustment is effective. Only returned if the selected price resulted from a price adjustment that contains this field.
          example: 2021-09-12T10:12:42Z
        prices:
          readOnly: true
          type: object
          description: |
            A map of keys and values representing the price types and related price adjustment details for this cart item.
            The keys correspond to the `priceType` names.
          additionalProperties:
            $ref: '#/components/schemas/PriceDetail'
          example:
            member:
              price: 90
              adjustmentReferenceId: 68851723-e6fa-488f-ace9-112581e6c19b
              effectiveFrom: 2025-05-25T00:00:00Z
              effectiveUntil: 2025-05-30T00:00:00Z
            base:
              price: 100
    EffectEntity:
      type: object
      description: Definition of all properties that are present on all effects, independent of their type.
      required:
        - campaignId
        - rulesetId
        - ruleIndex
        - ruleName
        - effectType
      properties:
        experimentId:
          type: integer
          description: The ID of the experiment that campaign belongs to.
          example: 12
        campaignId:
          type: integer
          description: The ID of the campaign that triggered this effect.
          example: 244
        rulesetId:
          type: integer
          description: The ID of the ruleset that was active in the campaign when this effect was triggered.
          example: 73
        ruleIndex:
          type: integer
          description: The position of the rule that triggered this effect within the ruleset.
          example: 2
        ruleName:
          type: string
          description: The name of the rule that triggered this effect.
          example: Give 20% discount
        effectType:
          type: string
          description: The type of effect that was triggered. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
          example: rejectCoupon
        triggeredByCoupon:
          type: integer
          example: 4928
          description: The ID of the coupon that was being evaluated when this effect was triggered.
        triggeredForCatalogItem:
          type: integer
          example: 786
          description: The ID of the catalog item that was being evaluated when this effect was triggered.
        conditionIndex:
          type: integer
          example: 786
          description: The index of the condition that was triggered.
        evaluationGroupID:
          type: integer
          example: 3
          description: The ID of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
        evaluationGroupMode:
          type: string
          example: stackable
          description: The evaluation mode of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
        campaignRevisionId:
          type: integer
          example: 1
          description: The revision ID of the campaign that was used when triggering the effect.
        campaignRevisionVersionId:
          type: integer
          example: 5
          description: The revision version ID of the campaign that was used when triggering the effect.
        selectedPriceType:
          type: string
          example: member
          description: The selected price type for the SKU targeted by this effect.
        selectedPrice:
          type: number
          example: 100
          description: The value of the selected price type to apply to the SKU targeted by this effect, before any discounts are applied.
        adjustmentReferenceId:
          type: string
          format: uuid
          example: 68851723-e6fa-488f-ace9-112581e6c19b
          description: The reference identifier of the selected price adjustment for this SKU. This is only returned if the `selectedPrice` resulted from a price adjustment.
    AcceptCouponEffectProps:
      type: object
      title: acceptCoupon
      description: |-
        This effect indicates that the coupon code supplied was valid.

        You should handle this effect by clearing any messages from previous `rejectCoupon` effects and informing the user that the coupon is valid.

        The code is automatically redeemed when you close the session.

        Other effects, such as [setDiscount](https://docs.talon.one/docs/dev/integration-api/api-effects#setdiscount), provide more information about the actual rewards received.
      example:
        value: COUP-XYZ789
      required:
        - value
      properties:
        value:
          type: string
          description: The coupon code that was accepted.
    AcceptReferralEffectProps:
      type: object
      title: acceptReferral
      description: |-
        This effect indicates that the referral code supplied is valid.

        You should handle this effect by informing the user that the referral code is valid.

        The code is automatically redeemed when you close the session.

        Other effects will provide more information about the actual reward.
      example:
        value: REF-ABC123
      required:
        - value
      properties:
        value:
          type: string
          description: The referral code provided in the session.
    RedeemReferralEffectProps:
      type: object
      deprecated: true
      title: redeemReferral
      description: |
        This effect is **deprecated**. It has been replaced by the `acceptReferral` effect.
        This effect indicates that the referral code is valid and has been redeemed.
      example:
        id: 12
        value: REF-ABC123
      required:
        - id
        - value
      properties:
        id:
          type: integer
          description: The id of the referral code that was redeemed.
        value:
          type: string
          description: The referral code that was redeemed.
    RejectCouponEffectProps:
      type: object
      title: rejectCoupon
      description: |-
        This effect indicates that the coupon code supplied couldn't be used.

        You should handle this effect by informing their user the coupon code is invalid.
      example:
        value: COUP-XYZ789
        rejectionReason: CouponRejectedCondition
        conditionIndex: 2
        effectIndex: 0
        details: Coupon usage limit reached
        campaignExclusionReason: CampaignGaveLowerDiscount
      required:
        - value
        - rejectionReason
      properties:
        value:
          type: string
          description: The coupon code that was rejected.
        rejectionReason:
          type: string
          description: |-
            The reason why the code was rejected.

            - `CampaignLimitReached`: The campaign-wide coupon code redemption limit has been reached.
            - `CouponExpired`: The coupon is expired.
            - `CouponLimitReached`: The coupon redemption limit or a campaign budget was reached.
            - `CouponNotFound`: The coupon code is incorrect.
            - `CouponPartOfNotRunningCampaign`: The campaign the coupon belongs to is currently not active. The campaignId field contains the ID of that campaign.
            - `CouponRecipientDoesNotMatch`: The given coupon value does not match the recipient or the coupon is linked to a `recipientIntegrationID` but there is no profile in the session.
            - `CouponRejectedByCondition`: Other conditions failed in the rule or all conditions passed but the `Coupon code is valid` condition is not present.
            - `CouponStartDateInFuture`: The coupon isn't active yet.
            - `EffectCouldNotBeApplied`: One of the effects in the campaign wasn't applied because a limit for that effect was reached (most common use case will be `setDiscount` cannot be applied because a discount limit is reached).
            - `ProfileLimitReached`: The profile-specific coupon redemption limit has been reached.
            - `CouponPartOfNotTriggeredCampaign`: The campaign the coupon belongs to was not triggered during evaluation (an exclusive or stackable campaign). The `campaignId` field contains the ID of that campaign.
            - `CouponReservationRequired`: The coupon's `isReservationMandatory` property is `true`, but the profile does not have a reservation.
            - `ProfileRequired`: The coupon's `isReservationMandatory` property is `true` or a [campaign profile budget](https://docs.talon.one/docs/product/campaigns/settings/manage-campaign-budgets) was set, but no profile exists in the session.
        conditionIndex:
          type: integer
          description: The index of the condition that caused the rejection of the coupon.
        effectIndex:
          type: integer
          description: The index of the effect that caused the rejection of the coupon.
        details:
          type: string
          description: More details about the failure.
        campaignExclusionReason:
          type: string
          example: CampaignGaveLowerDiscount
          description: |-
            The reason why the campaign the coupon belongs to was excluded during [campaign evaluation](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation), when `rejectionReason` was `CouponPartOfNotTriggeredCampaign`.
            Its possible values are:

            - `CampaignGaveLowerDiscount`: The required campaign and coupon conditions were met, but another campaign in a [Highest discount value](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation#set-campaign-evaluation-mode) group offered a higher discount value.
            - `CampaignIsNotFirst`: The campaign was not evaluated because another campaign in a [First campaign](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation#set-campaign-evaluation-mode) group was picked and evaluated first.
            - `CampaignNotInEvaluationSet`: The campaign did not meet other evaluation requirements, for example, because the coupon is part of an archived campaign.
    RejectReferralEffectProps:
      type: object
      title: rejectReferral
      description: This effect indicates that the provided referral code is invalid.
      example:
        value: REF-ABC123
        rejectionReason: ReferralRejectedCondition
        conditionIndex: 1
        effectIndex: 0
        details: Referral code already used
        campaignExclusionReason: CampaignGaveLowerDiscount
      required:
        - value
        - rejectionReason
      properties:
        value:
          type: string
          description: The referral code that was rejected
        rejectionReason:
          type: string
          description: |-
            The reason why the code was rejected.

            - `AdvocateNotFound`: The advocate was not found.
            - `CampaignLimitReached`: The campaign-wide referral code redemption limit has been reached.
            - `EffectCouldNotBeApplied`: One of the effects in the campaign wasn't applied because a limit for that effect was reached (most common use case will be `setDiscount` can not be applied because a discount limit is reached).
            - `ProfileLimitReached`: The profile-specific referral code redemption limit has been reached.
            - `ReferralCustomerAlreadyReferred`: The friend is already referred.
            - `ReferralExpired`: The transferred referral code is expired.
            - `ReferralLimitReached`: The referral code redemption limit has been reached.
            - `ReferralNotFound`: The transferred referral code is wrong.
            - `ReferralPartOfNotRunningCampaign`: The campaign the referral code belongs to is currently not active. The campaign ID field shows the ID of that campaign.
            - `ReferralRecipientDoesNotMatch`: The given referral code value does not match the recipient.
            - `ReferralRecipientIdSameAsAdvocate`: The recipient (friend) has the same id as the advocate.
            - `ReferralRejectedByCondition`: The referral code is valid and in an active campaign, but there were other conditions in that campaign's rules that were not met.
            - `ReferralStartDateInFuture`: The transferred referral code isn't active yet.
            - `ReferralPartOfNotTriggeredCampaign`: The campaign the referral code belongs to was not triggered during evaluation (an exclusive or stackable campaign). The campaign ID field shows the ID of that campaign.
        conditionIndex:
          type: integer
          description: The index of the condition that caused the rejection of the referral.
        effectIndex:
          type: integer
          description: The index of the effect that caused the rejection of the referral.
        details:
          type: string
          description: More details about the failure.
        campaignExclusionReason:
          type: string
          example: CampaignGaveLowerDiscount
          description: |-
            The reason why the campaign the referral belongs to was excluded during [campaign evaluation](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation), when `rejectionReason` was `CouponPartOfNotTriggeredCampaign`.
            Its possible values are:

            - `CampaignGaveLowerDiscount`: The required campaign and referral conditions were met, but another campaign in a [Highest discount value](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation#set-campaign-evaluation-mode) group offered a higher discount value.
            - `CampaignIsNotFirst`: The campaign was not evaluated because another campaign in a [First campaign](https://docs.talon.one/docs/product/applications/manage-campaign-evaluation#set-campaign-evaluation-mode) group was picked and evaluated first.
            - `CampaignNotInEvaluationSet`: The campaign did not meet other evaluation requirements, for example, because the referral is part of an archived campaign.
    CouponCreatedEffectProps:
      type: object
      title: couponCreated
      description: |-
        This effect indicates that a coupon was created.

        For referrals and retention marketing, a common use case is to generate a coupon that can only be redeemed by one specific customer.

        Handle this effect by notifying the recipient about their new coupon code.
      example:
        value: COUP-NEW123
        profileId: customer_profile_id_1
      required:
        - value
        - profileId
      properties:
        value:
          type: string
          description: The coupon code that was created.
        profileId:
          type: string
          description: The integration identifier of the customer for whom this coupon was created.
    ReferralCreatedEffectProps:
      type: object
      title: referralCreated
      description: The `referralCreated` effect behaves similarly to [couponCreated](https://docs.talon.one/docs/dev/integration-api/api-effects#couponcreated). If the `friendProfileIntegrationId` parameter is empty, the referral code can be redeemed by anyone.
      example:
        value: REF-NEW456
      required:
        - value
      properties:
        value:
          type: string
          description: The referral code provided in the session.
    SetDiscountEffectProps:
      type: object
      title: setDiscount
      description: |-
        This effect indicates that a discount should be set on the total shopping cart value of the current order with the given label and amount.

        The discount should overwrite any existing discount with the same name. The most recent integration state update always returns the latest values for **all** effects, effectively overwriting any previous effects.

        Enabling [partial discounts](https://docs.talon.one/docs/product/applications/manage-general-settings#partial-discounts) allows a rule that would fail because of insufficient budget to pass. The rule still fails when the budget reaches `0`. Use the `desiredValue` property to identify the original value of the discount.
      example:
        name: 10% Off
        value: 2.5
        scope: sessionTotal
        desiredValue: 2.5
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: The name or description of this discount.
        value:
          type: number
          description: The monetary value of the effective discount.
        scope:
          type: string
          description: |-
            What the discount applies to. Possible values:

            - `cartItems`: Discount on the price of the items.
            - `additionalCosts`: Discount on the [additional costs](https://docs.talon.one/docs/product/account/dev-tools/manage-additional-costs) of the items.
            - `sessionTotal`: Discount on the total value of the customer session.

            **Note:** [Cascading discounts](https://docs.talon.one/docs/product/applications/manage-general-settings#cascading-discounts) must be enabled for this property to be returned.
        desiredValue:
          type: number
          description: _(Partial discounts enabled only)_ The monetary value of the discount to be applied without considering budget limitations.
    SetDiscountPerItemEffectProps:
      type: object
      title: setDiscountPerItem
      description: |-
        This effect schema is returned when you use the **Discount individual items**, **Discount individual items pro rata**, or **Discount individual item in bundles** effect in a rule.

        It indicates that a discount per item should be applied on the specific item specified in the effect.

        The properties it contains depends on:

        - Whether you used a pro rata effect or not.
        - Whether you used an effect with bundles or not.
        - Whether the partial discount feature is enabled.
      example:
        name: 'Discount on item #1'
        value: 1.5
        position: 1
        subPosition: 1
        desiredValue: 1.5
        scope: price
        totalDiscount: 1.5
        desiredTotalDiscount: 1.5
        bundleIndex: 1
        bundleName: my_bundle
        targetedItemPosition: 1
        targetedItemSubPosition: 1
        excludedFromPriceHistory: false
      required:
        - name
        - value
        - position
      properties:
        name:
          type: string
          description: The description of this discount. `#number` is equal to the `position` property.
        value:
          type: number
          description: The monetary value of the effective discount applied to the item.
        position:
          type: number
          description: The index of the item in the `cartItem` object on which this discount should be applied.
        subPosition:
          type: number
          description: The index of the item unit in its line item.
        desiredValue:
          type: number
          description: _(Partial discounts enabled only)_ The monetary value of the discount to be applied to the item without considering budget limitations.
        scope:
          type: string
          description: |-
            What the discount applies to. Possible values:

            - `price`: discount on the price of the item.
            - `additionalCosts`: discount on the [additional cost](https://docs.talon.one/docs/product/account/dev-tools/manage-additional-costs) of the item.
            - `itemTotal`: discount on the sum of price + additional cost of the item.
        totalDiscount:
          type: number
          description: _(Pro rata discounts only)_ The monetary value of the total effective discount
        desiredTotalDiscount:
          type: number
          description: _(Pro rata discounts only)_ The monetary value of the total discount to be applied without considering budget limitations
        bundleIndex:
          type: integer
          description: _(Discounts with bundles only)_ The position of the specific item bundle in the list of bundles created from the same bundle definition.
        bundleName:
          type: string
          description: _(Discounts with bundles only)_ The name of the bundle definition.
        targetedItemPosition:
          type: number
          description: _(Discounting individual item in bundles only)_ The index of the targeted bundle item on which the applied discount is based.
        targetedItemSubPosition:
          type: number
          description: _(Discounting individual item in bundles only)_ The sub-position of the targeted bundle item on which the applied discount is based.
        excludedFromPriceHistory:
          type: boolean
          description: When set to `true`, the applied discount is excluded from the item's price history.
    SetDiscountPerAdditionalCostEffectProps:
      type: object
      title: setDiscountPerAdditionalCost
      description: |-
        This effect indicates that a discount that should be applied on a specific additional cost. It is triggered whenever a rule containing a **Discount additional cost** effect is validated.

        Enabling [partial rewards](https://docs.talon.one/docs/product/applications/manage-general-settings#partial-rewards) allows a rule that would fail because of insufficient budget to pass. The rule still fails when the budget reaches 0. Use the `desiredValue` property to identify the original amount of loyalty points.
      example:
        name: Shipping discount
        additionalCostId: 1
        additionalCost: shipping
        value: 4.99
        desiredValue: 4.99
      required:
        - name
        - value
        - additionalCostId
        - additionalCost
      properties:
        name:
          type: string
          description: The name of the discount.
        additionalCostId:
          type: integer
          description: The identifier of the additional cost.
        additionalCost:
          type: string
          description: The API name of the additional cost.
        value:
          type: number
          description: The monetary value of the discount to apply.
        desiredValue:
          type: number
          description: _(Partial discounts enabled only)_ The monetary value of the discount to be applied without considering budget limitations.
    TriggerWebhookEffectProps:
      type: object
      title: triggerWebhook
      description: This effect is triggered when a rule containing a [webhook effect](https://docs.talon.one/docs/product/rules/effects/available-effects#webhooks) is validated. The details are shared with you for your information only. It usually doesn't require an action on your side.
      example:
        webhookId: 7
        webhookName: My Webhook
      required:
        - webhookId
        - webhookName
      properties:
        webhookId:
          type: number
          description: The internal ID of the webhook.
        webhookName:
          type: string
          description: The name of the webhook.
    LoyaltyCardIdentifier:
      type: string
      description: |
        The identifier of the loyalty card, which must match the regular expression `^[A-Za-z0-9._%+@-]+$`.
      maxLength: 108
      minLength: 4
      pattern: ^[A-Za-z0-9._%+@-]+$
      example: summer-loyalty-card-0543
    AddLoyaltyPointsEffectProps:
      type: object
      title: addLoyaltyPoints
      description: |-
        This effect indicates that a defined amount of loyalty points was successfully added to the customer's profile or to a loyalty card.

        If you use the [Add loyalty points per item effect](https://docs.talon.one/docs/product/rules/effects/available-effects#reward-effects), use the `cartItemPosition` property to identify which item to add the loyalty points for.

        Enabling [partial rewards](https://docs.talon.one/docs/product/applications/manage-general-settings#partial-rewards) allows a rule that would fail because of insufficient budget to pass. The rule still fails when the budget reaches 0. Use the `desiredValue` property to identify the original amount of loyalty points.

        If you use **Add loyalty points per item** and if the session contains some cart items with _quantity > 1_, use the `cartItemSubPosition` property to identify the item unit in its line item. See the example below for more information.

        If your list of cart items is a [bundle definition](https://docs.talon.one/docs/product/rules/create-and-manage-bundles), use the `bundleIndex` and `bundleName` properties to identify the bundle containing the items for which loyalty points are added.

        If you have set custom activation and expiration dates for the loyalty points, use the `startDate` and `expiryDate` properties to identify when the reward will be active and when will expire.

        If the loyalty program is [profile-based](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types), use the `recipientIntegrationId` property to identify the user who receives the loyalty points. If the loyalty program is [card-based](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types), use the `cardIdentifier` property to identify the loyalty card on which these points are added.

        The points only persist when the session is closed.
      example:
        name: Points for purchase
        programId: 5
        subLedgerId: main
        value: 100
        desiredValue: 100
        recipientIntegrationId: URNGV8294NV
        startDate: 2024-01-01T00:00:00Z
        expiryDate: 2025-01-01T00:00:00Z
        transactionUUID: 8c2d3670-6ea5-4e9e-b5c6-e7e7b4a10111
        cartItemPosition: 1
        cartItemSubPosition: 1
        cardIdentifier: loyalty-card-001
        bundleIndex: 1
        bundleName: my_bundle
        awaitsActivation: false
        validityDuration: 12M
      required:
        - name
        - programId
        - subLedgerId
        - value
        - recipientIntegrationId
        - transactionUUID
      properties:
        name:
          type: string
          description: The reason of this loyalty point addition.
        programId:
          type: integer
          description: The ID of the loyalty program where these points were added.
        subLedgerId:
          type: string
          description: The ID of the subledger within the loyalty program where these points were added.
        value:
          type: number
          description: The amount of points that were added.
        desiredValue:
          type: number
          description: (Partial rewards enabled only) The amount of loyalty points to be awarded without considering budget limitations.
        recipientIntegrationId:
          type: string
          maxLength: 1000
          description: The user for whom these points were added.
          example: URNGV8294NV
        startDate:
          type: string
          format: date-time
          description: The date after which the added points will be valid.
        expiryDate:
          type: string
          format: date-time
          description: The date after which the added points will expire.
        transactionUUID:
          type: string
          description: The identifier of this loyalty point transaction.
        cartItemPosition:
          type: number
          description: (_Add points per cart item_ only.) The index of the item in the `cartItem` object for which these points were added.
        cartItemSubPosition:
          type: number
          description: (_Add points per cart item_ ) The index of the item unit in its line item.
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
          description: The identifier of the card on which these points were added.
        bundleIndex:
          type: integer
          description: _(With bundles only)_ The position of the specific bundle in the list of bundles created from the same bundle definition.
        bundleName:
          type: string
          description: _(With bundles only)_ The name of the bundle definition.
        awaitsActivation:
          type: boolean
          description: Indicates whether the points have an action-based start date. This property is returned only for point transactions with an action-based start date.
        validityDuration:
          type: string
          description: The duration for which the points remain active, calculated relative to their start date.
    DeductLoyaltyPointsEffectProps:
      type: object
      title: deductLoyaltyPoints
      description: |-
        This effect is triggered when a customer redeems loyalty points. The points are deducted from their active point balance.

        If the loyalty program is card-based, use the `cardIdentifier` property to identify the loyalty card from which these points are deducted.

        The Rule Engine deducts points in this order:

        - Points with the earliest expiry date are deducted first, regardless of when they were added.
        - Points with an unlimited expiry date are deducted last.
        - For points with an unlimited expiry date, the points awarded first are deducted first.

        The points only persist when the session is closed.
      example:
        ruleTitle: Deduct points on return
        programId: 5
        subLedgerId: main
        value: 50
        transactionUUID: 9f3e4781-7fb6-5f0f-c6d7-f8f8c5b21222
        name: Points deducted for return
        cardIdentifier: loyalty-card-001
      required:
        - ruleTitle
        - programId
        - subLedgerId
        - value
        - transactionUUID
        - name
      properties:
        ruleTitle:
          type: string
          description: The title of the rule that contained triggered this points deduction.
        programId:
          type: integer
          description: The ID of the loyalty program from which these points were deducted.
        subLedgerId:
          type: string
          description: The ID of the subledger within the loyalty program from which these points were deducted.
        value:
          type: number
          description: The amount of points that were deducted.
        transactionUUID:
          type: string
          description: The identifier of this loyalty point transaction.
        name:
          type: string
          description: The reason of this loyalty points deduction.
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
          description: The identifier of the card from which these points were deducted.
    ChangeLoyaltyTierLevelEffectProps:
      type: object
      title: changeLoyaltyTierLevel
      description: |-
        This effect indicates that a customer's loyalty tier has been upgraded.

        This effect is generated only when the [Add loyalty points](https://docs.talon.one/docs/product/rules/effects/use-effects#add-loyalty-points) and the [Add loyalty points per cart item](https://docs.talon.one/docs/product/rules/effects/use-effects#add-loyalty-points-per-cart-item) effects are triggered for a particular customer, and, as a result, the customer's loyalty tier is upgraded.
      example:
        ruleTitle: Tier upgrade on purchase
        programId: 5
        subLedgerId: main
        previousTierName: Silver
        newTierName: Gold
        expiryDate: 2025-12-31T23:59:59Z
      required:
        - ruleTitle
        - programId
        - subLedgerId
        - newTierName
      properties:
        ruleTitle:
          type: string
          description: The title of the rule that triggered the tier upgrade.
        programId:
          type: integer
          description: The ID of the loyalty program where the points were added.
        subLedgerId:
          type: string
          description: The ID of the subledger within the loyalty program where the points were added.
        previousTierName:
          type: string
          description: The name of the tier from which the user was upgraded.
        newTierName:
          type: string
          description: The name of the tier to which the user has been upgraded.
        expiryDate:
          type: string
          format: date-time
          description: The expiration date of the new tier.
    AddFreeItemEffectProps:
      type: object
      title: addFreeItem
      description: |-
        This effect indicates that a free item should be added to the shopping cart in the current session. In this example, add the SKU to the shopping cart and set its price to `0`.

        The effect of a successful referral can mean a free item for someone else, such as the referrer.
      example:
        sku: SKU1241028
        name: Free Gift Item
        desiredQuantity: 1
      required:
        - sku
        - name
      properties:
        sku:
          type: string
          description: SKU of the item that needs to be added.
          example: SKU1241028
        name:
          type: string
          description: Description of the effect.
        desiredQuantity:
          type: integer
          description: The original quantity in case a partial reward was applied.
    ShowNotificationEffectProps:
      type: object
      title: showNotification
      description: |-
        You can use notifications to inform customers of certain events. There are four types of notification messages:

        - `Info`
        - `Offer`
        - `Error`
        - `Misc`

        It is up to you to use the Rule Builder to decide why and when to show notifications. Notifications can be used as both rule effects and failure effects.

        A common use case is to display the notification at the top of the cart view in your web app. You can use the notification type to vary the styling of the notification message.
      example:
        notificationType: info
        title: Discount applied
        body: You have received a 10% discount on your order.
      required:
        - notificationType
        - title
        - body
      properties:
        notificationType:
          type: string
          description: The type of notification.
        title:
          type: string
          description: The title of the notification.
        body:
          type: string
          description: The body of the notification.
    UpdateAttributeEffectProps:
      type: object
      title: updateAttribute
      description: This effect indicates that a rule containing an [Update attribute value](https://docs.talon.one/docs/product/rules/effects/available-effects#update-effects) or [Update cart item attribute value](https://docs.talon.one/docs/product/rules/effects/available-effects#update-effects) was validated. You should update the value of the attribute in your system based on the content of the returned effect.
      example:
        path: Session.Attributes.loyaltyTier
        value: Gold
      required:
        - path
        - value
      properties:
        path:
          type: string
          description: The entity type and the attribute name.
        value:
          description: The new value of the attribute.
    RollbackCouponEffectProps:
      type: object
      title: rollbackCoupon
      description: |-
        This effect indicates that a coupon code redemption has been rolled back. The coupon becomes redeemable again.

        The effect is triggered when you [cancel](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#manage-the-sessions-state) a session where a coupon was accepted. See an example of use in the [cancelling a session tutorial](https://docs.talon.one/docs/dev/tutorials/roll-back-effects).
      example:
        value: COUP-XYZ789
      required:
        - value
      properties:
        value:
          type: string
          description: The coupon code whose redemption has been rolled back.
    RollbackReferralEffectProps:
      type: object
      title: rollbackReferral
      description: |-
        This effect indicates that the redemption of the referral code has been rolled back. It triggers when a closed session that redeemed a referral is gets cancelled. The code becomes redeemable again.

        For more information about session states, see [Managing states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states).
      example:
        value: REF-ABC123
      required:
        - value
      properties:
        value:
          type: string
          description: The referral code to be rolled back.
    RollbackDiscountEffectProps:
      type: object
      title: rollbackDiscount
      description: |-
        This effect indicates that a discounted session, cart item, or additional cost has been cancelled or partially returned. This effect can only happen when you set the status of a session to `cancel` or the status changes to `partially_returned`.

        If the session contains some cart items with _quantity > 1_, use the `cartItemSubPosition` property to identify the specific item unit in its line item. See the example below.
      example:
        name: 10% Off
        value: 2.5
        cartItemPosition: 1
        cartItemSubPosition: 1
        additionalCostId: 1
        additionalCost: shipping
        scope: sessionTotal
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: The name of the discount effect that was rolled back.
        value:
          type: number
          description: The monetary value of the discount that was rolled back.
        cartItemPosition:
          type: number
          description: The index of the item in the `cartItem` object whose discount was rolled back, or the unit containing the additional cost whose discount was rolled back.
        cartItemSubPosition:
          type: number
          description: The index of the item unit in its line item for which the discount was rolled back.
        additionalCostId:
          type: integer
          description: _Only when rolling back [setDiscountPerAdditionalCost](https://docs.talon.one/docs/dev/integration-api/api-effects#setdiscountperadditionalcost) and [setDiscountPerAdditionalCostPerItem](https://docs.talon.one/docs/dev/integration-api/api-effects#setdiscountperadditionalcostperitem)_ The ID of the additional cost to be discounted.
        additionalCost:
          type: string
          description: The API name of the additional cost whose discount was rolled back.
        scope:
          type: string
          description: |-
            The scope of the rolled back discount.

            - For a discount per session, it can be one of `cartItems`, `additionalCosts` or `sessionTotal`
            - For a discount per item, it can be one of `price`, `additionalCosts` or `itemTotal`
    RollbackAddedLoyaltyPointsEffectProps:
      type: object
      title: rollbackAddedLoyaltyPoints
      description: |-
        This effect is triggered in the following cases:

        - A session was cancelled in which loyalty points have been added.
        - A session was partially returned and loyalty point were added by the returned items. See [returning items](https://docs.talon.one/docs/dev/tutorials/partially-return-a-session).

        If you use the [Add loyalty points per item effect](https://docs.talon.one/docs/product/rules/effects/available-effects#reward-effects), use the `cartItemPosition` property to identify which items the loyalty points were rolled back for.

        If you use **Add loyalty points per item** and if the session contains some cart items with _quantity > 1_, use the `cartItemSubPosition` property to identify the item unit in its line item.

        If the loyalty program is [profile-based](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types), use the `recipientIntegrationId` property to identify the user for whom the loyalty points are rolled back. If the loyalty program is [card-based](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types), use the `cardIdentifier` property to identify the loyalty card where the points were originally added.
      example:
        programId: 5
        subLedgerId: main
        value: 100
        recipientIntegrationId: URNGV8294NV
        transactionUUID: 8c2d3670-6ea5-4e9e-b5c6-e7e7b4a10111
        cartItemPosition: 1
        cartItemSubPosition: 1
        cardIdentifier: loyalty-card-001
      required:
        - programId
        - subLedgerId
        - value
        - recipientIntegrationId
        - transactionUUID
      properties:
        programId:
          type: integer
          description: The ID of the loyalty program where these points were rolled back.
        subLedgerId:
          type: string
          description: The ID of the subledger within the loyalty program where these points were rolled back.
        value:
          type: number
          description: The amount of points that were rolled back.
        recipientIntegrationId:
          type: string
          maxLength: 1000
          description: The user for whom these points were rolled back.
          example: URNGV8294NV
        transactionUUID:
          type: string
          description: The identifier of this loyalty point transaction.
        cartItemPosition:
          type: number
          description: (_Add points per cart item_ only.) The index of the item in the `cartItem` object for which these points were rolled back.
        cartItemSubPosition:
          type: number
          description: (_Add points per cart item_ ) The index of the item unit in its line item.
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
          description: The identifier of the card on which these points were originally added.
    RollbackDeductedLoyaltyPointsEffectProps:
      type: object
      title: rollbackDeductedLoyaltyPoints
      description: |-
        This effect is triggered in the following cases:

        - A session is _cancelled_ and this session deducted loyalty points. The rollback action returns the redeemed loyalty points to the customer.
        - A session is impacted by a _partial return_. Only added loyalty points that are still **pending** are rolled back.
        - A session in which loyalty points were spent is reopened.

        See the [session states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states).

        If you set custom activation and expiration dates for the loyalty points, use the `startDate` and `expiryDate` properties to identify when the reward will be active and when will expire.

        If the loyalty program is [profile-based](https://docs.talon.one/docs/product/loyalty-programs/profile-based/profile-based-overview), use the `recipientIntegrationId` property to identify the user who receives the loyalty points. If the loyalty program is [card-based](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types), use the `cardIdentifier` property to identify the loyalty card where the points are reimbursed.
      example:
        programId: 5
        subLedgerId: main
        value: 50
        recipientIntegrationId: URNGV8294NV
        startDate: 2024-01-01T00:00:00Z
        expiryDate: 2025-01-01T00:00:00Z
        transactionUUID: 9f3e4781-7fb6-5f0f-c6d7-f8f8c5b21222
        cardIdentifier: loyalty-card-001
      required:
        - programId
        - subLedgerId
        - value
        - recipientIntegrationId
        - transactionUUID
      properties:
        programId:
          type: integer
          description: The ID of the loyalty program where these points were reimbursed.
        subLedgerId:
          type: string
          description: The ID of the subledger within the loyalty program where these points were reimbursed.
        value:
          type: number
          description: The amount of points that were reimbursed.
        recipientIntegrationId:
          type: string
          maxLength: 1000
          description: The user for whom these points were reimbursed.
          example: URNGV8294NV
        startDate:
          type: string
          format: date-time
          description: The date after which the reimbursed points will be valid.
        expiryDate:
          type: string
          format: date-time
          description: The date after which the reimbursed points will expire.
        transactionUUID:
          type: string
          description: The identifier of this loyalty point transaction.
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
          description: The identifier of the card from which these points were originally deducted.
    ShowBundleMetadataEffectProps:
      type: object
      deprecated: true
      title: showBundleMetadata
      description: |-
        This effect is **deprecated**.

        The `ShowBundleMetadata` effect contains information that allows you to associate
        the discounts from a rule in a bundle campaign with specific cart items.
        This way you can distinguish from "normal" discounts that were not the result of a product bundle.
      example:
        description: Buy 2 get 1 free bundle
        bundleAttributes:
          - category
          - brand
        itemsIndices:
          - 0
          - 1
          - 2
      required:
        - description
        - bundleAttributes
        - itemsIndices
      properties:
        description:
          type: string
          description: Description of the product bundle.
        bundleAttributes:
          type: array
          items:
            type: string
          description: The cart item attributes that determined which items are being bundled together.
        itemsIndices:
          type: array
          items:
            type: number
          description: The indices in the cart items array of the bundled items.
    AwardGiveawayEffectProps:
      type: object
      title: awardGiveaway
      description: This effect indicates the awarded giveaway item and to which profile the item was awarded. Learn more about [giveaways](https://docs.talon.one/docs/product/giveaways/overview).
      example:
        poolId: 2
        poolName: My pool
        recipientIntegrationId: URNGV8294NV
        giveawayId: 5
        code: 57638t-67439hty
      required:
        - poolId
        - poolName
        - recipientIntegrationId
        - giveawayId
        - code
      properties:
        poolId:
          type: integer
          description: The internal ID of the giveaway pool.
          example: 2
        poolName:
          type: string
          description: The name of the giveaway pool.
          example: My pool
        recipientIntegrationId:
          type: string
          maxLength: 1000
          description: The integration ID of the customer that receives the giveaway.
          example: URNGV8294NV
        giveawayId:
          type: integer
          description: The internal ID of the giveaway.
          example: 5
        code:
          type: string
          description: The giveaway code to be rewarded.
          example: 57638t-67439hty
    WillAwardGiveawayEffectProps:
      type: object
      title: willAwardGiveaway
      description: |-
        The equivalent of the `awardGiveaway` effect but returned when updating a session with any state other than `closed`. This ensures no giveaway codes are leaked when they are still not guaranteed to be awarded.

        For more information about session states, see [Manage the session's state](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#manage-the-sessions-state).
      example:
        poolId: 2
        poolName: My pool
        recipientIntegrationId: URNGV8294NV
      required:
        - poolId
        - poolName
        - recipientIntegrationId
      properties:
        poolId:
          type: integer
          description: The internal ID of the giveaway pool.
          example: 2
        poolName:
          type: string
          description: The name of the giveaway pool.
          example: My pool
        recipientIntegrationId:
          type: string
          maxLength: 1000
          description: The integration ID of the customer that receives the giveaway.
          example: URNGV8294NV
    ErrorEffectProps:
      type: object
      title: error
      description: This effect is triggered whenever an error occurs during rule evaluation. This effect only provides information about what the error is.
      example:
        message: An unexpected error occurred during rule evaluation.
      required:
        - message
      properties:
        message:
          type: string
          description: The error message.
    CustomEffectProps:
      type: object
      title: customEffect
      description: |-
        If you want to return data as an effect but no effect matches your use case, you can [create a custom effect](https://docs.talon.one/docs/dev/tutorials/create-custom-effects).

        Custom effects can be used as both rule effects and failure effects.

        The structure of a custom effect depends on your specifications but is always named `customEffect`.
      example:
        effectId: 1
        name: my_custom_effect
        cartItemPosition: 1
        cartItemSubPosition: 2
        bundleIndex: 1
        bundleName: my_bundle
        payload:
          key: value
      required:
        - effectId
        - name
        - payload
      properties:
        effectId:
          type: integer
          description: The ID of the custom effect that was triggered.
          example: 1
        name:
          type: string
          description: The type of the custom effect.
          example: my_custom_effect
        cartItemPosition:
          type: number
          description: The index of the item in the cart item list to which the custom effect is applied.
          example: 1
        cartItemSubPosition:
          type: number
          description: |
            For cart items with quantity > 1, the sub position indicates to which item unit the custom effect is applied.
          example: 2
        bundleIndex:
          type: integer
          description: The position of the bundle in a list of item bundles created from the same bundle definition.
          example: 1
        bundleName:
          type: string
          description: The name of the bundle definition.
          example: my_bundle
        payload:
          description: The JSON payload of the custom effect.
          type: object
          x-arbitraryJSON: true
    SetDiscountPerAdditionalCostPerItemEffectProps:
      type: object
      title: setDiscountPerAdditionalCostPerItem
      description: |-
        This effect indicates that a discount of a specific additional cost within a specific item should be applied. It gets triggered whenever a rule containing a **Discount additional cost per item** effect is validated.

        Use this effect when **all** items in the cart have an additional cost. If one of more items do not have an additional cost, the rule will fail.
      example:
        name: 'Shipping discount on item #1'
        additionalCostId: 1
        value: 4.99
        position: 1
        subPosition: 1
        additionalCost: shipping
        desiredValue: 4.99
      required:
        - name
        - value
        - additionalCostId
        - additionalCost
        - position
      properties:
        name:
          type: string
          description: The description of this discount. `#number` is appended to the name. It is equal to the `position` property.
        additionalCostId:
          type: integer
          description: The identifier of the additional cost to be discounted.
        value:
          type: number
          description: The monetary value of the effective discount applied to the item's additional cost.
        position:
          type: number
          description: The index of the item in the `cartItem` object containing the additional cost that this discount applies to.
        subPosition:
          type: number
          description: The index of the item unit in its line item.
        additionalCost:
          type: string
          description: The API name of the additional cost to be discounted.
        desiredValue:
          type: number
          description: _[(Partial discounts enabled only)](https://docs.talon.one/docs/product/applications/manage-general-settings#partial-discounts)_. The monetary value of the discount to be applied to the additional cost without considering budget limitations.
    ReserveCouponEffectProps:
      type: object
      title: reserveCoupon
      description: |-
        This effect indicates that the given coupon code was reserved for the given customer.

        Talon.One provides soft and hard reservations. For more information, see [Reserve a coupon code](https://docs.talon.one/docs/product/rules/effects/use-effects#reserve-a-coupon-code).
      example:
        couponValue: COUP-XYZ789
        profileIntegrationId: customer_profile_id_1
        isNewReservation: true
      required:
        - couponValue
        - profileIntegrationId
        - isNewReservation
      properties:
        couponValue:
          type: string
          description: The coupon code that was created.
        profileIntegrationId:
          type: string
          description: The integration identifier of the customer for whom this coupon was reserved.
        isNewReservation:
          type: boolean
          description: Indicates whether this is a new coupon reservation or not.
    AddToAudienceEffectProps:
      type: object
      title: addToAudience
      description: This effect is triggered when a rule containing an [Update audience](https://docs.talon.one/docs/product/rules/effects/use-effects#update-an-audience) effect with **Add customer to an audience** selected is validated. It indicates that a customer was added to an audience and is returned when a customer session is opened, updated, or closed.
      example:
        audienceId: 10
        audienceName: My audience
        profileIntegrationId: URNGV8294NV
        profileId: 150
      properties:
        audienceId:
          type: integer
          description: The internal ID of the audience.
          example: 10
        audienceName:
          type: string
          description: The name of the audience.
          example: My audience
        profileIntegrationId:
          type: string
          description: The ID of the customer profile in the third-party integration platform.
          example: URNGV8294NV
        profileId:
          type: integer
          description: The internal ID of the customer profile.
          example: 150
    RemoveFromAudienceEffectProps:
      type: object
      title: removeFromAudience
      description: This effect is triggered when a rule containing an [Update audience](https://docs.talon.one/docs/product/rules/effects/use-effects#update-an-audience) effect with **Remove customer from an audience** selected is validated. It indicates that a customer was removed from an audience and is returned when a customer session is opened, updated, or closed.
      example:
        audienceId: 10
        audienceName: My audience
        profileIntegrationId: URNGV8294NV
        profileId: 150
      properties:
        audienceId:
          type: integer
          description: The internal ID of the audience.
          example: 10
        audienceName:
          type: string
          description: The name of the audience.
          example: My audience
        profileIntegrationId:
          type: string
          description: The ID of the customer profile in the third-party integration platform.
          example: URNGV8294NV
        profileId:
          type: integer
          description: The internal ID of the customer profile.
          example: 150
    IncreaseAchievementProgressEffectProps:
      type: object
      title: increaseAchievementProgress
      description: |-
        This effect indicates that the customer's progress in an achievement was updated during the current session. It is triggered when a rule using the [Update customer progress](https://docs.talon.one/docs/product/rules/effects/use-effects#update-customer-progress) effect is successfully validated.

        For [on-completion achievements](https://docs.talon.one/docs/product/campaigns/achievements/achievements-overview#recurring-on-completion-achievements), any customer progress exceeding the target automatically starts a new iteration. This generates a new `progressTrackerId` for each iteration, and there can be multiple progress updates for the same achievement from a single validation of this effect.
      example:
        achievementId: 10
        achievementName: FreeCoffee10Orders
        progressTrackerId: 42
        delta: 1
        value: 7
        target: 10
        isJustCompleted: false
      required:
        - achievementId
        - achievementName
        - delta
        - value
        - target
        - isJustCompleted
      properties:
        achievementId:
          type: integer
          description: The internal ID of the achievement.
          example: 10
        achievementName:
          type: string
          description: The name of the achievement.
          example: FreeCoffee10Orders
        progressTrackerId:
          type: integer
          description: |-
            The internal ID of the customer progress tracker.
            For [on-completion achievements](https://docs.talon.one/docs/product/campaigns/achievements/achievements-overview#recurring-on-completion-achievements), this effect generates a unique ID for each iteration.
        delta:
          type: number
          description: The value by which the customer's current progress in the achievement has increased.
        value:
          type: number
          description: The current progress of the customer in the achievement.
        target:
          type: number
          description: The target value to complete the achievement.
        isJustCompleted:
          type: boolean
          description: Indicates if the customer has completed the achievement in the current session.
    RollbackIncreasedAchievementProgressEffectProps:
      type: object
      title: rollbackIncreasedAchievementProgress
      description: |-
        This effect indicates that the customer's progress in an achievement was rolled back.

        The Rule Engine triggers this effect when you cancel or [reopen a customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/reopenCustomerSession) that previously validated the [Update customer progress](https://docs.talon.one/docs/product/rules/effects/use-effects#update-customer-progress) effect and triggered the [increaseAchievementProgress](https://docs.talon.one/docs/dev/integration-api/api-effects#increaseachievementprogress) API effect.

        The effect is also triggered for completed achievements if the **Allow progress rollback for completed achievements** setting is enabled. You can enable this through the [Campaign Manager](https://docs.talon.one/docs/product/campaigns/achievements/manage-achievements) or the [Management API](https://docs.talon.one/management-api#tag/Achievements/operation/createAchievement) by setting the `achievementAllowRollbackAfterCompletion` property to `true`. This setting only applies to one-time and recurring on expiration achievements.
      example:
        achievementId: 10
        achievementName: FreeCoffee10Orders
        progressTrackerId: 42
        decreaseProgressBy: 1
        currentProgress: 6
        target: 10
      required:
        - achievementId
        - achievementName
        - progressTrackerId
        - decreaseProgressBy
        - currentProgress
        - target
      properties:
        achievementId:
          type: integer
          description: The internal ID of the achievement.
          example: 10
        achievementName:
          type: string
          description: The name of the achievement.
          example: FreeCoffee10Orders
        progressTrackerId:
          type: integer
          description: The internal ID of the achievement progress tracker.
        decreaseProgressBy:
          type: number
          description: The value by which the customer's current progress in the achievement has decreased.
        currentProgress:
          type: number
          description: The current progress of the customer in the achievement.
        target:
          type: number
          description: The target value to complete the achievement.
    LoyaltyLedgerEntryExpiryDateChange:
      type: object
      description: The properties specific to effects for changing the expiry dates of loyalty ledger entries.
      required:
        - transactionUUID
        - newExpiryDate
      properties:
        transactionUUID:
          type: string
          format: uuid
          description: The identifier of the transaction affected by the extension or update.
        previousExpiryDate:
          type: string
          format: date-time
          description: Expiry date of the transactions before applying the extension or update.
        newExpiryDate:
          type: string
          format: date-time
          description: Expiry date of the transaction after applying the extension or update.
    ExtendLoyaltyPointsExpiryDateEffectProps:
      type: object
      title: extendLoyaltyPointsExpiryDate
      description: |
        If loyalty points have an expiry date, this effect extends the expiry of all active and pending point transactions by a selected duration.
      example:
        programId: 5
        subLedgerId: main
        extensionDuration: 12h
        affectedTransactions: []
      required:
        - programId
        - subLedgerId
        - extensionDuration
        - previousExpirationDate
      properties:
        programId:
          type: integer
          description: ID of the loyalty program that contains these points.
        subLedgerId:
          type: string
          description: API name of the loyalty program subledger that contains these points.
        extensionDuration:
          type: string
          description: |
            Time frame by which the expiry date extends.

            The time format is either:
            - immediate, or
            - an **integer** followed by a letter indicating the time unit.

            Examples: `immediate`, `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.

            Available units:

            - `s`: seconds
            - `m`: minutes
            - `h`: hours
            - `D`: days
            - `W`: weeks
            - `M`: months
            - `Y`: years

            You can round certain units up or down:
            - `_D` for rounding down days only. Signifies the start of the day.
            - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
          example: 12h
        affectedTransactions:
          type: array
          description: List of transactions affected by the expiry date update.
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntryExpiryDateChange'
    SetLoyaltyPointsExpiryDateEffectProps:
      type: object
      title: setLoyaltyPointsExpiryDate
      description: |
        This effect updates the expiry date of all active, pending, and unlimited point transactions to a specific date.
      example:
        programId: 5
        subLedgerId: main
        newExpiryDate: 2024-07-24T14:15:22Z
        affectedTransactions: []
      required:
        - programId
        - subLedgerId
        - newExpiryDate
      properties:
        programId:
          type: integer
          description: ID of the loyalty program that contains these points.
        subLedgerId:
          type: string
          description: API name of the loyalty program subledger that contains these points.
        newExpiryDate:
          type: string
          format: date-time
          description: The specified expiry date and time for all active and pending point transactions in the loyalty program subledger.
          example: 2024-07-24T14:15:22Z
        affectedTransactions:
          type: array
          description: List of transactions affected by the expiry date update.
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntryExpiryDateChange'
    Effect:
      allOf:
        - $ref: '#/components/schemas/EffectEntity'
        - type: object
          description: A generic effect that is fired by a triggered campaign. The props property will contain information specific to the specific effect type.
          required:
            - props
          properties:
            props:
              oneOf:
                - $ref: '#/components/schemas/AcceptCouponEffectProps'
                - $ref: '#/components/schemas/AcceptReferralEffectProps'
                - $ref: '#/components/schemas/RedeemReferralEffectProps'
                - $ref: '#/components/schemas/RejectCouponEffectProps'
                - $ref: '#/components/schemas/RejectReferralEffectProps'
                - $ref: '#/components/schemas/CouponCreatedEffectProps'
                - $ref: '#/components/schemas/ReferralCreatedEffectProps'
                - $ref: '#/components/schemas/SetDiscountEffectProps'
                - $ref: '#/components/schemas/SetDiscountPerItemEffectProps'
                - $ref: '#/components/schemas/SetDiscountPerAdditionalCostEffectProps'
                - $ref: '#/components/schemas/TriggerWebhookEffectProps'
                - $ref: '#/components/schemas/AddLoyaltyPointsEffectProps'
                - $ref: '#/components/schemas/DeductLoyaltyPointsEffectProps'
                - $ref: '#/components/schemas/ChangeLoyaltyTierLevelEffectProps'
                - $ref: '#/components/schemas/AddFreeItemEffectProps'
                - $ref: '#/components/schemas/ShowNotificationEffectProps'
                - $ref: '#/components/schemas/UpdateAttributeEffectProps'
                - $ref: '#/components/schemas/RollbackCouponEffectProps'
                - $ref: '#/components/schemas/RollbackReferralEffectProps'
                - $ref: '#/components/schemas/RollbackDiscountEffectProps'
                - $ref: '#/components/schemas/RollbackAddedLoyaltyPointsEffectProps'
                - $ref: '#/components/schemas/RollbackDeductedLoyaltyPointsEffectProps'
                - $ref: '#/components/schemas/ShowBundleMetadataEffectProps'
                - $ref: '#/components/schemas/AwardGiveawayEffectProps'
                - $ref: '#/components/schemas/WillAwardGiveawayEffectProps'
                - $ref: '#/components/schemas/ErrorEffectProps'
                - $ref: '#/components/schemas/CustomEffectProps'
                - $ref: '#/components/schemas/SetDiscountPerAdditionalCostPerItemEffectProps'
                - $ref: '#/components/schemas/ReserveCouponEffectProps'
                - $ref: '#/components/schemas/AddToAudienceEffectProps'
                - $ref: '#/components/schemas/RemoveFromAudienceEffectProps'
                - $ref: '#/components/schemas/IncreaseAchievementProgressEffectProps'
                - $ref: '#/components/schemas/RollbackIncreasedAchievementProgressEffectProps'
                - $ref: '#/components/schemas/ExtendLoyaltyPointsExpiryDateEffectProps'
                - $ref: '#/components/schemas/SetLoyaltyPointsExpiryDateEffectProps'
    ErrorSource:
      type: object
      description: |
        The source of the current error, exactly one of `pointer`, `parameter` or `line` will be defined.
      properties:
        pointer:
          type: string
          description: Pointer to the path in the payload that caused this error.
        parameter:
          type: string
          description: Query parameter that caused this error.
        line:
          type: string
          description: Line number in uploaded multipart file that caused this error. 'N/A' if unknown.
        resource:
          type: string
          description: Pointer to the resource that caused this error.
    APIError:
      type: object
      required:
        - source
        - title
      properties:
        title:
          type: string
          description: Short description of the problem.
        details:
          type: string
          description: Longer description of this specific instance of the problem.
        source:
          $ref: '#/components/schemas/ErrorSource'
    ErrorResponse:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: A message describing the error.
        errors:
          type: array
          description: An array of individual problems encountered during the request.
          items:
            $ref: '#/components/schemas/APIError'
    ErrorResponseWithStatus:
      type: object
      properties:
        message:
          type: string
        errors:
          type: array
          description: An array of individual problems encountered during the request.
          items:
            $ref: '#/components/schemas/APIError'
        StatusCode:
          type: integer
          description: The error code
    CustomerProfileEntity:
      type: object
      required:
        - id
        - created
      properties:
        id:
          type: integer
          description: The internal ID of the customer profile.
          example: 6
        created:
          type: string
          format: date-time
          description: The time the customer profile was created.
          example: 2020-06-10T09:05:27.993483Z
    NewCustomerProfile:
      type: object
      properties:
        attributes:
          type: object
          additionalProperties: true
          description: Arbitrary properties associated with this item.
          example:
            Language: english
            ShippingCountry: DE
    LoyaltyMembership:
      type: object
      required:
        - loyaltyProgramId
      properties:
        joined:
          type: string
          format: date-time
          title: Loyalty program joined at
          description: The moment in which the loyalty program was joined.
          example: 2012-03-20T14:15:22Z
        loyaltyProgramId:
          type: integer
          title: Loyalty program ID
          description: The ID of the loyalty program belonging to this entity.
          example: 323414846
    AudienceMembership:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          title: Audience ID
          description: The ID of the audience belonging to this entity.
          example: 2
        name:
          type: string
          title: Audience Name
          description: The Name of the audience belonging to this entity.
          example: Travel audience
    CustomerProfile:
      allOf:
        - $ref: '#/components/schemas/CustomerProfileEntity'
        - $ref: '#/components/schemas/IntegrationEntity'
        - $ref: '#/components/schemas/NewCustomerProfile'
        - type: object
          properties:
            accountId:
              type: integer
              title: Profile belongs to Account
              description: The ID of the Talon.One account that owns this profile.
              example: 31
            closedSessions:
              type: integer
              title: Closed sessions
              description: The total number of closed sessions. Does not include closed sessions that have been cancelled or reopened. See the [docs](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states).
              example: 3
            totalSales:
              type: number
              description: |
                The total amount of money spent by the customer **before** discounts are applied.

                The total sales amount excludes the following:
                - Cancelled or reopened sessions.
                - Returned items.
              example: 299.99
              title: Total Sales
            loyaltyMemberships:
              type: array
              deprecated: true
              description: |
                **DEPRECATED. Always returns `null`.** A list of loyalty programs joined by the customer.
              items:
                $ref: '#/components/schemas/LoyaltyMembership'
              title: Loyalty programed joined
              example: null
            audienceMemberships:
              type: array
              description: The audiences the customer belongs to.
              items:
                $ref: '#/components/schemas/AudienceMembership'
              title: Audience memberships
            lastActivity:
              type: string
              format: date-time
              title: Last activity
              description: |
                Timestamp of the most recent event received from this customer.
                This field is updated on calls that trigger the Rule Engine and that are
                not [dry requests](https://docs.talon.one/docs/dev/integration-api/dry-requests/#overlay).

                For example, [reserving a coupon](https://docs.talon.one/integration-api#tag/Coupons/operation/createCouponReservation)
                for a customer doesn't impact this field.
              example: 2020-02-08T14:15:20Z
            sandbox:
              type: boolean
              description: |
                An indicator of whether the customer is part of a sandbox or live Application. See the [docs](https://docs.talon.one/docs/product/applications/overview#application-environments).
              title: Sandbox
              example: false
          required:
            - accountId
            - closedSessions
            - totalSales
            - lastActivity
            - attributes
    LoyaltyProgramEntity:
      type: object
      required:
        - programID
      properties:
        programID:
          type: integer
          description: The ID of the loyalty program that owns this entity.
          example: 125
        programName:
          type: string
          description: The integration name of the loyalty program that owns this entity.
          example: Loyalty_program
        programTitle:
          type: string
          description: The Campaign Manager-displayed name of the loyalty program that owns this entity.
          example: Loyalty program
    UpdateLoyaltyCard:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          description: |
            Status of the loyalty card. Can be `active` or `inactive`.
          example: active
        blockReason:
          type: string
          description: |
            Reason for transferring and blocking the loyalty card.
          example: Current card lost. Customer needs a new card.
    LoyaltyCardProfileRegistration:
      type: object
      required:
        - integrationId
        - timestamp
      properties:
        integrationId:
          type: string
          maxLength: 1000
          description: Integration ID of the customer profile linked to the card.
          example: R195412
        timestamp:
          type: string
          format: date-time
          description: Timestamp the customer profile was linked to the card.
          example: 2021-09-12T10:12:42Z
    LoyaltyProgramBalance:
      type: object
      required:
        - currentBalance
        - pendingBalance
        - expiredBalance
        - spentBalance
        - tentativeCurrentBalance
      description: The balance in a Loyalty Program for some Customer.
      properties:
        currentBalance:
          type: number
          title: Current balance
          description: Sum of currently active points.
          example: 100
        pendingBalance:
          type: number
          title: Pending balance
          description: Sum of pending points.
          example: 10
        negativeBalance:
          type: number
          title: Negative balance
          description: Sum of negative points. This implies that `currentBalance` is `0`.
          example: 10
        expiredBalance:
          type: number
          deprecated: true
          title: Expired balance
          description: |
            **DEPRECATED** Value is shown as 0.
          example: 0
        spentBalance:
          type: number
          deprecated: true
          title: Spent balance
          description: |
            **DEPRECATED** Value is shown as 0.
          example: 0
        tentativeCurrentBalance:
          type: number
          title: Tentative current balance
          description: |
            The tentative points balance, reflecting the `currentBalance` and all point additions and deductions within the current open customer session. When the session is closed, the effects are applied and the `currentBalance` is updated to this value.

            **Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
          example: 100
        tentativePendingBalance:
          type: number
          title: Tentative pending balance
          description: |
            The tentative points balance, reflecting the `pendingBalance` and all point additions with a future activation date within the current open customer session. When the session is closed, the effects are applied and the `pendingBalance` is updated to this value.

            **Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
          example: 20
        tentativeNegativeBalance:
          type: number
          title: Tentative negative balance
          description: |
            The tentative negative balance after all additions and deductions from the current customer session are applied to `negativeBalance`. When the session is closed, the tentative effects are applied and `negativeBalance` is updated to this value.

            **Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
          example: 100
    Tier:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          description: The internal ID of the tier.
          example: 11
        name:
          type: string
          description: The name of the tier.
          example: bronze
        startDate:
          type: string
          format: date-time
          description: Date and time when the customer moved to this tier. This value uses the loyalty program's time zone setting.
          example: 2021-05-03T12:32:00Z07:00
        expiryDate:
          type: string
          format: date-time
          description: Date when tier level expires in the RFC3339 format (in the Loyalty Program's timezone).
          example: 2022-08-02T15:04:05Z07:00
        downgradePolicy:
          type: string
          enum:
            - one_down
            - balance_based
          description: |
            The policy that defines how customer tiers are downgraded in the loyalty program after tier reevaluation.
             - `one_down`: If the customer doesn't have enough points to stay in the current tier, they are downgraded by one tier.
             - `balance_based`: The customer's tier is reevaluated based on the amount of active points they have at the moment.
    LedgerInfo:
      allOf:
        - $ref: '#/components/schemas/LoyaltyProgramBalance'
        - type: object
          properties:
            currentTier:
              $ref: '#/components/schemas/Tier'
              description: Tier for which the ledger is eligible.
              example: bronze
            pointsToNextTier:
              type: number
              description: Points required to move up a tier.
              example: 20
            nextTierName:
              type: string
              description: |
                The name of the next higher tier level in the loyalty program.

                **Note**:
                - Returns `null` if the customer has reached the highest available tier.
                - Returns the lowest level tier name if the customer is not currently assigned to any tier.
              example: Silver
    LoyaltyCard:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/LoyaltyProgramEntity'
        - $ref: '#/components/schemas/UpdateLoyaltyCard'
        - type: object
          required:
            - identifier
            - usersPerCardLimit
          properties:
            identifier:
              $ref: '#/components/schemas/LoyaltyCardIdentifier'
            usersPerCardLimit:
              type: integer
              minimum: 0
              example: 111
              description: |
                The max amount of customer profiles that can be linked to the card. 0 means unlimited.
            profiles:
              type: array
              description: Integration IDs of the customers profiles linked to the card.
              items:
                $ref: '#/components/schemas/LoyaltyCardProfileRegistration'
            ledger:
              $ref: '#/components/schemas/LedgerInfo'
              description: Displays point balances of the card in the main ledger of the loyalty program.
            subledgers:
              type: object
              description: Displays point balances of the card in the subledgers of the loyalty program.
              additionalProperties:
                $ref: '#/components/schemas/LedgerInfo'
            modified:
              type: string
              format: date-time
              description: Timestamp of the most recent update of the loyalty card.
              example: 2021-09-12T10:12:42Z
            oldCardIdentifier:
              $ref: '#/components/schemas/LoyaltyCardIdentifier'
              description: The identifier of the card from which the points were transferred.
              example: summer-loyalty-card-0543
            newCardIdentifier:
              $ref: '#/components/schemas/LoyaltyCardIdentifier'
              description: The identifier of the card to which the points were transferred.
              example: autumn-loyalty-card-5822
            batchId:
              description: The ID of the batch in which the loyalty card was created.
              type: string
              example: wdefpov
    EntityWithTalangVisibleID:
      type: object
      required:
        - id
        - created
      properties:
        id:
          type: integer
          description: Unique ID for this entity.
          example: 4
        created:
          type: string
          format: date-time
          description: The exact moment this entity was created.
          example: 2020-06-10T09:05:27.993483Z
    UserEntity:
      type: object
      required:
        - userId
      properties:
        userId:
          type: integer
          description: The ID of the user associated with this entity.
          example: 388
    CodeGeneratorSettings:
      type: object
      properties:
        validCharacters:
          type: array
          description: |
            List of characters used to generate the random parts of a code.
          example:
            - A
            - B
            - C
            - D
            - E
            - F
            - G
            - H
            - I
            - J
            - K
            - L
            - M
            - N
            - O
            - P
            - Q
            - R
            - S
            - T
            - U
            - V
            - W
            - X
            - Y
            - Z
            - '0'
            - '1'
            - '2'
            - '3'
            - '4'
            - '5'
            - '6'
            - '7'
            - '8'
            - '9'
          items:
            type: string
        couponPattern:
          type: string
          description: |
            The pattern used to generate codes, such as coupon codes, referral codes, and loyalty cards. The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
          maxLength: 100
          minLength: 3
          pattern: ^[A-Za-z0-9._%+@#-]+$
          example: SUMMER-####-####
      additionalProperties: false
      required:
        - couponPattern
        - validCharacters
    LimitConfig:
      type: object
      required:
        - action
        - limit
        - entities
      properties:
        action:
          type: string
          description: |
            The limitable action to which this limit applies. For example:
            - `setDiscount`
            - `setDiscountEffect`
            - `redeemCoupon`
            - `createCoupon`
          example: createCoupon
        limit:
          type: number
          minimum: 0
          example: 1000
          description: The value to set for the limit.
        period:
          description: The period on which the budget limit recurs.
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
          example: yearly
        entities:
          type: array
          description: The entity that this limit applies to.
          example:
            - Coupon
          items:
            type: string
            enum:
              - Coupon
              - Referral
              - Profile
              - Identifier
              - Store
              - Session
    BaseCampaign:
      type: object
      properties:
        name:
          type: string
          title: Campaign Name
          description: A user-facing name for this campaign.
          minLength: 1
          example: Summer promotions
        description:
          type: string
          title: Campaign Description
          description: A detailed description of the campaign.
          example: Campaign for all summer 2021 promotions
        startTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become active.
          example: 2021-07-20T22:00:00Z
        endTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become inactive.
          example: 2021-09-22T22:00:00Z
        attributes:
          type: object
          description: Arbitrary properties associated with this campaign.
        state:
          type: string
          enum:
            - enabled
            - disabled
            - archived
          default: enabled
          example: enabled
          description: |
            A disabled or archived campaign is not evaluated for rules or coupons.
        activeRulesetId:
          type: integer
          description: |
            [ID of Ruleset](https://docs.talon.one/management-api#tag/Campaigns/operation/getRulesets) this
            campaign applies on customer session evaluation.
          example: 6
        tags:
          type: array
          description: A list of tags for the campaign.
          example:
            - summer
          maxItems: 50
          items:
            type: string
            minLength: 1
            maxLength: 50
        reevaluateOnReturn:
          type: boolean
          title: Reevaluate on return
          description: Indicates whether this campaign should be reevaluated when a customer returns an item.
          example: true
        features:
          type: array
          description: The features enabled in this campaign.
          example:
            - coupons
            - referrals
          items:
            type: string
            enum:
              - coupons
              - referrals
              - loyalty
              - giveaways
              - strikethrough
              - achievements
              - advancedEvents
        couponSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        referralSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        limits:
          type: array
          description: |
            The set of [budget limits](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets) for this campaign.
          items:
            $ref: '#/components/schemas/LimitConfig'
        campaignGroups:
          type: array
          description: |
            The IDs of the [campaign groups](https://docs.talon.one/docs/product/account/managing-campaign-groups) this campaign belongs to.
          example:
            - 1
            - 3
          items:
            type: integer
        type:
          type: string
          title: Type
          enum:
            - cartItem
            - advanced
          default: advanced
          example: advanced
          description: |
            The campaign type. Possible type values:
              - `cartItem`: Type of campaign that can apply effects only to cart items.
              - `advanced`: Type of campaign that can apply effects to customer sessions and cart items.
        linkedStoreIds:
          type: array
          description: |
            A list of store IDs that you want to link to the campaign.

            **Note:** Campaigns with linked store IDs will only be evaluated when there is a
            [customer session update](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
            that references a linked store.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        couponAttributes:
          type: object
          description: Arbitrary properties associated with coupons in this campaign.
      required:
        - name
        - state
        - tags
        - limits
        - features
    CampaignBudget:
      type: object
      required:
        - action
        - limit
        - counter
      properties:
        action:
          type: string
          description: |
            The limitable action to which this limit applies. For example:
            - `setDiscount`
            - `setDiscountEffect`
            - `redeemCoupon`
            - `createCoupon`
          example: createCoupon
        limit:
          type: number
          minimum: 0
          example: 1000
          description: The value to set for the limit.
        counter:
          type: number
          minimum: 0
          example: 42
          description: The number of occurrences of the limited action in the context of the campaign.
    AdditionalCampaignProperties:
      type: object
      properties:
        budgets:
          type: array
          items:
            $ref: '#/components/schemas/CampaignBudget'
          description: |
            A list of all the budgets that are defined by this campaign and their usage.

            **Note:** Budgets that are not defined do not appear in this list and their usage is
            not counted until they are defined.
        couponRedemptionCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Number of coupons redeemed in the campaign.
          example: 163
        referralRedemptionCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Number of referral codes redeemed in the campaign.
          example: 3
        discountCount:
          type: number
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total amount of discounts redeemed in the campaign.
          example: 288
        discountEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of times discounts were redeemed in this campaign.
          example: 343
        couponCreationCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of coupons created by rules in this campaign.
          example: 16
        customEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of custom effects triggered by rules in this campaign.
          example: 0
        referralCreationCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of referrals created by rules in this campaign.
          example: 8
        addFreeItemEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of times the [add free item effect](https://docs.talon.one/docs/dev/integration-api/api-effects#addfreeitem) can be triggered in this campaign.
          example: 0
        awardedGiveawaysCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of giveaways awarded by rules in this campaign.
          example: 9
        createdLoyaltyPointsCount:
          type: number
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of loyalty points created by rules in this campaign.
          example: 9
        createdLoyaltyPointsEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of loyalty point creation effects triggered by rules in this campaign.
          example: 2
        redeemedLoyaltyPointsCount:
          type: number
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of loyalty points redeemed by rules in this campaign.
          example: 8
        redeemedLoyaltyPointsEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of loyalty point redemption effects triggered by rules in this campaign.
          example: 9
        callApiEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of webhooks triggered by rules in this campaign.
          example: 0
        reservecouponEffectCount:
          type: integer
          deprecated: true
          description: |
            This property is **deprecated**. The count should be available under *budgets* property.
            Total number of reserve coupon effects triggered by rules in this campaign.
          example: 9
        lastActivity:
          type: string
          format: date-time
          example: 2022-11-10T23:00:00Z
          description: Timestamp of the most recent event received by this campaign.
        updated:
          type: string
          format: date-time
          example: 2022-10-27T15:00:00Z
          description: |
            Timestamp of the most recent update to the campaign's property. Updates to external entities used in this campaign
            are **not** registered by this property, such as collection or coupon updates.
        createdBy:
          type: string
          description: Name of the user who created this campaign if available.
          example: John Doe
        updatedBy:
          type: string
          description: Name of the user who last updated this campaign if available.
          example: Jane Doe
        templateId:
          type: integer
          description: The ID of the Campaign Template this Campaign was created from.
          example: 3
        frontendState:
          type: string
          description: The campaign state displayed in the Campaign Manager.
          enum:
            - expired
            - scheduled
            - running
            - disabled
            - archived
            - staged
          example: running
        storesImported:
          type: boolean
          description: Indicates whether the linked stores were imported via a CSV file.
          example: true
        valueMapsIds:
          type: array
          description: A list of value map IDs for the campaign.
          items:
            type: integer
          example:
            - 100
            - 215
        experimentId:
          type: integer
          description: The ID of the Experiment this Campaign is part of.
          example: 1
      required:
        - state
        - description
        - type
        - frontendState
        - storesImported
    CampaignVersions:
      type: object
      properties:
        revisionFrontendState:
          type: string
          description: The campaign revision state displayed in the Campaign Manager.
          enum:
            - revised
            - pending
          example: revised
        activeRevisionId:
          type: integer
          description: |
            ID of the revision that was last activated on this campaign.
          example: 6
        activeRevisionVersionId:
          type: integer
          description: |
            ID of the revision version that is active on the campaign.
          example: 6
        version:
          type: integer
          description: |
            Incrementing number representing how many revisions have been activated on this campaign, starts from 0 for a new campaign.
          example: 6
        currentRevisionId:
          type: integer
          description: |
            ID of the revision currently being modified for the campaign.
          example: 6
        currentRevisionVersionId:
          type: integer
          description: |
            ID of the latest version applied on the current revision.
          example: 6
        stageRevision:
          type: boolean
          description: |
            Flag for determining whether we use current revision when sending requests with staging API key.
          example: false
          default: false
    Campaign:
      allOf:
        - $ref: '#/components/schemas/EntityWithTalangVisibleID'
        - $ref: '#/components/schemas/ApplicationEntity'
        - $ref: '#/components/schemas/UserEntity'
        - $ref: '#/components/schemas/BaseCampaign'
        - $ref: '#/components/schemas/AdditionalCampaignProperties'
        - $ref: '#/components/schemas/CampaignVersions'
        - type: object
          required:
            - reevaluateOnReturn
    RuleFailureReason:
      type: object
      description: Details about why a rule failed.
      required:
        - campaignID
        - campaignName
        - rulesetID
        - ruleIndex
        - ruleName
      properties:
        campaignID:
          type: integer
          description: The ID of the campaign that contains the rule that failed.
        campaignName:
          type: string
          description: The name of the campaign that contains the rule that failed.
        rulesetID:
          type: integer
          description: The ID of the ruleset that contains the rule that failed.
        couponID:
          type: integer
          description: The ID of the coupon that was being evaluated at the time of the rule failure.
          example: 4928
        couponValue:
          type: string
          description: The code of the coupon that was being evaluated at the time of the rule failure.
        referralID:
          type: integer
          description: The ID of the referral that was being evaluated at the time of the rule failure.
        referralValue:
          type: string
          description: The code of the referral that was being evaluated at the time of the rule failure.
        ruleIndex:
          type: integer
          description: The index of the rule that failed within the ruleset.
        ruleName:
          type: string
          description: The name of the rule that failed within the ruleset.
        conditionIndex:
          type: integer
          description: The index of the condition that failed.
        effectIndex:
          type: integer
          description: The index of the effect that failed.
        details:
          type: string
          description: More details about the failure.
        evaluationGroupID:
          type: integer
          example: 3
          description: The ID of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
        evaluationGroupMode:
          type: string
          example: stackable
          description: The evaluation mode of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-
    CouponEntity:
      type: object
      required:
        - id
        - created
      properties:
        id:
          type: integer
          description: The internal ID of the coupon.
          example: 6
        created:
          type: string
          format: date-time
          description: The time the coupon was created.
          example: 2020-06-10T09:05:27.993483Z
    CampaignEntity:
      type: object
      required:
        - campaignId
      properties:
        campaignId:
          type: integer
          title: Campaign ID
          description: The ID of the campaign that owns this entity.
          example: 211
    CouponValue:
      type: object
      properties:
        value:
          type: string
          title: Coupon Code
          description: The coupon code.
          minLength: 4
          example: XMAS-20-2021
    CouponConstraints:
      type: object
      properties:
        usageLimit:
          type: integer
          minimum: 0
          maximum: 999999
          example: 100
          description: |
            The number of times the coupon code can be redeemed. `0` means unlimited redemptions but any campaign usage limits will still apply.
        discountLimit:
          type: number
          minimum: 0
          maximum: 1000000000000000
          example: 30
          description: |
            The total discount value that the code can give. Typically used to represent a gift card value.
        reservationLimit:
          type: integer
          minimum: 0
          maximum: 999999
          example: 45
          description: |
            The number of reservations that can be made with this coupon code.
        startDate:
          type: string
          format: date-time
          example: 2020-01-24T14:15:22Z
          description: Timestamp at which point the coupon becomes valid.
        expiryDate:
          type: string
          format: date-time
          example: 2023-08-24T14:15:22Z
          description: Expiration date of the coupon. Coupon never expires if this is omitted.
    CouponLimitConfigs:
      type: object
      properties:
        limits:
          type: array
          description: |
            Limits configuration for a coupon. These limits will override the limits
            set from the campaign.

            **Note:** Only usable when creating a single coupon which is not tied to a specific recipient.
            Only per-profile limits are allowed to be configured.
          items:
            $ref: '#/components/schemas/LimitConfig'
    Coupon:
      allOf:
        - $ref: '#/components/schemas/CouponEntity'
        - $ref: '#/components/schemas/CampaignEntity'
        - $ref: '#/components/schemas/CouponValue'
        - $ref: '#/components/schemas/CouponConstraints'
        - $ref: '#/components/schemas/CouponLimitConfigs'
        - type: object
          required:
            - value
            - usageCounter
            - usageLimit
          properties:
            usageCounter:
              type: integer
              title: Total coupon redemptions
              example: 10
              description: The number of times the coupon has been successfully redeemed.
            discountCounter:
              type: number
              title: Discounts Given
              description: The amount of discounts given on rules redeeming this coupon. Only usable if a coupon discount budget was set for this coupon.
              example: 10
            discountRemainder:
              type: number
              title: Coupon Discount Remainder
              description: The remaining discount this coupon can give.
              example: 5
            reservationCounter:
              type: number
              title: Number of reservations
              description: The number of times this coupon has been reserved.
              example: 1
            attributes:
              type: object
              title: Attributes of coupon
              description: Custom attributes associated with this coupon.
            referralId:
              type: integer
              title: Advocate ID
              description: The integration ID of the referring customer (if any) for whom this coupon was created as an effect.
              example: 326632952
            recipientIntegrationId:
              title: Recipient ID
              example: URNGV8294NV
              type: string
              maxLength: 1000
              description: The Integration ID of the customer that is allowed to redeem this coupon.
            importId:
              title: Import ID
              type: integer
              description: The ID of the Import which created this coupon.
              example: 4
            reservation:
              title: Reservation Type
              type: boolean
              example: false
              description: |
                Defines the reservation type:
                - `true`: The coupon can be reserved for multiple customers.
                - `false`: The coupon can be reserved only for one customer. It is a personal code.
              default: true
            batchId:
              title: Batch ID
              type: string
              description: The id of the batch the coupon belongs to.
              example: 32535-43255
            isReservationMandatory:
              title: Is reservation mandatory
              type: boolean
              example: false
              description: An indication of whether the code can be redeemed only if it has been reserved first.
              default: false
            implicitlyReserved:
              title: Is coupon implicitly reserved for all customers
              description: An indication of whether the coupon is implicitly reserved for all customers.
              type: boolean
              example: false
    ReferralConstraints:
      type: object
      properties:
        startDate:
          type: string
          format: date-time
          title: Referral code valid from
          description: Timestamp at which point the referral code becomes valid.
          example: 2020-11-10T23:00:00Z
        expiryDate:
          type: string
          format: date-time
          title: Referral code valid until
          description: Expiration date of the referral code. Referral never expires if this is omitted.
          example: 2021-11-10T23:00:00Z
        usageLimit:
          type: integer
          title: Referral code Usage Limit
          description: |
            The number of times a referral code can be used. `0` means no limit but any campaign usage limits will still apply.
          minimum: 0
          maximum: 999999
          example: 1
    NewReferral:
      allOf:
        - $ref: '#/components/schemas/ReferralConstraints'
        - type: object
          required:
            - campaignId
            - advocateProfileIntegrationId
          properties:
            campaignId:
              type: integer
              title: Referral's Campaign ID
              description: ID of the campaign from which the referral received the referral code.
              example: 78
            advocateProfileIntegrationId:
              type: string
              title: Advocate's Profile ID
              description: The Integration ID of the Advocate's Profile.
              maxLength: 1000
              example: URNGV8294NV
            friendProfileIntegrationId:
              type: string
              title: Friend's Profile ID
              description: An optional Integration ID of the Friend's Profile.
              example: BZGGC2454PA
            attributes:
              type: object
              description: Arbitrary properties associated with this item.
              example:
                channel: web
    ImportEntity:
      type: object
      properties:
        importId:
          type: integer
          description: The ID of the Import which created this referral.
          example: 4
    Referral:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewReferral'
        - $ref: '#/components/schemas/ImportEntity'
        - type: object
          required:
            - code
            - usageCounter
            - usageLimit
          properties:
            code:
              type: string
              title: Referral code
              description: The referral code.
              minLength: 4
              example: 27G47Y54VH9L
            usageCounter:
              type: integer
              title: Referral code Usages
              description: The number of times this referral code has been successfully used.
              example: 1
            batchId:
              type: string
              title: Batch ID
              description: The ID of the batch the referrals belong to.
              example: tqyrgahe
    AchievementProgress:
      type: object
      description: The current progress of the customer in the achievement.
      required:
        - status
        - progress
      properties:
        status:
          type: string
          enum:
            - inprogress
            - completed
            - expired
            - not_started
          example: completed
          description: The status of the achievement.
        progress:
          type: number
          example: 10
          description: The current progress of the customer in the achievement.
        startDate:
          format: date-time
          description: Timestamp at which the customer started the achievement.
          type: string
          example: 2024-01-01T15:04:05Z07:00
        completionDate:
          format: date-time
          description: Timestamp at which point the customer completed the achievement.
          type: string
          example: 2024-01-15T15:04:05Z07:00
        endDate:
          format: date-time
          description: Timestamp at which point the achievement ends and resets for the customer.
          type: string
          example: 2024-02-01T15:04:05Z07:00
    EventV3Entity:
      type: object
      properties:
        integrationId:
          type: string
          description: |
            The unique ID of the event. Only one event with this ID can be registered.
          minLength: 1
          example: 175KJPS947296
    AccountEntity:
      type: object
      required:
        - accountId
      properties:
        accountId:
          type: integer
          description: The ID of the account that owns this entity.
          example: 3886
    NewInternalAudience:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          minLength: 1
          description: The human-friendly display name for this audience.
          example: Travel audience
        sandbox:
          type: boolean
          description: Indicates if this is a live or sandbox Application.
          example: true
        description:
          type: string
          description: A description of the audience.
          example: Travel audience 18-27
        subscribedApplicationsIds:
          type: array
          description: A list of the IDs of the Applications that are connected to this audience.
          uniqueItems: true
          items:
            type: integer
          example:
            - 3
            - 13
    NewAudience:
      allOf:
        - $ref: '#/components/schemas/NewInternalAudience'
        - type: object
          required:
            - name
          properties:
            integration:
              type: string
              description: |
                The Talon.One-supported [3rd-party platform](https://docs.talon.one/docs/dev/technology-partners/overview) that this audience was created in.

                For example, `mParticle`, `Segment`, `Shopify`, `Braze`, or `Iterable`.

                **Note:** If you do not integrate with any of these platforms, do not use this property.
              example: mparticle
            integrationId:
              type: string
              minLength: 1
              maxLength: 1000
              description: |
                The ID of this audience in the third-party integration.

                **Note:** To create an audience that doesn't come from a 3rd party platform, do not use this property.
              example: 382370BKDB946
            createdIn3rdParty:
              type: boolean
              description: Determines if this audience is a 3rd party audience or not.
              example: false
            lastUpdate:
              type: string
              format: date-time
              description: The last time that the audience memberships changed.
              example: 2022-04-26T11:02:38Z
    Audience:
      allOf:
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewAudience'
    AttributeQuery:
      type: object
      description: Object representing a set of of attributes and their respective values.
      example:
        my_attribute_1: some value
        my_attribute_2: some other value
        my_attribute_3: some other value
    NewAttribute:
      allOf:
        - type: object
          required:
            - entity
            - name
            - title
            - type
            - description
            - suggestions
            - editable
          properties:
            entity:
              type: string
              description: The name of the entity that can have this attribute. When creating or updating the entities of a given type, you can include an `attributes` object with keys corresponding to the `name` of the custom attributes for that type.
              enum:
                - Application
                - Campaign
                - CustomerProfile
                - CustomerSession
                - CartItem
                - Coupon
                - Event
                - Giveaway
                - LoyaltyCard
                - Referral
                - Store
              example: Event
            eventType:
              type: string
              example: pageViewed
            name:
              type: string
              pattern: ^[A-Za-z]\w*$
              description: The attribute name that will be used in API requests and Talang. E.g. if `name == "region"` then you would set the region attribute by including an `attributes.region` property in your request payload.
              example: pageViewed
            title:
              type: string
              pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
              description: The human-readable name for the attribute that will be shown in the Campaign Manager. Like `name`, the combination of entity and title must also be unique.
              example: Page view event
            type:
              type: string
              enum:
                - string
                - number
                - boolean
                - time
                - (list string)
                - (list number)
                - (list time)
                - location
                - (list location)
              description: The data type of the attribute, a `time` attribute must be sent as a string that conforms to the [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) timestamp format.
              example: string
            description:
              type: string
              description: A description of this attribute.
              example: Event triggered when a customer displays a page.
            suggestions:
              type: array
              description: A list of suggestions for the attribute.
              maxItems: 50
              items:
                type: string
                minLength: 1
            hasAllowedList:
              type: boolean
              description: Whether or not this attribute has an allowed list of values associated with it.
              default: false
              example: false
            restrictedBySuggestions:
              type: boolean
              description: |
                Whether or not this attribute's value is restricted by suggestions (`suggestions` property)
                or by an allowed list of value (`hasAllowedList` property).
              default: false
              example: false
            editable:
              type: boolean
              description: Whether or not this attribute can be edited.
              example: true
            subscribedApplicationsIds:
              type: array
              description: A list of the IDs of the applications where this attribute is available.
              items:
                type: integer
              example:
                - 1
                - 4
                - 9
            subscribedCatalogsIds:
              type: array
              description: A list of the IDs of the catalogs where this attribute is available.
              items:
                type: integer
              example:
                - 2
                - 5
            allowedSubscriptions:
              type: array
              description: |
                A list of allowed subscription types for this attribute.

                **Note:** This only applies to attributes associated with the `CartItem` entity.
              example:
                - application
                - catalog
              maxItems: 2
              items:
                type: string
                enum:
                  - application
                  - catalog
    Attribute:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/NewAttribute'
        - type: object
          properties:
            eventTypeId:
              type: integer
              example: 22
    AddLoyaltyPoints:
      type: object
      description: Points to add.
      required:
        - points
      properties:
        points:
          type: number
          exclusiveMinimum: 0
          maximum: 999999999999.99
          description: Amount of loyalty points.
          example: 300
        name:
          type: string
          description: Name / reason for the point addition.
          example: Compensation
        validityDuration:
          type: string
          description: |
            The time format is either:
            - `unlimited` or,
            - an **integer** followed by one letter indicating the time unit.

            Examples: `unlimited`, `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.

            Available units:

            - `s`: seconds
            - `m`: minutes
            - `h`: hours
            - `D`: days
            - `W`: weeks
            - `M`: months
            - `Y`: years

            You can round certain units up or down:
            - `_D` for rounding down days only. Signifies the start of the day.
            - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.

            If passed, `validUntil` should be omitted.
          example: 5D
        validUntil:
          type: string
          format: date-time
          description: |
            Date and time when points should expire. The value should be provided in RFC 3339 format.
            If passed, `validityDuration` should be omitted.
          example: 2021-07-20T22:00:00Z
        pendingDuration:
          type: string
          description: |
            The amount of time before the points are considered valid.

            The time format is either:
            - `immediate` or,
            - `on_action` or,
            - an **integer** followed by one letter indicating the time unit.

            Examples: `immediate`, `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`, `on_action`.

            Available units:

            - `s`: seconds
            - `m`: minutes
            - `h`: hours
            - `D`: days
            - `W`: weeks
            - `M`: months
            - `Y`: years

            You can round certain units up or down:
            - `_D` for rounding down days only. Signifies the start of the day.
            - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
          example: 12h
        pendingUntil:
          type: string
          format: date-time
          description: |
            Date and time after the points are considered valid. The value should be provided in RFC 3339 format.
            If passed, `pendingDuration` should be omitted.
          example: 2021-07-20T22:00:00Z
        subledgerId:
          type: string
          description: ID of the subledger the points are added to. If there is no existing subledger with this ID, the subledger is created automatically.
          example: sub-123
        applicationId:
          type: integer
          description: ID of the Application that is connected to the loyalty program. It is displayed in your Talon.One deployment URL.
          example: 322
    MutableEntity:
      type: object
      required:
        - modified
      properties:
        modified:
          type: string
          format: date-time
          description: The time this entity was last modified.
          example: 2021-09-12T10:12:42Z
    AttributesMandatory:
      type: object
      description: Arbitrary settings associated with attributes.
      properties:
        campaigns:
          type: array
          items:
            type: string
          description: List of mandatory attributes for campaigns.
        coupons:
          type: array
          items:
            type: string
          description: List of mandatory attributes for campaigns.
    AttributesSettings:
      type: object
      description: Arbitrary settings associated with attributes.
      properties:
        mandatory:
          $ref: '#/components/schemas/AttributesMandatory'
    UpdateApplication:
      type: object
      properties:
        name:
          type: string
          description: The name of this application.
          minLength: 1
          example: My Application
        description:
          type: string
          description: A longer description of the application.
          example: A test Application
        timezone:
          type: string
          description: A string containing an IANA timezone descriptor.
          minLength: 1
          example: Europe/Berlin
        currency:
          type: string
          description: The default currency for new customer sessions.
          minLength: 1
          example: EUR
        caseSensitivity:
          type: string
          enum:
            - sensitive
            - insensitive-uppercase
            - insensitive-lowercase
          description: The case sensitivity behavior to check coupon codes in the campaigns of this Application.
          example: sensitive
        attributes:
          type: object
          description: Arbitrary properties associated with this campaign.
        limits:
          type: array
          description: Default limits for campaigns created in this application.
          items:
            $ref: '#/components/schemas/LimitConfig'
        defaultDiscountScope:
          type: string
          example: sessionTotal
          description: |
            The default scope to apply `setDiscount` effects on if no scope was provided with the effect.
          enum:
            - sessionTotal
            - cartItems
            - additionalCosts
        enableCascadingDiscounts:
          type: boolean
          description: Indicates if discounts should cascade for this Application.
          example: true
        enableFlattenedCartItems:
          type: boolean
          example: true
          description: |
            Indicates if cart items of quantity larger than one should be separated into different items of quantity one.
        attributesSettings:
          $ref: '#/components/schemas/AttributesSettings'
        sandbox:
          type: boolean
          description: Indicates if this is a live or sandbox Application.
          example: true
        enablePartialDiscounts:
          type: boolean
          description: Indicates if this Application supports partial discounts.
          example: false
        defaultDiscountAdditionalCostPerItemScope:
          type: string
          description: |
            The default scope to apply `setDiscountPerItem` effects on if no scope was provided with the effect.
          example: price
          enum:
            - price
            - itemTotal
            - additionalCosts
        defaultEvaluationGroupId:
          type: integer
          description: The ID of the default campaign evaluation group to which new campaigns will be added unless a different group is selected when creating the campaign.
          example: 3
        defaultCartItemFilterId:
          type: integer
          description: The ID of the default Cart-Item-Filter for this application.
          example: 3
        enableCampaignStateManagement:
          type: boolean
          description: |
            Indicates whether the campaign staging and revisions feature is enabled for the Application.

            **Important:** After this feature is enabled, it cannot be disabled.
          example: false
      required:
        - name
        - timezone
        - currency
    BaseLoyaltyProgram:
      type: object
      properties:
        title:
          type: string
          description: The display title for the Loyalty Program.
          example: Point collection
        description:
          type: string
          description: Description of our Loyalty Program.
          example: Customers collect 10 points per 1$ spent
        subscribedApplications:
          type: array
          description: A list containing the IDs of all applications that are subscribed to this Loyalty Program.
          example:
            - 132
            - 97
          items:
            type: integer
        defaultValidity:
          type: string
          description: |
            The default duration after which new loyalty points should expire. Can be 'unlimited' or a specific time.
            The time format is a number followed by one letter indicating the time unit, like '30s', '40m', '1h', '5D', '7W', or 10M'. These rounding suffixes are also supported:
            - '_D' for rounding down. Can be used as a suffix after 'D', and signifies the start of the day.
            - '_U' for rounding up. Can be used as a suffix after 'D', 'W', and 'M', and signifies the end of the day, week, and month.
          example: 2W_U
        defaultPending:
          type: string
          description: |
            The default duration of the pending time after which points should be valid. Accepted values: 'immediate', 'on_action' or a specific time.
            The time format is a number followed by one letter indicating the time unit, like '30s', '40m', '1h', '5D', '7W', or 10M'. These rounding suffixes are also supported:
            - '_D' for rounding down. Can be used as a suffix after 'D', and signifies the start of the day.
            - '_U' for rounding up. Can be used as a suffix after 'D', 'W', and 'M', and signifies the end of the day, week, and month.
          example: immediate
        allowSubledger:
          type: boolean
          description: Indicates if this program supports subledgers inside the program.
          example: false
        usersPerCardLimit:
          type: integer
          minimum: 0
          example: 111
          description: |
            The max amount of user profiles with whom a card can be shared. This can be set to 0 for no limit.
            This property is only used when `cardBased` is `true`.
        sandbox:
          type: boolean
          description: Indicates if this program is a live or sandbox program. Programs of a given type can only be connected to Applications of the same type.
          title: Sandbox
          example: true
        programJoinPolicy:
          type: string
          enum:
            - not_join
            - points_activated
            - points_earned
          description: |
            The policy that defines when the customer joins the loyalty program.
              - `not_join`: The customer does not join the loyalty program but can still earn and spend loyalty points.

                 **Note**: The customer does not have a program join date.
              - `points_activated`: The customer joins the loyalty program only when their earned loyalty points become active for the first time.
              - `points_earned`: The customer joins the loyalty program when they earn loyalty points for the first time.
        tiersExpirationPolicy:
          type: string
          enum:
            - tier_start_date
            - program_join_date
            - customer_attribute
            - absolute_expiration
          description: |
            The policy that defines how tier expiration, used to reevaluate the customer's current tier, is determined.
             - `tier_start_date`: The tier expiration is relative to when the customer joined the current tier.
             - `program_join_date`: The tier expiration is relative to when the customer joined the loyalty program.
             - `customer_attribute`: The tier expiration is determined by a custom customer attribute.
             - `absolute_expiration`: The tier is reevaluated at the start of each tier cycle. For this policy, it is required to provide a `tierCycleStartDate`.
        tierCycleStartDate:
          type: string
          format: date-time
          description: |
            Timestamp at which the tier cycle starts for all customers in the loyalty program.

            **Note**: This is only required when the tier expiration policy is set to `absolute_expiration`.
          example: 2021-09-12T10:12:42Z
        tiersExpireIn:
          type: string
          description: |
            The amount of time after which the tier expires and is reevaluated.

            The time format is an **integer** followed by one letter indicating the time unit.
            Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.

            Available units:

            - `s`: seconds
            - `m`: minutes
            - `h`: hours
            - `D`: days
            - `W`: weeks
            - `M`: months
            - `Y`: years

            You can round certain units up or down:
            - `_D` for rounding down days only. Signifies the start of the day.
            - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
          example: 27W_U
        tiersDowngradePolicy:
          type: string
          enum:
            - one_down
            - balance_based
          description: |
            The policy that defines how customer tiers are downgraded in the loyalty program after tier reevaluation.
             - `one_down`: If the customer doesn't have enough points to stay in the current tier, they are downgraded by one tier.
             - `balance_based`: The customer's tier is reevaluated based on the amount of active points they have at the moment.
        cardCodeSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        returnPolicy:
          type: string
          enum:
            - only_pending
            - within_balance
            - unlimited
          description: |
            The policy that defines the rollback of points in case of a partially returned, cancelled, or reopened [customer session](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
            - `only_pending`: Only pending points can be rolled back.
            - `within_balance`: Available active points can be rolled back if there aren't enough pending points. The active balance of the customer cannot be negative.
            - `unlimited`: Allows negative balance without any limit.
    NewLoyaltyTier:
      type: object
      description: A tier in a loyalty program.
      required:
        - name
        - minPoints
      properties:
        name:
          type: string
          description: The name of the tier.
          example: Gold
        minPoints:
          type: number
          minimum: 0
          maximum: 999999999999.99
          description: The minimum amount of points required to enter the tier.
          example: 300
    LoyaltyTier:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/LoyaltyProgramEntity'
        - $ref: '#/components/schemas/NewLoyaltyTier'
    LoyaltyProgram:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/BaseLoyaltyProgram'
        - type: object
          description: A Loyalty Program
          required:
            - id
            - name
            - title
            - description
            - accountID
            - defaultValidity
            - defaultPending
            - subscribedApplications
            - allowSubledger
            - timezone
            - cardBased
            - sandbox
          properties:
            id:
              type: integer
              description: The ID of loyalty program.
              example: 139
            accountID:
              type: integer
              description: The ID of the Talon.One account that owns this program.
              example: 1
            name:
              type: string
              description: The internal name for the Loyalty Program. This is an immutable value.
              example: my_program
            tiers:
              type: array
              description: The tiers in this loyalty program.
              items:
                $ref: '#/components/schemas/LoyaltyTier'
              example:
                - name: Gold
                  minPoints: 300
                  id: 3
                  created: 2021-06-10T09:05:27.993483Z
                  programID: 139
                - name: Silver
                  minPoints: 200
                  id: 2
                  created: 2021-06-10T09:04:59.355258Z
                  programID: 139
                - name: Bronze
                  minPoints: 100
                  id: 1
                  created: 2021-06-10T09:04:39.355258Z
                  programID: 139
            timezone:
              type: string
              description: A string containing an IANA timezone descriptor.
              example: Europe/Berlin
              minLength: 1
            cardBased:
              type: boolean
              description: |
                Defines the type of loyalty program:
                - `true`: the program is a card-based.
                - `false`: the program is profile-based.
              default: false
              example: true
            canUpdateTiers:
              type: boolean
              description: |
                `True` if the tier definitions can be updated.
              default: false
              example: true
            canUpdateTierExpirationPolicy:
              type: boolean
              description: |
                `True` if the tier expiration policy can be updated.
              example: true
            canUpgradeToAdvancedTiers:
              type: boolean
              description: |
                `True` if the program can be upgraded to use the `tiersExpireIn` and `tiersDowngradePolicy` properties.
              default: false
              example: true
            canUpdateSubledgers:
              type: boolean
              description: |
                `True` if the `allowSubledger` property can be updated in the loyalty program.
              default: false
              example: true
    Application:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/UpdateApplication'
        - type: object
          required:
            - loyaltyPrograms
          properties:
            loyaltyPrograms:
              type: array
              description: An array containing all the loyalty programs to which this application is subscribed.
              items:
                $ref: '#/components/schemas/LoyaltyProgram'
    AudienceIntegrationID:
      type: object
      properties:
        integrationId:
          type: string
          minLength: 1
          maxLength: 1000
          description: The ID of this audience in the third-party integration.
          example: 382370BKDB946
    AchievementProgressWithDefinition:
      allOf:
        - $ref: '#/components/schemas/AchievementProgress'
        - type: object
          required:
            - achievementId
            - name
            - title
            - description
            - achievementRecurrencePolicy
            - achievementActivationPolicy
            - campaignId
          properties:
            achievementId:
              type: integer
              example: 3
              description: The internal ID of the achievement.
            name:
              type: string
              pattern: ^[a-zA-Z]\w+$
              example: FreeCoffee10Orders
              maxLength: 1000
              minLength: 1
              description: |
                The internal name of the achievement used in API requests.
            title:
              type: string
              description: The display name of the achievement in the Campaign Manager.
              example: 50% off on 50th purchase.
            description:
              type: string
              format: string
              description: The description of the achievement in the Campaign Manager.
              example: 50% off for every 50th purchase in a year.
            campaignId:
              type: integer
              description: The ID of the campaign the achievement belongs to.
              example: 3
            target:
              type: number
              example: 10
              description: The required number of actions or the transactional milestone to complete the achievement.
            achievementRecurrencePolicy:
              type: string
              enum:
                - no_recurrence
                - on_expiration
                - on_completion
              example: no_recurrence
              description: |
                The policy that determines if and how the achievement recurs.
                - `no_recurrence`: The achievement can be completed only once.
                - `on_expiration`: The achievement resets after it expires and becomes available again.
                - `on_completion`: When the customer progress status reaches `completed`, the achievement resets and becomes available again.
            achievementActivationPolicy:
              type: string
              enum:
                - user_action
                - fixed_schedule
              example: fixed_schedule
              description: |
                The policy that determines how the achievement starts, ends, or resets.
                - `user_action`: The achievement ends or resets relative to when the customer started the achievement.
                - `fixed_schedule`: The achievement starts, ends, or resets for all customers following a fixed schedule.
            achievementFixedStartDate:
              type: string
              format: date-time
              example: 2024-01-15T15:04:05Z07:00
              description: |
                The achievement's start date when `achievementActivationPolicy` is equal to `fixed_schedule`.

                **Note:** It is an RFC3339 timestamp string.
            achievementEndDate:
              type: string
              format: date-time
              example: 2024-02-15T15:04:05Z07:00
              description: |
                The achievement's end date. If defined, customers cannot participate in the achievement after this date.

                **Note:** It is an RFC3339 timestamp string.
            achievementAllowRollbackAfterCompletion:
              type: boolean
              description: When `true`, customer progress can be rolled back in completed achievements.
              example: false
    TimePoint:
      type: object
      required:
        - hour
        - minute
        - second
      description: |
        The absolute duration after which the achievement ends and resets for a particular customer profile.

        **Note**: The duration follows the time zone of the Application this achievement belongs to.
      properties:
        month:
          type: integer
          minimum: 1
          maximum: 12
          description: |
            The achievement ends and resets in this month.

            **Note**: Only applicable if the period is set to `Y`.
          example: 11
        dayOfMonth:
          type: integer
          minimum: 1
          maximum: 31
          description: |
            The achievement ends and resets on this day of the month.

            **Note**: Only applicable if the period is set to `Y` or `M`.
          example: 23
        dayOfWeek:
          type: integer
          minimum: 1
          maximum: 7
          description: |
            The achievement ends and resets on this day of the week. `1` represents `Monday` and `7` represents `Sunday`.

            **Note**: Only applicable if the period is set to `W`.
        hour:
          type: integer
          description: The achievement ends and resets at this hour.
          example: 23
        minute:
          type: integer
          description: The achievement ends and resets at this minute.
          example: 59
        second:
          type: integer
          description: The achievement ends and resets at this second.
          example: 59
      example:
        month: 11
        dayOfMonth: 23
        hour: 23
        minute: 59
        second: 59
    AchievementBase:
      type: object
      properties:
        name:
          type: string
          pattern: ^[a-zA-Z]\w+$
          example: Order50Discount
          maxLength: 1000
          minLength: 1
          description: |
            The internal name of the achievement used in API requests.

            **Note**: The name should start with a letter. This cannot be changed after the achievement has been created.
        title:
          type: string
          description: The display name for the achievement in the Campaign Manager.
          example: 50% off on 50th purchase.
        description:
          type: string
          format: string
          description: A description of the achievement.
          example: 50% off for every 50th purchase in a year.
        target:
          type: number
          description: The required number of actions or the transactional milestone to complete the achievement.
          example: 50
        period:
          type: string
          description: |
            The relative duration after which the achievement ends and resets for a particular customer profile.

            **Note**: The `period` does not start when the achievement is created.

            The period is a **positive real number** followed by one letter indicating the time unit.

            Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.

            Available units:

            - `s`: seconds
            - `m`: minutes
            - `h`: hours
            - `D`: days
            - `W`: weeks
            - `M`: months
            - `Y`: years

            You can also round certain units down to the beginning of period and up to the end of period.:
            - `_D` for rounding down days only. Signifies the start of the day.
            Example: `30D_D`
            - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
            Example: `23W_U`

            **Note**: You can either use the round down and round up option or set an absolute period.
          example: 1Y
        periodEndOverride:
          $ref: '#/components/schemas/TimePoint'
          deprecated: true
        recurrencePolicy:
          type: string
          enum:
            - no_recurrence
            - on_expiration
            - on_completion
          example: no_recurrence
          description: |
            The policy that determines if and how the achievement recurs.
            - `no_recurrence`: The achievement can be completed only once.
            - `on_expiration`: The achievement resets after it expires and becomes available again.
            - `on_completion`: When the customer progress status reaches `completed`, the achievement resets and becomes available again.
        activationPolicy:
          type: string
          enum:
            - user_action
            - fixed_schedule
          example: fixed_schedule
          description: |
            The policy that determines how the achievement starts, ends, or resets.
            - `user_action`: The achievement ends or resets relative to when the customer started the achievement.
            - `fixed_schedule`: The achievement starts, ends, or resets for all customers following a fixed schedule.
        fixedStartDate:
          type: string
          format: date-time
          example: 2024-01-15T15:04:05Z07:00
          description: |
            The achievement's start date when `activationPolicy` is set to `fixed_schedule`.

            **Note:** It must be an RFC3339 timestamp string.
        endDate:
          type: string
          format: date-time
          example: 2024-02-15T15:04:05Z07:00
          description: |
            The achievement's end date. If defined, customers cannot participate in the achievement after this date.

            **Note:** It must be an RFC3339 timestamp string.
        allowRollbackAfterCompletion:
          type: boolean
          description: When `true`, customer progress can be rolled back in completed achievements.
          example: false
    CreateAchievement:
      allOf:
        - $ref: '#/components/schemas/AchievementBase'
        - type: object
          required:
            - name
            - title
            - description
            - target
    LoyaltyBalance:
      type: object
      description: Point balance of a ledger in the Loyalty Program.
      properties:
        activePoints:
          type: number
          title: Current Balance
          description: Total amount of points awarded to this customer and available to spend.
          example: 286
        pendingPoints:
          type: number
          title: Total pending points
          description: Total amount of points awarded to this customer but not available until their start date.
          example: 50
        spentPoints:
          type: number
          title: Total spent points
          description: Total amount of points already spent by this customer.
          example: 150
        expiredPoints:
          type: number
          title: Total expired points
          description: Total amount of points awarded but never redeemed. They cannot be used anymore.
          example: 286
        negativePoints:
          type: number
          title: Current negative balance
          description: Total amount of negative points. This implies that `activePoints` is `0`.
          example: 286
    ProjectedTier:
      type: object
      required:
        - projectedActivePoints
      properties:
        projectedActivePoints:
          type: number
          description: The active points of the customer when their current tier expires.
          example: 198
        stayInTierPoints:
          type: number
          description: |
            The number of points the customer needs to stay in the current tier.

            **Note**: This is included in the response when the customer is projected to be downgraded.
          example: 2
        projectedTierName:
          type: string
          description: The name of the tier the user will enter once their current tier expires.
          example: Tier 1
    LoyaltyBalanceWithTier:
      allOf:
        - $ref: '#/components/schemas/LoyaltyBalance'
        - type: object
          properties:
            currentTier:
              $ref: '#/components/schemas/Tier'
              description: Customer's current tier.
              example: bronze
            projectedTier:
              $ref: '#/components/schemas/ProjectedTier'
            pointsToNextTier:
              type: number
              description: The number of points required to move up a tier.
              example: 20
            nextTierName:
              type: string
              description: |
                The name of the next higher tier level in the loyalty program.

                **Note**:
                - Returns `null` if the customer has reached the highest available tier.
                - Returns the lowest level tier name if the customer is not currently assigned to any tier.
              example: Silver
    LoyaltyBalancesWithTiers:
      type: object
      description: List of loyalty balances for a ledger and its subledgers.
      properties:
        balance:
          $ref: '#/components/schemas/LoyaltyBalanceWithTier'
          title: Loyalty points balance of a ledger
        subledgerBalances:
          type: object
          description: Map of the loyalty balances of the subledgers of a ledger.
          additionalProperties:
            $ref: '#/components/schemas/LoyaltyBalanceWithTier'
          example:
            mysubledger:
              activePoints: 286
              pendingPoints: 50
              spentPoints: 150
              expiredPoints: 25
              negativePoints: 0
    UpdateLoyaltyCardRequest:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          description: |
            Status of the loyalty card. Can be `active` or `inactive`.
          example: active
    LoyaltyLedgerEntryFlags:
      type: object
      description: A map of flags providing additional details about the entry.
      properties:
        createsNegativeBalance:
          type: boolean
          description: Set to true if the entry creates negative balance.
    LedgerTransactionLogEntryIntegrationAPI:
      type: object
      description: Log entry for a given loyalty profile transaction.
      required:
        - transactionUUID
        - created
        - programId
        - type
        - name
        - startDate
        - expiryDate
        - subledgerId
        - amount
        - id
      properties:
        transactionUUID:
          type: string
          description: Unique identifier of the transaction in the UUID format.
          example: ce59f12a-f53b-4014-a745-636d93f2bd3f
        created:
          type: string
          format: date-time
          description: Date and time the loyalty transaction occurred.
          example: 2022-01-02T15:04:05Z07:00
        programId:
          type: integer
          description: ID of the loyalty program.
          example: 324
        customerSessionId:
          type: string
          description: ID of the customer session where the transaction occurred.
          maxLength: 255
          example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
        type:
          type: string
          enum:
            - addition
            - subtraction
          description: |
            Type of transaction. Possible values:
              - `addition`: Signifies added points.
              - `subtraction`: Signifies deducted points.
          maxLength: 255
          example: addition
        name:
          type: string
          description: Name or reason of the loyalty ledger transaction.
          maxLength: 255
          example: Reward 10% points of a purchase's current total
        startDate:
          type: string
          description: |
            When points become active. Possible values:
              - `immediate`: Points are immediately active.
              - `on_action`: Points become active based on the customer's action.
              - a timestamp value: Points become active at a given date and time.
          maxLength: 64
          example: 2022-01-02T15:04:05Z07:00
        expiryDate:
          type: string
          description: |
            Date when points expire. Possible values are:
              - `unlimited`: Points have no expiration date.
              - `timestamp value`: Points expire on the given date.
          example: 2022-08-02T15:04:05Z07:00
        subledgerId:
          type: string
          description: ID of the subledger.
          maxLength: 64
          example: sub-123
        amount:
          type: number
          description: Amount of loyalty points added or deducted in the transaction.
          example: 10.25
        id:
          type: integer
          description: ID of the loyalty ledger transaction.
          example: 123
        rulesetId:
          type: integer
          description: The ID of the ruleset containing the rule that triggered this effect.
          example: 11
        ruleName:
          type: string
          description: The name of the rule that triggered this effect.
          example: Add 2 points
        flags:
          $ref: '#/components/schemas/LoyaltyLedgerEntryFlags'
          description: The flags of the transaction, when applicable. The `createsNegativeBalance`  flag indicates whether the transaction results in a negative balance.
        validityDuration:
          type: string
          description: |
            The duration for which the points remain active, relative to the  activation date.

            **Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
          example: 30D
    IdentifiableEntity:
      type: object
      required:
        - id
      properties:
        id:
          type: integer
          description: Unique ID for this entity. Not to be confused with the Integration ID, which is set by your integration layer and used in most endpoints.
          example: 6
    UpdateCampaign:
      type: object
      properties:
        name:
          type: string
          title: Campaign Name
          description: A user-facing name for this campaign.
          minLength: 1
          example: Summer promotions
        description:
          type: string
          title: Campaign Description
          description: A detailed description of the campaign.
          example: Campaign for all summer 2021 promotions
        startTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become active.
          example: 2021-07-20T22:00:00Z
        endTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become inactive.
          example: 2021-10-01T02:00:00Z
        attributes:
          type: object
          description: Arbitrary properties associated with this campaign.
          example:
            myattribute: 20
        state:
          type: string
          enum:
            - enabled
            - disabled
            - archived
          default: enabled
          example: disabled
          description: |
            A disabled or archived campaign is not evaluated for rules or coupons.
        activeRulesetId:
          type: integer
          description: |
            [ID of Ruleset](https://docs.talon.one/management-api#tag/Campaigns/operation/getRulesets) this
            campaign applies on customer session evaluation.
          example: 2
        tags:
          type: array
          description: A list of tags for the campaign.
          maxItems: 50
          example:
            - Summer
            - Shoes
          items:
            type: string
            minLength: 1
            maxLength: 50
        reevaluateOnReturn:
          type: boolean
          title: Reevaluate on return
          description: Indicates whether this campaign should be reevaluated when a customer returns an item.
          example: true
        features:
          type: array
          description: A list of features for the campaign.
          items:
            type: string
            enum:
              - coupons
              - referrals
              - loyalty
              - giveaways
              - strikethrough
              - achievements
              - advancedEvents
          example:
            - coupons
            - loyalty
        couponSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        referralSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        limits:
          type: array
          description: The set of limits that will operate for this campaign.
          items:
            $ref: '#/components/schemas/LimitConfig'
        campaignGroups:
          type: array
          description: |
            The IDs of the [campaign groups](https://docs.talon.one/docs/product/account/account-settings/managing-campaign-groups) this campaign belongs to.
          example:
            - 1
            - 3
          items:
            type: integer
        evaluationGroupId:
          type: integer
          example: 2
          description: The ID of the campaign evaluation group the campaign belongs to.
        type:
          type: string
          enum:
            - cartItem
            - advanced
          default: advanced
          example: advanced
          description: |
            The campaign type. Possible type values:
              - `cartItem`: Type of campaign that can apply effects only to cart items.
              - `advanced`: Type of campaign that can apply effects to customer sessions and cart items.
        linkedStoreIds:
          type: array
          description: |
            A list of store IDs that you want to link to the campaign.

            > [!note] **Note**
            > - Campaigns with linked store IDs will only be evaluated when there is a
            >   [customer session update](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
            >   that references a linked store.
            > - If you linked stores to the campaign by uploading a CSV file, you cannot use this property and it should be empty.
            > - Use of this property is limited to 50 stores. To link more than 50 stores, upload them via a CSV file.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        couponAttributes:
          type: object
          description: Arbitrary properties associated with coupons in this campaign.
      required:
        - name
        - tags
        - limits
        - features
    CampaignCopy:
      type: object
      required:
        - applicationIds
      properties:
        name:
          type: string
          description: Name of the copied campaign (Defaults to "Copy of original campaign name").
          example: Copy of Summer promotions
        applicationIds:
          type: array
          description: Application IDs of the applications to which a campaign should be copied to.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        description:
          type: string
          title: Campaign Description
          description: A detailed description of the campaign.
          example: Campaign for all summer 2021 promotions
        startTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become active.
          example: 2021-06-01T09:00:27.993483Z
        endTime:
          type: string
          format: date-time
          description: Timestamp when the campaign will become inactive.
          example: 2021-09-10T01:00:00.993483Z
        tags:
          type: array
          description: A list of tags for the campaign.
          maxItems: 50
          items:
            type: string
            minLength: 1
            maxLength: 50
          example:
            - Summer
            - Shoes
        evaluationGroupId:
          type: integer
          example: 2
          description: The ID of the campaign evaluation group the campaign belongs to.
    FuncArgDef:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - string
            - boolean
            - number
            - time
            - (list string)
            - (list number)
          description: The type of value this argument expects.
          minLength: 1
        description:
          type: string
          description: A campaigner-friendly description of the argument, this will also be shown in the rule editor.
    TemplateArgDef:
      allOf:
        - $ref: '#/components/schemas/FuncArgDef'
        - type: object
          required:
            - ui
            - title
          properties:
            title:
              type: string
              description: A campaigner friendly name for the argument, this will be shown in the rule editor.
              minLength: 1
            ui:
              type: object
              description: Arbitrary metadata that may be used to render an input for this argument.
            key:
              type: string
              description: The identifier for the associated value within the JSON object.
            picklistID:
              type: integer
              description: ID of the picklist linked to a template.
            restrictedByPicklist:
              type: boolean
              description: Whether or not this attribute's value is restricted by picklist (`picklist` property)
    NewWebhook:
      type: object
      required:
        - title
        - verb
        - url
        - headers
        - params
        - draft
        - enabled
        - applicationIds
      properties:
        applicationIds:
          type: array
          description: |
            The IDs of the Applications in which this webhook is available.
            An empty array means the webhook is available in `All Applications`.
          items:
            type: integer
        title:
          type: string
          pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
          description: Name or title for this webhook.
          example: Send message
        description:
          type: string
          description: A description of the webhook.
          example: A webhook to send a coupon to the user.
        draft:
          type: boolean
          description: Indicates if the webhook is a draft.
          example: false
        verb:
          type: string
          enum:
            - POST
            - PUT
            - GET
            - DELETE
            - PATCH
          description: API method for this webhook.
          example: POST
        url:
          type: string
          description: API URL (supports templating using parameters) for this webhook.
          example: www.my-company.com/my-endpoint-name
        headers:
          type: array
          description: List of API HTTP headers for this webhook.
          items:
            type: string
            pattern: ^([^:,]*):([^]*|[^,]*)$
          example:
            - '{"Authorization": "Basic bmF2ZWVua3VtYXIU="}'
            - '{"Content-Type": "application/json"}'
        payload:
          type: string
          description: API payload (supports templating using parameters) for this webhook.
          example: |-
            {
            	"message": "${message}"
            }
        params:
          type: array
          description: Array of template argument definitions.
          items:
            $ref: '#/components/schemas/TemplateArgDef'
          example: []
        enabled:
          type: boolean
          description: Enables or disables webhook from showing in the Rule Builder.
          example: true
        authenticationId:
          type: integer
          description: The ID of the credential that this webhook is using.
          example: 1
    Webhook:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/NewWebhook'
    LabelTargetNone:
      type: object
      description: Represents the target type when no entity is selected.
      properties:
        type:
          type: string
          enum:
            - NONE
      required:
        - type
    AudienceReference:
      allOf:
        - type: object
          required:
            - id
          properties:
            id:
              type: integer
              description: The ID of the audience.
            integration:
              type: string
              description: The third-party integration of the audience.
        - $ref: '#/components/schemas/AudienceIntegrationID'
    LabelTargetAudience:
      type: object
      description: |
        Represents the targeted audience.
      properties:
        type:
          type: string
          enum:
            - AUDIENCE
        audience:
          $ref: '#/components/schemas/AudienceReference'
      required:
        - type
        - audience
    LabelTarget:
      type: object
      oneOf:
        - $ref: '#/components/schemas/LabelTargetNone'
        - $ref: '#/components/schemas/LabelTargetAudience'
    CampaignSearch:
      type: object
      required:
        - attributes
      properties:
        attributes:
          type: object
          description: Properties to match against a campaign. All provided attributes will be exactly matched against campaign attributes.
    Binding:
      type: object
      required:
        - name
        - expression
      properties:
        name:
          type: string
          description: A descriptive name for the value to be bound.
          example: Discount percentage
        type:
          type: string
          description: |
            The kind of binding. Possible values are:
            - `bundle`
            - `cartItemFilter`
            - `subledgerBalance`
            - `templateParameter`
          example: templateParameter
        expression:
          type: array
          description: |
            A Talang expression that is evaluated, and its result is bound to the name of
            the binding. The first element must be one of the functions or operators supported
            by Talang, followed by its arguments. The arguments can be strings, numbers, or
            nested expressions. For example:
            - `["list", "10014", "10015"]` calls the `list` function to build a list of strings.
            - `["+", 2, 0]` uses the `+` operator to add two numbers.
          example:
            - identity
            - 10
          items: {}
        valueType:
          type: string
          description: |
            The data type of the value. One of the following:
            - `string`
            - `number`
            - `boolean`
          example: number
        minValue:
          type: number
          description: The minimum value allowed for this placeholder.
          example: 0
        maxValue:
          type: number
          description: The maximum value allowed for this placeholder.
          example: 19.9
        attributeId:
          type: integer
          title: Attribute ID
          description: Identifier of the attribute attached to the placeholder.
          example: 100
        description:
          type: string
          description: Description of the placeholder field and its value in the template. This text can be shown when creating campaigns from this template.
          example: The percentage discount applied to the cart total.
    Rule:
      type: object
      required:
        - title
        - condition
        - effects
      properties:
        id:
          type: string
          format: uuid
          description: A unique identifier for the rule.
          example: 7fa800a8-ac8d-4792-85dc-c4650dcc8f23
        parentId:
          type: string
          format: uuid
          description: The ID of the rule that was copied to create this rule.
          example: 7fa800a8-ac8d-4792-85dc-c4650dcc8f23
        title:
          type: string
          description: A short description of the rule.
          example: Give discount via coupon
        description:
          type: string
          description: A longer, more detailed description of the rule.
          example: Creates a discount when a coupon is valid
        bindings:
          type: array
          description: An array that provides objects with variable names (name) and talang expressions to whose result they are bound (expression) during rule evaluation. The order of the evaluation is decided by the position in the array.
          items:
            $ref: '#/components/schemas/Binding'
        condition:
          type: array
          description: A Talang expression that will be evaluated in the context of the given event.
          minItems: 1
          example:
            - and
            - - couponValid
          items: {}
        effects:
          type: array
          description: An array of effectful Talang expressions in arrays that will be evaluated when a rule matches.
          items:
            type: array
            items: {}
          example:
            - catch
            - - noop
            - - setDiscount
              - 10% off
              - - '*'
                - - .
                  - Session
                  - Total
                - - /
                  - 10
                  - 100
    NewRuleset:
      type: object
      required:
        - rules
        - bindings
      properties:
        rules:
          type: array
          description: Set of rules to apply.
          items:
            $ref: '#/components/schemas/Rule'
        strikethroughRules:
          type: array
          description: Set of rules to apply for strikethrough.
          items:
            $ref: '#/components/schemas/Rule'
        bindings:
          type: array
          description: An array that provides objects with variable names (name) and talang expressions to whose result they are bound (expression) during rule evaluation. The order of the evaluation is decided by the position in the array.
          items:
            $ref: '#/components/schemas/Binding'
          example: []
        rbVersion:
          type: string
          description: The version of the rulebuilder used to create this ruleset.
          example: v2
        activate:
          type: boolean
          description: Indicates whether this created ruleset should be activated for the campaign that owns it.
          example: true
    Ruleset:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/UserEntity'
        - $ref: '#/components/schemas/NewRuleset'
        - type: object
          properties:
            campaignId:
              type: integer
              title: Campaign ID
              description: The ID of the campaign that owns this entity.
              example: 320
            templateId:
              type: integer
              title: Campaign Template ID
              description: The ID of the campaign template that owns this entity.
              example: 3
            activatedAt:
              type: string
              format: date-time
              description: Timestamp indicating when this Ruleset was activated.
    RuleV2:
      type: object
      title: RuleV2
      description: Shared fields common to all V2 rule types.
      required:
        - title
      properties:
        id:
          type: string
          description: Unique identifier of the rule.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        parentId:
          type: string
          description: ID of the parent rule, if any.
        title:
          type: string
          description: A short description of the rule.
          example: 10% off for loyalty members
        description:
          type: string
          description: A longer description of the rule.
    BaseBlock:
      type: object
      title: BaseBlock
      description: Common properties shared by all block types.
      required:
        - id
        - type
      properties:
        id:
          type: string
          description: Unique identifier for this block.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type:
          type: string
          description: Identifies the block variant and determines which additional properties are present in it.
        tags:
          type: array
          description: Semantic labels attached to this block.
          items:
            type: string
    PromotionBlock:
      description: Describes a part of the logic of the rule.
      oneOf:
        - $ref: '#/components/schemas/PromotionGroupBlock'
        - $ref: '#/components/schemas/PassthroughBlock'
      discriminator:
        propertyName: type
        mapping:
          group: '#/components/schemas/PromotionGroupBlock'
          passthrough: '#/components/schemas/PassthroughBlock'
    PromotionGroupBlock:
      allOf:
        - $ref: '#/components/schemas/BaseBlock'
        - type: object
          title: PromotionGroupBlock
          description: A structural combinator block that groups child promotion blocks using a logical operator. Evaluates to true when its operator condition is satisfied across all child blocks.
          required:
            - operator
            - blocks
          properties:
            operator:
              type: string
              enum:
                - all
                - atLeastOne
                - none
              description: Logical operator applied across child blocks. `all` requires every child to pass, `atLeastOne` requires at least one, `none` requires all to fail.
            blocks:
              type: array
              description: Child blocks evaluated according to the operator.
              items:
                $ref: '#/components/schemas/PromotionBlock'
            onFailure:
              type: array
              description: Promotion blocks evaluated when this block fails or returns false.
              items:
                $ref: '#/components/schemas/PromotionBlock'
            onError:
              type: object
              description: Named error handlers evaluated when a specific error occurs.
              additionalProperties:
                type: array
                items:
                  $ref: '#/components/schemas/PromotionBlock'
    PassthroughBlock:
      type: object
      title: PassthroughBlock
      description: A block representing a Talang expression that could not be mapped to a typed block. The expression is preserved in its raw Talang array form for diagnostic and round-trip purposes.
      required:
        - id
        - type
        - expression
      properties:
        id:
          type: string
          description: Unique identifier for this block.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        type:
          type: string
          enum:
            - passthrough
          description: The type discriminator for this block.
        expression:
          type: array
          description: The raw Talang expression as an array. The first element is the function name; subsequent elements are its arguments, which may themselves be nested expressions.
          items: {}
    PromotionRuleV2:
      allOf:
        - $ref: '#/components/schemas/RuleV2'
        - type: object
          title: PromotionRuleV2
          description: A single promotion rule in V2 block format.
          required:
            - blocks
          properties:
            blocks:
              type: array
              description: The condition and effect blocks that make up this promotion rule.
              items:
                $ref: '#/components/schemas/PromotionBlock'
    StrikethroughBlock:
      description: A block valid in a strikethrough rule. The `type` field identifies the concrete block type.
      oneOf:
        - $ref: '#/components/schemas/StrikethroughGroupBlock'
        - $ref: '#/components/schemas/PassthroughBlock'
      discriminator:
        propertyName: type
        mapping:
          group: '#/components/schemas/StrikethroughGroupBlock'
          passthrough: '#/components/schemas/PassthroughBlock'
    StrikethroughGroupBlock:
      allOf:
        - $ref: '#/components/schemas/BaseBlock'
        - type: object
          title: StrikethroughGroupBlock
          description: A structural combinator block that groups child strikethrough blocks using a logical operator. Evaluates to true when its operator condition is satisfied across all child blocks.
          required:
            - operator
            - blocks
          properties:
            operator:
              type: string
              enum:
                - all
                - atLeastOne
                - none
              description: Logical operator applied across child blocks. `all` requires every child to pass, `atLeastOne` requires at least one, `none` requires all to fail.
            blocks:
              type: array
              description: Child blocks evaluated according to the operator.
              items:
                $ref: '#/components/schemas/StrikethroughBlock'
            onFailure:
              type: array
              description: Strikethrough blocks evaluated when this block fails or returns false.
              items:
                $ref: '#/components/schemas/StrikethroughBlock'
            onError:
              type: object
              description: Named error handlers evaluated when a specific error occurs.
              additionalProperties:
                type: array
                items:
                  $ref: '#/components/schemas/StrikethroughBlock'
    StrikethroughRuleV2:
      allOf:
        - $ref: '#/components/schemas/RuleV2'
        - type: object
          title: StrikethroughRuleV2
          description: A single strikethrough rule.
          required:
            - blocks
          properties:
            blocks:
              type: array
              description: The condition and effect blocks that make up this strikethrough rule.
              items:
                $ref: '#/components/schemas/StrikethroughBlock'
    RulesetV2:
      type: object
      title: RulesetV2
      description: Ruleset in the V2 JSON block format.
      required:
        - id
        - created
        - userId
        - promotionRules
        - strikethroughRules
      properties:
        id:
          type: integer
          format: int64
          description: Internal ID of this entity.
          example: 6
        created:
          type: string
          format: date-time
          description: The time this entity was created.
        userId:
          type: integer
          format: int64
          description: The ID of the user that created this ruleset.
          example: 385
        campaignId:
          type: integer
          format: int64
          description: The ID of the campaign that owns this entity.
          example: 320
        templateId:
          type: integer
          format: int64
          description: The ID of the campaign template that owns this entity.
          example: 3
        activatedAt:
          type: string
          format: date-time
          description: Timestamp indicating when this ruleset was activated.
        promotionRules:
          type: array
          description: Set of promotion rules.
          items:
            $ref: '#/components/schemas/PromotionRuleV2'
        strikethroughRules:
          type: array
          description: Set of strikethrough rules.
          items:
            $ref: '#/components/schemas/StrikethroughRuleV2'
        selectors:
          type: array
          description: Variable bindings of type selector.
          items:
            type: object
            additionalProperties: true
        bundles:
          type: array
          description: Variable bindings of type bundle.
          items:
            type: object
            additionalProperties: true
        parameters:
          type: array
          description: Variable bindings of type template parameter.
          items:
            type: object
            additionalProperties: true
    UpdateCouponBatch:
      allOf:
        - $ref: '#/components/schemas/CouponConstraints'
        - type: object
          additionalProperties: false
          properties:
            attributes:
              type: object
              description: |
                Optional property to set the value of custom coupon attributes. They are defined in the Campaign Manager,
                see [Managing attributes](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes).

                Coupon attributes can also be set to _mandatory_ in your Application [settings](https://docs.talon.one/docs/product/applications/using-attributes#making-attributes-mandatory).
                If your Application uses mandatory attributes, you must use this property to set their value.
            batchID:
              title: Batch ID
              type: string
              description: The ID of the batch the coupon(s) belong to.
    NewCoupons:
      allOf:
        - $ref: '#/components/schemas/CouponConstraints'
        - $ref: '#/components/schemas/CouponLimitConfigs'
        - type: object
          additionalProperties: false
          required:
            - numberOfCoupons
            - usageLimit
          properties:
            numberOfCoupons:
              type: integer
              description: The number of new coupon codes to generate for the campaign. Must be at least 1.
              example: 1
            uniquePrefix:
              title: Coupon code unique prefix
              type: string
              deprecated: true
              description: |
                **DEPRECATED** To create more than 20,000 coupons in one request, use [Create coupons asynchronously](https://docs.talon.one/management-api#tag/Coupons/operation/createCouponsAsync) endpoint.
              example: ''
            attributes:
              type: object
              description: Arbitrary properties associated with this item.
              example:
                venueId: 12
            recipientIntegrationId:
              title: Receiving customer profile integration ID
              type: string
              maxLength: 1000
              description: The integration ID for this coupon's beneficiary's profile.
              example: URNGV8294NV
            validCharacters:
              type: array
              description: |
                List of characters used to generate the random parts of a code. By default,
                the list of characters is equivalent to the `[A-Z, 0-9]` regular expression.
              items:
                type: string
              example:
                - A
                - B
                - G
                - Y
            couponPattern:
              type: string
              description: |
                The pattern used to generate coupon codes.
                The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
              maxLength: 100
              minLength: 3
              example: SUMMER-#####
            isReservationMandatory:
              title: Is reservation mandatory
              type: boolean
              example: false
              description: An indication of whether the code can be redeemed only if it has been reserved first.
              default: false
            implicitlyReserved:
              title: Is coupon implicitly reserved for all customers
              description: An indication of whether the coupon is implicitly reserved for all customers.
              type: boolean
              example: false
    NewCouponsForMultipleRecipients:
      allOf:
        - $ref: '#/components/schemas/CouponConstraints'
        - type: object
          additionalProperties: false
          required:
            - recipientsIntegrationIds
            - usageLimit
          properties:
            attributes:
              type: object
              description: Arbitrary properties associated with this item.
              example:
                venueId: 12
            recipientsIntegrationIds:
              title: Receiving customer profiles integration IDs
              type: array
              example:
                - URNGV8294NV
                - BZGGC2454PA
              items:
                type: string
              description: The integration IDs for recipients.
              maxItems: 1000
              minItems: 1
            validCharacters:
              type: array
              description: |
                List of characters used to generate the random parts of a code. By default, the list of
                characters is equivalent to the `[A-Z, 0-9]` regular expression.
              example:
                - A
                - B
                - C
                - D
                - E
                - F
                - G
                - H
                - I
                - J
                - K
                - L
                - M
                - N
                - O
                - P
                - Q
                - R
                - S
                - T
                - U
                - V
                - W
                - X
                - Y
                - Z
              items:
                type: string
            couponPattern:
              type: string
              description: |
                The pattern used to generate coupon codes. The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
              example: SUMMER-#####
              maxLength: 100
              minLength: 3
    NewCouponCreationJob:
      allOf:
        - $ref: '#/components/schemas/CouponConstraints'
        - type: object
          required:
            - numberOfCoupons
            - usageLimit
            - attributes
          additionalProperties: false
          properties:
            numberOfCoupons:
              type: integer
              description: The number of new coupon codes to generate for the campaign.
              minimum: 1
              maximum: 5000000
              example: 200000
            couponSettings:
              $ref: '#/components/schemas/CodeGeneratorSettings'
            attributes:
              type: object
              description: Arbitrary properties associated with coupons.
            isReservationMandatory:
              type: boolean
              example: false
              description: An indication of whether the code can be redeemed only if it has been reserved first.
              default: false
    AsyncCouponCreationResponse:
      type: object
      required:
        - batchId
      properties:
        batchId:
          type: string
          description: The batch ID that all coupons created by the request will have.
          example: tqyrgahe
    CouponDeletionFilters:
      type: object
      properties:
        createdBefore:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
        createdAfter:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
        startsAfter:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
        startsBefore:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
        valid:
          enum:
            - expired
            - validNow
            - validFuture
          description: |
            - `expired`: Matches coupons in which the expiration date is set and in the past.
            - `validNow`: Matches coupons in which the start date is null or in the past and the expiration date is null or in the future.
            - `validFuture`: Matches coupons in which the start date is set and in the future.
          type: string
        usable:
          type: boolean
          description: |
            - `true`: only coupons where `usageCounter < usageLimit` will be returned.
            - `false`: only coupons where `usageCounter >= usageLimit` will be returned.
            - This field cannot be used in conjunction with the `usable` query parameter.
        redeemed:
          type: boolean
          description: |
            - `true`: only coupons where `usageCounter > 0` will be returned.
            - `false`: only coupons where `usageCounter = 0` will be returned.

            **Note:** This field cannot be used in conjunction with the `usable` query parameter.
        recipientIntegrationId:
          description: |
            Filter results by match with a profile id specified in the coupon's `RecipientIntegrationId` field.
          type: string
        exactMatch:
          description: Filter results to an exact case-insensitive matching against the coupon code
          type: boolean
          default: false
        value:
          description: Filter results by the coupon code
          type: string
        batchId:
          description: Filter results by batches of coupons
          type: string
        referralId:
          description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
          type: integer
        expiresAfter:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
        expiresBefore:
          description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
          type: string
          format: date-time
    NewCouponDeletionJob:
      type: object
      required:
        - filters
      properties:
        filters:
          $ref: '#/components/schemas/CouponDeletionFilters'
    AsyncCouponDeletionJobResponse:
      allOf:
        - $ref: '#/components/schemas/IdentifiableEntity'
        - type: object
    UpdateCoupon:
      allOf:
        - $ref: '#/components/schemas/CouponConstraints'
        - $ref: '#/components/schemas/CouponLimitConfigs'
        - type: object
          additionalProperties: false
          properties:
            recipientIntegrationId:
              title: Receiving customer profile integration ID
              type: string
              maxLength: 1000
              description: The integration ID for this coupon's beneficiary's profile.
              example: URNGV8294NV
            attributes:
              type: object
              description: Arbitrary properties associated with this item.
            isReservationMandatory:
              title: Is reservation mandatory
              type: boolean
              example: false
              description: An indication of whether the code can be redeemed only if it has been reserved first.
              default: false
            implicitlyReserved:
              title: Is coupon implicitly reserved for all customers
              description: An indication of whether the coupon is implicitly reserved for all customers.
              type: boolean
              example: false
    UpdateReferral:
      type: object
      additionalProperties: false
      properties:
        friendProfileIntegrationId:
          type: string
          title: Friend's Profile ID
          description: An optional Integration ID of the Friend's Profile.
          example: BZGGC2454PA
          maxLength: 1000
        startDate:
          type: string
          format: date-time
          title: Referral code valid from
          description: Timestamp at which point the referral code becomes valid.
          example: 2020-11-10T23:00:00Z
        expiryDate:
          type: string
          format: date-time
          title: Referral code valid until
          description: Expiration date of the referral code. Referral never expires if this is omitted.
          example: 2021-11-10T23:00:00Z
        usageLimit:
          type: integer
          title: Referral code Usage Limit
          description: |
            The number of times a referral code can be used. This can be set to 0 for no limit, but any campaign usage limits will still apply.
          minimum: 0
          maximum: 999999
          example: 1
        attributes:
          type: object
          description: Arbitrary properties associated with this item.
    NewCampaignGroup:
      type: object
      properties:
        name:
          type: string
          description: The name of the campaign access group.
          minLength: 1
          example: Europe access group
        description:
          type: string
          description: A longer description of the campaign access group.
          example: A group that gives access to all the campaigns for the Europe market.
        subscribedApplicationsIds:
          type: array
          description: A list of IDs of the Applications that this campaign access group is enabled for.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        campaignIds:
          type: array
          description: A list of IDs of the campaigns that are part of the campaign access group.
          items:
            type: integer
          example:
            - 4
            - 6
            - 8
      required:
        - name
    CampaignGroup:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/NewCampaignGroup'
        - type: object
    CampaignTemplateCouponReservationSettings:
      type: object
      properties:
        reservationLimit:
          type: integer
          minimum: 0
          maximum: 999999
          example: 45
          description: |
            The number of reservations that can be made with this coupon code.
        isReservationMandatory:
          title: Is reservation mandatory
          type: boolean
          example: false
          description: An indication of whether the code can be redeemed only if it has been reserved first.
          default: false
    TemplateLimitConfig:
      allOf:
        - $ref: '#/components/schemas/LimitConfig'
    CampaignTemplateParams:
      type: object
      required:
        - name
        - type
        - description
      properties:
        name:
          type: string
          description: Name of the campaign template parameter.
          minLength: 1
          example: discount_value
        type:
          type: string
          enum:
            - string
            - number
            - boolean
            - percent
            - (list string)
            - (list number)
            - time
          description: Defines the type of parameter value.
          example: number
        description:
          type: string
          description: Explains the meaning of this template parameter and the placeholder value that will define it. It is used on campaign creation from this template.
          example: This is a template parameter of type `number`.
        attributeId:
          type: integer
          description: ID of the corresponding attribute.
          example: 42
    CampaignTemplateCollection:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          minLength: 1
          pattern: ^[A-Za-z](\w|\s)*$
          description: The name of this collection.
          example: My collection
        description:
          type: string
          description: A short description of the purpose of this collection.
          example: My collection of SKUs
    UpdateCampaignTemplate:
      type: object
      required:
        - name
        - state
        - description
        - instructions
        - applicationsIds
      properties:
        name:
          type: string
          description: The campaign template name.
          minLength: 1
          example: Discount campaign
        description:
          type: string
          description: Customer-facing text that explains the objective of the template.
          example: This is a template for a discount campaign.
        instructions:
          type: string
          description: Customer-facing text that explains how to use the template. For example, you can use this property to explain the available attributes of this template, and how they can be modified when a user uses this template to create a new campaign.
          example: Use this template for discount campaigns. Set the campaign properties according to the campaign goals, and don't forget to set an end date.
        campaignAttributes:
          type: object
          description: The campaign attributes that campaigns created from this template will have by default.
        couponAttributes:
          type: object
          description: The campaign attributes that coupons created from this template will have by default.
        state:
          type: string
          enum:
            - draft
            - enabled
            - disabled
          description: Only campaign templates in 'available' state may be used to create campaigns.
        activeRulesetId:
          type: integer
          description: The ID of the ruleset this campaign template will use.
          example: 5
        tags:
          type: array
          description: A list of tags for the campaign template.
          maxItems: 50
          example:
            - discount
          items:
            type: string
            minLength: 1
            maxLength: 50
        reevaluateOnReturn:
          type: boolean
          description: Indicates whether campaigns created from this template should be reevaluated when a customer returns an item.
          example: true
        features:
          type: array
          description: A list of features for the campaign template.
          items:
            type: string
            enum:
              - coupons
              - referrals
              - loyalty
              - giveaways
              - strikethrough
              - achievements
              - advancedEvents
        couponSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        couponReservationSettings:
          $ref: '#/components/schemas/CampaignTemplateCouponReservationSettings'
        referralSettings:
          $ref: '#/components/schemas/CodeGeneratorSettings'
        limits:
          type: array
          description: The set of limits that operate for this campaign template.
          items:
            $ref: '#/components/schemas/TemplateLimitConfig'
        templateParams:
          type: array
          description: Fields which can be used to replace values in a rule.
          items:
            $ref: '#/components/schemas/CampaignTemplateParams'
        applicationsIds:
          type: array
          description: A list of IDs of the Applications that are subscribed to this campaign template.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        campaignCollections:
          type: array
          description: The campaign collections from the blueprint campaign for the template.
          items:
            $ref: '#/components/schemas/CampaignTemplateCollection'
        defaultCampaignGroupId:
          type: integer
          description: The default campaign group ID.
          example: 42
        campaignType:
          type: string
          enum:
            - cartItem
            - advanced
          default: advanced
          example: advanced
          description: |
            The campaign type. Possible type values:
              - `cartItem`: Type of campaign that can apply effects only to cart items.
              - `advanced`: Type of campaign that can apply effects to customer sessions and cart items.
    CampaignTemplate:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/UserEntity'
        - $ref: '#/components/schemas/UpdateCampaignTemplate'
        - type: object
          required:
            - validApplicationIds
            - applicationIds
            - campaignType
          properties:
            applicationsIds:
              type: array
              items:
                type: integer
              example:
                - 1
                - 2
                - 3
            campaignsCount:
              description: The number of Campaigns created from this template.
              type: integer
              example: 3
            updated:
              type: string
              format: date-time
              description: Timestamp of the most recent update to the campaign template or any of its elements.
              example: 2022-08-24T14:15:22Z
            updatedBy:
              type: string
              description: Name of the user who last updated this campaign template, if available.
              example: Jane Doe
            validApplicationIds:
              type: array
              description: The IDs of the Applications that are related to this entity.
              items:
                type: integer
              example:
                - 1
                - 2
                - 3
            isUserFavorite:
              type: boolean
              description: A flag indicating whether the user marked the template as a favorite.
              default: false
              example: false
        - type: object
          required:
            - reevaluateOnReturn
    ExperimentVariant:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - type: object
          required:
            - name
            - isPrimary
          properties:
            name:
              type: string
              example: Variant A
            experimentId:
              type: integer
              example: 10
            ruleset:
              $ref: '#/components/schemas/Ruleset'
            weight:
              type: integer
              example: 12
            isPrimary:
              type: boolean
              example: true
    Experiment:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/ApplicationEntity'
        - type: object
          properties:
            isVariantAssignmentExternal:
              type: boolean
              description: |
                The source of the assignment. - false - The variant assignment is handled internally by Talon.One. - true - The variant assignment is handled externally.
            campaign:
              $ref: '#/components/schemas/Campaign'
            activated:
              type: string
              format: date-time
              description: |
                The date and time the experiment was activated.
            state:
              type: string
              enum:
                - enabled
                - disabled
                - archived
              default: disabled
              example: enabled
              description: |
                A disabled experiment is not evaluated for rules or coupons.
            variants:
              type: array
              items:
                $ref: '#/components/schemas/ExperimentVariant'
            goalType:
              type: string
              enum:
                - other
                - maximize_revenue
                - optimize_discount_efficiency
                - maximize_items_sold
              description: |
                The goal of the experiment. Determines which single metric is used to decide the winning variant. When set to `other`, multiple metrics are used.
            goalDescription:
              type: string
              description: |
                A description of the experiment goal. Provides context for the AI summary and helps it interpret the outcome of the experiment against the stated goal.
              example: Offering free shipping will increase average order revenue more than a 10% discount
            deletedat:
              type: string
              format: date-time
              description: |
                The date and time the experiment was deleted.
          required:
            - state
            - goalType
    CreateTemplateCampaign:
      type: object
      required:
        - name
        - templateId
      properties:
        name:
          type: string
          title: Campaign Name
          description: A user-facing name for this campaign.
          example: Discount campaign
          minLength: 1
        description:
          type: string
          title: Campaign Description
          description: A detailed description of the campaign.
          example: This template is for discount campaigns.
        templateId:
          type: integer
          description: The ID of the Campaign Template which will be used in order to create the Campaign.
          example: 4
        campaignAttributesOverrides:
          type: object
          description: Custom Campaign Attributes. If the Campaign Template defines the same values, they will be overridden.
        templateParamValues:
          type: array
          description: Actual values to replace the template placeholder values in the Ruleset bindings. Values for all Template Parameters must be provided.
          items:
            $ref: '#/components/schemas/Binding'
        limitOverrides:
          type: array
          description: Limits for this Campaign. If the Campaign Template or Application define default values for the same limits, they will be overridden.
          items:
            $ref: '#/components/schemas/LimitConfig'
        campaignGroups:
          type: array
          description: |
            The IDs of the [campaign groups](https://docs.talon.one/docs/product/account/account-settings/managing-campaign-groups) this campaign belongs to.
          example:
            - 1
            - 3
          items:
            type: integer
        tags:
          type: array
          description: A list of tags for the campaign. If the campaign template has tags, they will be overridden by this list.
          example:
            - summer
          maxItems: 50
          items:
            type: string
            minLength: 1
            maxLength: 50
        evaluationGroupId:
          type: integer
          example: 2
          description: The ID of the campaign evaluation group the campaign belongs to.
        linkedStoreIds:
          type: array
          description: |
            A list of store IDs that are linked to the campaign.

            **Note:** Campaigns with linked store IDs will only be evaluated when there is a
            [customer session update](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
            that references a linked store.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
    UpdateCollection:
      type: object
      properties:
        description:
          type: string
          description: A short description of the purpose of this collection.
          example: My collection of SKUs
        subscribedApplicationsIds:
          type: array
          description: A list of the IDs of the Applications where this collection is enabled.
          example:
            - 1
            - 2
            - 3
          items:
            type: integer
    NewCollection:
      allOf:
        - $ref: '#/components/schemas/UpdateCollection'
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              minLength: 1
              pattern: ^[^[:cntrl:]\s][^[:cntrl:]]*$
              description: The name of this collection.
              example: My collection
    CollectionWithoutPayload:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/NewCollection'
        - type: object
          required:
            - createdBy
          properties:
            modifiedBy:
              type: integer
              description: ID of the user who last updated this effect if available.
              example: 48
            createdBy:
              type: integer
              description: ID of the user who created this effect.
              example: 134
            applicationId:
              type: integer
              description: The ID of the Application that owns this entity.
              example: 1
            campaignId:
              type: integer
              description: The ID of the campaign that owns this entity.
              example: 7
    Collection:
      allOf:
        - $ref: '#/components/schemas/CollectionWithoutPayload'
        - type: object
          properties:
            payload:
              type: array
              description: The content of the collection.
              maxItems: 50
              example:
                - KTL-WH-ET-1
                - KTL-BL-ET-1
              items:
                type: string
    CreateTemplateCampaignResponse:
      type: object
      required:
        - campaign
        - ruleset
      properties:
        campaign:
          $ref: '#/components/schemas/Campaign'
        ruleset:
          $ref: '#/components/schemas/Ruleset'
        collections:
          type: array
          items:
            $ref: '#/components/schemas/Collection'
    LoyaltyLedgerEntry:
      type: object
      description: A single row of the ledger, describing one addition or deduction.
      required:
        - programID
        - type
        - amount
        - created
        - name
        - subLedgerID
      properties:
        created:
          type: string
          format: date-time
          example: 2021-07-20T22:00:00Z
        programID:
          type: integer
          example: 5
        customerProfileID:
          type: string
          example: URNGV8294NV
        cardID:
          type: integer
          example: 241
        customerSessionID:
          type: string
          example: t2gy5s-47274
        eventID:
          type: integer
          example: 5
        type:
          type: string
          description: |
            The type of the ledger transaction. Possible values are:
            - `addition`
            - `subtraction`
            - `expire`
            - `expiring` (for expiring points ledgers)
          example: addition
        amount:
          type: number
          example: 100
        startDate:
          type: string
          format: date-time
          example: 2021-07-20T22:00:00Z
        expiryDate:
          type: string
          format: date-time
          example: 2022-07-20T22:00:00Z
        name:
          type: string
          description: A name referencing the condition or effect that added this entry, or the specific name provided in an API call.
          example: Add points on purchase
        subLedgerID:
          type: string
          description: This specifies if we are adding loyalty points to the main ledger or a subledger.
          example: mysubledger
        userID:
          type: integer
          description: This is the ID of the user who created this entry, if the addition or subtraction was done manually.
          example: 499
        archived:
          type: boolean
          description: Indicates if the entry belongs to the archived session.
          example: false
        flags:
          $ref: '#/components/schemas/LoyaltyLedgerEntryFlags'
          description: A map of flags providing additional details about the entry.
        validityDuration:
          type: string
          description: |
            The duration for which the points remain active, relative to the  activation date.

            **Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
          example: 30D
    LoyaltyDashboardPointsBreakdown:
      type: object
      required:
        - createdManually
        - createdViaRuleEngine
      properties:
        createdManually:
          type: number
          example: 125
        createdViaRuleEngine:
          type: number
          example: 9631
    LoyaltyDashboardData:
      type: object
      description: Datapoint for the graphs and cards on a loyalty program dashboard.
      required:
        - date
        - totalActivePoints
        - totalPendingPoints
        - totalSpentPoints
        - totalExpiredPoints
        - totalNegativePoints
        - totalMembers
        - newMembers
        - spentPoints
        - earnedPoints
      properties:
        date:
          type: string
          format: date-time
          description: Date at which data point was collected.
        totalActivePoints:
          type: number
          description: Total of active points for this loyalty program.
          example: 9756
        totalPendingPoints:
          type: number
          description: Total of pending points for this loyalty program.
          example: 548
        totalSpentPoints:
          type: number
          description: Total of spent points for this loyalty program.
          example: 25668
        totalExpiredPoints:
          type: number
          description: Total of expired points for this loyalty program.
          example: 1156
        totalNegativePoints:
          type: number
          description: Total of negative points for this loyalty program.
          example: 32
        totalMembers:
          type: number
          description: Number of loyalty program members.
          example: 2582
        newMembers:
          type: number
          description: Number of members who joined on this day.
          example: 3
        spentPoints:
          $ref: '#/components/schemas/LoyaltyDashboardPointsBreakdown'
          description: Points spent on this day.
        earnedPoints:
          $ref: '#/components/schemas/LoyaltyDashboardPointsBreakdown'
          description: Points that were earned on this day.
    Import:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/UserEntity'
        - type: object
          required:
            - amount
            - entity
          properties:
            entity:
              type: string
              example: AttributeAllowedList
              description: |
                The name of the entity that was imported.
            amount:
              type: integer
              minimum: 0
              example: 10
              description: The number of values that were imported.
    LoyaltySubLedger:
      type: object
      description: Ledger of Balance in Loyalty Program for a Customer.
      required:
        - total
        - totalActivePoints
        - totalPendingPoints
        - totalSpentPoints
        - totalExpiredPoints
        - totalNegativePoints
      properties:
        total:
          type: number
          deprecated: true
          title: Current Balance (Deprecated)
          description: |
            **DEPRECATED** Use `totalActivePoints` property instead. Total amount of currently active and available points in the customer's balance.
        totalActivePoints:
          type: number
          title: Current Balance
          description: Total amount of currently active and available points in the customer's balance.
        totalPendingPoints:
          type: number
          title: Total pending points
          description: Total amount of pending points, which are not active yet but will become active in the future.
        totalSpentPoints:
          type: number
          title: Total spent points
          description: Total amount of points already spent by this customer.
        totalExpiredPoints:
          type: number
          title: Total expired points
          description: Total amount of points, that expired without ever being spent.
        totalNegativePoints:
          type: number
          title: Total negative points
          description: Total amount of negative points. This implies that `totalActivePoints` is `0`.
        transactions:
          description: List of all events that have happened such as additions, subtractions and expiries.
          type: array
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntry'
        expiringPoints:
          description: List of all points that will expire.
          type: array
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntry'
        activePoints:
          description: List of all currently active points.
          type: array
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntry'
        pendingPoints:
          description: List of all points pending activation.
          type: array
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntry'
        expiredPoints:
          description: List of expired points.
          type: array
          items:
            $ref: '#/components/schemas/LoyaltyLedgerEntry'
        currentTier:
          $ref: '#/components/schemas/Tier'
          description: Tier for which the ledger is eligible.
    LoyaltyLedger:
      type: object
      description: Ledger of Balance in Loyalty Program for a Customer.
      required:
        - ledger
      properties:
        ledger:
          $ref: '#/components/schemas/LoyaltySubLedger'
          title: Customer's current loyalty program balance.
          description: The balance of the main ledger in the loyalty program.
        subLedgers:
          type: object
          description: A map containing a list of all loyalty subledger balances.
          additionalProperties:
            $ref: '#/components/schemas/LoyaltySubLedger'
          example:
            mysubledger:
              total: 0
              totalActivePoints: 286
              totalPendingPoints: 50
              totalSpentPoints: 150
              totalExpiredPoints: 25
              totalNegativePoints: 0
    DeductLoyaltyPoints:
      type: object
      description: Points to deduct.
      required:
        - points
      properties:
        points:
          type: number
          exclusiveMinimum: 0
          maximum: 999999999999.99
          description: Amount of loyalty points.
          example: 300
        name:
          type: string
          description: Name / reason for the point deduction.
          example: Penalty
        subledgerId:
          type: string
          description: ID of the subledger the points are deducted from.
          example: sub-123
        applicationId:
          type: integer
          description: ID of the Application that is connected to the loyalty program.
          example: 322
    LoyaltyProgramTransaction:
      type: object
      required:
        - id
        - transactionUUID
        - created
        - programId
        - type
        - amount
        - name
        - subledgerId
        - startDate
        - expiryDate
      properties:
        id:
          type: integer
          description: ID of the loyalty ledger transaction.
          example: 123
        transactionUUID:
          type: string
          description: Unique identifier of the transaction in the UUID format.
          example: ce59f12a-f53b-4014-a745-636d93f2bd3f
        programId:
          type: integer
          description: ID of the loyalty program.
          example: 324
        campaignId:
          type: integer
          description: ID of the campaign.
          example: 324
        created:
          type: string
          format: date-time
          description: Date and time the loyalty transaction occurred.
          example: 2022-01-02T15:04:05Z07:00
        type:
          type: string
          enum:
            - addition
            - subtraction
          description: |
            Type of transaction. Possible values:
              - `addition`: Signifies added points.
              - `subtraction`: Signifies deducted points.
          maxLength: 255
          example: addition
        amount:
          type: number
          description: Amount of loyalty points added or deducted in the transaction.
          example: 10.25
        name:
          type: string
          description: Name or reason for the loyalty ledger transaction.
          maxLength: 255
          example: Reward 50 points for each $500 purchase
        startDate:
          type: string
          description: |
            When points become active. Possible values:
              - `immediate`: Points are immediately active.
              - `on_action`: Points become active based on the customer's action.
              - a timestamp value: Points become active at a given date and time.
          maxLength: 64
          example: 2022-01-02T15:04:05Z07:00
        expiryDate:
          type: string
          description: |
            When points expire. Possible values:
              - `unlimited`: Points have no expiration date.
              - a timestamp value: Points expire at a given date and time.
          example: 2022-01-02T15:04:05Z07:00
        customerProfileId:
          type: string
          description: Customer profile integration ID used in the loyalty program.
          maxLength: 255
          example: kda0fajs0-fad9f-fd9dfsa9-fd9dasjf9
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
        subledgerId:
          type: string
          description: ID of the subledger.
          maxLength: 64
          example: sub-123
        customerSessionId:
          type: string
          description: ID of the customer session where the transaction occurred.
          maxLength: 255
          example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
        importId:
          type: integer
          description: ID of the import where the transaction occurred.
          example: 4
        userId:
          type: integer
          description: ID of the user who manually added or deducted points. Applies only to manual transactions.
          example: 5
        userEmail:
          type: string
          description: The email of the Campaign Manager account that manually added or deducted points. Applies only to manual transactions.
          example: john.doe@example.com
        rulesetId:
          type: integer
          description: ID of the ruleset containing the rule that triggered the effect. Applies only for transactions that resulted from a customer session.
          example: 11
        ruleName:
          type: string
          description: Name of the rule that triggered the effect. Applies only for transactions that resulted from a customer session.
          example: 10 points for every $100 spent
        flags:
          $ref: '#/components/schemas/LoyaltyLedgerEntryFlags'
          description: The flags of the transaction, when applicable. The `createsNegativeBalance`  flag indicates whether the transaction results in a negative balance.
        validityDuration:
          type: string
          description: |
            The duration for which the points remain active, relative to the  activation date.

            **Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
          example: 30D
    LoyaltyCardBatch:
      allOf:
        - type: object
          required:
            - numberOfCards
          properties:
            numberOfCards:
              type: integer
              description: Number of loyalty cards in the batch.
              example: 5000
            batchId:
              type: string
              description: ID of the loyalty card batch.
              minLength: 4
              maxLength: 20
              pattern: ^[A-Za-z0-9_-]*$
              example: hwernpjz
            status:
              type: string
              enum:
                - active
                - inactive
              default: active
              description: Status of the loyalty cards in the batch.
              example: active
            cardCodeSettings:
              $ref: '#/components/schemas/CodeGeneratorSettings'
    LoyaltyCardBatchResponse:
      type: object
      required:
        - numberOfCardsGenerated
        - batchId
      properties:
        numberOfCardsGenerated:
          type: integer
          description: Number of loyalty cards in the batch.
          example: 5000
        batchId:
          type: string
          description: ID of the loyalty card batch.
          example: hwernpjz
    CardLedgerTransactionLogEntry:
      type: object
      description: Log entry for a given loyalty card transaction.
      required:
        - transactionUUID
        - created
        - programId
        - cardIdentifier
        - type
        - name
        - startDate
        - expiryDate
        - subledgerId
        - amount
        - id
      properties:
        transactionUUID:
          type: string
          description: Unique identifier of the transaction in the UUID format.
          example: ce59f12a-f53b-4014-a745-636d93f2bd3f
        created:
          type: string
          format: date-time
          description: Date and time the loyalty card transaction occurred.
          example: 2022-01-02T15:04:05Z07:00
        programId:
          type: integer
          description: ID of the loyalty program.
          example: 324
        cardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
        applicationId:
          type: integer
          description: The ID of the Application that owns this entity.
          example: 322
        sessionId:
          description: |
            The **internal** ID of the session.
          type: integer
          example: 233
        customerSessionId:
          type: string
          description: ID of the customer session where the transaction occurred.
          maxLength: 255
          example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
        type:
          type: string
          enum:
            - addition
            - subtraction
          description: |
            Type of transaction. Possible values:
              - `addition`: Signifies added points.
              - `subtraction`: Signifies deducted points.
          maxLength: 255
          example: addition
        name:
          type: string
          description: Name or reason of the loyalty ledger transaction.
          maxLength: 255
          example: Reward 10% points of a purchase's current total
        startDate:
          type: string
          description: |
            When points become active. Possible values:
              - `immediate`: Points are immediately active.
              - a timestamp value: Points become active at a given date and time.
          maxLength: 64
          example: 2022-01-02T15:04:05Z07:00
        expiryDate:
          type: string
          description: |
            Date when points expire. Possible values are:
              - `unlimited`: Points have no expiration date.
              - `timestamp value`: Points become active from the given date.
          example: 2022-08-02T15:04:05Z07:00
        subledgerId:
          type: string
          description: ID of the subledger.
          maxLength: 64
          example: sub-123
        amount:
          type: number
          description: Amount of loyalty points added or deducted in the transaction.
          example: 10.25
        id:
          type: integer
          description: ID of the loyalty ledger entry.
          example: 123
    TransferLoyaltyCard:
      type: object
      required:
        - newCardIdentifier
      properties:
        newCardIdentifier:
          $ref: '#/components/schemas/LoyaltyCardIdentifier'
        blockReason:
          type: string
          description: |
            Reason for transferring and blocking the loyalty card.
          example: Current card lost. Customer needs a new card.
    CollectionItem:
      allOf:
        - type: object
          required:
            - item
          properties:
            item:
              type: string
    UpdateCampaignCollection:
      type: object
      properties:
        description:
          type: string
          description: A short description of the purpose of this collection.
          example: My collection of SKUs
    NewCampaignCollection:
      allOf:
        - $ref: '#/components/schemas/UpdateCampaignCollection'
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              minLength: 1
              pattern: ^[^[:cntrl:]\s][^[:cntrl:]]*$
              description: The name of this collection.
              example: My collection
    Session:
      type: object
      properties:
        userId:
          type: integer
          description: The ID of the user of this session.
          example: 109
        token:
          type: string
          description: The token to use as a bearer token to query Management API endpoints.
          example: dy_Fa_lQ4iDAnqldJFvVEmnsN8xDTxej19l0LZDBJhQ
        created:
          type: string
          format: date-time
          description: Unix timestamp indicating when the session was first created.
          example: 2021-07-20T22:00:00Z
      required:
        - userId
        - token
        - created
    ApplicationApiHealth:
      type: object
      description: Report of health of the API connection of an application.
      required:
        - summary
        - lastUsed
      properties:
        summary:
          type: string
          description: |
            One-word summary of the health of the API connection of an application. Possible values are:
            - `OK`: The Application has received only successful API requests in the last 5 minutes.
            - `WARNING`: The Application received at least one failed request in the last 5 minutes.
            - `ERROR`: More than 50% of received requests failed.
            - `CRITICAL`: All received requests failed.
            - `NONE`: During the last 5 minutes, the Application hasn't recorded any integration API requests.
          enum:
            - OK
            - WARNING
            - ERROR
            - CRITICAL
            - NONE
        lastUsed:
          type: string
          format: date-time
          description: time of last request relevant to the API health test.
          example: 2021-09-12T10:12:42Z
    AccessLogEntry:
      type: object
      description: Log of application accesses.
      required:
        - uuid
        - status
        - method
        - requestUri
        - time
        - requestPayload
        - responsePayload
      properties:
        uuid:
          type: string
          description: UUID reference of request.
          example: 606e7d34-2d36-4d53-ac71-d4442c325985
        status:
          type: integer
          description: HTTP status code of response.
          example: 200
        method:
          type: string
          description: HTTP method of request.
          example: PUT
        requestUri:
          type: string
          description: target URI of request
          example: /v2/customer_sessions/Session136667
        time:
          type: string
          format: date-time
          description: timestamp of request
          example: 2023-01-16T16:00:00.700763Z
        requestPayload:
          type: string
          description: payload of request
          example: |-
            {
                "customerSession": {
                    "profileId": "customer123",
                    "state": "closed",
            ...
            }
        responsePayload:
          type: string
          description: payload of response
          example: '{"coupons":[],"createdCoupons":[],...}'
    CampaignAnalytics:
      allOf:
        - type: object
          required:
            - date
            - campaignRevenue
            - totalCampaignRevenue
            - campaignRefund
            - totalCampaignRefund
            - campaignDiscountCosts
            - totalCampaignDiscountCosts
            - campaignRefundedDiscounts
            - totalCampaignRefundedDiscounts
            - campaignFreeItems
            - totalCampaignFreeItems
            - referralRedemptions
            - totalReferralRedemptions
            - couponRedemptions
            - totalCouponRedemptions
            - couponRolledbackRedemptions
            - totalCouponRolledbackRedemptions
            - couponsCreated
            - totalCouponsCreated
            - referralsCreated
            - totalReferralsCreated
            - addedLoyaltyPoints
            - totalAddedLoyaltyPoints
            - deductedLoyaltyPoints
            - totalDeductedLoyaltyPoints
          properties:
            date:
              type: string
              format: date-time
              example: 2021-10-12T10:12:42Z
            campaignRevenue:
              type: number
              description: Amount of revenue in this campaign (for coupon or discount sessions).
              example: 3539.76
            totalCampaignRevenue:
              type: number
              description: Amount of revenue in this campaign since it began (for coupon or discount sessions).
              example: 5784.63
            campaignRefund:
              type: number
              description: Amount of refunds in this campaign (for coupon or discount sessions).
            totalCampaignRefund:
              type: number
              description: Amount of refunds in this campaign since it began (for coupon or discount sessions).
            campaignDiscountCosts:
              type: number
              description: Amount of cost caused by discounts given in the campaign.
            totalCampaignDiscountCosts:
              type: number
              description: Amount of cost caused by discounts given in the campaign since it began.
            campaignRefundedDiscounts:
              type: number
              description: Amount of discounts rolledback due to refund in the campaign.
            totalCampaignRefundedDiscounts:
              type: number
              description: Amount of discounts rolledback due to refund in the campaign since it began.
            campaignFreeItems:
              type: integer
              description: Amount of free items given in the campaign.
            totalCampaignFreeItems:
              type: integer
              description: Amount of free items given in the campaign since it began.
              example: 86
            couponRedemptions:
              type: integer
              description: Number of coupon redemptions in the campaign.
            totalCouponRedemptions:
              type: integer
              description: Number of coupon redemptions in the campaign since it began.
            couponRolledbackRedemptions:
              type: integer
              description: Number of coupon redemptions that have been rolled back (due to canceling closed session) in the campaign.
            totalCouponRolledbackRedemptions:
              type: integer
              description: Number of coupon redemptions that have been rolled back (due to canceling closed session) in the campaign since it began.
            referralRedemptions:
              type: integer
              description: Number of referral redemptions in the campaign.
            totalReferralRedemptions:
              type: integer
              description: Number of referral redemptions in the campaign since it began.
            couponsCreated:
              type: integer
              description: Number of coupons created in the campaign by the rule engine.
            totalCouponsCreated:
              type: integer
              description: Number of coupons created in the campaign by the rule engine since it began.
            referralsCreated:
              type: integer
              description: Number of referrals created in the campaign by the rule engine.
            totalReferralsCreated:
              type: integer
              description: Number of referrals created in the campaign by the rule engine since it began.
            addedLoyaltyPoints:
              type: number
              description: Number of added loyalty points in the campaign in a specific interval.
              example: 250
            totalAddedLoyaltyPoints:
              type: number
              description: Number of added loyalty points in the campaign since it began.
              example: 340
            deductedLoyaltyPoints:
              type: number
              description: Number of deducted loyalty points in the campaign in a specific interval.
              example: 120
            totalDeductedLoyaltyPoints:
              type: number
              description: Number of deducted loyalty points in the campaign since it began.
              example: 220
    ApplicationCustomer:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/IntegrationEntity'
        - $ref: '#/components/schemas/CustomerProfile'
        - type: object
          required:
            - accountId
          properties:
            accountId:
              type: integer
              description: The ID of the Talon.One account that owns this profile.
            advocateIntegrationId:
              type: string
              maxLength: 1000
              description: The Integration ID of the Customer Profile that referred this Customer in the Application.
    CustomerProfileSearchQuery:
      type: object
      properties:
        attributes:
          type: object
          description: Properties to match against a customer profile. All provided attributes will be exactly matched against profile attributes.
        integrationIDs:
          type: array
          items:
            type: string
        profileIDs:
          type: array
          items:
            type: integer
    CustomerActivityReport:
      description: A summary report of customer activity for a given time range.
      allOf:
        - $ref: '#/components/schemas/IntegrationEntity'
        - type: object
          required:
            - name
            - customerId
            - integrationId
            - created
            - couponRedemptions
            - couponUseAttempts
            - couponFailedAttempts
            - accruedDiscounts
            - accruedRevenue
            - totalOrders
            - totalOrdersNoCoupon
            - campaignName
          properties:
            name:
              type: string
              description: The name for this customer profile.
            customerId:
              type: integer
              description: The internal Talon.One ID of the customer.
            lastActivity:
              type: string
              format: date-time
              description: The last activity of the customer.
            couponRedemptions:
              type: integer
              description: Number of coupon redemptions in all customer campaigns.
            couponUseAttempts:
              type: integer
              description: Number of coupon use attempts in all customer campaigns.
            couponFailedAttempts:
              type: integer
              description: Number of failed coupon use attempts in all customer campaigns.
            accruedDiscounts:
              type: number
              description: Number of accrued discounts in all customer campaigns.
            accruedRevenue:
              type: number
              description: Amount of accrued revenue in all customer campaigns.
            totalOrders:
              type: integer
              description: Number of orders in all customer campaigns.
            totalOrdersNoCoupon:
              type: integer
              description: Number of orders without coupon used in all customer campaigns.
            campaignName:
              type: string
              description: The name of the campaign this customer belongs to.
    CustomerAnalytics:
      description: A summary report of customer activity for a given time range.
      allOf:
        - type: object
          properties:
            acceptedCoupons:
              type: integer
              description: Total accepted coupons for this customer.
            createdCoupons:
              type: integer
              description: Total created coupons for this customer.
            freeItems:
              type: integer
              description: Total free items given to this customer.
            totalOrders:
              type: integer
              description: Total orders made by this customer.
            totalDiscountedOrders:
              type: integer
              description: Total orders made by this customer that had a discount.
            totalRevenue:
              type: number
              description: Total Revenue across all closed sessions.
            totalDiscounts:
              type: number
              description: The sum of discounts that were given across all closed sessions.
          required:
            - acceptedCoupons
            - createdCoupons
            - freeItems
            - totalOrders
            - totalDiscountedOrders
            - totalRevenue
            - totalDiscounts
    ApplicationCustomerEntity:
      type: object
      properties:
        profileId:
          type: integer
          description: The globally unique Talon.One ID of the customer that created this entity.
          example: 138
    ApplicationSession:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/IntegrationEntity'
        - $ref: '#/components/schemas/IntegrationStoreEntity'
        - $ref: '#/components/schemas/ApplicationEntity'
        - $ref: '#/components/schemas/ApplicationCustomerEntity'
        - type: object
          properties:
            profileintegrationid:
              type: string
              maxLength: 1000
              description: Integration ID of the customer for the session.
              example: 382370BKDB946
            coupon:
              type: string
              description: Any coupon code entered.
              example: BKDB946
            referral:
              type: string
              description: Any referral code entered.
              example: BKDB946
            state:
              type: string
              enum:
                - open
                - closed
                - partially_returned
                - cancelled
              description: |
                Indicates the current state of the session. Sessions can be created as `open` or `closed`. The state transitions are:

                1. `open` -> `closed`
                2. `open` -> `cancelled`
                3. `closed` -> `cancelled` or `partially_returned`
                4. `partially_returned` -> `cancelled`

                For more information, see [Customer session states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
              example: closed
            cartItems:
              type: array
              description: Serialized JSON representation.
              items:
                $ref: '#/components/schemas/CartItem'
            discounts:
              type: object
              description: |
                **API V1 only.** A map of labeled discount values, in the same currency as the session.

                If you are using the V2 endpoints, refer to the `totalDiscounts` property instead.
              additionalProperties:
                type: number
            totalDiscounts:
              type: number
              description: |
                The total sum of the discounts applied to this session.

                **Note:** If more than one session is returned, this value is displayed as `0`.
              example: 100
            total:
              type: number
              description: The total sum of the session before any discounts applied.
              example: 200
            attributes:
              type: object
              description: Arbitrary properties associated with this item.
          required:
            - coupon
            - referral
            - state
            - cartItems
            - discounts
            - total
            - totalDiscounts
    ApplicationStoreEntity:
      type: object
      properties:
        storeId:
          type: integer
          description: The ID of the store.
    ApplicationEvent:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/ApplicationEntity'
        - $ref: '#/components/schemas/ApplicationCustomerEntity'
        - $ref: '#/components/schemas/ApplicationStoreEntity'
        - $ref: '#/components/schemas/IntegrationStoreEntity'
        - $ref: '#/components/schemas/EventV3Entity'
        - type: object
          required:
            - type
            - attributes
            - effects
          properties:
            sessionId:
              type: integer
              description: The globally unique Talon.One ID of the session that contains this event.
            type:
              type: string
              description: The name of the event. Must be a [custom event](https://docs.talon.one/docs/dev/concepts/entities/events#custom-events), not a built-in event.
            attributes:
              type: object
              description: Additional JSON serialized data associated with the event.
            effects:
              type: array
              description: An array containing the effects that were applied as a result of this event.
              items:
                $ref: '#/components/schemas/Effect'
            ruleFailureReasons:
              type: array
              description: An array containing the rule failure reasons which happened during this event.
              items:
                $ref: '#/components/schemas/RuleFailureReason'
    AudienceAnalytics:
      type: object
      description: The audiences and their member count.
      properties:
        audienceId:
          type: integer
          description: The ID of the audience.
          example: 1
        membersCount:
          type: integer
          description: The member count of the audience.
          example: 1234
    ApplicationReferee:
      allOf:
        - $ref: '#/components/schemas/ApplicationEntity'
        - type: object
          required:
            - sessionId
            - advocateIntegrationId
            - friendIntegrationId
            - code
            - created
          properties:
            sessionId:
              type: string
              description: Integration ID of the session in which the customer redeemed the referral.
            advocateIntegrationId:
              type: string
              maxLength: 1000
              title: Advocate's Profile ID
              description: Integration ID of the Advocate's Profile.
            friendIntegrationId:
              type: string
              maxLength: 1000
              title: Friend's Profile ID
              description: Integration ID of the Friend's Profile.
            code:
              type: string
              description: Advocate's referral code.
            created:
              type: string
              format: date-time
              description: Timestamp of the moment the customer redeemed the referral.
    AchievementAdditionalProperties:
      type: object
      required:
        - campaignId
        - userId
      properties:
        campaignId:
          type: integer
          description: The ID of the campaign the achievement belongs to.
          example: 1
        userId:
          type: integer
          description: ID of the user that created this achievement.
          example: 1234
        createdBy:
          type: string
          description: |
            Name of the user that created the achievement.

            **Note**: This is not available if the user has been deleted.
          example: John Doe
        hasProgress:
          type: boolean
          description: Indicates if a customer has made progress in the achievement.
        status:
          type: string
          enum:
            - inprogress
            - expired
            - not_started
            - completed
          example: inprogress
          description: The status of the achievement.
    Achievement:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/CreateAchievement'
        - $ref: '#/components/schemas/AchievementAdditionalProperties'
        - type: object
    NewAdditionalCost:
      allOf:
        - type: object
          required:
            - name
            - title
            - description
          properties:
            name:
              type: string
              pattern: ^[A-Za-z]\w*$
              description: The internal name used in API requests.
              example: shippingFee
            title:
              type: string
              pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
              description: The human-readable name for the additional cost that will be shown in the Campaign Manager. Like `name`, the combination of entity and title must also be unique.
              example: Shipping fee
            description:
              type: string
              description: A description of this additional cost.
              example: A shipping fee
            subscribedApplicationsIds:
              type: array
              description: A list of the IDs of the applications that are subscribed to this additional cost.
              items:
                type: integer
              example:
                - 3
                - 13
            type:
              type: string
              enum:
                - session
                - item
                - both
              example: session
              description: |
                The type of additional cost. Possible value:
                - `session`: Additional cost will be added per session.
                - `item`: Additional cost will be added per item.
                - `both`: Additional cost will be added per item and session.
              default: session
    AccountAdditionalCost:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/NewAdditionalCost'
    NewApplicationCIF:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the Application cart item filter used in API requests.
          example: Filter items by product
        description:
          type: string
          description: A short description of the Application cart item filter.
          example: This filter allows filtering by shoes
        activeExpressionId:
          type: integer
          description: The ID of the expression that the Application cart item filter uses.
          example: 1
        modifiedBy:
          type: integer
          description: The ID of the user who last updated the Application cart item filter.
          example: 334
        createdBy:
          type: integer
          description: The ID of the user who created the Application cart item filter.
          example: 216
        modified:
          type: string
          format: date-time
          description: Timestamp of the most recent update to the Application cart item filter.
    ApplicationCIF:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewApplicationCIF'
        - type: object
          required:
            - applicationId
          properties:
            applicationId:
              type: integer
              description: The ID of the Application that owns this entity.
              example: 322
    InfluencingCampaignDetails:
      type: object
      description: Details about a campaign that influenced the final price.
      properties:
        campaignId:
          type: integer
          description: Identifier of the campaign that influenced the final price.
        discountValue:
          type: number
          description: Discount value applied by the campaign.
      required:
        - campaignId
        - discountValue
    AdjustmentDetails:
      type: object
      description: Details about an applied price adjustment.
      properties:
        referenceId:
          type: string
          description: The reference identifier used during an `ADD_PRICE_ADJUSTMENT` action.
          example: 68851723-e6fa-488f-ace9-112581e6c19b
        selectedPriceType:
          type: string
          description: The selected price type for the SKU targeted by this effect.
          example: member
        value:
          type: number
          description: The value of the applied price adjustment.
      required:
        - referenceId
        - selectedPriceType
        - value
    BestPriorPriceMetadata:
      type: object
      description: Auxiliary data for found price observation.
      properties:
        influencingCampaignDetails:
          type: array
          description: Details about campaigns that influenced the final price.
          items:
            $ref: '#/components/schemas/InfluencingCampaignDetails'
        adjustmentDetails:
          $ref: '#/components/schemas/AdjustmentDetails'
          type: object
          description: Details about the applied price adjustment.
      required:
        - influencingCampaignDetails
    PriceHistoryRequest:
      type: object
      required:
        - sku
        - endDate
        - startDate
      properties:
        sku:
          type: string
          description: The SKU of the item for which the historical prices are being retrieved.
          example: SKU1241028
        startDate:
          type: string
          format: date-time
          description: The start date of the period for which historical prices should be retrieved.
          example: 2020-11-10T23:00:00Z
        endDate:
          type: string
          format: date-time
          description: The end date of the period for which historical prices should be retrieved.
          example: 2020-12-10T23:00:00Z
    History:
      type: object
      required:
        - id
        - observedAt
        - price
        - contextIds
        - metadata
        - target
      properties:
        id:
          type: integer
          description: The ID of the historical price.
          example: 1
        observedAt:
          type: string
          format: date-time
          description: The date and time when the price was observed.
          example: 2025-11-10T23:00:00Z
        contextIds:
          type: array
          items:
            type: string
          description: |
            The identifiers of the relevant context at the time the price was observed. Includes the context IDs of any price adjustments and of the campaigns that influenced the final price.
          example:
            - SpringSale
            - SummerSale2025
        contextId:
          type: string
          deprecated: true
          default: ''
          description: |
            This property is **deprecated**. Use `contextIds` instead. Defaults to an empty string.
          example: ''
        price:
          type: number
          description: Price of the item.
          example: 99.99
        metadata:
          $ref: '#/components/schemas/BestPriorPriceMetadata'
        target:
          $ref: '#/components/schemas/LabelTarget'
    PriceHistoryResponse:
      type: object
      required:
        - sku
        - history
      properties:
        sku:
          type: string
          description: The SKU of the item for which historical prices should be retrieved.
          example: SKU1241028
        history:
          type: array
          items:
            $ref: '#/components/schemas/History'
    ItemAttribute:
      allOf:
        - type: object
          required:
            - attributeid
            - name
            - value
          properties:
            attributeid:
              type: integer
              description: The ID of the attribute of the item.
              example: 6
            name:
              type: string
              description: The name of the attribute.
            value:
              description: The value of the attribute.
    CatalogItem:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - type: object
          required:
            - sku
            - catalogid
            - version
          properties:
            sku:
              type: string
              description: The stock keeping unit of the item.
              example: SKU1241028
            price:
              type: number
              description: Price of the item.
              example: 99.99
              x-fieldType: NullDecimal
            catalogid:
              type: integer
              description: The ID of the catalog the item belongs to.
              example: 6
            version:
              type: integer
              minimum: 1
              description: The version of the catalog item.
              example: 5
            attributes:
              type: array
              items:
                $ref: '#/components/schemas/ItemAttribute'
            product:
              $ref: '#/components/schemas/Product'
    WebhookWithOutgoingIntegrationDetails:
      allOf:
        - $ref: '#/components/schemas/Webhook'
        - type: object
          properties:
            outgoingIntegrationTemplateId:
              type: integer
              description: Identifier of the outgoing integration template.
              example: 1
            outgoingIntegrationTypeId:
              type: integer
              description: Identifier of the outgoing integration type.
              example: 1
            outgoingIntegrationTypeName:
              type: string
              description: Name of the outgoing integration.
              example: Braze
    MessageLogRequest:
      type: object
      description: Details of the request.
      required:
        - createdAt
        - request
      properties:
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the request was made.
          example: 2021-07-20T21:59:00Z
        request:
          type: string
          format: byte
          description: Raw request data.
          example: SGVsbG8sIHdvcmxkIQ==
    MessageLogResponse:
      type: object
      description: Details of the response.
      properties:
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the response was received.
          example: 2021-07-20T22:00:50Z
        response:
          type: string
          format: byte
          description: Raw response data.
          example: UmVzcG9uc2UgY29udGVudA==
        status:
          type: integer
          description: HTTP status code of the response.
          example: 200
    MessageLogEntry:
      type: object
      description: Message Log.
      required:
        - service
        - createdAt
        - id
        - entityType
      properties:
        id:
          type: string
          description: Unique identifier of the message.
          example: 123e4567-e89b-12d3-a456-426614174000
        service:
          type: string
          description: Name of the service that generated the log entry.
          example: NotificationService
        changeType:
          type: string
          description: Type of change that triggered the notification.
          example: Update
        notificationId:
          type: integer
          description: ID of the notification.
          example: 101
        notificationName:
          type: string
          description: The name of the notification.
          example: My campaign notification
        webhookId:
          type: integer
          description: ID of the webhook.
          example: 101
        webhookName:
          type: string
          description: The name of the webhook.
          example: My webhook
        request:
          $ref: '#/components/schemas/MessageLogRequest'
        response:
          $ref: '#/components/schemas/MessageLogResponse'
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the log entry was created.
          example: 2021-07-20T22:00:00Z
        entityType:
          type: string
          description: |
            The entity type the log is related to.
          enum:
            - application
            - loyalty_program
            - webhook
          example: loyalty_program
        url:
          type: string
          description: The target URL of the request.
          example: www.my-company.com/my-endpoint-name
        applicationId:
          type: integer
          description: Identifier of the Application.
          example: 5
          minimum: 1
        loyaltyProgramId:
          type: integer
          description: Identifier of the loyalty program.
          example: 2
          minimum: 1
        campaignId:
          type: integer
          description: Identifier of the campaign.
          example: 2
          minimum: 1
    MessageLogEntries:
      type: object
      required:
        - data
      properties:
        nextCursor:
          description: |
            The next value in the database.

            **Note:** If this value is not present, it means that there are no more values in the database for this combination of request parameters.
          type: string
          format: byte
          example: SmJlNERRMHdyNWFsTmRDZDVYU0c=
        data:
          type: array
          description: List of message logs.
          items:
            $ref: '#/components/schemas/MessageLogEntry'
    NewEventType:
      allOf:
        - type: object
          required:
            - title
            - name
          properties:
            title:
              type: string
              minLength: 1
              description: The human-friendly name for this event type.
              example: Survey Completed
            name:
              type: string
              minLength: 1
              description: The integration name for this event type. This will be used in URLs and cannot be changed after an event type has been created.
              example: surveyCompleted
            description:
              type: string
              description: |
                A description of what the event represents.
              example: The survey was submitted by the customer.
    EventType:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewEventType'
    EmailEntity:
      type: object
      required:
        - email
      properties:
        email:
          type: string
          format: email
          example: john.doe@example.com
          description: The email address associated with the user profile.
    User:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/EmailEntity'
        - $ref: '#/components/schemas/AccountEntity'
        - type: object
          required:
            - inviteToken
            - state
            - name
            - policy
          properties:
            name:
              type: string
              description: Name of the user.
              example: John Doe
            state:
              type: string
              enum:
                - invited
                - active
                - deactivated
              description: State of the user.
              example: invited
            inviteToken:
              type: string
              description: |
                Invitation token of the user.

                **Note**: If the user has already accepted their invitation, this is `null`.
              example: Gy9b8w1irmQtEPo5RmbMmSPheL5h4
            isAdmin:
              type: boolean
              description: Indicates whether the user is an `admin`.
              example: false
            policy:
              type: object
              format: acl
              description: Access level of the user.
              example:
                Role: 127
                Applications: null
            roles:
              type: array
              description: A list of the IDs of the roles assigned to the user.
              example:
                - 71
              items:
                type: integer
            authMethod:
              type: string
              description: Authentication method for this user.
              example: basic_auth
            applicationNotificationSubscriptions:
              type: object
              description: Application notifications that the user is subscribed to.
              example: {}
            lastSignedIn:
              type: string
              format: date-time
              description: Timestamp when the user last signed in to Talon.One.
              example: 2021-09-12T10:12:42Z
            lastAccessed:
              type: string
              format: date-time
              description: Timestamp of the user's last activity after signing in to Talon.One.
              example: 2021-09-12T10:14:42Z
            latestFeedTimestamp:
              type: string
              format: date-time
              description: Timestamp when the user was notified for feed.
              example: 2020-06-01T00:00:00Z
            additionalAttributes:
              type: object
              description: Additional user attributes, created and used by external identity providers.
              example: {}
    UpdateUser:
      type: object
      properties:
        name:
          type: string
          description: Name of the user.
          example: John Doe
        state:
          type: string
          enum:
            - deactivated
            - active
          description: |
            The state of the user.
              - `deactivated`: The user has been deactivated.
              - `active`: The user is active.

            **Note**: Only `admin` users can update the state of another user.
          example: deactivated
        isAdmin:
          type: boolean
          description: Indicates whether the user is an `admin`.
          example: false
        policy:
          type: string
          description: Indicates the access level of the user.
          example:
            Role: 127
            Applications: null
        roles:
          type: array
          items:
            type: integer
          description: |
            A list of the IDs of the roles assigned to the user.

            **Note**: To find the ID of a role, use the [List roles](/management-api#tag/Roles/operation/listAllRolesV2) endpoint.
          example:
            - 1
            - 3
        applicationNotificationSubscriptions:
          type: object
          description: Application notifications that the user is subscribed to.
    ScimGroupMember:
      type: object
      description: Member of the SCIM group. In Talon.One, the member is a [user](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to a specific role.
      properties:
        value:
          type: string
          description: Unique identifier of the member.
          example: '258'
        display:
          type: string
          description: Identifier of the user. This is usually an email address.
          example: john.doe@example.com
    ScimBaseGroup:
      type: object
      description: Define the schema for base fields in a group using the SCIM provisioning protocol. Talon.One uses this schema to create roles.
      properties:
        displayName:
          type: string
          description: Display name of the group (Talon.One role).
          example: Manager
        members:
          type: array
          description: List of members to assign to the new Talon.One role.
          items:
            $ref: '#/components/schemas/ScimGroupMember'
    ScimGroup:
      type: object
      description: |-
        Define the schema for groups created using the SCIM provisioning protocol.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      allOf:
        - $ref: '#/components/schemas/ScimBaseGroup'
        - type: object
          required:
            - id
          properties:
            id:
              type: string
              description: ID of the group.
              example: '359'
    ScimGroupsListResponse:
      type: object
      description: |-
        List of groups created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
        In Talon.One, a `Group` corresponds to a [role](https://docs.talon.one/docs/product/account/account-settings/managing-roles), and `members` are the [users](https://docs.talon.one/docs/product/account/account-settings/managing-users) assigned to that role.
      required:
        - Resources
      properties:
        Resources:
          type: array
          items:
            $ref: '#/components/schemas/ScimGroup'
        schemas:
          type: array
          description: SCIM schema for the given resource.
          items:
            type: string
            example: urn:ietf:params:scim:api:messages:2.0:ListResponse
        totalResults:
          type: integer
          description: Number of results in the response.
      example:
        Resources:
          - displayName: Manager Role
            id: '283'
            meta:
              resourceType: Group
              created: 2024-06-25T17:43:46+02:00
            members:
              - value: '15'
                display: john.doe@example.com
            schemas:
              - urn:ietf:params:scim:schemas:core:2.0:Group
        schemas:
          - urn:ietf:params:scim:api:messages:2.0:ListResponse
        totalResults: 1
    ScimPatchOperation:
      type: object
      description: Patch operation that is used to update the information.
      required:
        - op
      properties:
        op:
          type: string
          enum:
            - add
            - remove
            - replace
          description: The method that should be used in the operation.
        path:
          type: string
          description: The path specifying the attribute that should be updated.
        value:
          type: string
          description: The value that should be updated. Required if `op` is `add` or `replace`.
      example:
        op: add
        path: nickName
        value: John
    ScimPatchRequest:
      type: object
      description: SCIM Patch request
      required:
        - Operations
      properties:
        schemas:
          type: array
          description: SCIM schema for the given resource.
          items:
            type: string
            example: urn:ietf:params:scim:api:messages:2.0:PatchOp
        Operations:
          type: array
          items:
            $ref: '#/components/schemas/ScimPatchOperation'
      example:
        Operations:
          - op: replace
            path: active
            value: test
          - op: add
            path: nickName
            value: johndoe
        schemas:
          - urn:ietf:params:scim:api:messages:2.0:PatchOp
    ScimBaseUser:
      type: object
      description: Schema definition for base user fields, provisioned using the SCIM protocol and used by Talon.One.
      properties:
        active:
          type: boolean
          description: Status of the user.
          example: true
        displayName:
          type: string
          description: Display name of the user.
          example: John Doe
        userName:
          type: string
          description: Unique identifier of the user. This is usually an email address.
          example: john.doe@example.com
        name:
          type: object
          description: The components of the user's real name.
          properties:
            formatted:
              type: string
              description: The full name, including all middle names, titles, and suffixes as appropriate, formatted for display.
              example: Mr. John J Doe
    ScimNewUser:
      type: object
      description: Payload for users that are created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
      required:
        - userName
      allOf:
        - $ref: '#/components/schemas/ScimBaseUser'
        - type: object
          description: Additional user properties, that are not processed by Talon.One, but only stored and returned in the User response.
    ScimUser:
      type: object
      description: Schema definition for users that have been provisioned using the SCIM protocol with an identity provider, for example, Microsoft Entra ID.
      allOf:
        - $ref: '#/components/schemas/ScimNewUser'
        - type: object
          required:
            - id
          properties:
            id:
              type: string
              description: ID of the user.
              example: '359'
    ScimUsersListResponse:
      type: object
      description: List of users that have been provisioned using the SCIM protocol with an identity provider, for example, Microsoft Entra ID.
      required:
        - Resources
      properties:
        Resources:
          type: array
          items:
            $ref: '#/components/schemas/ScimUser'
        schemas:
          type: array
          description: SCIM schema for the given resource.
          items:
            type: string
            example: urn:ietf:params:scim:api:messages:2.0:ListResponse
        totalResults:
          type: integer
          description: Number of total results in the response.
      example:
        Resources:
          - active: true
            displayName: John Doe
            id: '283'
            meta:
              resourceType: User
              created: 2024-06-25T17:43:46+02:00
            userName: john.doe@example.com
            schemas:
              - urn:ietf:params:scim:schemas:core:2.0:User
              - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
        schemas:
          - urn:ietf:params:scim:api:messages:2.0:ListResponse
        totalResults: 1
    ScimResource:
      type: object
      description: Resource definition for the SCIM provisioning protocol.
      properties:
        id:
          type: string
          description: ID of the resource.
        name:
          type: string
          description: Name of the resource.
        description:
          type: string
          description: Human-readable description of the resource.
      example:
        id: User
        name: User
        description: User Account
    ScimResourceTypesListResponse:
      type: object
      description: List of resource types supported by the SCIM provisioning protocol.
      required:
        - Resources
      properties:
        Resources:
          type: array
          items:
            $ref: '#/components/schemas/ScimResource'
    ScimServiceProviderConfigResponse:
      type: object
      description: Service provider configuration details.
      properties:
        bulk:
          type: object
          description: Configuration related to bulk operations, which allow multiple SCIM requests to be processed in a single HTTP request.
          properties:
            maxOperations:
              type: integer
              description: The maximum number of individual operations that can be included in a single bulk request.
            maxPayloadSize:
              type: integer
              description: The maximum size, in bytes, of the entire payload for a bulk operation request.
            supported:
              type: boolean
              description: Indicates whether the SCIM service provider supports bulk operations.
        changePassword:
          type: object
          description: Configuration settings related to the ability to change user passwords.
          properties:
            supported:
              type: boolean
              description: Indicates whether the service provider supports password changes via the SCIM API.
        documentationUri:
          type: string
          description: The URI that points to the SCIM service provider's documentation, providing further details about the service's capabilities and usage.
        filter:
          type: object
          description: Configuration settings related to filtering SCIM resources based on specific criteria.
          properties:
            maxResults:
              type: integer
              description: The maximum number of resources that can be returned in a single filtered query response.
            supported:
              type: boolean
              description: Indicates whether the SCIM service provider supports filtering operations.
        patch:
          type: object
          description: Configuration settings related to patch operations, which allow partial updates to SCIM resources.
          properties:
            supported:
              type: boolean
              description: Indicates whether the service provider supports patch operations for modifying resources.
        schemas:
          type: array
          description: A list of SCIM schemas that define the structure and data types supported by the service provider.
          items:
            type: string
        sort:
          type: object
          description: Configuration settings related to sorting SCIM resources in query responses.
          properties:
            supported:
              type: boolean
              description: Indicates whether the service provider supports sorting operations for ordered query results.
      example:
        bulk:
          maxOperations: 1000
          maxPayloadSize: 1048576
          supported: true
        changePassword:
          supported: false
        documentationUri: example.com/scim/docs
        filter:
          maxResults: 100
          supported: true
        patch:
          supported: true
        schemas:
          - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig
        x-sort:
          supported: false
    ScimSchemaResource:
      type: object
      description: Resource schema definition for the SCIM provisioning protocol.
      properties:
        id:
          type: string
          description: ID of the resource.
        name:
          type: string
          description: Name of the resource.
        description:
          type: string
          description: Human-readable description of the schema resource.
        attributes:
          type: array
          items:
            type: object
            description: Key-value attributes of the resource.
      example:
        id: urn:ietf:params:scim:schemas:core:2.0:User
        name: User
        description: User Account
        attributes:
          - name: userName
            required: true
            mutability: readWrite
          - name: profileUrl
            required: false
            mutability: readWrite
    ScimSchemasListResponse:
      type: object
      description: List of resource schemas supported by the SCIM provisioning protocol.
      required:
        - Resources
      properties:
        Resources:
          type: array
          items:
            $ref: '#/components/schemas/ScimSchemaResource'
        schemas:
          type: array
          description: SCIM schema for the given resource.
          items:
            type: string
            example: urn:ietf:params:scim:api:messages:2.0:ListResponse
        totalResults:
          type: integer
          description: Number of total results in the response.
    DeleteUserRequest:
      allOf:
        - $ref: '#/components/schemas/EmailEntity'
    ActivateUserRequest:
      allOf:
        - $ref: '#/components/schemas/EmailEntity'
    DeactivateUserRequest:
      allOf:
        - $ref: '#/components/schemas/EmailEntity'
    NewExternalInvitation:
      type: object
      description: Parameters for inviting a new user from an external identity provider.
      required:
        - email
      properties:
        name:
          type: string
          description: Name of the user.
          example: John Doe
        userGroups:
          type: array
          items:
            type: string
          description: |
            List of user groups in the external identity provider.

            If there are roles in Talon.One whose names match these user groups,
            those roles will be automatically assigned to the user upon invitation.
          example:
            - Managers
            - Customer support
        email:
          type: string
          format: email
          description: Email address of the user.
          example: john.doe@example.com
    Change:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/UserEntity'
        - type: object
          required:
            - entity
          properties:
            applicationId:
              type: integer
              description: ID of application associated with change.
              example: 359
            entity:
              type: string
              description: API endpoint on which the change was initiated.
              example: /v1/applications/359/campaigns/6727
            old:
              type: object
              description: Resource before the change occurred.
              example: {}
            new:
              type: object
              description: Resource after the change occurred.
              example:
                applicationId": 359
                attributes": {}
                campaignGroups": []
                created": 2022-07-08T13:04:02.972762328Z
                description": ''
                features":
                  - referrals
                  - loyalty
                id: 6727
            managementKeyId:
              type: integer
              description: ID of management key used to perform changes.
              example: 3
    NewInvitation:
      type: object
      description: Parameters for inviting a new user.
      required:
        - email
      properties:
        name:
          type: string
          description: Name of the user.
          example: John Doe
        email:
          type: string
          format: email
          description: Email address of the user.
          example: john.doe@example.com
        isAdmin:
          type: boolean
          description: Indicates whether the user is an `admin`.
          example: false
        roles:
          type: array
          description: A list of the IDs of the roles assigned to the user.
          items:
            type: integer
            example: 13
        acl:
          type: string
          description: Indicates the access level of the user.
    NewInviteEmail:
      type: object
      required:
        - email
        - token
      properties:
        email:
          type: string
          description: Email address of the user.
          format: email
          example: john.doe@example.com
        token:
          type: string
          description: Invitation token of the user.
          example: Gy9b8w1irmQtEPo5RmbMmSPheL5h4
    LoginParams:
      allOf:
        - $ref: '#/components/schemas/EmailEntity'
        - type: object
          properties:
            password:
              type: string
              description: The password for your account.
              example: admin123456
          required:
            - password
    NewPasswordEmail:
      type: object
      required:
        - email
      properties:
        email:
          type: string
          format: email
          minLength: 1
    NewPassword:
      type: object
      required:
        - password
        - resetToken
      properties:
        password:
          type: string
          description: The new password for your account.
          example: Admin&12943!7
        resetToken:
          type: string
          minLength: 1
          example: Z2VgacVNkexLKBUIzsRDDZSGxnIkC53y
    NewAccount:
      type: object
      required:
        - companyName
      properties:
        companyName:
          type: string
          minLength: 1
    Account:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/NewAccount'
        - type: object
          required:
            - domainName
            - state
            - billingEmail
            - applicationCount
            - userCount
            - campaignsActiveCount
            - campaignsInactiveCount
          properties:
            domainName:
              type: string
              description: Subdomain Name for yourcompany.talon.one.
            state:
              type: string
              enum:
                - active
                - deactivated
              description: State of the account (active, deactivated).
            billingEmail:
              type: string
              format: email
              description: The billing email address associated with your company account.
            planName:
              type: string
              description: The name of your booked plan.
            planExpires:
              type: string
              format: date-time
              description: The point in time at which your current plan expires.
            applicationLimit:
              type: integer
              description: The maximum number of Applications covered by your plan.
            userLimit:
              type: integer
              description: The maximum number of Campaign Manager Users covered by your plan.
            campaignLimit:
              type: integer
              description: The maximum number of Campaigns covered by your plan.
            apiLimit:
              type: integer
              description: The maximum number of Integration API calls covered by your plan per billing period.
            applicationCount:
              type: integer
              description: The current number of Applications in your account.
            userCount:
              type: integer
              description: The current number of Campaign Manager Users in your account.
            campaignsActiveCount:
              type: integer
              description: The current number of active Campaigns in your account.
            campaignsInactiveCount:
              type: integer
              description: The current number of inactive Campaigns in your account.
            attributes:
              type: object
              description: Arbitrary properties associated with this campaign.
    AccountAnalytics:
      type: object
      required:
        - applications
        - liveApplications
        - sandboxApplications
        - campaigns
        - activeCampaigns
        - liveActiveCampaigns
        - coupons
        - activeCoupons
        - expiredCoupons
        - referralCodes
        - activeReferralCodes
        - expiredReferralCodes
        - activeRules
        - users
        - roles
        - customAttributes
        - webhooks
        - loyaltyPrograms
        - liveLoyaltyPrograms
        - lastUpdatedAt
      properties:
        applications:
          type: integer
          description: Total number of applications in the account.
          example: 11
        liveApplications:
          type: integer
          description: Total number of live applications in the account.
          example: 6
        sandboxApplications:
          type: integer
          description: Total number of sandbox applications in the account.
          example: 2
        campaigns:
          type: integer
          description: Total number of campaigns in the account.
          example: 35
        activeCampaigns:
          type: integer
          description: Total number of active campaigns in the account.
          example: 15
        liveActiveCampaigns:
          type: integer
          description: Total number of active campaigns in live applications in the account.
          example: 10
        coupons:
          type: integer
          description: Total number of coupons in the account.
          example: 850
        activeCoupons:
          type: integer
          description: Total number of active coupons in the account.
          example: 650
        expiredCoupons:
          type: integer
          description: Total number of expired coupons in the account.
          example: 200
        referralCodes:
          type: integer
          description: Total number of referral codes in the account.
          example: 500
        activeReferralCodes:
          type: integer
          description: Total number of active referral codes in the account.
          example: 100
        expiredReferralCodes:
          type: integer
          description: Total number of expired referral codes in the account.
          example: 400
        activeRules:
          type: integer
          description: Total number of active rules in the account.
          example: 35
        users:
          type: integer
          description: Total number of users in the account.
        roles:
          type: integer
          description: Total number of roles in the account.
          example: 10
        customAttributes:
          type: integer
          description: Total number of custom attributes in the account.
          example: 18
        webhooks:
          type: integer
          description: Total number of webhooks in the account.
          example: 2
        loyaltyPrograms:
          type: integer
          description: Total number of all loyalty programs in the account.
          example: 5
        liveLoyaltyPrograms:
          type: integer
          description: Total number of live loyalty programs in the account.
          example: 5
        lastUpdatedAt:
          type: string
          format: date-time
          description: The point in time when the analytics numbers were updated last.
          example: 2022-12-12T12:12:12Z
    Export:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/UserEntity'
        - type: object
          required:
            - entity
            - filter
          properties:
            entity:
              type: string
              enum:
                - Coupon
                - Referral
                - Effect
                - CustomerSession
                - LoyaltyLedger
                - LoyaltyLedgerLog
                - Collection
              description: The name of the entity that was exported.
            filter:
              type: object
              description: Map of keys and values that were used to filter the exported rows.
    RoleV2PermissionSet:
      type: object
      required:
        - name
        - logicalOperations
      properties:
        name:
          type: string
          description: Name of the permission set.
          example: Campaign manager permission set
        logicalOperations:
          type: array
          maxItems: 1000
          description: |
            List of logical operations in the permission set.
            Each logical operation must be shown under the `x-permission` tag on an endpoint level.
          items:
            type: string
          example:
            - createCampaignOperations
            - getCampaignOperations
            - deleteCampaignOperations
    RoleV2ApplicationDetails:
      type: object
      properties:
        application:
          type: string
          description: Name of the Application-related permission set for the given Application.
        campaign:
          type: string
          description: Name of the campaign-related permission set for the given Application.
        draftCampaign:
          type: string
          description: Name of the draft campaign-related permission set for the given Application.
        tools:
          type: string
          description: Name of the tools-related permission set.
          example: Tools permission set
    RoleV2Application:
      type: object
      description: A map of the link between the Application, campaign, or draft campaign-related permission set and the Application ID the permissions apply to.
      additionalProperties:
        $ref: '#/components/schemas/RoleV2ApplicationDetails'
        type: object
      example:
        '1':
          application: Application permission set
        '3':
          campaign: Campaign manager permission set
        '4':
          draftCampaign: Campaign read-only permission set
        '5':
          tools: Tools permission set
    RoleV2LoyaltyGroup:
      type: object
      description: A map of the link between the loyalty program-related permission set and the Application ID the permissions apply to.
      additionalProperties:
        type: string
        description: Name of the loyalty program-related permission set.
      example:
        '10': Loyalty program manager permission set
    RoleV2CampaignAccessGroup:
      type: object
      description: A map of the link between the campaign access group-related permission set and the Application ID the permissions apply to.
      additionalProperties:
        type: string
        description: Name of the campaign access group-related permission set.
      example:
        '5': Campaign access group manager permission set
    RoleV2RolesGroup:
      type: object
      properties:
        applications:
          $ref: '#/components/schemas/RoleV2Application'
          type: object
        loyaltyPrograms:
          $ref: '#/components/schemas/RoleV2LoyaltyGroup'
          type: object
        campaignAccessGroups:
          $ref: '#/components/schemas/RoleV2CampaignAccessGroup'
          type: object
        account:
          type: string
          description: Name of the account-level permission set
    RolesV2Thresholds:
      type: object
      properties:
        loyaltyProgramId:
          type: integer
          description: Identifier of the loyalty program. You can get the ID with the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
          example: 8
        loyaltyPointsLimit:
          type: integer
          description: Maximum number of loyalty points a support user can award without approval.
          example: 100
    RoleV2Permissions:
      type: object
      properties:
        permissionSets:
          type: array
          description: List of grouped logical operations referenced by roles.
          maxItems: 500
          items:
            $ref: '#/components/schemas/RoleV2PermissionSet'
            type: object
          example:
            - name: Application permission set
              logicalOperations:
                - getApplicationOperations
                - editApplicationOperations
            - name: Campaign manager permission set
              logicalOperations:
                - getCampaignOperations
                - createCampaignOperations
                - updateCampaignOperations
            - name: Campaign read-only permission set
              logicalOperations:
                - getCampaignOperations
            - name: Loyalty program read-only permission set
              logicalOperations:
                - getLoyaltyProgramOperations
            - name: Campaign access group manager permission set
              logicalOperations:
                - getCampaignAccessGroupOperations
                - updateCampaignAccessGroupOperations
                - deleteCampaignAccessGroupOperations
        roles:
          $ref: '#/components/schemas/RoleV2RolesGroup'
          type: object
        thresholds:
          type: array
          description: Support user limits for actions that require admin approval within the given application.
          items:
            $ref: '#/components/schemas/RolesV2Thresholds'
    RoleV2Base:
      type: object
      properties:
        name:
          type: string
          description: Name of the role.
          example: Campaign and campaign access group manager
        description:
          type: string
          description: Description of the role.
          example: Allows you to create and edit campaigns for specific Applications, delete specific campaign access groups, and view loyalty programs.
        permissions:
          $ref: '#/components/schemas/RoleV2Permissions'
          type: object
          description: The permissions that this role gives.
        members:
          type: array
          items:
            type: integer
          description: A list of user IDs the role is assigned to.
          example:
            - 10
            - 12
    RoleV2Readonly:
      type: object
      properties:
        isReadonly:
          type: boolean
          example: false
          description: Identifies if the role is read-only. For read-only roles, you can only assign or unassign users. You cannot edit any other properties, such as the name, description, or permissions. The 'isReadonly' property cannot be set for new or existing roles. It is reserved for predefined roles, such as the Talon.One support role.
          default: false
    RoleV2:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/MutableEntity'
        - $ref: '#/components/schemas/AccountEntity'
        - $ref: '#/components/schemas/RoleV2Base'
        - $ref: '#/components/schemas/RoleV2Readonly'
    UpdateStore:
      type: object
      required:
        - name
        - description
      properties:
        name:
          type: string
          description: The name of the store.
          example: South US store
          minLength: 1
          maxLength: 200
        description:
          type: string
          description: The description of the store.
          example: This is the description of the store in south US.
        attributes:
          type: object
          description: The attributes of the store.
          example:
            country: USA
            code: 1234
    NewStore:
      allOf:
        - $ref: '#/components/schemas/UpdateStore'
        - type: object
          required:
            - integrationId
          properties:
            integrationId:
              type: string
              format: string
              example: STORE-001
              maxLength: 1000
              minLength: 1
              description: |
                The integration ID of the store. You choose this ID when you create a store.

                **Note**: You cannot edit the `integrationId` after the store has been created.
    Store:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewStore'
        - type: object
          required:
            - updated
            - applicationId
            - integrationId
            - created
          properties:
            created:
              type: string
              format: date-time
              description: The time this entity was created.
              example: 2020-02-07T08:15:22Z
            applicationId:
              type: integer
              description: The ID of the Application that owns this entity.
              example: 322
            updated:
              type: string
              format: date-time
              description: Timestamp of the most recent update on this entity.
              example: 2021-09-23T10:12:42Z
            linkedCampaignIds:
              type: array
              description: A list of IDs of the campaigns that are linked with current store.
              items:
                type: integer
              example:
                - 4
                - 6
                - 8
    NewApplicationCIFExpression:
      type: object
      properties:
        cartItemFilterId:
          type: integer
          description: The ID of the Application cart item filter.
          example: 216
        createdBy:
          type: integer
          description: The ID of the user who created the Application cart item filter.
          example: 216
        expression:
          type: array
          description: Arbitrary additional JSON data associated with the Application cart item filter.
          example:
            expr:
              - filter
              - - .
                - Session
                - CartItems
              - - - Item
                - - catch
                  - false
                  - - =
                    - - .
                      - Item
                      - Category
                    - Kitchen
          items: {}
    ApplicationCIFExpression:
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/NewApplicationCIFExpression'
        - type: object
          required:
            - applicationId
          properties:
            applicationId:
              type: integer
              description: The ID of the Application that owns this entity.
              example: 322
    ListCampaignStoreBudgetsStore:
      type: object
      required:
        - id
        - integrationId
        - name
      properties:
        id:
          type: integer
        integrationId:
          type: string
        name:
          type: string
    ListCampaignStoreBudgets:
      type: object
      required:
        - store
        - limit
        - action
      properties:
        store:
          $ref: '#/components/schemas/ListCampaignStoreBudgetsStore'
          type: object
        limit:
          type: integer
        action:
          type: string
        period:
          type: string
    NewCampaignStoreBudgetStoreLimit:
      type: object
      required:
        - storeId
        - limit
      properties:
        storeId:
          type: integer
          description: |
            The ID of the store.
            You can get this ID with the [List stores](#tag/Stores/operation/listStores) endpoint.
          example: 17
        limit:
          type: number
          example: 1000
          description: The value to set for the limit.
    NewCampaignStoreBudget:
      type: object
      required:
        - action
        - storeLimits
      properties:
        action:
          type: string
          enum:
            - setDiscount
        storeLimits:
          type: array
          description: The set of budget limits for stores linked to the campaign.
          items:
            $ref: '#/components/schemas/NewCampaignStoreBudgetStoreLimit'
        period:
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
    SummaryCampaignStoreBudget:
      type: object
      required:
        - action
        - storeCount
        - imported
      properties:
        action:
          type: string
          enum:
            - redeemCoupon
            - redeemReferral
            - setDiscount
            - setDiscountEffect
            - createCoupon
            - createReferral
            - createLoyaltyPoints
            - redeemLoyaltyPoints
            - customEffect
            - createLoyaltyPointsEffect
            - redeemLoyaltyPointsEffect
            - callApi
            - awardGiveaway
            - addFreeItemEffect
            - reserveCoupon
        period:
          type: string
          enum:
            - overall
            - daily
            - weekly
            - monthly
            - yearly
        storeCount:
          type: integer
        imported:
          type: boolean
    UpdateAchievement:
      allOf:
        - $ref: '#/components/schemas/AchievementBase'
    CouponFailureSummary:
      type: object
      description: Summary of the reasons for coupon redemption failure.
      required:
        - id
        - eventID
        - couponCode
        - language
        - status
        - summary
        - createdAt
        - updatedAt
      properties:
        id:
          type: integer
          description: ID of the evaluation record.
          example: 1
        eventID:
          type: integer
          description: ID of the event.
          example: 1011
        sessionID:
          type: string
          description: ID of the customer session set by your integration layer.
          example: 1
        profileID:
          type: string
          description: ID of the customer profile set by your integration layer.
          example: a48f10dddb5c9493aad194e49bb9c1dac
        status:
          type: string
          description: Status defines if the coupon code was applied or rejected.
          example: rejected
        couponCode:
          type: string
          description: Coupon code passed for evaluation.
          example: ABC123
        language:
          type: string
          description: Language of the summary.
          example: en
        summary:
          type: string
          description: A summary of the reasons for coupon redemption failure.
          example: Session total was less than the required total.
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the request was made.
          example: 2021-07-20T21:59:00Z
        updatedAt:
          type: string
          format: date-time
          description: Timestamp when the request was last updated.
          example: 2021-07-20T21:59:00Z
  requestBodies:
    AttributeQuery:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AttributeQuery'
      description: body
      required: true
    AddLoyaltyPoints:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AddLoyaltyPoints'
      description: body
      required: true
    DeductLoyaltyPoints:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DeductLoyaltyPoints'
      description: body
      required: true
    CustomerProfileSearchQuery:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CustomerProfileSearchQuery'
      description: body
      required: true
    PriceHistory:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PriceHistoryRequest'
      description: body
      required: true
    NewAttribute:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NewAttribute'
      description: body
      required: true
    NewAdditionalCost:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NewAdditionalCost'
      description: body
      required: true
    ScimNewGroup:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ScimBaseGroup'
      description: body
      required: true
    ScimNewUser:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ScimNewUser'
      description: body
      required: true
    NewInvitation:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NewInvitation'
      description: body
      required: true
    NewStore:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NewStore'
      description: body
      required: true
  parameters:
    skip:
      name: skip
      in: query
      required: false
      description: The number of items to skip when paging through large result sets.
      example: 100
      schema:
        type: integer
    applicationId:
      name: applicationId
      in: path
      required: true
      description: The ID of the Application. It is displayed in your Talon.One deployment URL.
      example: 42
      schema:
        type: integer
    campaignId:
      name: campaignId
      in: path
      description: The ID of the campaign. It is displayed in your Talon.One deployment URL.
      example: 18
      required: true
      schema:
        type: integer
    pageSize:
      name: pageSize
      in: query
      required: false
      description: The number of items in the response.
      example: 1000
      schema:
        type: integer
        minimum: 1
        maximum: 1000
        default: 1000
    sort:
      name: sort
      in: query
      required: false
      description: |
        The field by which results should be sorted. By default, results are sorted in ascending order. To sort them in descending order, prefix the field name with `-`.

        **Note:** You may not be able to use all fields for sorting. This is due to performance limitations.
      example: name
      schema:
        type: string
