openapi: 3.0.1
info:
  title: Tally Platform API
  description: |
    This swagger defines all RESTful services that have been defined as part of the Tally Platform. Please reach out to Phaedon technical support for access keys to connect to the API.
  version: 3.0.0
externalDocs:
  description: Tally Documentation
  url: https://docs.wearephaedon.com
servers:
  - url: https://api.b.preview.loyaltyservices.io/api
tags:
  - name: member
    description: Member Service
  - name: member-address
    description: Member Address Service
  - name: member-alias
    description: Member Alias Service
  - name: member-coupon
    description: Member Coupon Service
  - name: member-currency
    description: Member Currency Service
  - name: member-email
    description: Member Email Service
  - name: member-event
    description: Member Event Service
  - name: member-list
    description: Member List Service
  - name: member-payment-card-account
    description: Member Payment Card Account Service
  - name: member-phone
    description: Member Phone Number Service
  - name: member-merge
    description: Member Merge Service
  - name: member-preference
    description: Member Preference Service
  - name: member-promotion
    description: Member Promotion Service
  - name: member-redemption
    description: Member Redemption Service
  - name: member-tier
    description: Member Tier Service
  - name: member-transaction
    description: Member Transaction Service
  - name: ping
    description: Ping Service
  - name: promotion
    description: Promotion Service
  - name: tier
    description: Tier Service
  - name: redemption
    description: Redemption Service
  - name: smart-group
    description: Smart Group Services
  - name: member-transfer-points
    description: Points Transfer Service
  - name: member-comment
    description: Member Comment Service
  - name: member-badge
    description: Member badge Service
  - name: coupon-compensation
    description: Coupon Compensation Service
  - name: member-referral
    description: Member Referral Service
  - name: background-task
    description: Background Task Service
  - name: async-task
    description: Async Task Service
  - name: system-broadcast-message
    description: Broadcast Message for Users of Tally UI
  - name: member-linked-account
    description: Member Linked Account Service
  - name: event-rule
    description: Event Rule Service
paths:
  /v3/members:
    get:
      tags:
        - member
      summary: Find Members / Verify Member
      description: 'Depending on entitlement, this service will search for members or verify the member data that was passed in'
      operationId: findVerifyMember
      parameters:
        - name: memberIdentifier
          in: query
          description: External account identifier
          schema:
            type: string
        - name: memberIds
          in: query
          description: Comma-separated internal member identifiers. Return the profile details for the matching memberIds.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: firstName
          in: query
          description: Limits results based on First Name value
          schema:
            type: string
        - name: middleName
          in: query
          description: Limits results based on Middle Name value
          schema:
            type: string
        - name: lastName
          in: query
          description: Limits results based on Last Name value
          schema:
            type: string
        - name: statusCode
          in: query
          description: Limits return to all members of this status
          schema:
            type: string
        - name: company
          in: query
          description: Limits return based on company
          schema:
            type: string
        - name: accountType
          in: query
          description: Limits return based on accountType
          schema:
            type: string
        - name: tierCode
          in: query
          description: Limits return to all members of this tier
          schema:
            type: string
        - name: email
          in: query
          description: Limits return based on email address
          schema:
            type: string
        - name: phoneNumber
          in: query
          description: Limits return based on phone number
          schema:
            type: string
        - name: city
          in: query
          description: Limits return to all members with this City demographic
          schema:
            type: string
        - name: stateCode
          in: query
          description: Limits return to all members with this state code demographic
          schema:
            type: string
        - name: zip
          in: query
          description: Limits return to all members with this Zip demographic
          schema:
            type: string
        - name: countryCode
          in: query
          description: Limits return to all members with this country code demographic
          schema:
            type: string
        - name: aliasIdentifier
          in: query
          description: Limits return to all members with this alias
          schema:
            type: string
        - name: aliasType
          in: query
          description: 'Used in conjunction with aliasIdentifier, limits return to all members with this aliasType'
          schema:
            type: string
        - name: testAccount
          in: query
          description: 'If using, only test accounts will be returned'
          schema:
            type: boolean
        - name: includeAddresses
          in: query
          description: Include member's addresses
          schema:
            type: boolean
        - name: includeEmails
          in: query
          description: Include member's emails
          schema:
            type: boolean
        - name: includePhones
          in: query
          description: Include member's phones
          schema:
            type: boolean
        - name: includePaymentCardAccounts
          in: query
          description: Include member's payment (credit) card accounts. Defaults to false.
          schema:
            type: boolean
          example: false
        - name: includeAliases
          in: query
          description: Include member's aliases
          schema:
            type: boolean
          example: false
        - name: includeCurrencies
          in: query
          description: Include member's currencies
          schema:
            type: boolean
        - name: includePreferences
          in: query
          description: Include member's preferences
          schema:
            type: boolean
          example: false
        - name: includeAuthorizedMembers
          in: query
          description: Include authorized members for the member. Authorized members are people identified who are allowed to make changes to the account when contacted by Member Services
          schema:
            type: boolean
          example: false
        - name: includeMemberLists
          in: query
          description: Includes the active member lists
          schema:
            type: boolean
        - name: includeInactive
          in: query
          description: Returns inactive emails, phones, payment cards, and member lists in addition to active ones.
          schema:
            type: boolean
            default: false
        - name: matchMode
          in: query
          description: Specifies the type of search behavior to use with the provided query parameters. This setting controls wildcard placement and matching logic. Available options include -, Start - Applies wildcard matching from the beginning of the search term ,Exact - Performs precise matching without wildcard expansion
          schema:
            type: string
            enum:
              - START
              - EXACT
            example: Start,  Exact
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberProfile'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:verify
            - api:member:search
    post:
      tags:
        - member
      summary: Enroll Member
      description: Enroll a new member in the program
      operationId: enrollMember
      parameters:
        - name: migrate
          in: query
          description: >
            "Imports a member i.e. creates or updates a Tally member including their email, address, etc.
             If a member exists with the same account number, that member will be updated; otherwise a new member is created.
             The \"api:member:migrate\" scope is required to use this parameter.
             Use this service only to migrate existing data to Tally."
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Member Enrollment Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberEnrollRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberEnrollResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}:
    get:
      tags:
        - member
      summary: Get Member Profile
      description: Retrieve a member's profile
      operationId: getMemberProfile
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: includeAddresses
          in: query
          description: Include member's addresses
          schema:
            type: boolean
          example: true
        - name: includeAliases
          in: query
          description: Include member's aliases
          schema:
            type: boolean
          example: false
        - name: includeCurrencies
          in: query
          description: Include member's currencies
          schema:
            type: boolean
          example: true
        - name: includeEmails
          in: query
          description: Include member's emails
          schema:
            type: boolean
          example: false
        - name: includePhones
          in: query
          description: Include member's phones
          schema:
            type: boolean
          example: true
        - name: includePreferences
          in: query
          description: Include member's preferences
          schema:
            type: boolean
          example: false
        - name: includePaymentCardAccounts
          in: query
          description: Include member's active payment (credit) card accounts. Defaults to false.
          schema:
            type: boolean
          example: false
        - name: includeAuthorizedMembers
          in: query
          description: Include authorized members for the member
          schema:
            type: boolean
          example: false
        - name: includeMemberLists
          in: query
          description: Includes the active member lists for this member
          schema:
            type: boolean
        - name: includeInactive
          in: query
          description: Returns inactive emails, phones, payment cards, and member lists in addition to active ones.
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberProfile'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:read
    put:
      tags:
        - member
      summary: Update Member Profile
      description: Update a member's profile.
      operationId: updateMemberProfile
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: scrub
          in: query
          description: 'Removes all PII data for the member'
          schema:
            type: boolean
            default: false
          example: true
      requestBody:
        description: Member Profile Update Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberUpdateRequest'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:modify
      x-codegen-request-body-name: body
  /v3/members/promotion:
    post:
      tags:
        - member
      summary: Register for promotion using one-click encrypted tokens.
      description: Register for promotion using Token
      operationId: registerForPromotionUsingToken
      requestBody:
        description: Register For Promotion using Token Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterForPromotionUsingTokenRequest'
        required: false
      responses:
        '200':
          description: Success
          headers:
            Trace-ID:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegisterForPromotionResponse'
        '400':
          description: Bad request
          headers:
            Trace-ID:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          headers:
            Trace-ID:
              schema:
                type: string
          content: {}
        '403':
          description: Forbidden
          headers:
            Trace-ID:
              schema:
                type: string
          content: {}
        '500':
          description: Internal error
          headers:
            Trace-ID:
              schema:
                type: string
          content: {}
      security:
        - OAuth2:
            - api:promotion:register
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/addresses:
    get:
      tags:
        - member-address
      summary: Get Member Addresses
      description: Retrieve a member's address
      operationId: getMemberAddresses
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberAddress'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-address:read
    post:
      tags:
        - member-address
      summary: Create Member Address
      description: Create a member address
      operationId: createMemberAddress
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Address Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberAddress'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberAddress'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-address:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/addresses/{memberAddressId}:
    get:
      tags:
        - member-address
      summary: Get Member Address
      description: Get a member's address
      operationId: getMemberAddress
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAddressId
          in: path
          description: Member Address identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberAddress'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-address:read
    put:
      tags:
        - member-address
      summary: Update Member Address
      description: Update a member's address
      operationId: updateMemberAddress
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAddressId
          in: path
          description: Member Address identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Address Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberAddress'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-address:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-address
      summary: Delete Member Address
      description: Delete a member's address
      operationId: deleteMemberAddress
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAddressId
          in: path
          description: Member Address identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-address:modify
  /v3/members/{memberIdentifier}/linked-accounts:
    post:
      tags:
        - member-linked-account
      summary: Links individual member account to an another member account
      description: Create a Member linked account
      operationId: createMemberLinkedAccount
      parameters:
        - name: memberIdentifier
          in: path
          required: true
          description: Member identifier
          schema:
            type: string
            minLength: 1
            maxLength: 200
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberLinkedAccountRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberLinkedAccountResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-linked-account:modify
      x-codegen-request-body-name: body
    get:
      tags:
        - member-linked-account
      summary: Retrieve member accounts linked to another member
      description: Returns a list of member accounts associated with the specified member account, where the link is currently active (EndDate is null or in the future).
      operationId: getMemberLinkedAccounts
      parameters:
        - name: memberIdentifier
          in: path
          required: true
          description: Member identifier
          schema:
            type: string
            minLength: 1
            maxLength: 200
        - name: linkedType
          in: query
          description: Type of link between the members
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
          example: CORP
      responses:
        '200':
          description: List of linked member accounts
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LinkedMemberAccount'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-linked-account:read
  /v3/members/{memberIdentifier}/linked-accounts/{linkedMemberIdentifier}:
    put:
      tags:
        - member-linked-account
      summary: Unlink Member Linked account
      description: Unlink individual member account from a linked account
      operationId: unlinkMemberLinkedAccount
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: linkedMemberIdentifier
          in: path
          description: Linked Member Identifier (i.e, Corporate Account Id)
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: linkedType
          in: query
          description: Type of link between the members
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
          example: CORP
        - name: unlink
          in: query
          description: Indicates whether to disassociate the accounts.
            If true, the account link will be end-dated. If false or omitted, the API will proceed to handle the admin flag.
          required: false
          schema:
            type: boolean
            default: false
        - name: admin
          in: query
          description:
            Indicates whether the associated member is an administrator. If true, administrator flag will be set to 1.
            If false, administrator flag will be set to 0. Ignored if unlink=true.
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkedMemberAccount'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-linked-account:modify
  /v3/members/{memberIdentifier}/aliases:
    get:
      tags:
        - member-alias
      summary: Get Member Aliases
      description: Retrieve a member's aliases
      operationId: getMemberAliases
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberAlias'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-alias:read
    post:
      tags:
        - member-alias
      summary: Create Member Alias
      description: Create a member's alias
      operationId: createMemberAlias
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Alias object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberAlias'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberAlias'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-alias:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/aliases/{memberAliasId}:
    get:
      tags:
        - member-alias
      summary: Get Member Alias
      description: Get a member's alias
      operationId: getMemberAlias
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAliasId
          in: path
          description: Member Alias identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberAlias'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-alias:read
    put:
      tags:
        - member-alias
      summary: Update Member Alias
      description: Update a member's Alias
      operationId: updateMemberAlias
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAliasId
          in: path
          description: Member Alias identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Alias Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberAlias'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-alias:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-alias
      summary: Delete Member Alias
      description: Delete a member's alias
      operationId: deleteMemberAlias
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberAliasId
          in: path
          description: Member Alias identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-alias:modify
  /v3/members/{memberIdentifier}/currencies:
    get:
      tags:
        - member-currency
      summary: Get Member Currencies
      description: Retrieve a member's currencies
      operationId: getMemberCurrencies
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberCurrency'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-currency:read
    post:
      tags:
        - member-currency
      summary: Adjust member currency
      description: Add a currency adjustment to the member
      operationId: adjustMemberCurrency
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: migrate
          in: query
          description: >
            "Imports a currency adjustment i.e. creates or updates a Tally adjustment without updating point balances
             or triggering bonuses or promotions. If an adjustment exists with the same account number and external reference, 
             that adjustment will be updated; otherwise a new adjustment is created.
             If multiple adjustments should be displayed together, assign them the same sharedExternalReference. 
             A point value must be provided in the amount property.
             The \"api:member-currency:migrate\" scope is required to use this parameter.
             Use this parameter only to migrate existing data to Tally."
          schema:
            type: boolean
            default: false
        - name: migrateBalance
          in: query
          description: >
            Imports a member's currency balance i.e. posts an adjustment for the difference between current balance and requested balance.\
             The \"api:member-currency:migrate\" scope is required to use this parameter.
             Use this parameter only to migrate existing data to Tally.
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            Submits the operation for background processing and returns a ‘202 Accepted’ response
            along with an identifier to track the processing status.
            Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Adjust Currency Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdjustCurrencyRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-currency:adjust
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/currencies/{currencyTypeCode}:
    get:
      tags:
        - member-currency
      summary: Get member currency buckets
      description: Retrieve detailed member currency buckets based on currency type
      operationId: getMemberCurrencyBucket
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: currencyTypeCode
          in: path
          description: Member currency type identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
          example: WR
        - name: filterOnlyAvailable
          in: query
          description: Filters the currency buckets to show only buckets with available currency balance; defaults to false
          schema:
            type: boolean
          example: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberCurrencyBucket'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-currency:read
  /v3/members/{memberIdentifier}/coupons:
    get:
      tags:
        - member-coupon
      summary: Get Member Coupons
      description: Retrieve a member's coupons.
      operationId: getMemberCoupons
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: aggregateStatusCode
          in: query
          description: 'Limits return to all coupons of this status code, One of Used, Held, Issued, Expired, Cancelled'
          schema:
            type: string
        - name: offerType
          in: query
          description: 'Limits response to coupons of this offer type'
          schema:
            type: string
        - name: includeAttributes
          in: query
          description: Includes Attributes in matching coupons
          schema:
            type: boolean
        - name: includeUses
          in: query
          description: Includes Uses in matching coupons
          schema:
            type: boolean
        - name: includeOfferAttributes
          in: query
          description: Includes Offer Attributes in matching coupons
          schema:
            type: boolean
        - name: includeTransferData
          in: query
          description: Includes transferability information in each coupon response
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberCoupon'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon:read
  /v3/members/{memberIdentifier}/coupons/{couponCode}:
    get:
      tags:
        - member-coupon
      summary: Get Member Coupon By Coupon Code
      description: Retrieve a member's coupon by coupon code.
      operationId: getMemberCouponByCouponCode
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
        - name: includeAttributes
          in: query
          description: Includes Attributes in matching coupons
          schema:
            type: boolean
        - name: includeUses
          in: query
          description: Includes Uses in matching coupons
          schema:
            type: boolean
        - name: includeOfferAttributes
          in: query
          description: Includes Offer Attributes in matching coupons
          schema:
            type: boolean
        - name: includeTransferData
          in: query
          description: Includes transferability information in each coupon response
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCoupon'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon:read
    delete:
      tags:
        - member-coupon
      summary: Cancel member coupon
      description: Cancel a member coupon and its uses
      operationId: cancelMemberCoupon
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique coupon identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCoupon'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon-use:cancel
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/coupons/{couponCode}/transfer:
    post:
      tags:
        - member-coupon
      summary: Transfer Coupon
      description: Transfer a coupon to another member
      operationId: postMemberCouponTransfer
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
      requestBody:
        description: Use Coupon Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponTransferRequest'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon:transfer
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/coupons/{couponCode}/uses:
    post:
      tags:
        - member-coupon
      summary: Post Coupon Use
      description: Post a coupon use or hold
      operationId: postMemberCouponUse
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
        - name: holdCoupon
          in: query
          description: 'If set to true, will place a hold on the coupon instead of a use. Dependent on client program configuration.'
          schema:
            type: boolean
            default: false
          example: true
        - name: validateOnly
          in: query
          description: 'If set to true, will only validate the coupon attributes utilized in the request. Will not create a hold or use.'
          schema:
            type: boolean
            default: false
          example: true
        - name: validateCouponValidToday
          in: query
          description: "If false, the system will ignore the start/end date and accept today's date as valid"
          schema:
            type: boolean
            default: true
          example: true
        - name: includeCouponReward
          in: query
          description: 'If true, the couponReward sub-object will be returned in the response. This object contains details on the reward earned by using this coupon.'
          schema:
            type: boolean
            default: false
          example: true
      requestBody:
        description: Use Coupon Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponUseRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CouponUseResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon-use:update
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-coupon
      summary: Cancel coupon use(s)
      description: Cancel coupon uses associated with a specific member coupon
      operationId: cancelMemberCouponUse
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique coupon identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCoupon'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon-use:cancel
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/coupons/{couponCode}/uses/{couponUseId}:
    put:
      tags:
        - member-coupon
      summary: Edit Coupon Use
      description: Update a pre-existing coupon use
      operationId: editMemberCouponUse
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
        - name: couponUseId
          in: path
          description: Coupon Use Id
          required: true
          schema:
            type: integer
            format: int64
        - name: holdCoupon
          in: query
          description: 'If set to true, will place a hold on the coupon instead of a use. Dependent on client program configuration.'
          schema:
            type: boolean
        - name: validateCouponValidToday
          in: query
          description: "If true, the system will ignore the start/end date and accept today's date as valid"
          schema:
            type: boolean
      requestBody:
        description: Use Coupon Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponUseRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CouponUseResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon-use:update
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-coupon
      summary: Return Coupon Use
      description: Return an existing coupon use
      operationId: returnMemberCouponUse
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
        - name: couponUseId
          in: path
          description: Coupon Use Id
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Coupon Use Return Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponUseReturnRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CouponUseResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-coupon-use:cancel
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/earnings:
    post:
      tags:
        - member-transaction
      summary: Post Earning
      description:
        'Submits a transaction through the earnings process. It will go
        through the entire process synchronously. If there is a failure, the transaction
        will be rolled back.'
      operationId: postEarningsForProcessing
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: migrate
          in: query
          description: >
            "Imports a transaction i.e. creates or updates a Tally transaction without updating point balances
             or triggering bonuses or promotions. If a transaction exists with the same account number and reference ID, 
             that transaction will be updated; otherwise a new transaction is created.
             A point value is not calculated for the transaction but can be provided in the providedAmount property.
             The \"api:transaction:migrate\" scope is required to use this parameter.
             Use this parameter only to migrate existing data to Tally."
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a '202 Accepted' response
            along with an identifier to track the processing status.
            Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
        - name: isRetro
          in: query
          description: >
            "Indicates this is a retroactive hotel transaction. When true and referenceId is not provided,
            the system will auto-generate a unique referenceId based on transaction details.
            Only applies to hotel transactions."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Transaction Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:transaction:submit
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/earnings-group:
    post:
      tags:
        - member-transaction
      summary: Post Transaction Group for Earnings Processing
      description: 'This will submit a transaction group through the earnings process.'
      operationId: postEarningsGroupForProcessing
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: validateOnly
          in: query
          description: 'This parameter is only available for travel industry clients. If set to true, will only validate the transaction group and earnings will not be saved. The response will identify the points earned as if the earning group was posted.'
          schema:
            type: boolean
            default: false
          example: true
      requestBody:
        description: Transaction Group Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionGroupRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:transaction:submit
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/emails:
    get:
      tags:
        - member-email
      summary: Get Member Emails
      description: Retrieve a member's emails
      operationId: getMemberEmails
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberEmail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-email:read
    post:
      tags:
        - member-email
      summary: Create Member Email
      description: Create a member's email
      operationId: createMemberEmail
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Email Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberEmail'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberEmail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-email:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/emails/{memberEmailId}:
    get:
      tags:
        - member-email
      summary: Get Member Email
      description: Get a member's email
      operationId: getMemberEmail
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberEmailId
          in: path
          description: Member Email identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberEmail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-email:read
    put:
      tags:
        - member-email
      summary: Update Member Email
      description: Update a member's email
      operationId: updateMemberEmail
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberEmailId
          in: path
          description: Member Email identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Email Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberEmail'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-email:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-email
      summary: Delete Member Email
      description: Delete a member's email
      operationId: deleteMemberEmail
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberEmailId
          in: path
          description: Member Email identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-email:modify
  /v3/members/{memberIdentifier}/lists:
    get:
      tags:
        - member-list
      summary: Get member's lists
      description: Retrieve the member lists that a member belongs to
      operationId: getListMembers
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: includeInactive
          in: query
          description: 'If true, returns inactive member lists'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ListMember'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:read
  /v3/members/{memberIdentifier}/lists/{memberListId}:
    post:
      tags:
        - member-list
      summary: Add to member list
      description: Include a member in a member list
      operationId: addToMemberList
      parameters:
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
            along with an identifier to track the processing status.
            Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberListId
          in: path
          description: Member list identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:modify
    delete:
      tags:
        - member-list
      summary: Remove from member list
      description: Exclude a member from a member list
      operationId: removeFromMemberList
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberListId
          in: path
          description: Member list identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:modify
  /v4/members/{memberIdentifier}/lists/{memberListCode}:
    post:
      tags:
        - member-list
      summary: Add to member list
      description: Include a member in a member list
      operationId: addToMemberListV4
      parameters:
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberListCode
          in: path
          description: Member list code
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListMember'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:modify
    delete:
      tags:
        - member-list
      summary: Remove from member list
      description: Exclude a member from a member list
      operationId: removeFromMemberListV4
      parameters:
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberListCode
          in: path
          description: Member list code
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content: {}
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:modify
  /v3/members/{memberIdentifier}/payment-card-accounts:
    get:
      tags:
        - member-payment-card-account
      summary: Get Member Payment Card Accounts
      description: Retrieve a member's payment (credit) card accounts
      operationId: getMemberPaymentCardAccounts
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberPaymentCardAccount'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-payment-card:read
    post:
      tags:
        - member-payment-card-account
      summary: Create Member Payment Card Account
      description: Create a member payment card account
      operationId: createMemberPaymentCard
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Payment Card Account Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPaymentCardAccount'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPaymentCardAccount'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-payment-card:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/payment-card-accounts/{memberPaymentCardAccountId}:
    get:
      tags:
        - member-payment-card-account
      summary: Get Member Payment Card Account
      description: Get a member's payment card account
      operationId: getMemberPaymentCardAccount
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPaymentCardAccountId
          in: path
          description: Member Payment Card Account identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPaymentCardAccount'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-payment-card:read
    put:
      tags:
        - member-payment-card-account
      summary: Update Member Payment Card Account
      description: Update a member's payment card account
      operationId: updateMemberPaymentCardAccount
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPaymentCardAccountId
          in: path
          description: Member Payment Card Account identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Payment Card Account Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPaymentCardAccount'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-payment-card:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-payment-card-account
      summary: Delete Member Payment Card Account
      description: Delete a member's payment card account
      operationId: deleteMemberPaymentCardAccount
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPaymentCardAccountId
          in: path
          description: Member Payment Card Account identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-payment-card:modify
  /v3/members/{memberIdentifier}/phones:
    get:
      tags:
        - member-phone
      summary: Get Member Phone Numbers
      description: Retrieve a member's phone numbers
      operationId: getMemberPhones
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberPhone'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-phone:read
    post:
      tags:
        - member-phone
      summary: Create Member Phone Number
      description: Create a member's phone number
      operationId: createMemberPhone
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Phone Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPhone'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPhone'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-phone:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/phones/{memberPhoneId}:
    get:
      tags:
        - member-phone
      summary: Get Member Phone
      description: Get a member's phone number
      operationId: getMemberPhone
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPhoneId
          in: path
          description: Member Phone identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPhone'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-phone:read
    put:
      tags:
        - member-phone
      summary: Update Member Phone
      description: Update a member's phone number
      operationId: updateMemberPhone
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPhoneId
          in: path
          description: Member Phone identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Phone Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPhone'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-phone:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-phone
      summary: Delete Member Phone
      description: Delete a member's phone number
      operationId: deleteMemberPhone
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPhoneId
          in: path
          description: Member Phone identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-phone:modify
  /v3/members/{memberIdentifier}/preferences:
    get:
      tags:
        - member-preference
      summary: Get Member Preferences
      description: Retrieve a member's preferences
      operationId: getMemberPreferences
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberPreference'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-preference:read
    post:
      tags:
        - member-preference
      summary: Create Member Preference
      description: Create a member's preference
      operationId: createMemberPreference
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Member Preference Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPreference'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPreference'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-preference:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/preferences/{memberPreferenceId}:
    get:
      tags:
        - member-preference
      summary: Get Member Preference
      description: Get a member's preference
      operationId: getMemberPreference
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPreferenceId
          in: path
          description: Member Preference identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPreference'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-preference:read
    put:
      tags:
        - member-preference
      summary: Update Member Preference
      description: Update a member's preference
      operationId: updateMemberPreference
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPreferenceId
          in: path
          description: Member Preference identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Member Preference Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberPreference'
        required: false
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-preference:modify
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-preference
      summary: Delete Member Preference
      description: Delete a member's preference
      operationId: deleteMemberPreference
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPreferenceId
          in: path
          description: Member Preference identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-preference:modify
  /v3/members/{memberIdentifier}/promotions:
    get:
      tags:
        - member-promotion
      summary: Get Member Promotions
      description: Retrieve a member's registered promotions
      operationId: getMemberPromotions
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: cycle
          in: query
          description: 'The specific promotion cycle, defaults to current/latest'
          schema:
            type: integer
            format: int64
          example: 2
        - name: includeCouponDetails
          in: query
          description: 'If true, returns member coupon details'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberPromotion'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-promotion:read
    post:
      tags:
        - member-promotion
      summary: Register member for promotion
      description: Register member for promotion
      operationId: registerMemberForPromotion
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        description: Register For Promotion Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterForPromotionRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegisterForPromotionResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-promotion:register
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/promotions/{memberPromotionId}:
    get:
      tags:
        - member-promotion
      summary: Get Member Promotion By Member Promotion Id
      description: Retrieve a member's registered promotion by member promotion id
      operationId: getMemberPromotionsById
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberPromotionId
          in: path
          description: Member Promotion identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: cycle
          in: query
          description: 'The specific promotion cycle, defaults to current/latest'
          schema:
            type: integer
            format: int64
        - name: includeCouponDetails
          in: query
          description: 'If true, returns member coupon details'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberPromotion'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-promotion:read
  /v3/members/{memberIdentifier}/redemptions:
    get:
      tags:
        - member-redemption
      summary: Get Member Redemptions
      description: Retrieve a member's redemptions
      operationId: getMemberRedemptions
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberRedemption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:read
    post:
      tags:
        - member-redemption
      summary: Create Member Redemption
      description: Redeem redemption item
      operationId: createMemberRedemption
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: createCouponUse
          in: query
          description: 'If the redemption item creates coupons, this will place a hold or use on those coupons'
          schema:
            type: boolean
            default: false
          example: false
        - name: holdCoupon
          in: query
          description: 'If set to true, will place a hold on the coupon instead of a use. Dependent on client program configuration.'
          schema:
            type: boolean
            default: false
          example: false
        - name: validateOnly
          in: query
          description: 'If set to true, will only validate the redemption and not place the order.'
          schema:
            type: boolean
            default: false
          example: false
        - name: allowOverRedeem
          in: query
          description: >
            Allow redemption where the member point balance can be less then
            zero after the redemption is issued. Requester must have entitlement of
            api:member-redemption:over-redeem to perform this.
          schema:
            type: boolean
            default: false
          example: false
        - name: migrate
          in: query
          description: >
            "Imports a redemption i.e. creates or updates a Tally redemption without updating point balances.
             If a redemption exists with the same account number and reference ID, that redemption will be updated;
             otherwise a new redemption is created.
             A point value is not calculated for the redemption but can be provided in the providedAmount property.
             The \"api:member-redemption:migrate\" scope is required to use this parameter.
             Use this parameter only to migrate existing data to Tally."
          schema:
            type: boolean
            default: false
        - name: skipFraudCheck
          in: query
          description: >
            "Set to true to bypass fraud detection and complete the redemption.
             Requires the \"api:member-redemption-fraud:modify\" scope.
             Use case: When a redemption is initially blocked due to fraud detection,
             an authorized agent can review the case and retry the redemption with
             this flag set to true to override the fraud check and complete the transaction."
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Member Redemption Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberRedemptionRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:create
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/redemptions/{memberRedemptionId}:
    get:
      tags:
        - member-redemption
      summary: Get Member Redemption By Member Redemption Id
      description: Retrieve a member's redemption by member redemption id
      operationId: getMemberRedemptionById
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberRedemptionId
          in: path
          description: Member Redemption identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:read
    patch:
      tags:
        - member-redemption
      summary: Patch Member Redemption
      description: Performs a partial update (PATCH) on a Member Redemption. Only the status , expectedShipDate, invoiceNumber and transactionAmount fields can be modified.
      operationId: patchMemberRedemption
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberRedemptionId
          in: path
          description: Identifies member redemption to patch.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberRedemption'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:patch
    put:
      tags:
        - member-redemption
      summary: Modify Member Redemption
      description: 'Modify an existing Member Redemption. <br>
        This service cancels the existing redemption(and related coupons) and issues a new one with the details supplied.<br><br>
        Note that once modified the existing memberRedemptionId passed in the request will be canceled and the memberRedemptionId in the response should be used as a reference for this redemption.'
      operationId: modifyMemberRedemption
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberRedemptionId
          in: path
          description: Existing Member Redemption that is being modified.
          required: true
          schema:
            type: integer
            format: int64
          example: 12345
        - name: createCouponUse
          in: query
          description:
            'If the redemption item creates coupons, this will place a hold
            or use on those coupons'
          schema:
            type: boolean
            default: false
          example: false
        - name: holdCoupon
          in: query
          description:
            'If set to true, will place a hold on the coupon instead of a
            use. Dependent on client program configuration.'
          schema:
            type: boolean
            default: false
          example: false
        - name: allowOverRedeem
          in: query
          description:
            Allow redemption where the member point balance can be less then
            zero after the redemption is issued. Requester must have entitlement of
            api:member-redemption:over-redeem to perform this.
          schema:
            type: boolean
            default: false
          example: false
        - name: async
          in: query
          description:
            'Submits the operation for background processing and returns a ''202 Accepted'' response
            along with an identifier to track the processing status.
            Requires the "api:async-task:create" scope.'
          schema:
            type: boolean
            default: false
      requestBody:
        description: Member Redemption Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberRedemptionRequest'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:create
            - api:member-redemption:cancel
      x-codegen-request-body-name: body
    delete:
      tags:
        - member-redemption
      summary: Cancel Member Redemption
      description: Cancel a member's redemption
      operationId: cancelMemberRedemption
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberRedemptionId
          in: path
          description: Member Redemption identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: doNotRedeposit
          in: query
          description: Set to true if the points should not be returned back to the member. The redemption will still be canceled as well as the coupons.
          schema:
            type: boolean
            default: false
          example: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:cancel
  /v3/members/{memberIdentifier}/redemptions/referenceId;{referenceId}:
    get:
      tags:
        - member-redemption
      summary: Get Member Redemption By Reference Id
      description: Retrieve a member's redemption by reference id
      operationId: getMemberRedemptionByReferenceId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: referenceId
          in: path
          description: Client redemption reference identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRedemption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:read
  /v3/members/{memberIdentifier}/redemptions/aggregates:
    get:
      tags:
        - member-redemption
      summary: Get Member Redemption Aggregates
      description: Search for member's redemption aggregates
      operationId: getMemberRedemptionAggregates
      parameters:
        - name: memberIdentifier
          in: path
          description: Channel/Partner specific member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: fromDate
          in: query
          description: Redemption date must be greater than or equal to this date. Defaults to 90 days ago.
          schema:
            type: string
            format: date
          example: 2000-01-01
        - name: toDate
          in: query
          description: Redemption date must be less than or equal to this date. Defaults to today.
          schema:
            type: string
            format: date
          example: 2999-12-31
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TransactionCurrency'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-redemption:read
  /v3/members/{memberIdentifier}/tiers:
    get:
      tags:
        - member-tier
      summary: Get Member Tiers
      description: Retrieve a member's tiers. This will return current and all future tiers.
      operationId: getMemberTiers
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberTiersResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-tier:read
    post:
      tags:
        - member-tier
      summary: Update Member Tier
      description: Updates a member's current Tier.
      operationId: updateMemberTier
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: migrate
          in: query
          description: 'Imports a member''s tier. The "api:member-tier:migrate" scope is required to use this parameter. Use this service only to migrate existing data to Tally.'
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberTierRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberTier'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-tier:adjust
  /v3/members/{memberIdentifier}/rollover:
    post:
      tags:
        - member-tier
      summary: Rollover Member
      description: Trigger a member's tier rollover
      operationId: postMemberRollover
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-tier:adjust
  /v3/members/{memberIdentifier}/transactions:
    get:
      tags:
        - member-transaction
      summary: Get Member Transactions
      description: "Search for member's transactions, redemptions, and others"
      operationId: findMemberTransactions
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: fromDate
          in: query
          description: Transaction date must be greater than or equal to this date. Defaults to 90 days ago.
          schema:
            type: string
            format: date
          example: 2000-01-01
        - name: toDate
          in: query
          description: Transaction date must be less than or equal to this date. Defaults to today.
          schema:
            type: string
            format: date
          example: 2999-12-31
        - name: type
          in: query
          description: Limits response to transactions of this type. Defaults to Earning.
          schema:
            type: string
            enum:
              - Earning
              - Earning-Base
              - Earning-Partner
              - Earning-Bonus
              - Earning-Promotion
              - Earning-Adjustment
              - Earning-PointPurchase
              - Earning-Gift
              - Earning-TierRollover
              - Redemption
              - Redemption-Item
              - Redemption-Travel
              - Redemption-Award
              - Redemption-PartnerItem
              - Redemption-Event
              - Redemption-NonTravel
              - PointExpiration
              - All
          example: Earning-Bonus
        - name: includeMergeDetails
          in: query
          description: Includes the transactions.mergeDetails section in the response. This includes details on where a transaction came from if it was merged into this member account.
          schema:
            type: boolean
            default: false
        - name: includeRelationships
          in: query
          description: Includes details of related transactions in the transactions.transactionRelationships section of the response.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
  /v3/members/{memberIdentifier}/transactions/{transactionId}:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction
      description: Get a member's transaction
      operationId: getMemberTransaction
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionId
          in: path
          description: Tally transaction identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
    put:
      tags:
        - member-transaction
      summary: Edit Member Transaction
      description: Edit a member's transaction
      operationId: editMemberTransaction
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionId
          in: path
          description: Tally transaction identifier
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberTransactionUpdateRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:modify
    delete:
      tags:
        - member-transaction
      summary: Cancel Member Transaction
      description: Cancel a member's transaction
      operationId: cancelMemberTransaction
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionId
          in: path
          description: Tally transaction identifier
          required: true
          schema:
            type: string
      requestBody:
        required: false
        description: Cancellation comment details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelCallLog'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:cancel
  /v3/members/{memberIdentifier}/transactions/{transactionId}/clone/{targetMemberIdentifier}:
    post:
      tags:
        - member-transaction
      summary: Clone Member Transaction
      description:
        'Clones an existing transaction from the source member to the target member.
        The cloned transaction will go through the complete earnings process including
        validation, bonus rules, and promotions in the context of the target member.'
      operationId: cloneMemberTransaction
      parameters:
        - name: memberIdentifier
          in: path
          description: Source member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionId
          in: path
          description: Tally transaction identifier to clone
          required: true
          schema:
            type: string
        - name: targetMemberIdentifier
          in: path
          description: Target member identifier (e.g., corporate account)
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: prefix
          in: query
          description: Prefix to append to beginning of Reference Id.
          required: false
          schema:
            type: string
        - name: cancelSource
          in: query
          description: Cancels existing transaction before cloning it.
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:transaction:clone
  /v3/members/{memberIdentifier}/transactions/referenceId;{referenceId}:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction By Reference Id
      description: Get a member's transaction by reference id
      operationId: getMemberTransactionByReferenceId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: referenceId
          in: path
          description: External transaction reference identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
    delete:
      tags:
        - member-transaction
      summary: Cancel Member Transaction By Reference Id
      description: Cancel a member's transaction by reference id
      operationId: cancelMemberTransactionByReferenceId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: referenceId
          in: path
          description: External transaction reference identifier
          required: true
          schema:
            type: string
      requestBody:
        required: false
        description: Cancellation comment details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelCallLog'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:cancel
  /v3/members/{memberIdentifier}/transaction-groups:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction Groups
      description: "Search for member's earnings, redemptions, and others aggregated by transaction group"
      operationId: findMemberTransactionGroups
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: fromDate
          in: query
          description: Transaction date must be greater than or equal to this date. Defaults to 90 days ago.
          schema:
            type: string
            format: date
        - name: toDate
          in: query
          description: Transaction date must be less than or equal to this date. Defaults to today.
          schema:
            type: string
            format: date
        - name: type
          in: query
          description: Limits response to transactions of this type. Defaults to Earning.
          schema:
            type: string
            enum:
              - Earning
              - Earning-Base
              - Earning-Partner
              - Earning-Bonus
              - Earning-Promotion
              - Earning-Adjustment
              - Earning-PointPurchase
              - Earning-Gift
              - Earning-TierRollover
              - Redemption
              - Redemption-Item
              - Redemption-Travel
              - Redemption-Award
              - Redemption-PartnerItem
              - Redemption-Event
              - Redemption-NonTravel
              - PointExpiration
              - All
        - name: includeMergeDetails
          in: query
          description: Includes the transactions.mergeDetails section in the response. This includes details on where a transaction came from if it was merged into this member account.
          schema:
            type: boolean
            default: false
        - name: includeRelationships
          in: query
          description: Includes details of related transactions in the transactions.transactionRelationships section of the response.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TransactionGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
  /v3/members/{memberIdentifier}/transaction-groups/{transactionGroupId}:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction Group By Transaction Group Id
      description: Get member transaction group by transaction group id
      operationId: getMemberTransactionGroupById
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionGroupId
          in: path
          description: Transaction group identifier
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
    delete:
      tags:
        - member-transaction
      summary: Cancel Member Transaction Group By Transaction Group Id
      description: Cancel a member's transaction group by transaction group id
      operationId: cancelMemberTransactionGroupByTransactionGroupId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionGroupId
          in: path
          description: 'Tally transaction group identifier, used to unify transactions'
          required: true
          schema:
            type: string
      requestBody:
        required: false
        description: Cancellation comment details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelCallLog'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:cancel
  /v3/members/{memberIdentifier}/transaction-groups/transactionGroupReferenceId;{transactionGroupReferenceId}:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction Group By Transaction Group Reference Group Id
      description: Get member transaction group by transaction Group reference group id
      operationId: getMemberTransactionGroupByTransactionGroupReferenceId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionGroupReferenceId
          in: path
          description: 'Client transaction group identifier, used to unify transactions'
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
    delete:
      tags:
        - member-transaction
      summary: Cancel Member Transaction Group By Transaction Group Reference Id
      description: Cancel a member's transaction group by transaction group reference id
      operationId: cancelMemberTransactionGroupByTransactionGroupReferenceId
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: transactionGroupReferenceId
          in: path
          description: 'Client transaction group identifier, used to unify transactions'
          required: true
          schema:
            type: string
      requestBody:
        required: false
        description: Cancellation comment details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelCallLog'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:cancel
  /v3/members/{memberIdentifier}/transactions/aggregates:
    get:
      tags:
        - member-transaction
      summary: Get Member Transaction Aggregates
      description: Search for member's transactions aggregates
      operationId: getMemberTransactionAggregates
      parameters:
        - name: memberIdentifier
          in: path
          description: Channel/Partner specific member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: fromDate
          in: query
          description: Transaction date must be greater than or equal to this date. Defaults to 90 days ago.
          schema:
            type: string
            format: date
          example: 2000-01-01
        - name: toDate
          in: query
          description: Transaction date must be less than or equal to this date. Defaults to today.
          schema:
            type: string
            format: date
          example: 2999-12-31
        - name: type
          in: query
          description: Limits response to transactions of this type. Defaults to All.
          schema:
            type: string
            enum:
              - All
              - Base
              - Bonus
              - Partner
              - Promotion
              - TransactionAmount
          example: Bonus
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionAggregate'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
  /v3/members/{memberIdentifier}/transactions/aggregates/yearly:
    get:
      tags:
        - member-transaction
      summary: Retrieve member transaction data, aggregated and grouped by year.
      description: Retrieve member transaction data, aggregated and grouped by year.
      operationId: getMemberTransactionAggregatesGroupByYear
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: fromYear
          in: query
          description: Year from which transactions should be retrieved. Defaults to first day of current year.
          schema:
            type: integer
            description: Year value
            format: int32
          example: 2025
        - name: toYear
          in: query
          description: Year up to which transactions should be retrieved. Defaults to one year from now.
          schema:
            type: integer
            description: Year value
            format: int32
          example: 2026
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TransactionAggregateYearGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-transaction:read
  /v3/members/{accountNumber}/transfer:
    post:
      tags:
        - member-transfer-points
      summary: Transfer Points
      description: Transfers points from one member to another
      operationId: TransferPoints
      parameters:
        - name: accountNumber
          in: path
          description: AccountNumber of the sender (from whom the points are taken)
          required: true
          schema:
            type: string
          example: A234567890
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PointsTransferRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointsTransferResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '500':
          description: Internal Error
          content: {}
      security:
        - OAuth2:
            - api:member-transfer:transfer
      x-codegen-request-body-name: body
  /v4/members/{memberIdentifier}/comments:
    get:
      tags:
        - member-comment
      summary: Get Member Comments
      description: Retrieve a paginated list of comments of a member.
      operationId: getMemberCommentsv4
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: startDate
          in: query
          description: Excludes member comments older than this date
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: endDate
          in: query
          description: Excludes member comments newer than this date
          schema:
            type: string
            format: date
          example: 2024-06-01
        - name: includeClosed
          in: query
          description: Include closed comments
          schema:
            type: boolean
            default: false
        - name: commentReason
          in: query
          description: Comment reason
          schema:
            type: string
        - name: pageNumber
          description: 'requested results page (1 if not present)'
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: pageSize
          description: 'requested number of items per page'
          in: query
          required: false
          schema:
            type: integer
            default: 500
            maximum: 500
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCommentResponseV4'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:read
  /v3/members/{memberIdentifier}/comments:
    get:
      tags:
        - member-comment
      summary: Get Member Comments
      description: Retrieve list of comments of a member.
      operationId: getMemberComments
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: startDate
          in: query
          description: Excludes member comments older than this date
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: endDate
          in: query
          description: Excludes member comments newer than this date
          schema:
            type: string
            format: date
          example: 2024-06-01
        - name: includeClosed
          in: query
          description: Include closed comments
          schema:
            type: boolean
            default: false
        - name: commentReason
          in: query
          description: Comment reason
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberComment'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:read
    post:
      tags:
        - member-comment
      summary: Create a member comment
      description: Create a comment for a member
      operationId: createMemberComment
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberCommentRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberComment'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '500':
          description: Internal Error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/comments/{commentId}:
    get:
      tags:
        - member-comment
      summary: Get the comment associated with given commentId
      description: Retrieve a member's comment for given commentId.
      operationId: getMemberComment
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: commentId
          in: path
          description: Comment Identifier
          required: true
          schema:
            maxLength: 10
            minLength: 1
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberComment'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:read
    put:
      tags:
        - member-comment
      summary: Update Member Comments
      description: Update Member Comments
      operationId: updateComments
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: commentId
          in: path
          description: Comments Identifier
          required: true
          schema:
            maxLength: 10
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberCommentRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberComment'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:modify
      x-codegen-request-body-name: body
  /v3/members/comments/status:
    put:
      tags:
        - member-comment
      summary: Update Status for Member Comments
      description: Update the status of multiple member comments based on their type
      operationId: updateCommentStatus
      requestBody:
        content:
          application/json:
            schema:
              required:
                - commentIds
                - status
              type: object
              properties:
                commentIds:
                  type: array
                  items:
                    type: integer
                    description: Comment Identifier
                    format: int64
                    example: 123456
                status:
                  type: string
                  description: Status of member comment
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberComment'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:modify
      x-codegen-request-body-name: body
  /v3/members/comments:
    get:
      tags:
        - member-comment
      summary: Retrieve member comments
      description: Retrieve member comments and/or user tasks
      operationId: findMemberComments
      parameters:
        - name: startDate
          in: query
          description: Excludes member comments older than this date
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: endDate
          in: query
          description: Excludes member comments newer than this date
          schema:
            type: string
            format: date
          example: 2024-06-01
        - name: includeClosed
          in: query
          description: Includes closed member comments
          schema:
            type: boolean
            default: false
        - name: taskType
          in: query
          description: 'Filters member comments by type, one of: CallLog, UserTask'
          schema:
            type: string
        - name: assignee
          in: query
          description: 'Filters member comments by assignment, one of: ME (current user) or the name of a user role'
          schema:
            type: string
        - name: commentReason
          in: query
          description: 'Filters member comments by its recorded reason, one of: RPW (reset password), UST (update status), MRG (account merged), ... (many more)'
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: accountNumber
          in: query
          description: Limits results to members with this account number
          schema:
            type: string
        - name: firstName
          in: query
          description: Limits results to members with this first name
          schema:
            type: string
        - name: lastName
          in: query
          description: Limits results to members with this last name
          schema:
            type: string
        - name: emailAddress
          in: query
          description: Limits results to members with this email address
          schema:
            type: string
        - name: statuses
          in: query
          description: 'Filters member comments by status, one or more of: O (open), OC (open/created), C (closed), CD (closed/denied), CI (closed/invalid)'
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberComment'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal Server Error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:read
    post:
      tags:
        - member-comment
      summary: Create member comments for multiple members
      description: Create member comments for multiple members
      operationId: createMemberComments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberCommentBulkRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCommentBulkResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '500':
          description: Internal Error
          content: {}
      security:
        - OAuth2:
            - api:member-comments:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/badges:
    get:
      tags:
        - member-badge
      summary: Get Member badges
      description: Retrieve a member's badges
      operationId: getMemberBadges
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberBadge'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-badge:read
  /v3/members/{memberIdentifier}/badges/{badgeId}:
    post:
      tags:
        - member-badge
      summary: Create Member badge
      description: Award a badge to a member
      operationId: createMemberBadge
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: badgeId
          in: path
          description: Badge id
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMemberBadgeRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberBadge'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-badge:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/badges/{memberBadgeId}:
    delete:
      tags:
        - member-badge
      summary: Delete Member Badge
      description: Remove badge from member
      operationId: deleteMemberBadge
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: memberBadgeId
          in: path
          description: Member badge identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-badge:modify
  /v3/compensation/coupons/{couponCode}:
    get:
      tags:
        - coupon-compensation
      summary: Get Compensation by Coupon Code
      description: Retrieve coupon compensations.
      operationId: getCouponCompensation
      parameters:
        - name: couponCode
          in: path
          description: Unique Coupon Identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompensationsResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:coupon-compensation:read
  /v3/members/{memberIdentifier}/member-enrollment-date:
    put:
      tags:
        - member
      summary: Update Member's Enrollment Date
      description: Update member's enrollment date
      operationId: updateMemberEnrollmentDate
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberUpdateEnrollmentDateRequest'
        required: true
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/referrals:
    get:
      tags:
        - member-referral
      summary: Get Referrals
      description: Retrieves referrals that have been created by a member
      operationId: getMemberReferrals
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberReferral'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-referral:read
    post:
      tags:
        - member-referral
      summary: Create a new referral for a member
      description: Creates a referral where both referrer and referee earn rewards
      operationId: createReferral
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMemberReferralRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberReferralResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '500':
          description: Internal Error
          content: {}
      security:
        - OAuth2:
            - api:member-referral:modify
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/referral-codes:
    get:
      tags:
        - member-referral
      summary: Find Referral Codes
      description: Find referral codes by member ID
      operationId: findMemberReferralCodes
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: 2345641
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberReferralCode'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-referral-codes:read
    post:
      tags:
        - member-referral-code
      summary: Create Referral Code
      description: Generates a referral code for clients to use
      operationId: createReferralCode
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberReferralCodeResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '500':
          description: Internal Error
          content: {}
      security:
        - OAuth2:
            - api:member-referral-codes:create
  /v3/members/referral-codes/{referralCode}:
    get:
      tags:
        - member-referral
      summary: Find referral code details
      description: Find referral code details by referral code
      operationId: findReferralCodeDetails
      parameters:
        - name: referralCode
          in: path
          description: Referral Code
          required: true
          schema:
            maxLength: 50
            minLength: 1
            type: string
          example: 2345641
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberReferralCode'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-referral-codes:read
  /v3/members/{memberIdentifier}/referred-by:
    get:
      tags:
        - member-referral
      summary: Finds Referrer
      description: Find the referrer for an enrolled referee
      operationId: findReferrerForEnrolledReferee
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier for the referee
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: 2345641
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferredByResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-referral:read
            - api:member:read
  /v3/members/{memberIdentifier}/events/{eventType}:
    post:
      tags:
        - member-event
      summary: Post a member event
      description: Post a member event, possibly triggering qualifying event rules.
      operationId: postMemberEvent
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier
          required: true
          schema:
            type: string
        - name: eventType
          in: path
          description: Type of event, a data code of type EventType
          required: true
          schema:
            type: string
          example: CheckIn
        - name: simulate
          in: query
          description: Return results of qualifying event rules without triggering them
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Event'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResults'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-event:modify
  /v3/custom-data:
    get:
      tags:
        - customData
      summary: Get All Custom Data Metadata
      description: Gets metadata describing available custom data
      operationId: getCustomDataMetadata
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomDataMetadata'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:read
  /v3/custom-data/{customDataId}:
    get:
      tags:
        - customData
      summary: Get Custom Data Metadata by ID
      description: Gets metadata describing a specific custom data type identified by ID.
      operationId: getCustomDataMetadataById
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDataMetadata'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:read
  /v3/custom-data/{customDataId}/details:
    get:
      tags:
        - customData
      summary: Gets Custom Data Detail Items
      description: Gets custom data detail items for a custom data type.
      operationId: getCustomDataDetails
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: includeInactive
          in: query
          description: 'Return only active records when it is false; when it is true, return all records.'
          schema:
            type: boolean
            default: false
          example: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomDataDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:read
    post:
      tags:
        - customData
      summary: Create records under individual Ace Values
      description: This will be used to create records under individual Ace values.
      operationId: createCustomDataDetails
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Create Custom Data Details Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomDataDetail'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomDataDetail'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:modify
  /v3/custom-data/{customDataId}/details/{customDataDetailId}:
    get:
      tags:
        - customData
      summary: Get Custom Data Detail Item by ID
      description: Gets a custom data detail item by ID
      operationId: getCustomDataDetailById
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: customDataDetailId
          in: path
          description: Custom data detail identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDataDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:read
    put:
      tags:
        - customData
      summary: Update records under individual Ace values
      description: This will be used to update records under individual Ace values
      operationId: updateCustomDataDetailById
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: customDataDetailId
          in: path
          description: Custom data detail identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Update Custom Data Details Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomDataDetail'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDataDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:modify
  /v3/custom-data/{customDataId}/details/externalKey;{externalKey}:
    get:
      tags:
        - customData
      summary: Get Custom Data Detail Item by External Key
      description: Gets a custom data detail item by external key.
      operationId: getCustomDataDetailByExternalKey
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: externalKey
          in: path
          description: Custom data external key
          required: true
          schema:
            maxLength: 64
            minLength: 1
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDataDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:read
    put:
      tags:
        - customData
      summary: Update records under individual Ace values using externalKey
      description: This will be used to update records under individual Ace values using externalKey
      operationId: updateCustomDataDetailByExternalKey
      parameters:
        - name: customDataId
          in: path
          description: Custom data identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: externalKey
          in: path
          description: Custom data external key
          required: true
          schema:
            maxLength: 64
            minLength: 1
            type: string
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Update Custom Data Details Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomDataDetail'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDataDetail'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:custom-data:modify
  /v3/data-codes:
    get:
      tags:
        - dataCodes
      summary: Get data codes
      description: Gets data codes
      operationId: getAllCodes
      parameters:
        - name: includeInactive
          in: query
          description: 'If true, return all codes regardless of active status. Otherwise, only active codes are returned.'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Code'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:read
    post:
      tags:
        - data-codes
      summary: Create Data Code
      description: Create a new data code
      operationId: createDataCode
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Code'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Code'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:modify
  /v3/data-codes/{codeType}:
    get:
      tags:
        - dataCodes
      summary: Get data codes by code type
      description: Gets data codes by code type
      operationId: getCodesByType
      parameters:
        - name: codeType
          in: path
          description: Code type
          required: true
          schema:
            type: string
        - name: includeInactive
          in: query
          description: 'If true, return all codes of requested type, regardless of active status. Otherwise, only active codes are returned.'
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Code'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:read
  /v3/data-codes/{codeType}/codes/{code}:
    get:
      tags:
        - dataCodes
      summary: Gets data code by type and code
      description: Get data code by type and code
      operationId: getCodeByTypeAndCode
      parameters:
        - name: codeType
          in: path
          description: Code type
          required: true
          schema:
            type: string
        - name: code
          in: path
          description: Code
          required: true
          schema:
            type: string
        - name: includeInactive
          in: query
          description: 'If true, return all codes of requested by type and code, regardless of active status. Otherwise, only active codes are returned.'
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Code'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:read
  /v3/data-codes/{codeId}:
    put:
      tags:
        - dataCodes
      summary: Update datacode by codeId
      description: "Update datacode - to 'delete' a datacode, active and display fields on request object must both be set to false."
      operationId: updateDataCode
      parameters:
        - name: codeId
          in: path
          description: Data code identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Code'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Code'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:modify
  /v3/data-code-types:
    get:
      tags:
        - dataCodes
      summary: Gets all data code types
      description: Returns all client-managed code types
      operationId: getAllCodeTypes
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CodeType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:data-codes:read
  /v3/event-rules:
    post:
      operationId: createEventRule
      tags:
        - event-rule
      summary: Create Event Rule
      description: Create a new event rule.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventRuleRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - OAuth2:
            - api:event-rule:modify
    get:
      tags:
        - event-rule
      summary: Find Event Rules
      operationId: findEventRules
      parameters:
        - name: eventRuleCode
          in: query
          required: false
          schema:
            type: string
        - name: eventRuleName
          in: query
          required: false
          schema:
            type: string
        - name: eventType
          in: query
          description: Type of event. This is a dataCode of type eventType
          required: false
          schema:
            type: string
        - name: startDate
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: status
          in: query
          description: Status of the event rule. This is a dataCode of type eventRuleStatus
          required: false
          schema:
            type: string
        - name: dataRelease
          in: query
          required: false
          schema:
            type: integer
        - name: workflowStatus
          in: query
          description: This is a dataCode of type ruleWorkflowStatus
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:event-rule:read
  /v3/event-rules/{eventRuleId}:
    put:
      tags:
        - event-rule
      summary: Update event rule by ID
      operationId: updateEventRule
      parameters:
        - name: eventRuleId
          in: path
          description: Event rule identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventRuleRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - OAuth2:
            - api:event-rule:modify
    get:
      tags:
        - event-rule
      summary: Find Event Rule by EventRuleId
      operationId: getEventRule
      parameters:
        - name: eventRuleId
          in: path
          description: EventRule Identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:event-rule:read
    delete:
      tags:
        - event-rule
      summary: Delete Event Rule
      operationId: deleteEventRule
      parameters:
        - name: eventRuleId
          in: path
          required: true
          description: Event rule identifier
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:event-rule:modify
  /v3/expression-builder/config:
    get:
      tags:
        - expressions
      summary: Find expression builder configuration
      description: Returns a list of field configurations for the expression builder based on the provided types
      operationId: findExpressionBuilderConfig
      parameters:
        - name: type
          in: query
          description: The type of configuration to retrieve (e.g., U)
          required: true
          schema:
            type: string
        - name: context
          in: query
          description: The context in which the configuration is used (e.g., PERCOLATE)
          required: true
          schema:
            type: string
            default: PERCOLATE
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EntityConfigurationData'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:expression-config:read
  /v3/managed-entities/{entityType}/options:
    get:
      tags:
        - managed-entity
      summary: Retrieve managed entity options.
      description: Retrieves the available options for a managed entity.
      operationId: getManagedEntityOptions
      parameters:
        - name: entityType
          in: path
          description: Type of entity
          required: true
          schema:
            type: string
          example: Partner, BonusRule, Ace03
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ManagedEntityOption'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:managed-entity:read
  /v3/member-lists:
    get:
      tags:
        - member-list
      summary: Find member lists
      description: Retrieve available member lists
      operationId: getMemberLists
      parameters:
        - name: segmentName
          in: query
          description: Filter by segment name. Performs a wildcard search and returns segments whose names contain the provided value.
          required: false
          schema:
            type: string
          example: TestSegment123
        - name: segmentCode
          in: query
          description: Filter by segment code. Performs a wildcard search and returns segments whose codes contain the provided value.
          required: false
          schema:
            type: string
          example: TestCode-12
        - name: excludeTypeCode
          in: query
          description: Exclude specific segment types. Accepts one or multiple type codes. Matching segments will be excluded from the results.
          required: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
          example: Segment, LIMITED_TIME, TIER_ROLLOVER
        - name: statusCode
          in: query
          description: Filter by segment status. Accepted values[ACTIVE, INACTIVE].
          required: false
          schema:
            type: string
          example: Active, InActive
        - name: startDate
          in: query
          description: Start date for date-range filtering. Date-only value (YYYY-MM-DD). Returns segments with dates on or after this value.
          required: false
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: endDate
          in: query
          description: End date for date-range filtering. Date-only value (YYYY-MM-DD). Returns segments with dates on or before this value.
          required: false
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: usedInType
          in: query
          description: Filter by usage type. Returns segments used within a specified context type (e.g., bonus, earning rule, promotion, redemption item).
          required: false
          schema:
            type: string
          example: BonusRule, PromotionRule etc (e.g., DataReleaseItemType.BonusRule.getCode()).
        - name: usedInName
          in: query
          description: Filter by usage name. Returns segments used within a specific context name that matches the provided value.
          required: false
          schema:
            type: string
          example: Simple ProBonus With Segment.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MemberList'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-list:read
  /v3/ping:
    get:
      tags:
        - ping
      summary: Ping Service
      description: Validate Service Connectivity
      operationId: ping
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
  /v3/preferences:
    get:
      tags:
        - preference
      summary: Get Preferences
      description: Retrieve all available preferences that can be set on member profiles
      operationId: getPreferences
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PreferenceRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:preference:read
  /v3/promotions:
    get:
      tags:
        - promotion
      summary: Get Promotions
      description: Retrieve promotions
      operationId: getPromotions
      parameters:
        - name: memberIdentifier
          in: query
          description: Member identifier. If this is provided it will retrieve the available promotions specific to member.
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: A234567890
        - name: code
          in: query
          description: The promotion code
          schema:
            type: string
          example: ABCXYZ
        - name: typeCode
          in: query
          description: The promotion type code
          schema:
            type: string
          example: B
        - name: includeUnavailable
          in: query
          description: If true, return promotions regardless of whether or not the promotion is displayed online. Otherwise, only available promotions are returned.
          schema:
            type: boolean
            default: false
        - name: includeInactive
          in: query
          description: If true, return promotions regardless of active status. Otherwise, only active promotions are returned.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Promotion'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:promotion:read
  /v3/promotions/tokens:
    get:
      tags:
        - promotion
      summary: Generate one click promotion token
      description: Generate one click promotion token using promotionCode and memberIdentifier
      operationId: generatePromotionToken
      parameters:
        - name: memberIdentifier
          in: query
          description: Member identifier
          required: true
          allowEmptyValue: false
          schema:
            maxLength: 25
            minLength: 7
            type: string
          example: 123456789
        - name: promotionCode
          in: query
          description: Promotion code
          required: true
          allowEmptyValue: false
          schema:
            type: string
          example: PROMO100
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratePromotionTokenResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:promotion-token:manage
  /v3/redemption-items:
    get:
      tags:
        - redemption
      summary: Get Redemption Items
      description: Retrieve redemption items
      operationId: getRedemptionItems
      parameters:
        - name: memberIdentifier
          in: query
          description:
            Member identifier. If this is provided it will retrieve the redemption
            items specific to member.
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - name: code
          in: query
          description: The redemption item code
          schema:
            type: string
        - name: typeCode
          in: query
          description: The redemption item type code
          schema:
            type: string
        - name: description
          in: query
          description: The redemption description
          schema:
            type: string
        - name: convertCurrencyAttributes
          in: query
          description: 'If true, convert the fiat currency attributes to a local currency'
          schema:
            type: boolean
        - name: convertToIsoCurrencyCode
          in: query
          description: "If convertCurrencyAttributes is true, the ISO currency to convert to (or will utilize a location's currency if one provided; dependent on client configuration)"
          schema:
            maxLength: 3
            minLength: 0
            type: string
        - name: ace01Keys
          in: query
          description: The redemption ace01 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace02Keys
          in: query
          description: The redemption ace02 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace03Keys
          in: query
          description: The redemption ace03 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace04Keys
          in: query
          description: The redemption ace04 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace05Keys
          in: query
          description: The redemption ace05 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace06Keys
          in: query
          description: The redemption ace06 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace07Keys
          in: query
          description: The redemption ace07 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace08Keys
          in: query
          description: The redemption ace08 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace09Keys
          in: query
          description: The redemption ace09 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace10Keys
          in: query
          description: The redemption ace10 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace11Keys
          in: query
          description: The redemption ace11 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace12Keys
          in: query
          description: The redemption ace12 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace13Keys
          in: query
          description: The redemption ace13 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace14Keys
          in: query
          description: The redemption ace14 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: ace15Keys
          in: query
          description: The redemption ace15 key value(s)
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RedemptionItem'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:redemption:read
  /v3/tiers:
    get:
      tags:
        - tier
      summary: Get Tiers Information
      description: Retrieve available tiers
      operationId: getTiers
      parameters:
        - name: includeHiddenTiers
          in: query
          description: Include tiers that are not marked for display (default is false - excludes hidden tiers)
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tier'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:tier:read
  /v3/reports/under-investigation:
    get:
      tags:
        - report
      summary: Under Investigation Report
      description: Get Under Investigation Report
      operationId: getUnderInvestigationReport
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UnderInvestigationReport'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:reports:under-investigation
  /v3/hotel-daily-summaries/{locationCode}/{yearMonth}:
    get:
      tags:
        - hotel-daily-summaries
      summary: Get hotel daily summaries
      description: Retrieve hotel daily summaries for a location and month.
      operationId: getHotelDailySummaries
      parameters:
        - name: locationCode
          in: path
          description: Location code (ace03 External Key)
          required: true
          schema:
            type: string
        - name: yearMonth
          in: path
          description: Year and month of the period (YYYYMM)
          required: true
          schema:
            type: string
          example: '202201'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HotelDailySummary'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:compensation:read
    put:
      tags:
        - hotel-daily-summaries
      summary: Update hotel daily summaries
      description: 'Update hotel daily summaries for a location and month. All of the days in the month should be sent in the request when calling this service. If the caller does not want to update the data for one of the days the following fields should be left blank- availableRoomCount,occupiedRoomCount,averageDailyRateIntl. It is also expected that all ADR values are entered in using the averageDailyRateIntl field.'
      operationId: updateHotelDailySummaries
      parameters:
        - name: locationCode
          in: path
          description: location code (ace03 External Key)
          required: true
          schema:
            maxLength: 100
            minLength: 1
            type: string
        - name: yearMonth
          in: path
          description: Year and month of the period.(YYYYMM)
          required: true
          schema:
            type: string
        - name: verified
          in: query
          description: True if the ADR values have been verified and validation of ADR against the baselineADR should be skipped
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/HotelDailySummary'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HotelDailySummary'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:compensation:modify
      x-codegen-request-body-name: body
  /v3/smart-groups:
    get:
      tags:
        - smart-group
      summary: Get Smart Groups
      description: Get the Smart Groups in the system. Smart Groups allow for creating collections of Ace, DataCode, and Date data that can be referenced in Tally.
      operationId: getSmartGroups
      parameters:
        - name: includeSmartGroupDetails
          in: query
          description: Include smart group details; defaults to false
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SmartGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:read
    post:
      tags:
        - smart-group
      summary: Create Smart Group
      description: Create a new smart group
      operationId: createSmartGroup
      requestBody:
        description: Create Smart Group Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmartGroup'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SmartGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:modify
      x-codegen-request-body-name: body
  /v3/smart-groups/{smartGroupId}:
    get:
      tags:
        - smart-group
      summary: Get Smart Group
      description: Get information about a smart group
      operationId: getSmartGroup
      parameters:
        - name: smartGroupId
          in: path
          description: Smart group identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: includeSmartGroupDetails
          in: query
          description: Include smart group details for the specified smart group; defaults to false
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SmartGroup'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:read
  /v3/smart-groups/{smartGroupId}/details:
    get:
      tags:
        - smart-group
      summary: Get Smart Group Details
      description: Get smart group detail information
      operationId: getSmartGroupDetails
      parameters:
        - name: smartGroupId
          in: path
          description: Smart group identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SmartGroupDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:read
    post:
      tags:
        - smart-group
      summary: Add Smart Group Detail Record
      description: Adds new smart group detail record. This operation will error if the detail record already exists.
      operationId: addSmartGroupDetail
      parameters:
        - name: smartGroupId
          in: path
          description: Smart group identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Create Smart Group Detail
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmartGroupDetail'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SmartGroupDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      x-codegen-request-body-name: body
  /v3/smart-groups/{smartGroupId}/details/{smartGroupDetailId}:
    get:
      tags:
        - smart-group
      summary: Get Smart Group Detail Information
      description: Get smart group detail information
      operationId: getSmartGroupDetail
      parameters:
        - name: smartGroupId
          in: path
          description: Smart group identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: smartGroupDetailId
          in: path
          description: Smart group detail identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SmartGroupDetail'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:read
    delete:
      tags:
        - smart-group
      summary: Delete (remove) Smart Group Detail record
      description: Remove smart group detail from smart group
      operationId: removeSmartGroupDetailFromSmartGroup
      parameters:
        - name: smartGroupId
          in: path
          description: Smart group identifier
          required: true
          schema:
            type: integer
            format: int64
        - name: smartGroupDetailId
          in: path
          description: Smart group detail identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:smartgroup:modify
  /v3/transactions:
    post:
      tags:
        - member-transaction
      summary: Post Transaction for Earnings Processing
      description: 'This will submit a transaction through the earnings process. If a member identifier is associated to the transaction, it will go through the entire process. If not, it will be staged for future processing.'
      operationId: postTransactionForProcessing
      requestBody:
        description: Transaction Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionRequest'
        required: true
      responses:
        '200':
          description: Success
          content: {}
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:transaction:submit
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/bonuses:
    get:
      tags:
        - member-transaction
      summary: Get Available Manual Bonus Rules
      description: 'Return a collection of all currently active, displayable online, and manually processed bonuses, filtered by type for which the member is eligible.'
      operationId: getAvailableManualBonusRules
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier to find member's available bonuses
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: 2345641
        - name: typeCode
          in: query
          description: 'The bonus rule type code. DataCode Type: BonusType'
          schema:
            type: string
          example: Earning
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BonusRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-bonus:read
    post:
      tags:
        - member-transaction
      summary: Post Member Bonus
      description: 'Submit a bonus to a member account.'
      operationId: postBonusTransaction
      parameters:
        - name: memberIdentifier
          in: path
          description: Member identifier for member earning bonus
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: 2345641
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BonusRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberBonus'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-bonus:add
      x-codegen-request-body-name: body
  /v3/members/{memberIdentifier}/merges:
    post:
      tags:
        - member-merge
      summary: Merge Members
      description: Merge two member accounts
      operationId: mergeMembers
      parameters:
        - name: memberIdentifier
          in: path
          description: Identifies member to merge into another account and close (the merge victim)
          required: true
          schema:
            maxLength: 200
            minLength: 1
            type: string
          example: 2345641
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberMergeRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberMerge'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:merge
      x-codegen-request-body-name: body
  /v3/members/merges/{memberMergeId}:
    get:
      tags:
        - member-merge
      summary: Query Member Merge Status
      description: Check progress status of a member merge
      operationId: getMemberMerge
      parameters:
        - name: memberMergeId
          in: path
          description: Identifies member merge
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberMerge'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member:merge
      x-codegen-request-body-name: body
  /v3/user:
    get:
      tags:
        - user
      summary: Get user context
      description: Get a user and its entitlements
      operationId: getUser
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user:read
  /v3/user-roles:
    post:
      tags:
        - user-role
      summary: Create a User Role, including Entitlements when provided.
      operationId: createUserRole
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRole'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserRole'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-role:modify
      x-codegen-request-body-name: body
    get:
      tags:
        - user-role
      summary: Retrieve all user roles. Include entitlements if specified.
      operationId: getUserRoles
      parameters:
        - name: includeEntitlements
          in: query
          description: Flag to include entitlements for each role
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserRole'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-role:read
      x-codegen-request-body-name: body
  /v3/user-roles/{userRoleId}:
    put:
      tags:
        - user-role
      summary: Update User Role and associate Entitlement if provided and active
      operationId: updateUserRole
      parameters:
        - name: userRoleId
          in: path
          description: User role identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRole'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserRole'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-role:modify
      x-codegen-request-body-name: body
  /v3/users:
    post:
      tags:
        - user
      summary: Create User
      description: Creates a new user for accessing the Tally frontend application or for granting API access
      operationId: createUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security:
        - OAuth2:
            - api:user:modify
  /v3/users/{userId}:
    put:
      tags:
        - user
      summary: Update User
      description: Updates an existing user
      operationId: updateUser
      parameters:
        - name: userId
          in: path
          description: User Identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal Server Error
          content: {}
      security:
        - OAuth2:
            - api:user:modify
  /v3/user-tasks:
    get:
      tags:
        - user-task
      summary: Find user tasks
      description: Retrieve user tasks
      operationId: findUserTasks
      parameters:
        - name: startDate
          in: query
          description: Excludes user tasks older than this date
          schema:
            type: string
            format: date
          example: 2024-05-01
        - name: endDate
          in: query
          description: Excludes user tasks newer than this date
          schema:
            type: string
            format: date
          example: 2024-06-01
        - name: includeClosed
          in: query
          description: Includes closed user tasks
          schema:
            type: boolean
            default: false
        - name: assignee
          in: query
          description: 'Filters user tasks by assignment, one of: ME (current user) or the name of a user role'
          schema:
            type: string
        - name: statuses
          in: query
          description: 'Filters user tasks by status, one or more of: O (open), C (closed)'
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal Server Error
          content: {}
      security:
        - OAuth2:
            - api:user-task:read
    post:
      tags:
        - user-task
      summary: Create user task
      description: Create a new user task
      operationId: createUserTask
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserTaskRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-task:modify
      x-codegen-request-body-name: body
  /v3/user-tasks/{userTaskId}:
    get:
      tags:
        - user-task
      summary: Get user task
      description: Retrieve a user task
      operationId: getUserTask
      parameters:
        - name: userTaskId
          in: path
          description: User task identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-task:read
    put:
      tags:
        - user-task
      summary: Update user task
      description: Update a user task
      operationId: updateUserTask
      parameters:
        - name: userTaskId
          in: path
          description: User task identifier
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserTaskRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-task:modify
      x-codegen-request-body-name: body
  /v3/user-tasks/{userTaskId}/locks:
    post:
      tags:
        - user-task
      summary: Lock user task
      description: Lock a user task
      operationId: lockUserTask
      parameters:
        - name: userTaskId
          in: path
          description: User task identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-task:modify
    delete:
      tags:
        - user-task
      summary: Unlock user task
      description: Unlock a user task
      operationId: unlockUserTask
      parameters:
        - name: userTaskId
          in: path
          description: User task identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:user-task:modify
  /v3/badges:
    get:
      tags:
        - badge
      summary: Get Badges
      description: Retrieve badges
      operationId: getBadges
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BadgeData'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:badge:read
  /v3/background-tasks/{backgroundTaskId}:
    get:
      tags:
        - background-task
      summary: Get Background task
      description: Get a background task
      operationId: getBackgroundTask
      parameters:
        - name: backgroundTaskId
          in: path
          description: Background Task identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BackgroundTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:background-task:read
  /v3/outbound-notification-types:
    get:
      operationId: getOutboundNotificationTypes
      tags:
        - outbound-notification
      summary: Get outbound notification types
      description: Returns a list of outbound notification types that are currently enabled/disabled in the system. Used for reconciliation and verification purposes.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OutboundNotification'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:outbound-notification:read
  /v3/outbound-notifications/{type}:
    get:
      operationId: findOutboundNotifications
      tags:
        - outbound-notification
      summary: fetch all outbound notifications sent within a specified timeframe
      parameters:
        - name: type
          in: path
          description: Outbound Notification Type
          required: true
          schema:
            type: string
            enum:
              - MEMBER
              - EARNING
              - MEMBER_PROMOTION
              - MEMBER_COUPON
              - ASYNC_TASK
        - name: startDate
          description: The first date of the time range, inclusive of this date
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: endDate
          description: The last date of the time range, inclusive of this date
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: pageNumber
          description: requested results page (1 if not present)
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: pageSize
          description: requested number of items per page
          in: query
          required: false
          schema:
            type: integer
            default: 500
            maximum: 10000
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindOutboundNotificationResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:outbound-notification:read
      x-codegen-request-body-name: body
  /v3/outbound-notifications/{type}/{objectId}:
    post:
      tags:
        - outbound-notification
      summary: Send an outbound notification
      description: Sends outbound notifications to the client’s configured webhook service.
      operationId: sendOutboundNotification
      parameters:
        - name: type
          in: path
          description: Outbound Notification Type
          required: true
          schema:
            type: string
            enum:
              - MEMBER
              - EARNING
        - name: objectId
          in: path
          description: Object Identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutboundNotificationResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:outbound-notification:modify
  /v3/async-tasks:
    get:
      operationId: findAsyncTasks
      tags:
        - async-task
      summary: Find Async Tasks
      description: Retrieve platform API and file task details
      parameters:
        - name: startDate
          description: 'Filters tasks where queued date is on or after startDate'
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: endDate
          description: 'Filters tasks where processed date is on or before endDate'
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: taskTypeCode
          description: 'Filters tasks by Platform API or file tasks'
          in: query
          required: false
          schema:
            type: string
            enum:
              - PlatformApi
              - File
        - name: taskCode
          description: 'Filter by task'
          in: query
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 50
            example: BulkBonus
        - name: statusCode
          description: 'Filters by the state of the task'
          in: query
          required: false
          schema:
            type: string
            enum:
              - Queued
              - Processed
              - Error
        - name: fileName
          description: 'Filters by file name'
          in: query
          required: false
          schema:
            type: string
            minLength: 5
            maxLength: 512
            example: BulkBonus1234.csv
        - name: pageNumber
          description: 'requested results page (1 if not present)'
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: pageSize
          description: 'requested number of items per page'
          in: query
          required: false
          schema:
            type: integer
            default: 500
            maximum: 500
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindAsyncTasksResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
  /v3/async-tasks/{asyncTaskId}:
    get:
      tags:
        - async-task
      summary: Get Async Task
      description: Get async task details
      operationId: getAsyncTask
      parameters:
        - name: asyncTaskId
          in: path
          description: Async Task identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
  /v3/async-task-batches:
    get:
      tags:
        - async-task
      summary: Find Async Task Batches
      description: Search for async task batches
      operationId: findAsyncTaskBatches
      parameters:
        - name: fileName
          description: 'Filters by file name'
          in: query
          required: false
          schema:
            type: string
            minLength: 2
            maxLength: 512
            example: BulkBonus1234.csv
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AsyncTaskBatch'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
    post:
      tags:
        - async-task
      summary: Submit multiple async operations
      description: 'Submit a batch of operations in CSV format, with one operation per line, for asynchronous execution.'
      operationId: postAsyncTaskBatch
      parameters:
        - name: typeCode
          in: query
          description: Indicates operation and CSV layout, a data code of type AsyncBatchTaskType
          required: true
          schema:
            type: string
          example: postBonusTransactionDefaultSchema
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTaskBatch'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:create
  /v3/async-task-batches/{asyncTaskBatchId}:
    get:
      tags:
        - async-task
      summary: Get Async Task Batch
      description: Get async task batch details
      operationId: getAsyncTaskBatch
      parameters:
        - name: asyncTaskBatchId
          in: path
          description: Async Task Batch identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTaskBatch'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
  /v3/async-task-batch-types:
    get:
      tags:
        - async-task
      summary: Find Async Task Batch Types
      description: 'Return details of async task batch types i.e. file uploads the user is entitled to perform.'
      operationId: findAsyncTaskBatchTypes
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AsyncTaskBatchType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
  /v3/async-task-batch-types/{typeCode}:
    get:
      tags:
        - async-task
      summary: Get Async Task Batch Type
      description: Get async task batch type details
      operationId: getAsyncTaskBatchType
      parameters:
        - name: typeCode
          in: path
          description: Indicates operation and CSV layout, a data code of type AsyncBatchTaskType
          required: true
          schema:
            type: string
          example: postBonusTransactionDefaultSchema
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTaskBatchType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:async-task:read
  /v3/broadcast-messages:
    post:
      tags:
        - system-broadcast-message
      summary: Create New Broadcast Message
      description: Create New Broadcast Message
      operationId: createBroadcastMessage
      requestBody:
        description: Broadcast Message
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BroadcastMessage'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:broadcast-message:modify
      x-codegen-request-body-name: body
    get:
      tags:
        - system-broadcast-message
      summary: Find Broadcast Messages
      description: Find broadcast messages
      operationId: findBroadcastMessages
      parameters:
        - name: startDate
          in: query
          description: Broadcast Messages startDate
          required: false
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          description: Broadcast Messages endDate
          required: false
          schema:
            type: string
            format: date
        - name: status
          in: query
          description: Status of Broadcast Messages
          schema:
            type: string
        - name: text
          in: query
          description: Searches for the specified text in both the message and title fields
          schema:
            type: string
        - name: viewAll
          in: query
          description: If true (and caller has api:broadcast-messages:view-all), return all messages ignoring targeting.
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BroadcastMessage'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:broadcast-messages:read
  /v3/broadcast-messages/{broadcastMessageId}:
    put:
      tags:
        - system-broadcast-message
      summary: Update Existing Broadcast Message
      description: Update Existing Broadcast Message
      operationId: updateBroadcastMessage
      parameters:
        - name: broadcastMessageId
          in: path
          description: Broadcast Message Id
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Broadcast Message
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BroadcastMessage'
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:broadcast-message:modify
      x-codegen-request-body-name: body
  /v3/broadcast-messages/{id}:
    get:
      tags:
        - system-broadcast-message
      summary: Get Broadcast Message
      description: Get a broadcast message by id
      operationId: getBroadcastMessage
      parameters:
        - name: id
          in: path
          description: Broadcast Message Id
          required: true
          schema:
            type: integer
            format: int64
            minLength: 1
            maxLength: 10
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:broadcast-messages:read
  /v3/coupon-requests:
    post:
      tags:
        - coupon
      summary: Create a coupon request.
      description: Creates new coupon(s) that can be assigned to a member with the coupon-use service. This service will create the coupon request and generate the coupons.
      operationId: postCoupon
      parameters:
        - name: activateCoupons
          in: query
          description: When set to true all of the generated coupons will be activated
          schema:
            type: boolean
            default: false
        - name: useCoupons
          in: query
          description: When set to true, all generated coupons are marked as used. This requires activateCoupons to be enabled, the coupon request type to be Award, and a member identifier to be provided.
          schema:
            type: boolean
            default: false
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Create coupon request object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Coupon'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:coupon-request:modify
      x-codegen-request-body-name: body
  /v3/standard-reports/{standardReportName}:
    get:
      operationId: getStandardReports
      tags:
        - standard-reports
      summary: fetch results for a standard report
      parameters:
        - name: standardReportName
          description: 'identifying name for the standard report'
          in: path
          required: true
          schema:
            type: string
            minLength: 3
        - name: startDate
          description: 'the first date of the time range, inclusive (not required for current date snapshot reports)'
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: endDate
          description: 'the last date of the time range, inclusive (not required for current date snapshot reports)'
          in: query
          required: false
          schema:
            format: date
            type: string
        - name: pageNumber
          description: 'requested results page (1 if not present)'
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: pageSize
          description: 'requested number of items per page'
          in: query
          required: false
          schema:
            type: integer
            default: 500
            maximum: 500
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardReportResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:standard-reports:read
      x-codegen-request-body-name: body
  /v3/adjustment-rules:
    get:
      operationId: getAdjustmentRules
      tags:
        - adjustment-rules
      summary: Get adjustment rules
      description: Gets all adjustment rules
      parameters:
        - name: includeInactive
          in: query
          description: 'If true, return all adjustment rules regardless of active status. Otherwise, only active adjustment rules are returned.'
          schema:
            type: boolean
            default: false
        - name: includeHidden
          in: query
          description: 'If true, return all adjustment rules regardless of hidden status. Otherwise, only non-hidden adjustment rules are returned.'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AdjustmentRule'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
  /v3/event-types:
    get:
      operationId: getEventTypes
      tags:
        - member-event
      summary: Get event types
      description: Get event types and their capabilities
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:member-event:read
  /v3/customer-satisfaction:
    put:
      tags:
        - customer-satisfaction
      summary: Customer Satisfaction
      description: Updates an existing Customer Satisfaction Metric
      operationId: updateCustomerSatisfactionMetric
      parameters:
        - name: async
          in: query
          description: >
            "Submits the operation for background processing and returns a ‘202 Accepted’ response
             along with an identifier to track the processing status.
             Requires the \"api:async-task:create\" scope."
          schema:
            type: boolean
            default: false
      requestBody:
        description: Customer Satisfaction Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerSatisfaction'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerSatisfaction'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncTask'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:customer-satisfaction:modify
  /v3/enroll-codes:
    get:
      operationId: getEnrollCodes
      tags:
        - enroll-codes
      summary: Get enroll codes
      description: Gets all enroll codes
      parameters:
        - name: includeInactive
          in: query
          description: 'If true, return all enroll codes regardless of active status. Otherwise, only active enroll codes are returned.'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnrollCode'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content: {}
        '403':
          description: Forbidden
          content: {}
        '500':
          description: Internal error
          content: {}
      security:
        - OAuth2:
            - api:enroll-codes:read
components:
  schemas:
    AdjustCurrencyRequest:
      required:
        - adjustmentRuleCode
        - amount
        - comment
      type: object
      properties:
        adjustmentRuleCode:
          maxLength: 50
          minLength: 1
          type: string
          description: Identifies the adjustment rule to utilize in this adjustment
        amount:
          type: number
          description: 'Amount of currency to be adjusted, required if adjustment type is currency'
        comment:
          maxLength: 3000
          minLength: 0
          type: string
          description: Reason for adjustment
        externalReference:
          maxLength: 100
          minLength: 0
          type: string
          description: A unique client-assigned identifier for the adjustment
        sharedExternalReference:
          maxLength: 100
          minLength: 0
          type: string
          description: Client-assigned identifier that may be shared across related adjustments
        reasonCode:
          maxLength: 50
          minLength: 0
          type: string
          description: Reason code that will be stored with the comment
        subReasonCode:
          maxLength: 50
          minLength: 0
          type: string
          description: Sub-reason code that will be stored with the comment
        amountConfirmed:
          type: boolean
          description: Represents whether user has confirmed adjustment amount that is over adjustment limit
          default: false
        transactionDate:
          type: string
          description: Business date of the transaction, defaults to current date if omitted
          format: date
          example: 2024-05-01
        customData:
          $ref: '#/components/schemas/CustomData'
    AdjustmentRule:
      type: object
      properties:
        adjustmentCode:
          type: string
          description: Adjustment code
          example: Employee_Reward
        adjustmentDescription:
          type: string
          description: Description of adjustment rule
          example: Employee Reward
        points:
          type: number
          description: If present, the fixed number of points associated with this adjustment rule
          example: 1000.0
        pointType:
          type: string
          description: 'Point type code. Either: POINTS or MILES'
          example: POINTS
        pointCategory:
          type: string
          description: Point category code
          example: P
        billingCode:
          type: string
          description: Billing code associated with the adjustment rule
          example: BILLING123
        resultTierQualifier:
          type: boolean
          description: Indicates whether adjustment should count towards tier progress
          example: false
        status:
          type: string
          description: 'Adjustment rule status code. Either: A (Active) or I (Inactive)'
          example: A
        display:
          type: boolean
          description: 'Indicates whether adjustment rule is displayed in Customer Care. By default records with display=false will not be returned unless  the includeHidden parameter is set to true.'
          example: true
    EventType:
      type: object
      properties:
        eventType:
          type: string
          description: Type of event, a data code of type EventType
          example: CheckIn
        eligibility:
          $ref: '#/components/schemas/EventTypeEligibility'
        results:
          type: array
          description: List of results used with the event type
          items:
            type: string
            description: Type of result, a data code of type EventRuleResultType
    EventTypeEligibility:
      type: object
      properties:
        event:
          type: boolean
          description: Indicates if event eligibility is used with the event type
          default: true
        member:
          type: boolean
          description: Indicates if member eligibility is used with the event type
          default: true
        accrual:
          type: boolean
          description: Indicates if accrual eligibility is used with the event type
          default: false
    Attribute:
      required:
        - dataTypeCode
        - statusCode
        - typeCode
      type: object
      properties:
        attributeId:
          type: integer
          description: Attribute Id (null on create requests)
          format: int64
          example: 147258369
          readOnly: true
        typeCode:
          type: string
          description: 'Attribute Type Code, one of: Validation, Reporting'
          example: Validation
        statusCode:
          type: string
          description: 'Attribute Status Code, one of: Enabled, Disabled'
          example: Enabled
        name:
          type: string
          description: Attribute Name
          example: AccountNumber
        description:
          type: string
          description: Attribute Description
          example: Account Number
        dataTypeCode:
          type: string
          description: 'Attribute Data Type Code, one of: boolean, choice, date, memberAccount, multiselect, numeric, open'
          example: open
    AuthorizedMember:
      type: object
      properties:
        firstName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's first name
        lastName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's last name
        email:
          type: string
          description: Member's email
          example: username@test.com
        phone:
          type: string
          description: Member's phone
          example: +12345
        order:
          type: integer
          example: 1
          description: Delegate order
        authDelegateType:
          type: string
          example: A, B, E or S
          description: Authorized delegate type e.g. AuthUser, Business, Emergency Contact or Secondary User
    Code:
      required:
        - type
        - code
        - description
      type: object
      properties:
        codeId:
          type: integer
          readOnly: true
          description: Code Identifier
          format: int64
          example: 1
        type:
          type: string
          description: Code type
          example: AccrualType
          maxLength: 50
        code:
          type: string
          description: Code
          example: B
          minLength: 1
          maxLength: 50
        description:
          type: string
          description: Code description
          example: Base
          minLength: 1
          maxLength: 500
        notes:
          type: string
          description: Developer/system notes about the code
          maxLength: 2000
        sortOrder:
          type: integer
          description: Indicates display order in relation to other codes of same type
          example: 1
        otherCode:
          type: string
          description: Alternate code
          maxLength: 50
        display:
          type: boolean
          minLength: 1
          description: Code should be displayed
        active:
          type: boolean
          minLength: 1
          description: Code is active
        children:
          type: array
          description: Child codes
          items:
            $ref: '#/components/schemas/Code'
        parent:
          $ref: '#/components/schemas/Code'
    CodeType:
      type: object
      properties:
        name:
          type: string
          readOnly: true
          description: Name of CodeType
          example: CloseReason
        description:
          type: string
          readOnly: true
          description: Description of CodeType
          example: Defines a Closed Reason code that is shown when a member account is closed
    Counter:
      type: object
      properties:
        counterTypeCode:
          type: string
          description: Counter Type Code
        counterValue:
          type: number
          description: Counter Value
    CouponRequest:
      description: Object used to create new coupons
      required:
        - name
        - offerCode
      type: object
      properties:
        couponRequestId:
          type: integer
          description: Coupon Id (null on create requests)
          format: int64
          example: 147258369
          readOnly: true
        offerCode:
          type: string
          description: Code for the offer that contains the definition of this coupon. This defines the attributes available and required.
          maxLength: 50
          example: 'Offer12345'
        name:
          type: string
          description: Name of the coupon request
          maxLength: 300
        description:
          type: string
          description: Description of the coupon request
          maxLength: 500
        statusCode:
          type: string
          description: 'Coupon Status Code, one of Activated, Cancelled, Inactive, Terminated '
          example: Activated
          readOnly: true
        expirationType:
          type: string
          description: Expiration type for the coupon. Supported values are Exact, Never, Rolling. When Exact is set the startDate and expirationDate are required. If Rolling the expirationDayPeriod and expirationTimePeriod are required.
          example: Rolling
          default: Rolling
        startDate:
          type: string
          description: Earliest date when coupon can be used. Defaults to today's date if not set.
          format: date
        expirationDate:
          type: string
          description: When expirationType=Exact this attribute identifies when the coupon expires.
          format: date
        expirationDayPeriod:
          type: integer
          description: When expirationType=Rolling this attribute identifies when the coupon expires after this many days.
          format: int32
          example: 60
        expirationTimePeriod:
          type: integer
          description: When expirationType=Rolling this attribute identifies when the coupon expires after this many hours in addition to the expirationDayPeriod days.
          format: int32
          example: 60
        useTypeCode:
          type: string
          description: 'Coupon Use Type Code, one of Multi, Single'
          example: Single
          default: Single
        couponRequestType:
          type: string
          description: 'Coupon Request Type: Award/Bulk'
          example: Bulk
          default: Bulk
        memberIdentifier:
          type: string
          description: Awards new coupon(s) to this member, if activateCoupons is set and coupon request type is Award.
        couponCount:
          type: integer
          description: Number of coupons that should be created. Only set when creating coupons.
          format: int32
          example: 1
          default: 1
        useLimit:
          type: integer
          description: The number of times a coupon may be used
          format: int32
          example: 1
          default: 1
          readOnly: true
        attributes:
          type: array
          description: 'If the offer was setup with custom attributes these will need to be passed in this array.'
          items:
            $ref: '#/components/schemas/CouponRequestAttribute'
    CouponRequestAttribute:
      type: object
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: Name of the coupon request attribute. Will be unique for the offer.
          example: site_tier
          maxLength: 300
        value:
          type: string
          description: Value for this attribute, validation rules are defined during offer setup.
          example: 123
          maxLength: 50
    Coupon:
      type: object
      properties:
        couponId:
          type: integer
          description: Coupon Id (null on create requests)
          format: int64
          example: 147258369
          readOnly: true
        offer:
          $ref: '#/components/schemas/Offer'
        code:
          type: string
          description: Unique external ID for coupon instance
          example: ZPVWTAROW2OQ
          readOnly: true
        statusCode:
          type: string
          description: 'Coupon Status Code, one of Activated, Cancelled, Inactive, Terminated '
          example: Activated
          readOnly: true
        startDate:
          type: string
          description: Earliest date when coupon can be used
          format: date
        endDate:
          type: string
          description: Latest date when coupon can be used
          format: date
        useTypeCode:
          type: string
          description: 'Coupon Use Type Code, one of Multi, Single'
          example: Single
          default: Single
        useLimit:
          type: integer
          description: The number of times a coupon may be used
          format: int32
          example: 1
          default: 1
          readOnly: true
        currentUse:
          type: integer
          description: Current count of uses logged
          format: int32
          example: 1
          readOnly: true
        couponUses:
          type: array
          description: 'If includeUses is true, the uses of the coupon. This is only populated after a coupon has been applied to a member'
          items:
            $ref: '#/components/schemas/CouponUse'
        couponAttributes:
          type: array
          description: 'If includeAttributes is true, Coupon Attributes'
          items:
            $ref: '#/components/schemas/CouponAttribute'
    CouponAttribute:
      required:
        - attribute
      type: object
      properties:
        couponAttributeId:
          type: integer
          description: Coupon Attribute Id (null on create requests)
          format: int64
          example: 147258369
          readOnly: true
        attribute:
          $ref: '#/components/schemas/Attribute'
        value:
          type: string
          description: Value associated with the attribute
          example: 2021-12-31T12:00:00
        requireOnUse:
          type: boolean
          description: 'When using the coupon, a value is required for the attribute'
          example: true
          readOnly: true
        requireOnHold:
          type: boolean
          description: 'When putting the coupon on hold, a value is required for the attribute'
          example: false
          readOnly: true
    CouponUse:
      required:
        - channelCode
        - statusCode
        - useCount
      type: object
      properties:
        useDateTime:
          type: string
          description: Recorded DateTime of use
          format: date-time
        statusCode:
          type: string
          description: 'Coupon Use status code, one of: Released, Returned, Used'
          example: Used
        channelCode:
          type: string
          description: 'Coupon Use channel code, one of: CallCenter, System'
          example: System
        alias:
          type: string
          description: Alias of a coupon use as unique key for a given coupon. Operationally used to check for duplicate holds.
        useCount:
          type: integer
          description: Number of times coupon was used
          format: int32
          example: 1
        couponUseAttributes:
          type: array
          description: 'If includeAttributes is true, Coupon Use Attributes'
          items:
            $ref: '#/components/schemas/CouponUseAttribute'
    CouponUseAttribute:
      required:
        - attribute
      type: object
      properties:
        couponUseAttributeId:
          type: integer
          description: Coupon Use Attribute Id (null on create requests)
          format: int64
          example: 147258369
        attribute:
          $ref: '#/components/schemas/Attribute'
        value:
          type: string
          description: Value associated with the attribute
          example: Standard
    CouponTransferRequest:
      type: object
      properties:
        recipientAccountNumber:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier for the recipient of the coupon
        recipientFirstName:
          maxLength: 100
          minLength: 0
          type: string
          description: Member's first name.
        recipientLastName:
          maxLength: 100
          minLength: 0
          type: string
          description: Member's last name.
    CouponUseRequest:
      type: object
      properties:
        useDateTime:
          type: string
          description: 'The date time the coupon was used, defaults to current system time in CT'
          format: date-time
        alias:
          maxLength: 50
          minLength: 0
          type: string
          description: Alias of a coupon use as unique key for a given coupon. Operationally used to check for duplicate holds.
        useCount:
          type: integer
          description: Number of coupon uses being used. Must be below or equal to Coupon useLimit.
          format: int32
          example: 1
        messageFromGiftingMember:
          maxLength: 255
          minLength: 0
          type: string
          description: Optional. Message from gifting member to the award recipient.
        validationAttributes:
          type: object
          additionalProperties:
            type: string
          description: DEPRECATED(Use attributes object in new implementations)- List of coupon use attributes utilized for validation
        reportingAttributes:
          type: object
          additionalProperties:
            type: string
          description: DEPRECATED(Use attributes object in new implementations)- List of coupon use attributes utilized for reporting
        attributes:
          type: object
          additionalProperties:
            type: string
          description: The attributes object will include a list of validation and reporting attributes
    CouponUseResponse:
      type: object
      properties:
        couponUseId:
          type: integer
          description: Coupon Use Id
          format: int64
        countRemaining:
          type: integer
          description: Number of coupon uses remaining
          format: int64
        statusCode:
          type: string
          description: 'Indicates whether use is in held, used, or returned status'
        overUse:
          type: boolean
          description: 'If true, this use was created in excess of the number of uses allowed. Dependent on client program configuration.'
        overUseErrorCode:
          type: string
          description: Over use error code returned if over use was allowed. Dependent on client program configuration.
        overUserErrorDescription:
          type: string
          description: Over use error description returned if over use was allowed. Dependent on client program configuration.
        couponReward:
          $ref: '#/components/schemas/CouponUseReward'
    CouponUseReward:
      type: object
      properties:
        bonuses:
          type: array
          description: Bonuses awarded
          items:
            $ref: '#/components/schemas/Transaction'
        tier:
          $ref: '#/components/schemas/MemberTier'
      description: Present if the coupon is configured to award a reward.
    CouponUseReturnRequest:
      type: object
      properties:
        reportingAttributes:
          type: object
          additionalProperties:
            type: string
          description: List of coupon use attributes utilize for reporting during return
        comments:
          maxLength: 4000
          minLength: 0
          type: string
          description: Comments to enter into the Customer Care call center log
    CustomData:
      type: object
      properties:
        ace01:
          type: string
          description: 'ACE01 key value, dependent on program configuration'
        ace01Description:
          type: string
          description: 'ACE01 description, dependent on program configuration'
        ace02:
          type: string
          description: 'ACE02 key value, dependent on program configuration'
        ace02Description:
          type: string
          description: 'ACE02 description, dependent on program configuration'
        ace03:
          type: string
          description: 'ACE03 key value, dependent on program configuration'
        ace03Description:
          type: string
          description: 'ACE03 description, dependent on program configuration'
        ace04:
          type: string
          description: 'ACE04 key value, dependent on program configuration'
        ace04Description:
          type: string
          description: 'ACE04 description, dependent on program configuration'
        ace05:
          type: string
          description: 'ACE05 key value, dependent on program configuration'
        ace05Description:
          type: string
          description: 'ACE05 description, dependent on program configuration'
        ace06:
          type: string
          description: 'ACE06 key value, dependent on program configuration'
        ace06Description:
          type: string
          description: 'ACE06 description, dependent on program configuration'
        ace07:
          type: string
          description: 'ACE07 key value, dependent on program configuration'
        ace07Description:
          type: string
          description: 'ACE07 description, dependent on program configuration'
        ace08:
          type: string
          description: 'ACE08 key value, dependent on program configuration'
        ace08Description:
          type: string
          description: 'ACE08 description, dependent on program configuration'
        ace09:
          type: string
          description: 'ACE09 key value, dependent on program configuration'
        ace09Description:
          type: string
          description: 'ACE10 description, dependent on program configuration'
        ace10:
          type: string
          description: 'ACE10 key value, dependent on program configuration'
        ace10Description:
          type: string
          description: 'ACE01 description, dependent on program configuration'
        ace11:
          type: string
          description: 'ACE11 key value, dependent on program configuration'
        ace11Description:
          type: string
          description: 'ACE11 description, dependent on program configuration'
        ace12:
          type: string
          description: 'ACE12 key value, dependent on program configuration'
        ace12Description:
          type: string
          description: 'ACE12 description, dependent on program configuration'
        ace13:
          type: string
          description: 'ACE13 key value, dependent on program configuration'
        ace13Description:
          type: string
          description: 'ACE13 description, dependent on program configuration'
        ace14:
          type: string
          description: 'ACE14 key value, dependent on program configuration'
        ace14Description:
          type: string
          description: 'ACE14 description, dependent on program configuration'
        ace15:
          type: string
          description: 'ACE15 key value, dependent on program configuration'
        ace15Description:
          type: string
          description: 'ACE15 description, dependent on program configuration'
    CustomDataMetadata:
      required:
        - customDataId
        - description
        - name
        - type
        - usageType
      type: object
      properties:
        customDataId:
          type: integer
          description: Custom data unique identifier
          format: int64
          example: 1
        type:
          maxLength: 50
          minLength: 1
          type: string
          description: Custom data type
          example: Ace01
        name:
          maxLength: 100
          minLength: 1
          type: string
          description: Custom data name
          example: Brand
        description:
          maxLength: 700
          minLength: 1
          type: string
          description: Custom data description
          example: Brand
        usageType:
          type: string
          description: Custom data usage type
          enum:
            - Earnings
            - Redemptions
            - Both
        metadata:
          type: object
          properties: {}
          description: Custom data metadata
        updateDateTime:
          type: string
          description: Custom data last update date-time
          example: 2026-06-02T00:00:00
          readOnly: true
    EventRule:
      type: object
      properties:
        eventRuleId:
          type: integer
          description: Event Rule unique identifier
          format: int64
          example: 97432
        eventRuleCode:
          type: string
          example: Event233
        eventRuleName:
          type: string
          example: TestEvent123
        eventRuleDescription:
          type: string
          description: Event Rule Description
        eventType:
          type: string
          description: Type of event. This is a dataCode of type eventType
        startDate:
          type: string
          format: date
          example: 2024-03-20
        endDate:
          type: string
          format: date
          example: 2024-03-20
        status:
          type: string
          description: Status of the event rule. This is a dataCode of type eventRuleStatus
        dataRelease:
          type: integer
          description: Data Release Id
          format: int64
        dataReleaseName:
          type: string
          description: Name of the datarelease
        dataReleaseItemStatus:
          type: string
          description: Status of the datarelease item
        workflowStatus:
          type: string
          description: This is a dataCode of type ruleWorkflowStatus
        rank:
          type: integer
          description: Processing order relative to other event rules.
        rawExpression:
          type: string
          description: Expression for member and event conditions
        results:
          type: array
          items:
            $ref: '#/components/schemas/EventRuleResult'
    CustomDataDetail:
      required:
        - description
        - externalKey
      type: object
      properties:
        detailId:
          type: integer
          description: Custom data detail unique identifier
          format: int64
          example: 1
        externalKey:
          maxLength: 64
          minLength: 1
          type: string
          description: Custom data detail external key
          example: ABC123
        description:
          maxLength: 130
          minLength: 1
          type: string
          description: Custom data detail description
          example: ABC 123
        status:
          type: string
          description: 'Custom data status. Valid values: Active, Inactive.'
          example: Active
        additionalProperties:
          type: object
          additionalProperties:
            type: string
          description: Custom data detail additional properties
        updateDateTime:
          type: string
          description: Custom data detail last update date-time
          example: 2026-06-02T00:00:00
          readOnly: true
        createUserName:
          type: string
          description: User name of the user who created Custom data
          readOnly: true
        updateUserName:
          type: string
          description: User name of the user who updated Custom data
          readOnly: true
    GenericItem:
      type: object
      properties:
        contentCode:
          type: string
          description: Identifier that can be used to look up the desired content
          example: Bonus100
        contentTypeCode:
          type: string
          description: 'DataCode Type: ContentType Example: HEADER, FOOTER'
          example: HEADER
        name:
          maxLength: 50
          type: string
          description: Name
          example: Bonus 100 points
        shortDescription:
          maxLength: 500
          type: string
          description: Short description
          example: Award 100 points
        description:
          type: string
          description: Large description
          example: Award 100 points on 100th stay
        alternateDescription:
          type: string
          description: Alternate large description
          example: Award 100 points on 100th stay
        termsAndConditions:
          type: string
          description: 'Terms and conditions, typically used as part of a coupon or redemption item'
          example: Terms and conditions for this promotion
        title:
          maxLength: 200
          type: string
          description: Title content
          example: Award 100 points
        label:
          maxLength: 255
          type: string
          description: Label content
          example: 100 points awarded
        logoKey:
          type: string
          description: Image name or hosted image location'
          example: 100-points.png
        displayTypeKey:
          type: string
          description: Interpreted by content display
          example: 100 points
        startDate:
          type: string
          description: The date and time the content becomes valid
          format: date-time
        endDate:
          type: string
          description: The date and time the content is no longer valid
          format: date-time
        url:
          maxLength: 1000
          type: string
          description: A url for use in content
          example: /loyaltyprogram/bonus/100-points
        tierCode:
          type: string
          description: A tier the content is related to; Value comes from Tier Definition
          example: B
        displayForAll:
          type: boolean
          description: True or False; interpreted by content display
          example: true
        descriptorCode:
          type: string
          description: 'DataCode Type: GenericItemDescriptor Example: LIMITED_TIME'
          example: LIMITED_TIME
    HotelTransaction:
      type: object
      properties:
        checkInDate:
          type: string
          description: Date of check-in
          format: date
        checkOutDate:
          type: string
          description: Date of check-out
          format: date
        eligibleStays:
          type: integer
          description: Number of eligible stays associated with the transaction
          format: int32
        eligibleCappedNights:
          type: integer
          description: Number of capped nights (as defined by program configuration) associated with the transaction
          format: int32
        eligibleNights:
          type: integer
          description: Number of eligible nights of the stay. Optional - if null, system calculates from stay duration. When provided, uses minimum of specified value and actual stay duration.
          format: int32
        roomNumber:
          type: string
          description: The room number associated with the stay
        roomType:
          type: string
          description: Type of room the member stayed in
        roomRate:
          type: number
          description: 'The room rate (in USD). If not present, the system will calculate from international amounts.'
        roomRateIntl:
          type: number
          description: The room rate (in local currency)
        totalRevenueAmount:
          type: number
          description: 'The total revenue amount (in USD). If not present, the system will calculate from international amounts.'
        totalRevenueAmountIntl:
          type: number
          description: The total revenue amount (in local currency)
        loyaltyEligibleAmount:
          type: number
          description: 'The loyalty eligible amount (in USD). If not present, the system will calculate from international amounts.'
        loyaltyEligibleAmountIntl:
          type: number
          description: The loyalty eligible amount (in local currency)
        loyaltyIneligibleAmount:
          type: number
          description: 'The loyalty ineligible amount (in USD). If not present, the system will calculate from international amounts.'
        loyaltyIneligibleAmountIntl:
          type: number
          description: The loyalty ineligible amount (in local currency)
        isoCurrencyCode:
          type: string
          description: The currency code utilized to convert from international to USD. Defaults to currency of location.
        bookingSource:
          type: string
          description: Source of the booking
        paymentCode:
          type: string
          description: Indicator of the member's payment type
        purposeOfVisit:
          type: string
          description: Purpose of the member's visit
        travelAgentName:
          type: string
          description: Name of the member's travel agent
        groupName:
          type: string
          description: Group the member was a part of
        companyName:
          type: string
          description: Name of the company the member was a part of
        reservationConfirmationNumber:
          type: string
          description: Confirmation from the reservation management system
        noShow:
          type: boolean
          description: Indicator that the member did not show up for their stay
        pmsConfirmationNumber:
          type: string
          description: Confirmation number from the property management system
        overlappingStayPoolId:
          type: string
          description: Overlapping Stay Pool Id
        nonStayIndicator:
          type: boolean
          description: Indicator that the transaction represents something other than a stay
        nonStayLocationId:
          type: string
          description: Non stay location identifier
        nonStayEligibleRevenue:
          type: number
          description: 'The non stay (F&B, spa, etc.) eligible revenue (in USD). If not present, the system will calculate from international amounts.'
        nonStayEligibleRevenueIntl:
          type: number
          description: 'The non stay (F&B, spa, etc.) eligible revenue (in local currency)'
        nonStayIneligibleRevenue:
          type: number
          description: 'The non stay (F&B, spa, etc.) eligible revenue (in USD). If not present, the system will calculate from international amounts.'
        nonStayIneligibleRevenueIntl:
          type: number
          description: 'The non stay (F&B, spa, etc.) eligible revenue (in local currency)'
        checkNumber:
          type: string
          description: Check number associated with the non-stay data
    TravelTransaction:
      type: object
      properties:
        activityStartDateTime:
          type: string
          description: 'Transaction activity start date time'
          format: date-time
        activityEndDateTime:
          type: string
          description: 'Transaction activity end date time'
          format: date-time
        totalSpendAmount:
          maximum: 9999999999.99
          minimum: 0
          type: number
          description: The fiat or currency amount spent in total
    MemberEnrollRequest:
      type: object
      properties:
        memberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: >
            Channel/Partner specific member identifier - only provide if
            different from the Loyalty Account Number and if the channel/partner requires
            one
          readOnly: true
        accountNumber:
          maxLength: 25
          minLength: 7
          type: string
          description: 'Loyalty Account Number - If not provided, one will be generated for the member'
          readOnly: true
        accountTypeCode:
          type: string
          description: Tally account type - Client Program determines which account types are available. Default value 'MBR' for 'Member'
          example: MBR
          default: MBR
        title:
          maxLength: 100
          minLength: 0
          type: string
          description: "Member's title, such as Mr. Mrs. Ms. etc."
        firstName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's first name. Required if accountTypeCode = MBR/Null.
        middleName:
          maxLength: 100
          minLength: 0
          type: string
          description: Member's middle name
        lastName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's last name. Required if accountTypeCode = MBR/Null.
        suffix:
          type: string
          description: "Member's suffix, such as Jr. Sr."
        birthDate:
          type: string
          description: Member's date of birth
          format: date
        enrollmentCode:
          type: string
          description: Enrollment Code. Free text field used to track and categorize member enrollments.
        enrollmentDateTime:
          type: string
          description: DateTime of member enrollment
          format: date-time
        enrollmentDeviceTypeCode:
          type: string
          description: Device code logged as part of enrollment. One will be generated if not provided. Only valid if enabled on Client program configuration.
        enrollmentLocation:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier of enrollment
        enrollmentEmployee:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier for enrollment employee
        enrollmentSourceCode:
          type: string
          description: Enrollment Source - Depends on Client Program Configuration
        accountStatusCode:
          type: string
          description: 'Account Status -  type is defined by Client Program. Standard Values. A - Active, P - Pending, I - Inactive, C - Closed, S - Shell'
        companyName:
          maxLength: 100
          minLength: 1
          type: string
          description: Company/business associated with member. Required if accountTypeCode = BIZ.
        genderCode:
          type: string
          description: "Member's gender. Valid Values: Male/Female/Unknown"
        language:
          type: string
          description: Member language preference
        onlineActivationDateTime:
          type: string
          description: Date when member account was activated. One will be generated if not provided. Only valid if enabled on Client program configuration.
          format: date-time
        testAccount:
          type: boolean
          description: >
            Flag to indicate that member is a test account and should not
            be included in assessments and compensation. One will be generated if
            not provided. Only valid if enabled on Client program configuration.
        asciiFirstName:
          type: string
          description: ASCII member first name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiMiddleName:
          type: string
          description: ASCII member middle name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiNickName:
          type: string
          description: ASCII member nick name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLastName:
          type: string
          description: ASCII member last name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiSuffix:
          type: string
          description: ASCII member suffix. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiTitle:
          type: string
          description: ASCII member title. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLanguage:
          type: string
          description: ASCII member language preference. One will be generated if not provided. Only valid if enabled on Client program configuration.
        linkedAccounts:
          type: array
          description: Linked accounts for enrollment.
          items:
            $ref: '#/components/schemas/LinkedAccount'
        addresses:
          type: array
          description: Member's Addresses
          items:
            $ref: '#/components/schemas/MemberAddress'
        emails:
          type: array
          description: Member's Emails
          items:
            $ref: '#/components/schemas/MemberEmail'
        phones:
          type: array
          description: Member's Phone Number
          items:
            $ref: '#/components/schemas/MemberPhone'
        preferences:
          type: array
          description: Member's Preferences
          items:
            $ref: '#/components/schemas/MemberPreference'
        paymentCards:
          type: array
          description: Member's PaymentCard Information
          items:
            $ref: '#/components/schemas/MemberPaymentCardAccount'
        aliases:
          type: array
          description: Member's Aliases
          items:
            $ref: '#/components/schemas/MemberAlias'
        lists:
          type: array
          description: Member Lists
          items:
            $ref: '#/components/schemas/ListMember'
        referralType:
          type: string
          description: 'Type of referral (e.g. email, code, etc.)'
          example: Email
        referralValue:
          type: string
          description: Email address of referee or referral code
          example: F9DA265FD56D496C
    MemberEnrollResponse:
      type: object
      properties:
        memberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier
        accountNumber:
          maxLength: 25
          minLength: 7
          type: string
          description: Account Number
        linkedAccount:
          type: array
          items:
            $ref: '#/components/schemas/LinkedAccount'
        addresses:
          type: array
          description: Member's Addresses
          items:
            $ref: '#/components/schemas/MemberAddress'
        emails:
          type: array
          description: Member's Emails
          items:
            $ref: '#/components/schemas/MemberEmail'
        phones:
          type: array
          description: Member's Phone Number
          items:
            $ref: '#/components/schemas/MemberPhone'
        preferences:
          type: array
          description: Member's Preferences
          items:
            $ref: '#/components/schemas/MemberPreference'
        aliases:
          type: array
          description: Member's Aliases
          items:
            $ref: '#/components/schemas/MemberAlias'
        paymentCards:
          type: array
          description: Member's PaymentCards
          items:
            $ref: '#/components/schemas/MemberPaymentCardAccount'
        currentTier:
          $ref: '#/components/schemas/MemberTier'
        lists:
          type: array
          description: Member Lists
          items:
            $ref: '#/components/schemas/ListMember'
    MemberUpdateRequest:
      type: object
      properties:
        title:
          maxLength: 100
          minLength: 0
          type: string
          description: Member title such as Mr. Mrs. Ms. etc.
        firstName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's first name. Required for Member (MBR); optional for Corporate (CORP).
        middleName:
          maxLength: 100
          minLength: 0
          type: string
          description: Member's middle name
        lastName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's last name. Required for Member (MBR); optional for Corporate (CORP).
        suffix:
          type: string
          description: Member suffix such as Jr. Sr.
        birthDate:
          type: string
          description: Member's date of birth
          format: date
        accountStatusCode:
          type: string
          description: Member's account status
        closedReasonCode:
          type: string
          description: Reason for account closure
        closedStatusComment:
          type: string
          description: Account closed status update comments
        companyName:
          maxLength: 100
          minLength: 0
          type: string
          description: Company/business associated with member
        genderCode:
          type: string
          description: "Member's gender. Valid Values: M/F/U"
        language:
          type: string
          description: Member language preference.
        testAccount:
          type: boolean
          description: 'Flag to indicate that member is a test account and should not be included in reporting, assessments and compensation. Will default to false if not provided.'
        asciiFirstName:
          type: string
          description: ASCII member first name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiMiddleName:
          type: string
          description: ASCII member middle name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiNickName:
          type: string
          description: ASCII member nick name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLastName:
          type: string
          description: ASCII member last name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiSuffix:
          type: string
          description: ASCII member suffix. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiTitle:
          type: string
          description: ASCII member title. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLanguage:
          type: string
          description: ASCII member language preference. One will be generated if not provided. Only valid if enabled on Client program configuration.
        enrollmentLocation:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier of enrollment
        enrollmentEmployee:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier for enrollment employee
    MemberProfile:
      type: object
      properties:
        memberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier
        accountNumber:
          maxLength: 25
          minLength: 7
          type: string
          description: Loyalty Account Number
        mergeSurvivorMemberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier of Merge Survivor
        mergeSurvivorAccountNumber:
          maxLength: 25
          minLength: 7
          type: string
          description: Account Number of Merge Survivor
        accountTypeCode:
          type: string
          description: Tally account type - Client Program determines which account types are available. Default value 'MBR' for 'Member'
        title:
          maxLength: 100
          minLength: 1
          type: string
          description: "Member's title, such as Mr. Mrs. Ms. etc."
        firstName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's first name
        middleName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's middle name
        lastName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's last name
        suffix:
          type: string
          description: "Member's suffix, such as Jr. Sr."
        birthDate:
          type: string
          description: Member's date of birth
          format: date
        enrollmentCode:
          type: string
          description: Enrollment Code
        enrollmentDateTime:
          type: string
          description: DateTime of member enrollment
          format: date-time
        enrollmentDeviceTypeCode:
          type: string
          description: Device code logged as part of enrollment. One will be generated if not provided. Only valid if enabled on Client program configuration.
        enrollmentLocation:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier of enrollment
        enrollmentEmployee:
          maxLength: 50
          minLength: 0
          type: string
          description: Identifier for enrollment employee
        enrollmentSourceCode:
          type: string
          description: Enrollment Source - Depends on Client Program Configuration
        accountStatusCode:
          type: string
          description: 'Account Status -  type is defined by Client Program. Standard Values. A - Active, P - Pending, I - Inactive, C - Closed, S - Shell'
        accountStatusUpdateDateTime:
          type: string
          description: DateTime of the last time the member status was updated
          format: date-time
          readOnly: true
        accountStatusUpdateUser:
          type: string
          description: Name of the user who last updated the member status
          readOnly: true
        closedReasonCode:
          type: string
          description: Account Closed reason
        closedStatusComment:
          type: string
          description: Account closed status update comments
        companyName:
          maxLength: 100
          minLength: 1
          type: string
          description: Company/business associated with member
        genderCode:
          type: string
          description: "Member's gender. Valid Values: M/F/U"
        language:
          type: string
          description: Member's language preference.
        testAccount:
          type: boolean
          description: 'Flag to indicate that member is a test account and should not be included in reporting, assessments and compensation. Will default to false if not provided.'
        scrubbed:
          type: boolean
          description: 'Flag to indicate that member details are removed'
        onlineActivationDateTime:
          type: string
          description: Date when member account was activated. One will be generated if not provided. Only valid if enabled on Client program configuration.
          format: date-time
        updateDateTime:
          type: string
          description: DateTime of the last time the member was updated
          format: date-time
        asciiFirstName:
          type: string
          description: ASCII member's first name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiMiddleName:
          type: string
          description: ASCII member's middle name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiNickName:
          type: string
          description: ASCII member's nick name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLastName:
          type: string
          description: ASCII member's last name. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiSuffix:
          type: string
          description: ASCII member's suffix. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiTitle:
          type: string
          description: ASCII member's title. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiLanguage:
          type: string
          description: ASCII member's language preference. One will be generated if not provided. Only valid if enabled on Client program configuration.
        closeable:
          $ref: '#/components/schemas/Closeable'
        currentTier:
          $ref: '#/components/schemas/MemberTier'
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/MemberAddress'
        aliases:
          type: array
          items:
            $ref: '#/components/schemas/MemberAlias'
        currencies:
          type: array
          items:
            $ref: '#/components/schemas/MemberCurrency'
        emails:
          type: array
          items:
            $ref: '#/components/schemas/MemberEmail'
        phones:
          type: array
          items:
            $ref: '#/components/schemas/MemberPhone'
        preferences:
          type: array
          items:
            $ref: '#/components/schemas/MemberPreference'
        paymentCardAccounts:
          type: array
          items:
            $ref: '#/components/schemas/MemberPaymentCardAccount'
        authorizedMembers:
          type: array
          items:
            $ref: '#/components/schemas/AuthorizedMember'
        lists:
          type: array
          items:
            $ref: '#/components/schemas/ListMember'
        LinkedAdminAccounts:
          type: array
          items:
            $ref: '#/components/schemas/LinkedAccount'
    MemberAddress:
      required:
        - countryCode
      type: object
      properties:
        memberAddressId:
          type: integer
          description: Member Address Id (null on create requests)
          format: int64
          readOnly: true
        address1:
          maxLength: 128
          minLength: 0
          type: string
          description: Line 1 of the member's physical address
        address2:
          maxLength: 128
          minLength: 0
          type: string
          description: Optional line 2 of the member's physical address
        address3:
          maxLength: 100
          minLength: 0
          type: string
          description: Optional line 3 of the member's physical address
        city:
          maxLength: 128
          minLength: 0
          type: string
          description: Member's city of residence
        stateCode:
          type: string
          description: 'State code as defined by the ISO-3166-2 principal subdivisions (e.g., provinces or states) of all countries coded in ISO 3166-1.'
        zip:
          maxLength: 20
          minLength: 0
          type: string
          description: "Member's zip/postal code. Format: 12345"
        typeCode:
          type: string
          description: 'Type of physical address. Valid Values: Home, Business'
        countryCode:
          type: string
          description: Member's country of residence. ISO 3166-1 Alpha-2 country code.
        asciiAddress1:
          maxLength: 128
          minLength: 0
          type: string
          description: ASCII Address1. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiAddress2:
          maxLength: 128
          minLength: 0
          type: string
          description: ASCII Address2. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiAddress3:
          maxLength: 100
          minLength: 0
          type: string
          description: ASCII Address3. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiCity:
          maxLength: 128
          minLength: 0
          type: string
          description: ASCII City. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiStateCode:
          type: string
          description: ASCII State Code. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiZip:
          maxLength: 20
          minLength: 0
          type: string
          description: ASCII Zip. One will be generated if not provided. Only valid if enabled on Client program configuration.
        asciiCountryCode:
          type: string
          description: >
            ASCII Country Code. One will be generated if not provided.
            One will be generated if not provided. Only valid if enabled on Client
            program configuration..
        order:
          type: integer
          description: >
            Priority / Order of the address. If not provided - will be set to default of 1 for create requests,
            and existing value for update requests. Upon member enrollment, if multiple addresses are provided,
            order will default to 1 unless another address in the request already has an order value of 1,
            in which case, order will be incremented by 1 until there is no matching order in the member's addresses.
          format: int32
        active:
          type: boolean
          description: active
        validated:
          type: boolean
          description: Has the address been validated
        statusCode:
          maxLength: 50
          minLength: 1
          type: string
          description: 'Status of the address. Valid Values: A, C'
        updateDateTime:
          type: string
          description: DateTime of the last time the address was updated
          format: date-time
          readOnly: true
    MemberAlias:
      required:
        - alias
        - typeCode
      type: object
      properties:
        memberAliasId:
          type: integer
          description: Member Alias Id (null on create requests)
          format: int64
          readOnly: true
          example: 12345
        typeCode:
          type: string
          description: 'Alias type - Valid values: Email, Merge, Mobile, Card, ClientAccountNumber, LegacyAccountNumber, Partner, <Client Defined> - Dependent on client configuration'
          example: Email
        alias:
          maxLength: 200
          minLength: 1
          type: string
          description: The alias value
          example: A123456
        mergeMemberIdentifier:
          type: string
          description: Identifies the member whose account was merged (MergeSurvivor or MergeVictim)
        startDate:
          type: string
          description: 'Date the alias starts, will default to current date if not provided'
          format: date
        endDate:
          type: string
          description: Date the alias ends
          format: date
        partnerProgramCode:
          type: string
          description: Partner Program identifier the alias is associated. Used for PartnerPreferred Alias. Optional
        partnerProgramName:
          type: string
          description: Partner Program name the alias is associated. Used for PartnerPreferred Alias. Optional
          readOnly: true
        statusCode:
          type: string
          description: 'Status of the alias - Valid values: Active, Inactive'
          default: Active
        updateDateTime:
          type: string
          description: Timestamp the alias was updated (null on create requests)
          format: date-time
          readOnly: true
    MemberComment:
      type: object
      properties:
        memberCommentId:
          type: integer
          description: Comment Identifier
          format: int64
        memberCommentType:
          type: string
          description: 'Indicates where the comment was originated from i.e. CallLog, UserTask, StatusMatch, MemberMerge'
        memberidentifier:
          type: string
          description: Channel/Partner specific member identifier
        accountNumber:
          type: string
          description: Member's account number
        companyName:
          type: string
          description: Company/business associated with member
        memberName:
          type: string
          description: Display name of the member
        memberType:
          type: string
          description: Tally account type - Client Program determines which account types are available. Default value 'MBR' for 'Member'
        commentName:
          type: string
          description: Title of the comment
        title:
          type: string
          description: Original Title of the comment
        status:
          type: string
          description: 'The current status of the comment; i.e. C - Closed, O - Open'
        followUpFlag:
          type: boolean
          description: True if follow up is required
        followUpDate:
          type: string
          description: "Due date for follow up, if follow up flag is 'true'"
          format: date
        assignedTo:
          type: string
          description: Indicates whether the comment is assigned to a UserRole or Me. Valid values come from UserRoles
        createDateTime:
          type: string
          description: Timestamp the comment was created
          format: date-time
        updateDateTime:
          type: string
          description: Timestamp the comment was last updated
          format: date-time
        exceedsSLA:
          type: boolean
          description: True or False
        locked:
          type: boolean
          description: True if the comment was locked by a user
        lockerId:
          type: integer
          description: UserId of user who has started work on the comment and hasn't saved it yet.
          format: int64
        lockerName:
          type: string
          description: Name of user who has started work on comment and hasn't yet saved it.
        lockerRank:
          type: integer
          description: The highest role of the User who has locked the comment. Users with a better rank may forcibly unlock the comment.
          format: int32
        closedDate:
          type: string
          description: Closed date for member comment
          format: date
        reason:
          type: string
          description: 'Reason why the comment was created; i.e. Adjustment, Enrollment, Account Merge'
        subReason:
          type: string
          description: Sub reason why the comment was created
        correspondenceToSendToMemberId:
          type: integer
          description: 'Internal Tally record identifier, used to look up MemberCorrespondenceType'
          format: int64
        externalReference:
          type: string
          description: Open reference field - should be mapped by client
        comments:
          type: array
          description: Collection of fields defining more information about the user creating the comments
          items:
            $ref: '#/components/schemas/MemberCommentDetail'
        customData:
          $ref: '#/components/schemas/CustomData'
        externalProgram:
          type: string
          description: 'For type Status Match, identifies the associated loyalty program'
        externalProgramStatus:
          type: string
          description: 'For type Status Match, the status of the associated loyalty program'
        sourceApplicationIP:
          type: string
          description: Request IP Address
        commentCloseReason:
          type: string
          description: Reason why a comment is closed
        memberCommentImages:
          type: array
          description: List of image data related to the comment
          items:
            $ref: '#/components/schemas/MemberCommentImageData'
        closedDateTime:
          type: string
          description: Closed date for member comment
          format: date-time
        createdBy:
          type: string
          description: Username of the person who created the comment
        updatedBy:
          type: string
          description: Username of the person who updated the comment
        firstComment:
          type: string
          description: Oldest comment provided within comment object as firstComment
        statusDescription:
          type: string
          description: Full description of the status (e.g., Closed, Open)
        reasonDescription:
          type: string
          description: Full description of the reason (e.g., “PUD” = Profile Update)
        subReasonDescription:
          type: string
          description: Full description of the subReason
    MemberCommentDetail:
      type: object
      properties:
        createDate:
          type: string
          description: Timestamp the commentDetail was created
          format: date-time
        createdBy:
          type: string
          description: Name of comment creator
        comment:
          type: string
          description: Value of comment
        assignedToUser:
          type: string
          description: User now responsible
        assignedToRole:
          type: string
          description: Highest role from user now responsible
        reassigned:
          type: boolean
          description: If the current comment has been reassigned to a new user
        assignedFromUser:
          type: string
          description: User that originally assigned it
        assignedFromRole:
          type: string
          description: Highest role from the user that originally assigned it
    MemberCommentImageData:
      type: object
      properties:
        imageId:
          type: integer
          format: int64
        status:
          type: string
          description: Status of the image
        tag:
          type: string
          description: Tag of the image
        format:
          type: string
          description: 'Type of image; i.e. jpg, gif'
    MemberCommentRequest:
      required:
        - comment
        - status
      type: object
      properties:
        memberCommentId:
          type: integer
          description: Comment Identifier
          format: int64
          example: 123456
        reason:
          type: string
          description: 'Allowed CommentReason like Bonus-Adjustment, Contact Customer Service, Cancel Transaction, Account Merge, Other, Point Redemption, Promotion Registration, Replacement Card Request, Replacement Kit Request, Reset Password, Manual Accrual, Update Status, Update Transaction, Point Redemption Returned, Pool Allocation Changed, Add Badge, Edit Coupon, Cancelled For Bonus Re Evaluation, Under Investigation, Profile Update, Status Match, Enrollment, Award Bonus, Bank of America, Coupon Transfer, Profile Update, Purge, Missing Reimbursement, Reimbursement Adjustment - No-Show/Late Cancel, Reimbursement Adjustment - Early Departure, HIPs Bonus Credit, Event Planner, Wedding Incentive Points, MyWay Bonus, Merge Adjustment, Coupon Modified, Merge seed accrual, Merge seed redemption, Coupon cancelled'
          example: ADJ
        subReason:
          type: string
          description: 'Sub reason why the comment was created  e.i. XXX-ADJ, OTH-Other'
          example: XXX-ADJ
        status:
          type: string
          description: 'The current status of the comment; e.i. C - Closed, O - Open'
          example: C
          default: C
        comment:
          type: string
          description: Details of the comment
          example: Adding member adjustment to account 12345X
        followUpFlag:
          type: boolean
          description: True= follow up required
          example: false
          default: false
        followUpDate:
          type: string
          description: "Due date for follow up, if follow up flag is 'true'"
          format: date
        assignedToCode:
          type: integer
          description: Role the Call is assigned to
          format: int64
        correspondenceToSendToMemberId:
          type: integer
          description: 'Internal Tally record identifier, used to look up MemberCorrespondenceType'
          format: int64
        externalReferenceId:
          type: string
          description: Open reference field - should be mapped by client
        bonusRuleId:
          type: integer
          description: Tally Identifier of the Bonus Rule
          format: int64
        commentCloseReason:
          type: string
          description: 'Reason why a comment is closed. Valid values are like ImageSearch, InvalidCompetitorStatus, Other, SuspiciousSubmission'
        commentType:
          type: string
          description: Comment Type
        title:
          type: string
          description: 'Title, defaulted to reason if not set'
        closedDate:
          type: string
          description: Closed date for member comment
          format: date
    MemberCommentBulkRequest:
      required:
        - accountIds
        - reason
        - title
        - closedDate
        - comment
      type: object
      properties:
        accountIds:
          type: array
          items:
            type: string
            description: Member's account number
            example: 123456
        reason:
          type: string
          description: 'Reason why the comment was created; i.e. Adjustment, Enrollment, Account Merge'
        title:
          type: string
          description: Title of member comment
        closedDate:
          type: string
          description: Date member comment will be closed
          format: date
          example: 2023-04-06
        comment:
          type: string
          description: Details of the comment
    MemberCommentBulkResponse:
      type: object
      properties:
        totalRecords:
          type: integer
          description: Total number of records uploaded
          format: int32
          example: 1000
        totalRecordsUpdated:
          type: integer
          description: Total number of records uploaded successfully
          format: int32
          example: 950
        totalRecordsFailed:
          type: integer
          description: Total number of records that failed during upload
          format: int32
          example: 50
        errorDetails:
          description: Error details of the records that failed during upload
          $ref: '#/components/schemas/ErrorResponse'
    MemberCoupon:
      required:
        - coupon
        - sourceReferenceId
        - sourceTypeCode
        - statusCode
      type: object
      properties:
        memberCouponId:
          type: integer
          description: Member Coupon Id (null on create requests)
          format: int64
          example: 147258369
        coupon:
          $ref: '#/components/schemas/Coupon'
        sourceTypeCode:
          type: string
          description: 'Coupon Award Source Type Code. Example: Adjustment, Bonus, Promotion, Redemption, TierAward'
          example: Promotion
        sourceReferenceRuleCode:
          type: string
          description: 'Promotion/Bonus/Redemption Rule code that awarded the coupon'
          example: StayBonus
          readOnly: true
        sourceReferenceId:
          type: integer
          description: Id of the source of the coupon award. ie. the bonusId
          format: int64
          example: 147258369
        aggregateStatusCode:
          type: string
          description: 'Aggregate Coupon Status Code, one of Used, Held, Issued, Expired, Cancelled. The status, in aggregate of the coupon. This value is determined by examining the status values of all of the coupon uses as well as the coupon status. Between issued and expired (coupon status), held and used (coupon use status), will determine what the aggregate status of the coupon should be. Only populated if includeUses flag is set in the request or if searching by aggregateStatusCode.'
          example: Active
        statusCode:
          type: string
          description: 'Member Coupon Status Code, one of Active, Cancelled, Expired'
          example: Active
        transferable:
          type: boolean
          description: Whether this coupon is eligible to be transferred to another member
        previouslyTransferred:
          type: boolean
          description: Whether this coupon has already been transferred at least once
    MemberCommentResponseV4:
      type: object
      properties:
        results:
          type: array
          description: 'The returned member comments'
          items:
            $ref: '#/components/schemas/MemberComment'
        pageInfo:
          $ref: '#/components/schemas/PageInfo'
    MemberCurrency:
      required:
        - available
        - categoryCode
        - earned
        - expired
        - redeemed
        - typeCode
      type: object
      properties:
        typeCode:
          type: string
          description: Identifies type of currency - ie. Point vs. Mile
          example: POINTS
        typeCodeDescription:
          type: string
          description: Currency type description
          example: Points
        categoryCode:
          type: string
          description: Short identifier of currency category
          example: P
        categoryCodeDescription:
          type: string
          description: Currency category description
          example: Loyalty
        expireType:
          type: string
          description: 'Identifies expiration type of Currency - ie. Incremental, LimitedTime, Rolling'
          example: LimitedTime
        expireTypeDescription:
          type: string
          description: Currency expiration description
          example: Standard Expiration
        description:
          type: string
          description: Member currency description
        available:
          type: number
          description: 'Currency available to spend [Earned - (Expired + Redeemed)]'
          example: 675.0
        earned:
          type: number
          description: Amount of currency earned
          example: 1000.0
        redeemed:
          type: number
          description: Amount of currency redeemed
          example: 300.0
        expired:
          type: number
          description: Amount of currency expired
          example: 25.0
        changeDate:
          type: string
          description: Date of last member currency change
          format: date
          example: 2023-05-11
        pointForfeitureDate:
          type: string
          description: 'Date of point forfeiture, if any'
          format: date
          example: 2023-05-11
        primaryCurrency:
          type: boolean
          description: 'Indicates whether currency is primary currency as configured for program'
          default: false
          example: false
    MemberCurrencyBucket:
      type: object
      properties:
        typeCode:
          type: string
          description: Identifies type of currency - ie. Point vs. Mile
          example: POINTS
        categoryCode:
          type: string
          description: Short identifier of currency category
          example: P
        available:
          type: number
          description: 'Number of points available to spend [Earned - (Expired + Redeemed)] in a point bucket'
          example: 1608.0
        earned:
          type: number
          description: Number of points earned in a point bucket
          example: 1608.0
        redeemed:
          type: number
          description: Number of points redeemed in a point bucket
          example: 1000.0
        expired:
          type: number
          description: Number of points expired in a point bucket
          example: 0.0
        expirationDate:
          type: string
          description: Date of point bucket expiration
          format: date
          example: 2025-01-01
        expirationRuleDescription:
          type: string
          description: Expiration rule description
          example: Points will expire 4 years after they are earned
        earnedDate:
          type: string
          description: Date of points earned in a point bucket
          format: date
          example: 2022-01-01
        changeDate:
          type: string
          description: Date of last member currency change
          format: date
          example: 2023-01-01
        primaryCurrency:
          type: boolean
          description: 'Indicates whether currency is primary currency as configured for program'
          default: false
          example: false
    MemberList:
      type: object
      properties:
        memberListId:
          type: integer
          description: Member list identifier
          format: int64
          readOnly: true
        code:
          type: string
          description: Code of member list
        name:
          type: string
          description: Name of member list
          readOnly: true
        description:
          type: string
          description: Description of member list
          readOnly: true
        statusCode:
          type: string
          description: 'Status of the member list, one of: ACTIVE, INACTIVE'
          readOnly: true
        typeCode:
          type: string
          description: 'Type of the member list, one of: SEGMENT, LIMITED_TIME, TIER_ROLLOVER, OTHER, ...'
          readOnly: true
      description: Defines a list of members
    ListMember:
      type: object
      properties:
        memberIdentifier:
          type: string
          description: Member identifier
          readOnly: true
        startDate:
          type: string
          description: Date the member was or will be included in the member list
          format: date
          example: 2020-04-06
        endDate:
          type: string
          description: Date the member was or will be excluded from the member list
          format: date
          example: 2026-04-02
        memberList:
          $ref: '#/components/schemas/MemberList'
      description: Represents a member in a member list
    MemberEmail:
      required:
        - email
      type: object
      properties:
        memberEmailId:
          type: integer
          description: Member Email Id (null on create requests)
          format: int64
          readOnly: true
        email:
          maxLength: 150
          minLength: 0
          type: string
          description: Email Address
          example: email@email.com
        typeCode:
          type: string
          description: 'Email Type: Options: Home, Work, Other'
        order:
          type: integer
          description: >
            Order. If not provided - will be set to default of 1 for create requests, 
            and existing value for update requests. Upon member enrollment, if multiple emails are provided, 
            order will default to 1 unless another email in the request already has an order value of 1, 
            in which case, order will be incremented by 1 until there is no matching order in the member's emails.
          format: int32
          example: 1
        validated:
          type: boolean
          description: Has the email address been validated
        statusCode:
          type: string
          description: 'Status of the email address. Valid Values: A, C'
        updateDateTime:
          type: string
          description: DateTime of the last time the email was updated
          format: date-time
          readOnly: true
    Event:
      type: object
      properties:
        eventDateTime:
          type: string
          description: Date and time the event occurred. Defaults to current time in CT.
          format: date-time
        parameters:
          type: object
          description: Event parameters, any number of them, with a name and value for each.
          properties: {}
          example: '{ "Name1": "Value1", "Name2": "Value2" }'
    EventResults:
      type: object
      properties:
        results:
          type: array
          description: Results of qualifying event rules.
          items:
            $ref: '#/components/schemas/EventRuleResults'
    EventRuleResults:
      type: object
      description: Results of a single qualifying event rule.
      properties:
        eventRuleId:
          type: integer
          description: Identifies the event rule.
          format: int64
        eventRuleCode:
          type: string
          description: Code of the event rule.
        results:
          type: array
          description: Results of the event rule.
          items:
            $ref: '#/components/schemas/EventRuleResult'
    EventRuleResult:
      type: object
      description: A single event rule result.
      properties:
        resultTypeCode:
          type: string
          description: Type of result, a data code of type EventResultTypeCode
          example: Bonus
        parameters:
          type: object
          description: Parameters of the event rule result. Content varies by result type.
          properties: {}
          example: { 'bonusRuleId': 1234, 'bonusRuleCode': 'C234' }
      required:
        - resultTypeCode
        - parameters
    MemberPaymentCardAccount:
      required:
        - paymentCardAccountNumber
        - typeCode
      type: object
      properties:
        memberPaymentCardAccountId:
          type: integer
          description: Member Payment Card Account Id (null on create requests)
          format: int64
          readOnly: true
        typeCode:
          maxLength: 50
          minLength: 1
          type: string
          description: "Card Type: As defined by program configuration. Configure Program Setting: 'CreditCardType'."
        paymentCardAccountNumber:
          minLength: 1
          maxLength: 50
          type: string
          description: 'Account number associated to the payment card account, typically Acquirer Reference Number. DO NOT ENTER PCI INFORMATION.'
        enrollmentDate:
          type: string
          description: Date member was enrolled in the payment card program.
          format: date
        lastOpenDate:
          type: string
          description: Date member last opened the card in the program.
          format: date
        lastClosedDate:
          type: string
          description: Date member last closed the card in the program.
          format: date
        firstUseDate:
          type: string
          description: Date in which the card was first used
          format: date
        accountStatusDate:
          type: string
          description: Date in which the card status was changed. This is defined by the payment card partner.
          format: date
        productType:
          maxLength: 50
          type: string
          description: String description of the associated card product
        sourceCode:
          minLength: 1
          maxLength: 50
          type: string
          description: Source that opened the card
        merchantCode:
          maxLength: 50
          type: string
          description: Merchant that opened the card
        channelCode:
          minLength: 1
          maxLength: 50
          type: string
          description: Channel that opened the card
        firstName:
          maxLength: 100
          type: string
          description: Member first name as it appears with the card processor
        lastName:
          maxLength: 100
          type: string
          description: Member last name as it appears with the card processor
        birthDate:
          type: string
          description: Member's date of birth with the card processor
          format: date
        updateDateTime:
          type: string
          description: Timestamp the payment card account was updated.
          format: date-time
          readOnly: true
        active:
          type: boolean
          description: True if lastClosedDate is null or before/equals to lastOpenDate
          readOnly: true
        additionalProperties:
          type: object
          properties: {}
      description: Representation of a member's payment (credit) card. DO NOT ENTER PCI INFORMATION.
    MemberPhone:
      required:
        - phoneNumber
      type: object
      properties:
        memberPhoneId:
          type: integer
          description: Member Phone Id (null on create requests)
          format: int64
          readOnly: true
        phoneNumber:
          maxLength: 25
          minLength: 0
          pattern: '^([^0-9]*[0-9]){0,15}[^0-9]*$'
          type: string
          description: >
            Phone number value. Max length 25. Allows for a formated number
            when edited. The entered value will be stored in the rawPhoneNumber field
            and on reads the phoneNumber field returns a numeric phone number.
          example: 1 414 111-1111
        phoneExtension:
          maxLength: 10
          minLength: 0
          type: string
          description: Phone extension. Max length 10
        rawPhoneNumber:
          maxLength: 75
          minLength: 0
          type: string
          description: Phone number value. Max length 75
          readOnly: true
        carrier:
          type: string
          description: Phone carrier (phone company) name. Max length 10
        typeCode:
          type: string
          description: 'Type of phone number. Valid Values: Home, Work, Mobile, Fax, None'
          example: Mobile
        smsCapable:
          type: boolean
          description: Identifies if the phone number can receive and send SMS messages
        validated:
          type: boolean
          description: Has the phone number been validated
        statusCode:
          type: string
          description: 'Status of the phone number. Valid Values: A, C'
          example: A
        updateDateTime:
          type: string
          description: DateTime of the last time the phone number was updated
          format: date-time
          readOnly: true
    MemberPreference:
      required:
        - preferenceRuleCode
        - preferenceRuleDetailCode
      type: object
      properties:
        memberPreferenceId:
          type: integer
          description: Member preference identifier (null on create requests)
          format: int64
          readOnly: true
        preferenceRuleCode:
          type: string
          description: 'Preference rule code (IE: ROOM_PREFERENCE)'
        preferenceRuleDescription:
          type: string
          description: Preference rule description (null on create/update requests)
          readOnly: true
        preferenceRuleDetailCode:
          type: string
          description: 'Detail code (IE: ROOM_PREFERENCE_LOCATION, ROOM_PREFERENCE_BEDTYPE)'
        preferenceRuleDetailDescription:
          type: string
          description: Detail description (null on create/update requests)
          readOnly: true
        preferenceTypeCode:
          type: string
          description: Preference value type
          readOnly: true
        preferenceDataType:
          type: string
          description: Preference rule detail data type
          readOnly: true
        value:
          type: string
          description: 'The value of the member preference (IE: ELEVATOR, KING, etc)'
        description:
          type: string
          description: 'Ace description or data code description '
        updateDateTime:
          type: string
          description: DateTime of the last time the preference was updated
          format: date-time
          readOnly: true
    MemberBonus:
      type: object
      properties:
        bonus:
          description: Bonus rule for the member bonus award
          $ref: '#/components/schemas/Bonus'
        transactions:
          type: array
          description: List of earnings or redemptions awarded from the bonus
          items:
            $ref: '#/components/schemas/Transaction'
        coupons:
          type: array
          description: List of coupons awarded from the bonus
          items:
            $ref: '#/components/schemas/Coupon'
        memberTier:
          description: Member tier awarded from the bonus
          $ref: '#/components/schemas/MemberTier'
        memberList:
          description: Member list awarded from the bonus
          $ref: '#/components/schemas/MemberList'
    MemberLinkedAccountRequest:
      required:
        - linkedMemberIdentifier
        - linkedType
        - administrator
      type: object
      properties:
        linkedMemberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Linked Member Identifier (i.e, Corporate Account Id).
          format: string
          example: 123456
        startDateTime:
          type: string
          pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
          example: 2025-06-12T00:00:00
        endDateTime:
          type: string
          pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
          example: 2026-06-02T00:00:00
        linkedType:
          type: string
          description: Linked account type
          format: string
          example: CORP
        administrator:
          type: boolean
          example: true
    MemberLinkedAccountResponse:
      type: object
      properties:
        memberLinkedAccountId:
          type: integer
          description: Unique identifier for the record created in the MemberLinkedAccount table
          format: int64
          readOnly: true
        linkedMemberIdentifier:
          type: string
          description: Member Identifier of the linked account
          readOnly: true
        startDateTime:
          type: string
          pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
          readOnly: true
          example: 2025-06-11T00:00:00+05:30
        endDateTime:
          type: string
          pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
          readOnly: true
          example: 2025-06-21T00:00:00+05:30
        linkedType:
          type: string
          description: Linked account type
          format: string
          readOnly: true
          example: CORP
        administrator:
          type: boolean
          example: true
        result:
          type: string
          description: Outcome of the operation. If a new record was created result = "Added" else "Moved"
          format: string
          readOnly: true
          example: Added or Moved
        updateDateTime:
          type: string
          description: Last time the member linked account was updated
          pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
          readOnly: true
          example: 2023-06-18T04:09:58.067-05:00
    MemberPromotion:
      type: object
      properties:
        memberPromotionId:
          type: integer
          description: Member Promotion Identifier
          format: int64
        qualifyDateTime:
          type: string
          description: DateTime the member qualified for the promotion
          format: date-time
        lastUpdatedBy:
          type: string
          description: User or system that last updated the member promotion record
        registeredBy:
          type: string
          description: User or system that first created/registered the member promotion record
        promotion:
          $ref: '#/components/schemas/Promotion'
        registered:
          type: boolean
          description: Indicates whether member is registered
        registerDateTime:
          type: string
          description: DateTime the member was registered in promotion
          format: date-time
        registerChannelCode:
          type: string
          description: The application through which the member was registered
        createDateTime:
          type: string
          description: DateTime the member promotion record was created
          format: date-time
        endDateTime:
          type: string
          description: Member promotion end date
          format: date-time
        timesAwarded:
          type: integer
          description: Quantity of times the member has earned the promotion
          format: int64
        nextAwardThreshold:
          type: number
          description: 'If using thresholds, this indicates the qty to reach next threshold'
        promotionRegistrationSource:
          type: string
          description: Value indicating the source of the promotion registration
        preQualificationCounters:
          type: array
          description: Collection of fields defining the pre qualification counter and progress on promotion
          items:
            $ref: '#/components/schemas/MemberPromotionCounter'
        counters:
          type: array
          description: 'Collection of fields defining the counter and progress on promotion. If thresholds are used on promotion, a counter for each threshold will be returned.'
          items:
            $ref: '#/components/schemas/MemberPromotionCounter'
        details:
          type: array
          description: Collection of fields defining what has counted toward the member's promotion progress
          items:
            $ref: '#/components/schemas/MemberPromotionDetail'
        results:
          type: array
          description: Collection of fields defining the result of the promotion
          items:
            $ref: '#/components/schemas/MemberPromotionResult'
        relatedPromotions:
          type: array
          description: Complete collection of Member Promotions that are related
          items:
            $ref: '#/components/schemas/MemberPromotion'
    MemberPromotionCounter:
      type: object
      properties:
        counterTypeCode:
          type: string
          description: 'The counter type indicates what is being counted. DataCode Type: CounterType Example: P (Points), S (Spend), S (Stays)'
        target:
          type: number
          description: Threshold/Target count at which member will be rewarded
        progress:
          type: number
          description: Details about the result of meeting target
        percentage:
          type: number
          description: Progress/target percentage
        result:
          type: array
          description: Details about the result of meeting target
          items:
            $ref: '#/components/schemas/MemberPromotionResult'
    MemberPromotionDetail:
      type: object
      properties:
        accrualDateTime:
          type: string
          description: Member promotion accrual date
          format: date-time
        description:
          type: string
          description: Description of the member promotion accrual
        customData:
          $ref: '#/components/schemas/CustomData'
        cycle:
          type: integer
          description: Promotion cycle this counted toward
          format: int64
        contributedToPreQualification:
          type: boolean
          description: Indicates if this transaction contributed towards pre-qualification
        slidingQualificationAwarded:
          type: boolean
          description: Indicates if this transaction contributed towards sliding qualification promotion
        counters:
          type: array
          description: Counters from the transaction
          items:
            $ref: '#/components/schemas/Counter'
    MemberPromotionResult:
      allOf:
        - $ref: '#/components/schemas/PromotionResult'
        - type: object
          properties:
            memberCoupons:
              type: array
              items:
                $ref: '#/components/schemas/MemberCoupon'
    MemberRedemption:
      type: object
      properties:
        memberRedemptionId:
          type: object
          description: Member Redemption Id
          format: int64
          example: '1234'
          readOnly: true
        redemptionItemCode:
          type: string
          description: 'Identifies the coupon, event or other that member is spending points to purchase'
          example: GIFT-CARD-50
        redemptionItemDescription:
          type: string
          description: Description of the redemption item
          readOnly: true
          example: 50$ Gift Card
        referenceId:
          type: string
          description: Client redemption identifier if provided during request
          example: 12345
        customData:
          $ref: '#/components/schemas/CustomData'
        quantity:
          type: integer
          description: The number of redemption items redeemed.
          format: int32
          example: 10
        currencyValue:
          type: number
          description: Points redeemed.
          example: 100.0
        partnerCode:
          type: string
          description: Partner Code - if a partner item
          example: PARTNER123
        expectedShipDate:
          type: string
          description: Expected shipping date for physical goods. NA if not physical - just marked as the date redeemed
          format: date
          example: 2020-01-01
        orderAddress:
          $ref: '#/components/schemas/MemberRedemptionOrderAddress'
        bonuses:
          type: array
          description: Bonuses awarded from the redemption
          items:
            $ref: '#/components/schemas/Transaction'
          readOnly: true
        coupons:
          type: array
          description: 'If redemption is for a coupon, the coupons associated to the redemption'
          items:
            $ref: '#/components/schemas/MemberCoupon'
          readOnly: true
        relatedRedemptionId:
          type: integer
          description: Related cancel redemption Id
          format: int64
          example: 12342328
          readOnly: true
        fraudRiskScore:
          type: number
          description: Fraud risk score from 0-100 with up to 2 decimal places
          minimum: 0
          maximum: 100
          example: 25.75
          readOnly: true
        fraudConfirmation:
          type: boolean
          description: true = confirmed fraud; false = confirmed not fraud; null = not yet confirmed
        status:
          type: string
          description: Status of the redemptions. Values are Shipped, Pending, Cancelled, Ordered, Queued, Held, Fraud.
        redemptionRuleCode:
          type: string
          description: Redemption rule code for the rule that relates to this member redemption.
          readOnly: true
        transactionAmount:
          type: number
          description: Client-defined value set at creation time. Does not affect points redeemed.
        invoiceNumber:
          type: string
          description: Client-defined reference number used to identify order information for fulfillment.
    MemberRedemptionLineItem:
      type: object
      properties:
        description:
          type: string
          description: redemption item description
          readOnly: true
        itemCode:
          type: string
          description: Code for the item to be rewarded
        quantity:
          type: integer
          description: Quantity of the item being redeemed
          format: int32
        amount:
          minimum: 1
          type: number
          description: redemption item amount
    MemberRedemptionOrderAddress:
      required:
        - address1
        - city
        - countryCode
        - stateCode
        - zip
      type: object
      properties:
        name:
          maxLength: 128
          minLength: 0
          type: string
          description: Name to ship the redemption/order to
        address1:
          maxLength: 128
          minLength: 0
          type: string
          description: Line 1 of the physical address
        address2:
          maxLength: 128
          minLength: 0
          type: string
          description: Optional line 2 of the physical address
        address3:
          maxLength: 100
          minLength: 0
          type: string
          description: Optional line 3 of the physical address
        city:
          maxLength: 128
          minLength: 0
          type: string
          description: City of residence
        stateCode:
          type: string
          description: 'State code as defined by the ISO-3166-2 principal subdivisions (e.g., provinces or states) of all countries coded in ISO 3166-1.'
        zip:
          maxLength: 20
          minLength: 0
          type: string
          description: 'Zip/postal code. Format: 12345'
        countryCode:
          type: string
          description: Country of residence. ISO 3166-1 Alpha-2 country code.
        emailAddress:
          maxLength: 150
          minLength: 0
          type: string
          description: Email address of the order
        phoneNumber:
          maxLength: 128
          minLength: 0
          type: string
          description: Phone number of the order
    MemberRedemptionRequest:
      required:
        - quantity
      type: object
      properties:
        redemptionItemCode:
          type: string
          description: 'Identifies the coupon, event or other that member is spending points to purchase'
        redemptionDate:
          type: string
          description: Date of the redemption. Defaults to today's date.
          format: date
          example: 2020-01-01
        referenceId:
          type: string
          description: Client redemption identifier if provided during request
        quantity:
          minimum: 1
          type: integer
          description: The number of items to redeem for
          format: int32
        providedAmount:
          type: number
          description: 'Value of purchased item in loyalty currency (Points, Miles). Required if item has variable cost. Can also be set on migrated redemptions.'
          example: 100.0
        transactionAmount:
          type: number
          description: Monetary value of purchased amount.
          example: 5.75
        offerCriteria:
          type: object
          additionalProperties:
            type: string
          description:
            List of offer attributes that are used to identify the correct
            redemption rule. If this object is populated the redemptionItemCode should
            not be defined.
        orderAddress:
          $ref: '#/components/schemas/MemberRedemptionOrderAddress'
        couponUse:
          $ref: '#/components/schemas/CouponUseRequest'
        lineItems:
          type: array
          description: list of line items redeemed
          items:
            $ref: '#/components/schemas/MemberRedemptionLineItem'
        status:
          type: string
          description: Status of the redemptions. Values are Shipped, Pending, Cancelled, Ordered, Queued, Held, Fraud.
        expectedShipDate:
          type: string
          description: Expected shipping date for physical goods. NA if not physical - just marked as the date redeemed
          format: date
          example: 2020-01-01
        invoiceNumber:
          type: string
          description: Client-defined reference number used to identify order information for fulfillment.
    Closeable:
      type: object
      properties:
        closeable:
          type: boolean
          description: Flag to indicate if the account is closeable or not
          example: false
        code:
          type: string
          description: Code for closeable reason
          example: '12001'
        reason:
          type: string
          description: Reason details for closeable reason
          example: Member has negative point balance and cannot be closed or merged.
    MemberTier:
      required:
        - rank
        - tierCode
      type: object
      properties:
        tierCode:
          type: string
          description: Code of tier
          example: B
        description:
          maxLength: 10
          minLength: 0
          type: string
          description: Description of tier
          example: Base
        rank:
          type: integer
          description: Hierarchy of tier - higher ranks are more elite
          example: 10
        typeCode:
          type: string
          description: 'Type of tier. Valid Values: Earned, Trial, Exclusive'
          example: Earned
        startDate:
          type: string
          description: Date the tier starts
          format: date
          example: 2020-01-01
        endDate:
          type: string
          description: Date the tier ends
          format: date
          example: 2020-12-31
        grandFathered:
          type: boolean
          description: Was the tier grandfathered from a previous program
          example: false
        earned:
          type: boolean
          description: Was the tier earned from program earning rules
          example: true
        lifetime:
          type: boolean
          description:
            Identifies if the tier is a lifetime tier. Lifetime tiers do
            not expire
          example: false
        rolloverNights:
          type: integer
          description: Number of nights over what was needed to qualify for this tier that will go towards qualification for a future tier.
          example: 10
        assignmentReason:
          type: string
          enum:
            [
              bonus,
              creditcard,
              management,
              manual,
              promotion,
              stepdown,
              system,
              tiergift,
            ]
          description: Reason tier was awarded
          example: bonus
        assignmentReasonObjectExternalReference:
          type: string
          description: Identifier for the thing that caused this tier to be awarded
        assignmentReasonObjectDescription:
          type: string
          description: Description for the thing that caused this tier to be awarded.
          example: Adjustment Bonus 1000 Points
        createdBy:
          type: string
          description: Identifier for the user that caused this tier to be awarded.
    MemberFutureTier:
      type: object
      properties:
        tierCode:
          type: string
          description: Code of tier
          example: S
        description:
          maxLength: 10
          minLength: 0
          type: string
          description: Description of tier
          example: Silver
        rank:
          type: number
          description: Hierarchy of tier - higher ranks are more elite
          format: int32
          example: 20.0
        typeCode:
          type: string
          description: 'Type of tier. Valid Values: Earned, Trial, Exclusive'
          example: Earned
        qualificationDate:
          type: string
          description: Qualification date. Null unless tier has been awarded.
          format: date
          example: 2020-06-15
        awarded:
          type: boolean
          description: True if the tier has been awarded to the member.
          example: true
        expirationDate:
          type: string
          description: Date member tier will expire
          format: date
          example: 2020-12-31
        createDate:
          type: string
          description: Date member tier record was created
          format: date
          example: 2020-01-01
        lifetime:
          type: boolean
          description:
            Identifies if the tier is a lifetime tier. Lifetime tiers do
            not expire
          example: false
        counters:
          type: array
          description: Information about member's progress toward tier qualification
          items:
            $ref: '#/components/schemas/MemberFutureTierCounter'
    MemberFutureTierCounter:
      type: object
      properties:
        counterTypeCode:
          type: string
          description: Tier counter type
          example: Spend
        accruedAmount:
          type: number
          description: Quantity accrued towards tier
          example: 1.0
        requiredAmount:
          type: number
          description: Threshold to earn tier
          example: 100.0
        rolloverAmount:
          type: number
          description: Projected rollover amount as of today's date
          example: 15.0
        rolledOverAmount:
          type: number
          description: Rolled over amount from previous tier period
          example: 10.0
    MemberTierRequest:
      required:
        - tierCode
        - tierYear
        - comments
      type: object
      properties:
        tierCode:
          type: string
          description: Code of tier
          example: B
        tierYear:
          type: integer
          description: Year the tier ends - YYYY format
          format: int32
          example: 2027
          minimum: 1900
          maximum: 4000
        comments:
          type: string
          description: Notes to provide additional context or explanation for the tier change
          example: Tier manually updated to Platinum because of xyz reason.
        forceTierChange:
          type: boolean
          description: When set to true, it forces a change in the member's tier, regardless of other conditions that might usually prevent such a change
          default: true
          example: true
        assignmentReason:
          type: string
          enum:
            [
              bonus,
              creditcard,
              management,
              manual,
              promotion,
              stepdown,
              system,
              tiergift,
            ]
          description: Reason tier was awarded
          example: bonus
    MemberTiersResponse:
      type: object
      properties:
        pastTiers:
          type: array
          description: Details about every past tier the member has had
          items:
            $ref: '#/components/schemas/MemberTier'
        currentTier:
          $ref: '#/components/schemas/MemberTier'
        projectedTier:
          $ref: '#/components/schemas/MemberTier'
        earningTier:
          $ref: '#/components/schemas/MemberFutureTier'
        aspirationTiers:
          type: array
          description:
            A collection of ALL the possible tiers above a member's tier
            that they could earn. EarningTier is the NEXT AspirationTier.
          items:
            $ref: '#/components/schemas/MemberFutureTier'
        nextTierRolloverDate:
          type: string
          description: The start date of the next tier period based on the current tier year.
          format: date
          example: 2020-01-01
    MemberBadge:
      type: object
      properties:
        memberBadgeId:
          type: integer
          description: Member Badge Identifier
          format: int64
          example: 147258369
        badgeDetails:
          $ref: '#/components/schemas/BadgeData'
        sourcecode:
          type: string
          description: type of thing that awarded the badge
          example: Promotion
        statusCode:
          type: string
          description: The status of the member badge
          example: Activated
        startDate:
          type: string
          description: Badge is good from this date through end date. Time is in Central Time
          format: date
          example: 2020-01-01
        endDate:
          type: string
          description: The badge is considered expired after this dateTime. Time is in Central Time
          format: date
          example: 2020-12-31
        updateUserName:
          type: string
          description: Username of the employee who made the most recent modification to member badge record
        createUserName:
          type: string
          description: Username of the employee who created this record with badge
        sourceDescription:
          type: string
          description: Reason for awarding badge or Bonus/Promotion rule description if the badge was awarded thru bonus or promotion.
    LinkedMemberAccount:
      type: object
      properties:
        memberLinkedAccountId:
          type: long
        memberIdentifier:
          type: integer
          description: Internal Tally member identifier
          format: int64
        accountNumber:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        accountStatusCode:
          type: string
          description: Status code (A, C, I, P)
        startDateTime:
          type: string
          format: date-time
        endDateTime:
          type: string
          format: date-time
        administrator:
          type: boolean
          description: Whether the linked account has administrator privileges for the corporate account
          default: false
          example: false
    BadgeData:
      type: object
      properties:
        badgeId:
          type: integer
          description: Badge Id
          format: int64
          example: 147258369
        badgeTypeCode:
          type: string
          description: Indicates type of badge
          example: General
        badgeName:
          type: string
          description: Badge name
          example: Event Organizer
        badgeDescription:
          type: string
          description: Badge description
          example: 'An organizer who brings in over $100,000 year in business'
        statusCode:
          type: string
          description: Status code
          example: Active
        expirationDate:
          type: string
          description: 'If the expiration type is exact, this date will appear on all badges'
          format: date
          example: 4000-01-01
        expirationType:
          type: string
          description: The type of expiration  - either exact or based on issuance
          example: Exact
        expirationDayPeriod:
          type: integer
          description: This attribute identifies after how many days badge expires
          format: int32
          example: 60
        expirationTimePeriod:
          type: integer
          description: In addition to expirationDayPeriod, this attribute identifies after how many hours badge expires
          format: int32
          example: 10
        logoKey:
          type: string
          description: A url where a logo to be associated with the badge can be found
          example: elite-explorer.png
        content:
          $ref: '#/components/schemas/GenericItem'
      description: Badge details
    CreateMemberBadgeRequest:
      required:
        - comment
      type: object
      properties:
        comment:
          type: string
          description: 'Reason for awarding badge.'
    Offer:
      required:
        - offerTypeCode
        - statusCode
      type: object
      properties:
        offerId:
          type: integer
          description: Offer Id (null on create requests)
          format: int64
          example: 147258369
        offerTypeCode:
          type: string
          description: Offer Type Code
          example: Discount
        code:
          type: string
          description: External offer code. Provided by client during offer setup.
          example: ALON2020
        name:
          type: string
          description: Offer Name
          example: Free night
        description:
          type: string
          description: Offer Description
          example: Award double points
        featureVersion:
          type: integer
          description: Coupon implementation version
          format: int32
          example: 2
        statusCode:
          type: string
          description: 'Offer Status Code, one of Enabled, Disabled'
          example: Enabled
        startDateTime:
          type: string
          description: Offer start DateTime
          format: date-time
        endDateTime:
          type: string
          description: Offer end DateTime
          format: date-time
        offerAttributes:
          type: array
          description: 'If includeOfferAttributes is true, Offer Attributes'
          items:
            $ref: '#/components/schemas/OfferAttribute'
      description: Offer defines an offer user which coupons can be issued
    OfferAttribute:
      required:
        - attribute
      type: object
      properties:
        offerAttributeId:
          type: integer
          description: Offer Attribute Id (null on create requests)
          format: int64
          example: 147258369
        attribute:
          $ref: '#/components/schemas/Attribute'
        defaultValue:
          type: string
          description: Indicates what shall be used if no other value is supplied
          example: Standard
        requireOnUse:
          type: boolean
          description: Indicates if presence of attribute is required for coupon use operation
          example: true
        requireOnHold:
          type: boolean
          description: Indicates if presence of attribute is required for coupon hold operation
          example: true
        includeOnResponse:
          type: boolean
          description: 'If true: The system will include this Attribute and Value on Coupon Use or Validation response'
          example: false
        attributeTypeCode:
          type: string
          description: 'Attribute Type Code, one of: Validation, Reporting'
          example: Validation
        operatorCode:
          type: string
          description: 'Attribute operator code. Examples: EQ, NEQ, LT, LTE, GT, GTE'
          example: EQ
        operand:
          type: string
          description: Value that operator applies to
          example: GI
        smartGroupId:
          type: integer
          description: Id of the Smart Group that operator applies to
          format: int64
          example: 147258369
    PreferenceRule:
      type: object
      properties:
        code:
          type: string
          description: Unique code of the preference group
        description:
          type: string
          description: A description of the preference group
        sortOrder:
          type: integer
          description: Display order
        statusCode:
          type: string
          description: 'One of: A (Active), I (Inactive)'
        details:
          type: array
          description: List of preferences
          items:
            $ref: '#/components/schemas/PreferenceRuleDetail'
      description: A group of similar preferences
    PreferenceRuleDetail:
      type: object
      properties:
        code:
          type: string
          description: Unique code of the preference
        description:
          type: string
          description: A description of the preference
        sortOrder:
          type: integer
          description: Display order
        statusCode:
          type: string
          description: 'One of: A (Active), I (Inactive)'
        dataType:
          type: string
          description: 'One of: boolean, choice, date, numeric, open'
        optionSource:
          type: string
          description: 'For dataType choice, one of: CODE, ACE01, ACE02, ACE03, ACE04, ACE05, ACE06, ACE07, ACE08, ACE09, ACE10, Country, Custom, LanguageType'
        options:
          type: array
          description: 'For optionSource Custom, list of available options'
          items:
            $ref: '#/components/schemas/PreferenceCustomOption'
      description: A preference that can be set on a member profile
    PreferenceCustomOption:
      type: object
      properties:
        value:
          type: string
          description: Value of custom option
        sortOrder:
          type: integer
          description: Display order
        statusCode:
          type: string
          description: 'One of: A (Active), I (Inactive)'
      description: Custom preference option
    Promotion:
      type: object
      properties:
        promotionId:
          type: integer
          description: Internal Tally identifier for promotion
          format: int64
        promotionCode:
          type: string
          description: Promotion code
        promotionName:
          type: string
          description: Name of promotion
        promotionDescription:
          type: string
          description: Description of promotion
        promotionTypeCode:
          type: string
          description: 'Indicates a  type for grouping promotions. DataCode Type: PromotionType'
        promotionSubTypeCode:
          type: string
          description: 'Indicates a secondary type for grouping promotions. DataCode Type: PromotionSubType'
        registerStartDateTime:
          type: string
          description: First date a member can register in promotion
          format: date-time
        registerEndDateTime:
          type: string
          description: Last date a member can register in promotion
          format: date-time
        registrationChannelCodes:
          type: array
          description: 'If present, specifies which channels are allowed to register members for this promotion. DataCode Type: RegistrationChannel'
          items:
            type: string
        autoRegister:
          type: boolean
          description: "When true, a Member's first qualifying activity for the promotion will automatically register them for the promo. However, if false, the Member will have to register for the promotion. Defaults to false."
        startDate:
          type: string
          description: First date of the promotion
          format: date
        endDate:
          type: string
          description: Date and time the Promotion is no longer valid
          format: date
        accrualTypeCode:
          type: string
          description: 'Accrual Type to count. DataCode Type: AccrualType Example: Base, Partner, Bonus, Promotion'
        callCenterOnly:
          type: boolean
          description: 'Only awardable via call center. This is set to true if the promotion is segment restricted, the current member is NOT in that segment, and the allowCsrOverride flag on the PromotionRule is set to true.'
        displayOnline:
          type: boolean
          description: Flag to indicate if the promotion should be displayed in call center
        displayOnlineUntilDateTime:
          type: string
          description: Used by frontend in conjunction with displayOnline flag
          format: date-time
        customData:
          $ref: '#/components/schemas/SmartGroupCustomData'
        genericItem:
          $ref: '#/components/schemas/GenericItem'
        graceLimit:
          type: integer
          description: Number of days past this promotion's end date to process incoming transactions. Leave empty for no end date.
          format: int32
        hasMinUserRoleToRegister:
          type: boolean
          description: Requires a minimal user role to register
        includeSunday:
          type: boolean
          description: DEPRECATED - Used to include Sunday in promotion
        includeMonday:
          type: boolean
          description: DEPRECATED - Used to include Monday in promotion
        includeTuesday:
          type: boolean
          description: DEPRECATED - Used to include Tuesday in promotion
        includeWednesday:
          type: boolean
          description: DEPRECATED - Used to include Wednesday in promotion
        includeThursday:
          type: boolean
          description: DEPRECATED - Used to include Thursday in promotion
        includeFriday:
          type: boolean
          description: DEPRECATED - Used to include Friday in promotion
        includeSaturday:
          type: boolean
          description: DEPRECATED - Used to include Saturday in promotion
        minimumAccrualAmount:
          type: number
          description: DEPRECATED - Minimum spend on an accrual record for it to count toward promotion
        occurrenceLimit:
          type: integer
          description: Number of times the promotion can be awarded over the period of the entire promotion
          format: int64
        partnerProgramCode:
          type: string
          description: Partner Program identifier the promotion is associated with
        currencyCategoryCode:
          type: string
          description: DEPRECATED - Transaction must have utilized this currency category to qualify for this promotion
        processRetroAccruals:
          type: boolean
          description: Indicates that the promotion process will find previously processed accruals and potentially award progress/results on registration
        restrict:
          type: boolean
          description: Indicates that registration dates should be collected. Otherwise the registerStartDate and registerEndDate will be set by the system as the same as promotion start and end
        memberListId:
          type: integer
          description: The Tally internal identifier of the member list members must be in to qualify. Only if the promotion is targeted to particular member list
          format: int64
        slidingQualificationPeriod:
          type: integer
          description: Period length in days to evaluate the number of transactions specified occurred
          format: int64
        tierCode:
          type: string
          description: DEPRECATED - Indicator of the tier member's must be in to earn for this promotion
        trackRegistrationSource:
          type: boolean
          description: Indicator to track registration source
        preQualificationCounters:
          type: array
          description: A collection of details about the counter type(s) and target(s) needed to pre-qualify for this promotion
          items:
            $ref: '#/components/schemas/PromotionCounter'
        counters:
          type: array
          description: A collection of details about the counter type(s) and target(s) needed to earn complete this promotion.
          items:
            $ref: '#/components/schemas/PromotionCounter'
        resultCommunication:
          type: boolean
          description: True indicates the result sends a communication on promotion award
        resultCommunicationId:
          type: integer
          description: The communication that should be triggered by qualifying when resultCommunication is true
          format: int64
        resultCurrency:
          type: boolean
          description: True indicates that currency shall be awarded when promotion target is met
        resultCurrencyAmount:
          type: number
          description: 'If currency are being awarded, this is the qty. Must be ued in conjunction with ResultCurrency=true; ResultCurrencyCategoryCode and ResultType'
        resultCurrencyCategoryCode:
          type: string
          description: 'If currency is being awarded, this is the currency category for the member currency record to deposit in to'
        resultCurrencyTierQualifier:
          type: boolean
          description: 'If resultCurrencyTierQualifier is true, then currency awarded will count toward tier.'
        resultExternal:
          type: boolean
          description: True indicates that the result is an external type that is fulfilled outside of the Tally system (ie. a T-shirt given in-restaurant after meeting promotion rule)
        resultExternalCode:
          type: string
          description: The external type code the promotion awards
        resultPromotion:
          type: boolean
          description: True indicates that registration in another promotion shall be awarded when promotion target is met
        resultPromotionId:
          type: integer
          description: The Tally internal identifier for the Promotion member shall be registered in if resultPromotion is True
          format: int64
        resultTier:
          type: boolean
          description: True indicates that member shall be awarded a tier that is higher than current existing tier when promotion target is met
        resultTierCode:
          type: string
          description:
            Tier identifier the member shall be awarded if resultTier is
            True
        resultTierExpireDateTime:
          type: string
          description: 'If resultTier is true, then this will be the date the member is a part of the awarded tier until. After which normal step down rules for the program will apply'
          format: date-time
        rewardThresholds:
          type: boolean
          description: Indicates that the promotion has one or more thresholds
        results:
          type: array
          description: Details about the result of completing the promotion.
          items:
            $ref: '#/components/schemas/PromotionResult'
        statusCode:
          type: string
          description: Indicates whether the promotion is currently active.
        renewableCounters:
          type: boolean
          description: Indicates whether promotion counters are reset to zero after each accrual is processed against the rule.
    OutboundNotificationResponse:
      type: object
      properties:
        snapshotDate:
          type: string
          description: Datetime of the last time the object was updated
          format: date-time
        objectId:
          type: integer
          format: int64
          description: Object Identifier
        accountNumber:
          type: string
          description: Member's Account Number
        additionalProperties:
          type: object
          properties: {}
          description: Client custom data defined by the program configuration
    OutboundNotification:
      type: object
      properties:
        type:
          type: string
          description: Outbound Notification Type
        enabled:
          type: boolean
          description: Current status of the outbound notification type
    Bonus:
      type: object
      properties:
        bonusCode:
          type: string
          description: Natural key of the Bonus Rule
        bonusDescription:
          type: string
          description: Member friendly description of the Bonus Rule
    Tier:
      type: object
      properties:
        code:
          type: string
          description: Code of tier
        description:
          type: string
          description: Description of the tier
        rank:
          type: integer
          description: Ranking of the tier
          format: int32
        displayOrder:
          type: integer
          description: Display order of the tier
          format: int32
        type:
          type: string
          description: Type of tier
          example: Earned, Trial, Exclusive
        stepDownTier:
          type: string
          description: One or multiple levels beneath the current tier.
        active:
          type: boolean
          description: Current status of the tier
        display:
          type: boolean
          description: Displayed in Tally Customer Care
        lifeTime:
          type: boolean
          description: Indicates if tier has lifetime status
    CompensationsResponse:
      type: object
      properties:
        compensations:
          type: array
          description: List of compensations for coupon
          items:
            $ref: '#/components/schemas/CompensationDetail'
    CompensationDetail:
      type: object
      properties:
        accountingPeriod:
          type: integer
          description: 'Year and month of the period calculated. Format: YYYYMM'
          format: int32
        runStatus:
          type: string
          description: Code of Invoice Status
          example: Processed
        type:
          type: string
          description: Code of Invoice Type
          example: Calculated
        reason:
          type: string
          description: Code of Reason why coupon was not invoiced (if Invoice Type is Error or Ineligible)
          example: NORULE
        couponCode:
          type: string
          description: Unique Coupon Identifier
        totalAmount:
          type: number
          description: Total Compensation Amount
        compensationDetails:
          type: array
          description: Optional details about every compensation for the given coupon code
          items:
            $ref: '#/components/schemas/CompensationDetailItem'
    CompensationDetailItem:
      type: object
      properties:
        couponUseAmount:
          type: number
          description: Amount compensated for a coupon usage
        confirmationNumber:
          type: string
          description: Event confirmation number
        startDateTime:
          type: string
          description: Start date of the event where the coupon was used
          format: date-time
        endDateTime:
          type: string
          description: End date of the event where the coupon was used
          format: date-time
        customData:
          $ref: '#/components/schemas/CustomData'
    CreateMemberReferralRequest:
      type: object
      properties:
        referralType:
          type: string
          description: Email if this is an email referral or Code if this is a referral using codes
          example: Email
        referralValue:
          type: string
          description: Email address of referee or referral code
          example: friend.email.3@gmail.com
        active:
          type: boolean
          description: Indicates whether member referral is Active or not
          default: true
          example: true
    MemberReferralResponse:
      type: object
      properties:
        memberReferralId:
          type: integer
          description: Unique identifier for the member referral
          format: int64
          example: 4
        referralType:
          type: string
          description: Email if this is an email referral or Code if this is a referral using codes
          example: Email
        referralValue:
          type: string
          description: Email address of referee or referral code
          example: friend.email.3@gmail.com
        referralDate:
          type: string
          description: Date the referral occurred
          format: date
          example: 2023-06-18
        active:
          type: boolean
          description: Indicates whether referral is active
        updateDateTime:
          type: string
          description: Last time the referral was updated
          format: date-time
          example: 2023-06-18T04:09:58.067-05:00
    MemberReferralCodeResponse:
      type: object
      properties:
        memberReferralCodeId:
          type: integer
          description: Unique identifier for the member referral code
          format: int64
          example: 4
        referralCode:
          type: string
          description: Generated code for referral as a unique alpha-numeric string
          example: F9DA265FD56D496C
        active:
          type: boolean
          description: active
        updateDateTime:
          type: string
          description: DateTime of the last time the referral code was updated
          format: date-time
    MemberMergeRequest:
      type: object
      properties:
        toMemberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Identifies the member to merge another into (the merge survivor)
    MemberMerge:
      type: object
      properties:
        memberMergeId:
          type: integer
          description: Identifies the member merge
        fromMemberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Identifies the member whose account was merged into another and then closed (the merge victim)
        toMemberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Identifies the member that another was merged into (the merge survivor)
        statusCode:
          type: string
          description: 'Execution status of the member merge, one of: queued, processed, error'
    PromotionCounter:
      type: object
      properties:
        counterTypeCode:
          type: string
          description: 'The counter type indicates what about a transaction is being counted. DataCode Type: CounterType Example: Stays, Trips, Nights, Visits'
        target:
          type: number
          description: Count at which member will be rewarded.
        result:
          type: array
          description: Details about what a member gets for meeting the target.
          items:
            $ref: '#/components/schemas/PromotionResult'
    PromotionResult:
      type: object
      properties:
        type:
          type: string
          description: 'Type of result (ie. Points, Counter, Tier, FutureTier, Promotion, Communication, Coupon, Redemption, External)'
        value:
          type: string
          description: Value of award
        valueType:
          type: string
          description: 'Dependent on type of result, currency type code if type is points'
        description:
          type: string
          description: Description of awarded object
        resultAwardId:
          type: integer
          description: Identifier of of awarded object e.g. a CommunicationId or PromotionId
          format: int64
        resultAwardCode:
          type: string
          description: Code of awarded object e.g. a CommunicationCode
        bonusByActivity:
          type: boolean
          description: Flag to indicate if the bonus has the currency awarded by activity.
        displayName:
          type: string
          description: Display text of award result code with description and value type.
    RedemptionItem:
      type: object
      properties:
        redemptionItemId:
          type: integer
          description: Redemption Item Id (null on create requests)
          format: int64
        redemptionItemCode:
          type: string
          description: Redemption Item Code
        typeCode:
          type: string
          description: 'Indicates the Type of thing being redeemed for - DataCode Type: RedemptionType Example: A (Award), I (Item), T (Travel), P (Points)'
        description:
          type: string
          description: Friendly identifier for redemption item
        currencyRequired:
          type: number
          description: Currency required for one item
        minimumQuantity:
          type: integer
          description: The minimum number of items that can be redeemed
          format: int32
        maximumQuantity:
          type: integer
          description: The maximum number of items that can be redeemed
          format: int32
        redeemIncrement:
          type: integer
          description: The number of items the redemption must increment by
          format: int32
        faceValue:
          type: number
          description: USD equivalent value of the item
        convertedFaceValue:
          type: number
          description: 'If convertCurrencyAttributes is true, the local currency face value'
        convertedFaceValueIsoCurrencyCode:
          type: string
          description: 'If convertCurrencyAttributes is true, the local ISO currency code'
        amountProvided:
          type: boolean
          description: Is the currency to be redeemed variable (or provided)?
        companyCode:
          type: string
          description: Short identifier of the Partner that owns the item
        redeemText:
          type: string
          description: Indicates text to show with item - ie. 'Click to Redeem' or 'Call'
        redeemable:
          type: boolean
          description: 'Indicates if the member can actually redeem for item.  If False, it may mean the member does not yet have enough currency for the item, the rule itself is set to not be redeemable, or the redemption is part of a RedemptionGroup and would exceed group rules.'
        requireAddress:
          type: boolean
          description: Indicates if an address needs to be collected at the time of redemption.
        requirePartnerAccountNumber:
          type: boolean
          description: Indicates if a partner account number (member alias) needs to be collected at the time of redemption.
        fulfillmentPathCode:
          type: string
          description: 'Indicates how Member shall receive the item - DataCode Type: FulfillmentPathCode Example: COUPON'
        sortValue:
          type: string
          description: How to sort the items
        customData:
          $ref: '#/components/schemas/SmartGroupCustomData'
        genericItem:
          $ref: '#/components/schemas/GenericItem'
        bonuses:
          type: array
          description: "One or more Bonus rules that's awarded by the redemption. Example:  Points to Miles Redemption"
          items:
            $ref: '#/components/schemas/RedemptionItemBonus'
    RedemptionItemBonus:
      type: object
      properties:
        bonusCode:
          type: string
          description: The bonus rule code
        minimumQuantity:
          type: integer
          description: The minimum number of items that can be redeemed
          format: int32
        maximumQuantity:
          type: integer
          description: The maximum number of items that can be redeemed
          format: int32
        resultAmount:
          type: number
          description: Amount of currency to be awarded with the bonus
    RegisterForPromotionRequest:
      type: object
      properties:
        promotionId:
          type: integer
          description: 'Promotion identifier, must supply promotionId or promotionCode'
          format: int64
        promotionCode:
          type: string
          description: 'Promotion code, must supply promotionId or promotionCode'
        registrationSource:
          maxLength: 100
          minLength: 0
          type: string
          description: 'Source of promotion registration, required if the promotion requires promotion source tracking'
    RegisterForPromotionUsingTokenRequest:
      required:
        - token
      type: object
      properties:
        token:
          type: string
          description: Encrypted token that contains context to the member identifier and promotion code.
          format: string
          example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    RegisterForPromotionResponse:
      required:
        - memberPromotionIds
      type: object
      properties:
        memberPromotionIds:
          type: array
          description: One or more member promotion identifiers that have been registered
          items:
            type: integer
            description: Member Promotion Identifier
            format: int64
    GeneratePromotionTokenResponse:
      type: object
      properties:
        token:
          type: string
          description: Encrypted token that contains context to the member identifier and promotion code.
          format: string
    BonusRule:
      type: object
      properties:
        bonusRuleCode:
          type: string
          description: Bonus Rule Code
          format: string
          example: Adjustment1000
        bonusRuleDescription:
          type: string
          description: Bonus Rule Description
          format: string
          example: Adjustment Bonus 1000 Points
        bonusRuleTypeDescription:
          type: string
          description: Bonus Rule Type Description
          format: string
          example: Enrollment Bonus
        rewardCurrencyCategoryDescription:
          type: string
          description: Reward Currency Category Description
          format: string
          example: Loyalty
        rewardCurrencyTypeDescription:
          type: string
          description: Reward Currency Type Description
          format: string
          example: Provided
        rewardCurrencyAmount:
          type: number
          description: Reward Currency Amount
          example: 500
        bonusPointInstanceLimit:
          type: number
          description: Bonus Point Instance Limit
          example: 200
        billable:
          type: boolean
          description: Bonus Is Billable
          example: true
        billableToTypeCode:
          type: integer
          description: Location Type To Bill To
          format: int64
          example: 23200
    SmartGroup:
      required:
        - name
        - typeCode
      type: object
      properties:
        smartGroupId:
          type: integer
          description: Smart Group Id (null on create requests)
          format: int64
          readOnly: true
        typeCode:
          type: string
          description: "Type of Smart Group, dependent on client configuration. Configure Program Setting: 'SmartGroupType'. Default types are: ChannelType, AccountType, TierDefinition, RegistrationChannel, Dates"
          maxLength: 50
        typeDescription:
          type: string
          description: Description of Smart Group type
          readOnly: true
        name:
          maxLength: 100
          minLength: 1
          type: string
          description: Smart Group name
        description:
          maxLength: 200
          type: string
          description: Smart Group description
        statusCode:
          type: string
          description: Status of the Smart Group A/I
          example: A
          default: A
        isExclusive:
          type: boolean
          description: Are the details in this smart group inclusive or exclusive
          default: false
        details:
          type: array
          description: 'If includeSmartGroupDetails is true, the details of the smart group'
          items:
            $ref: '#/components/schemas/SmartGroupDetail'
        updateDateTime:
          type: string
          description: DateTime of the last time the smart group was updated
          format: date-time
          readOnly: true
    SmartGroupCustomData:
      allOf:
        - $ref: '#/components/schemas/CustomData'
        - type: object
          properties:
            ace01SmartGroupId:
              type: integer
              description: ACE01 Smart Group Id
              format: int64
            ace02SmartGroupId:
              type: integer
              description: ACE02 Smart Group Id
              format: int64
            ace03SmartGroupId:
              type: integer
              description: ACE03 Smart Group Id
              format: int64
            ace04SmartGroupId:
              type: integer
              description: ACE04 Smart Group Id
              format: int64
            ace05SmartGroupId:
              type: integer
              description: ACE05 Smart Group Id
              format: int64
            ace06SmartGroupId:
              type: integer
              description: ACE06 Smart Group Id
              format: int64
            ace07SmartGroupId:
              type: integer
              description: ACE07 Smart Group Id
              format: int64
            ace08SmartGroupId:
              type: integer
              description: ACE08 Smart Group Id
              format: int64
            ace09SmartGroupId:
              type: integer
              description: ACE09 Smart Group Id
              format: int64
            ace10SmartGroupId:
              type: integer
              description: ACE10 Smart Group Id
              format: int64
            ace11SmartGroupId:
              type: integer
              description: ACE11 Smart Group Id
              format: int64
            ace12SmartGroupId:
              type: integer
              description: ACE12 Smart Group Id
              format: int64
            ace13SmartGroupId:
              type: integer
              description: ACE13 Smart Group Id
              format: int64
            ace14SmartGroupId:
              type: integer
              description: ACE14 Smart Group Id
              format: int64
            ace15SmartGroupId:
              type: integer
              description: ACE15 Smart Group Id
              format: int64
    SmartGroupDetail:
      required:
        - dataKey
      type: object
      properties:
        smartGroupDetailId:
          type: integer
          description: Smart Group Detail Id (null on create requests)
          format: int64
          readOnly: true
        dataId:
          type: integer
          description: Data Id (Referential data based on smart group type). This id can be be linked to Aces, DataCodes, and Dates (in this format YYYYMMDD).
          format: int64
          readOnly: true
        data:
          type: string
          description: Description from the related DataCode, Ace or Date record
          readOnly: true
        dataKey:
          maxLength: 50
          minLength: 1
          type: string
          description: External key/code value referenced by dataId
        dataKeyDescription:
          maxLength: 500
          minLength: 1
          type: string
          description: Description from the related DataCode, Ace or Date record
          readOnly: true
        updateDateTime:
          type: string
          description: Datetime of the last time the smart group detail was updated
          format: date-time
          readOnly: true
    CancelCallLog:
      type: object
      properties:
        commentSubReason:
          type: string
          description: Sub-reason for cancelling the transaction
        comments:
          type: string
          description: Additional comments for cancelling the transaction
    Transaction:
      type: object
      properties:
        transactionId:
          type: string
          description: Internal transaction identifier
        transactionGroupId:
          type: string
          description: Transaction group identifier
        transactionGroupReferenceId:
          type: string
          description: Transaction group reference identifier
        parentTransactionId:
          type: string
          description: Parent transaction identifier
        linkedTransactionId:
          type: string
          description: Associated transaction identifier
        referenceId:
          type: string
          description: Client transaction identifier if provided during request
        memberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier
        accountNumber:
          maxLength: 25
          minLength: 7
          type: string
          description: Loyalty Account Number
        memberRedemptionId:
          type: string
          description: Internal redemption identifier associated with the transaction
          example: '1'
        transactionDateTime:
          type: string
          description: 'DateTime the transaction was processed. Business date for standard transactions, calendar date for adjustments or redemption'
          format: date-time
        description:
          maxLength: 250
          type: string
          description: 'Depending on Type: Partner description, Bonus Rule Description, Adjustment rule description etc.'
        typeCode:
          maxLength: 50
          type: string
          description: Transaction type code
        typeDescription:
          type: string
          description: Description of Transaction type
        subTypeCode:
          maxLength: 50
          type: string
          description: Transaction sub-type code
        postDate:
          type: string
          description: Processed date
          format: date
        originationDate:
          type: string
          description: Date transaction was originally placed/booked/reserved
          format: date
        retro:
          type: boolean
          description: Indicator the transaction was applied retroactively
        edited:
          type: boolean
          description: Indicator the transaction was edited
        sourceCode:
          type: string
          description: SourceCode of transaction
        statusCode:
          type: string
          description: Status of the transaction
        updateDateTime:
          type: string
          description: Date time the transaction was last updated
          format: date-time
        earningRuleDescription:
          type: string
          description: Earning rule description
        customData:
          $ref: '#/components/schemas/CustomData'
        spend:
          $ref: '#/components/schemas/TransactionSpend'
        earn:
          $ref: '#/components/schemas/TransactionEarn'
        redemption:
          $ref: '#/components/schemas/TransactionRedemption'
        expiredCurrency:
          $ref: '#/components/schemas/TransactionExpiredCurrency'
        hotelTransaction:
          $ref: '#/components/schemas/HotelTransaction'
        travelTransaction:
          $ref: '#/components/schemas/TravelTransaction'
        transactionReference:
          type: object
          additionalProperties:
            type: object
            properties: {}
          description: Client custom data defined by the program configuration
        cancelable:
          type: boolean
          description: Indicator the transaction may be cancelled
        editable:
          type: boolean
          description: Indicator the transaction may be editable
        createUserId:
          type: integer
          description: Id of user who created the transaction
          format: int64
        createUserName:
          type: string
          description: Name of user who created the transaction
        updateUserId:
          type: integer
          description: Id of user who updated the transaction
          format: int64
        updateUserName:
          type: string
          description: Name of user who updated the transaction
        memberCommentId:
          type: integer
          description: Member comment id
          format: int64
        cancellationSubReason:
          type: string
          description: Sub-reason code for transaction cancellation if the transaction was manually cancelled
        businessEligible:
          type: boolean
          description: Business Eligible Flag
        businessAccountNumber:
          type: string
          description: Business Account Number
        awardNumber:
          type: string
          description: Identifies the associated redemption for this transaction
        baseAccountNumber:
          type: string
          description: Base Account Number
        transactionAdjustment:
          $ref: '#/components/schemas/TransactionAdjustment'
        transactionBonus:
          $ref: '#/components/schemas/TransactionBonus'
        transactionPartner:
          $ref: '#/components/schemas/TransactionPartner'
        transactionPromotion:
          $ref: '#/components/schemas/TransactionPromotion'
        transactionTransfer:
          $ref: '#/components/schemas/TransactionTransfer'
        mergeDetails:
          $ref: '#/components/schemas/MergeDetail'
        transactionRelationships:
          type: array
          items:
            $ref: '#/components/schemas/TransactionRelationship'
    TransactionAdjustment:
      type: object
      properties:
        comments:
          type: string
          description: 'If adjustment, call center comments value.'
        referenceId:
          type: string
          description: 'If adjustment, call center external reference (case number).'
        reasonCode:
          type: string
          description: 'If adjustment, the reason code from adjustment rule.'
    TransactionBonus:
      type: object
      properties:
        bonusCode:
          type: string
          description: 'If this is for a bonus accrual type, the bonus identifier.'
        bonusType:
          type: string
          description: 'If this is for a bonus accrual type, the bonus type.'
    TransactionEarn:
      required:
        - amount
      type: object
      properties:
        amount:
          maximum: 9999999999.99
          minimum: 0.01
          type: number
          description: The amount of currency that was earned (or specified) as part of the transaction
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
        currencyCategoryCode:
          maxLength: 10
          minLength: 0
          type: string
          description: 'Identifies the currency (Base, Tax, etc.) category code'
        earningsLimited:
          type: boolean
          description: Indicator that the earnings were limited
          default: false
        tierQualifying:
          type: boolean
          description: Indicator the currency applies towards tier progress
        transactionCounters:
          type: array
          description: Counters associated to the base earning
          items:
            $ref: '#/components/schemas/Counter'
    TransactionPartnerEarn:
      type: object
      properties:
        partnerProgramCode:
          type: string
          description: The partner program's code
        amount:
          maximum: 9999999999
          type: number
          description: The partner earning point amount
    TransactionAggregate:
      type: object
      properties:
        baseEarnings:
          type: array
          description: Summation of the base amounts deposited to the member's account
          items:
            $ref: '#/components/schemas/TransactionCurrency'
        bonusEarnings:
          type: array
          description: Summation of the bonus amounts deposited to the member's account
          items:
            $ref: '#/components/schemas/TransactionCurrency'
        partnerEarnings:
          type: array
          description: Summation of the amount deposited to the member's account for a partner program
          items:
            $ref: '#/components/schemas/PartnerEarn'
        promotionEarnings:
          type: array
          description: Summation of the promotional amounts deposited to the member's account
          items:
            $ref: '#/components/schemas/TransactionCurrency'
        transactionAmounts:
          type: array
          description: Summation of the member's spent amounts
          items:
            $ref: '#/components/schemas/TransactionCurrency'
    TransactionAggregateCounter:
      type: object
      properties:
        points:
          type: array
          description: The group sum of the points
          items:
            type: object
            properties:
              pointCategory:
                type: string
                description: Point category code
                example: Points
              amount:
                type: number
                description: The group sum of the points
                example: 1000.0
        counters:
          type: array
          description: Summation of the yearly counters
          items:
            $ref: '#/components/schemas/Counter'
    TransactionAggregateYearGroup:
      description: Summation of the amounts deposited to the member's account. Grouped and sorted descending by year.
      type: object
      properties:
        year:
          type: integer
          format: int32
          description: Year of this group. Grouped by Accrual Posted Date.
          example: 2025
        baseEarnings:
          $ref: '#/components/schemas/TransactionAggregateCounter'
        bonusEarnings:
          $ref: '#/components/schemas/TransactionAggregateCounter'
        partnerEarnings:
          $ref: '#/components/schemas/TransactionAggregateCounter'
        promotionEarnings:
          $ref: '#/components/schemas/TransactionAggregateCounter'
        tierRollover:
          $ref: '#/components/schemas/TransactionAggregateCounter'
    PartnerEarn:
      type: object
      properties:
        partnerName:
          type: string
          description: Partner's name
          example: Amex
        partnerProgram:
          type: array
          description: Collection a redeem amounts by partner programs
          items:
            $ref: '#/components/schemas/PartnerProgramEarn'
    PartnerProgramEarn:
      type: object
      properties:
        partnerProgramName:
          type: string
          description: Partner program's name
          example: Amex US
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
          example: Points
        earnings:
          type: array
          description: Summation of the amount earned for the partner program
          items:
            type: object
            properties:
              partnerProgramIdentifier:
                type: string
                description: Unique member identifier on the partner side
                example: B234567890
              amount:
                maximum: 9999999999.99
                minimum: 0.01
                type: number
                description: The transaction group sum of the fiat or currency amount qualified for earning by currencyTypeCode
                example: 1000.0
    TransactionCurrency:
      type: object
      properties:
        amount:
          maximum: 9999999999.99
          minimum: 0.01
          type: number
          description: The transaction group sum of the fiat or currency amount qualified for earning by currencyTypeCode
          example: 1000.0
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile, USD, EUR) code'
          example: USD
    TransactionExpiredCurrency:
      required:
        - expiredAmount
      type: object
      properties:
        expiredAmount:
          type: number
          description: Currency amount expired
        expiredDate:
          type: string
          description: Date of currency expiration
          format: date
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
        currencyCategoryCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency (Base, Tax, etc.) category code'
    TransactionGroup:
      required:
        - transactionGroupId
        - transactionGroupReferenceId
      type: object
      properties:
        transactionGroupId:
          maxLength: 100
          minLength: 1
          type: string
          description: 'Tally transaction group identifier, used to unify transactions'
        transactionGroupReferenceId:
          maxLength: 100
          minLength: 1
          type: string
          description: 'Client transaction group identifier, used to unify transactions'
        transactionGroupDescription:
          maxLength: 500
          minLength: 0
          type: string
          description: Description of the transaction group
        transactionGroupDateTime:
          type: string
          description: Transaction group date time
          format: date-time
        transactionGroupStatusCode:
          type: string
          description: Transaction group status code
        activityStartDateTime:
          type: string
          description: 'Transaction group activity (i.e. stay, trip, etc.) start date time'
          format: date-time
        activityEndDateTime:
          type: string
          description: 'Transaction group activity (i.e. stay, trip, etc.) end date time'
          format: date-time
        originationDate:
          type: string
          description: Date transaction was originally placed/booked/reserved
          format: date
        totalSpendAmount:
          type: number
          description: Total fiat currency spend amount associated to the transaction group (i.e. receipt level amount)
        totalQualifiedSpendAmount:
          type: number
          description: Total qualified (loyalty earning) fiat currency spend amount associated to the transaction group (i.e. receipt level amount)
        statusCode:
          type: string
          description: Status of the transaction group
        postDate:
          type: string
          description: Processed date
          format: date
        typeCode:
          type: string
          description: Primary (parent transaction in the transaction group) transaction type code
        typeDescription:
          type: string
          description: Primary (parent transaction in the transaction group) transaction description
        customData:
          $ref: '#/components/schemas/CustomData'
        transactionGroupSpend:
          type: array
          description: Summation of spend amounts contained in the transaction group
          items:
            $ref: '#/components/schemas/TransactionGroupSpend'
        transactionGroupEarn:
          type: array
          description: Summation of the amount of currency that was deposited to the member's account
          items:
            $ref: '#/components/schemas/TransactionGroupEarn'
        transactionGroupReference:
          type: object
          additionalProperties:
            type: object
            properties: {}
          description: Client custom data defined by the program configuration
        transactions:
          type: array
          description: List of transactions
          items:
            $ref: '#/components/schemas/Transaction'
        cancelable:
          type: boolean
          description: Indicator the transaction may be cancelled
        editable:
          type: boolean
          description: Indicator the transaction may be editable
        createUserId:
          type: integer
          description: Id of user who created the transaction
          format: int64
        createUserName:
          type: string
          description: Name of user who created the transaction
        updateUserId:
          type: integer
          description: Id of user who updated the transaction
          format: int64
        updateUserName:
          type: string
          description: Name of user who updated the transaction
    TransactionGroupEarn:
      required:
        - amount
      type: object
      properties:
        amount:
          maximum: 9999999999.99
          minimum: 0.01
          type: number
          description: 'The sum amount of currency that was earned (or specified) as part of the transaction group, by currencyTypeCode and currencyCategoryCode'
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
        currencyCategoryCode:
          maxLength: 10
          minLength: 0
          type: string
          description: 'Identifies the currency (Base, Tax, etc.) category code'
        currencyCategoryDescription:
          maxLength: 500
          minLength: 0
          type: string
          description: 'Description corresponding with the currency (Base, Tax, etc.) category code'
    TransactionGroupRequest:
      required:
        - transactionGroupReferenceId
      type: object
      properties:
        transactionGroupReferenceId:
          maxLength: 100
          minLength: 1
          type: string
          description: 'Client transaction group identifier, used to unify transactions'
        activityStartDateTime:
          type: string
          description: 'Transaction group activity (i.e. stay, trip, etc.) start date time'
          format: date-time
        activityEndDateTime:
          type: string
          description: 'Transaction group activity (i.e. stay, trip, etc.) end date time'
          format: date-time
        originationDate:
          type: string
          description: Date transaction was originally placed/booked/reserved
          format: date
        totalSpendAmount:
          type: number
          description: Total fiat currency spend amount associated to the transaction group (i.e. receipt level amount)
        totalQualifiedSpendAmount:
          type: number
          description: Total qualified (loyalty earning) fiat currency spend amount associated to the transaction group (i.e. receipt level amount)
        customData:
          $ref: '#/components/schemas/CustomData'
        transactions:
          type: array
          description: List of transactions
          items:
            $ref: '#/components/schemas/TransactionRequest'
    TransactionGroupSpend:
      type: object
      properties:
        spendAmount:
          maximum: 9999999999.99
          minimum: 0.01
          type: number
          description: 'The transaction group sum of the fiat or currency amount qualified for earning, by currencyTypeCode, currencyCategoryCode, and isoCurrencyCode'
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
        currencyCategoryCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency (Base, Tax, etc.) category code'
        currencyCategoryDescription:
          maxLength: 500
          minLength: 0
          type: string
          description: 'Description corresponding with the currency (Base, Tax, etc.) category code'
        isoCurrencyCode:
          maxLength: 3
          minLength: 0
          type: string
          description: ISO currency (default to USD if null)
    TransactionMember:
      type: object
      properties:
        memberIdentifier:
          maxLength: 200
          minLength: 1
          type: string
          description: Channel/Partner specific member identifier. For requests with memberIdentifier in the path, this field is optional - if not provided, the memberIdentifier from the path will be used. If provided, it must match the memberIdentifier in the URL path.
        firstName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's first name
        lastName:
          maxLength: 100
          minLength: 1
          type: string
          description: Member's last name
        alias:
          maxLength: 200
          minLength: 1
          type: string
          description: Member alias as defined by program configuration
    TransactionPartner:
      type: object
      properties:
        partnerName:
          type: string
          description: The partner program's name
        partnerCurrencyCategoryCode:
          type: string
          description: The partner point category code (i.e. partner currency code)
    TransactionPromotion:
      type: object
      properties:
        promotionCode:
          type: string
          description: Promotion Code.
    TransactionSpend:
      type: object
      properties:
        perItem:
          maximum: 9999999999.99
          minimum: 0
          type: number
          description: Cost per item (defaults to spendAmount)
        spendAmount:
          maximum: 9999999999.99
          minimum: 0
          type: number
          description: The fiat or currency amount qualified for earning
        currencyTypeCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency type (Points, Mile) code'
        currencyCategoryCode:
          maxLength: 50
          minLength: 0
          type: string
          description: 'Identifies the currency (Base, Tax, etc.) category code'
        isoCurrencyCode:
          maxLength: 3
          minLength: 0
          type: string
          description: ISO currency (default to USD if null)
        quantity:
          maximum: 999999999
          minimum: 0
          type: integer
          description: Number of items purchased
          format: int32
    TransactionRedemption:
      type: object
      properties:
        redemptionItemCode:
          type: string
          description: Redemption Item Code
        currencyRequired:
          type: number
          description: Currency required for one item
        minimumQuantity:
          type: integer
          description: The minimum number of items that can be redeemed
          format: int32
        maximumQuantity:
          type: integer
          description: The maximum number of items that can be redeemed
          format: int32
        redeemIncrement:
          type: integer
          description: The number of items the redemption must increment by
          format: int32
        faceValue:
          type: number
          description: USD equivalent value of the item
        amountProvided:
          type: boolean
          description: Is the currency to be redeemed variable (or provided)?
    TransactionRequest:
      type: object
      properties:
        referenceId:
          type: string
          description: Client transaction identifier
        member:
          $ref: '#/components/schemas/TransactionMember'
        transactionDateTime:
          type: string
          description: Business date time of the transaction
          format: date-time
        description:
          maxLength: 250
          type: string
          description: Description of the transaction
        originationDate:
          type: string
          description: Date transaction was originally placed/booked/reserved
          format: date
        awardNumber:
          maxLength: 100
          type: string
          description: Identifies the associated redemption for this transaction
        providedAmount:
          type: number
          description: 'Value of earning in loyalty currency (Points, Miles). Set on migrated transactions.'
          example: 100.0
        sourceCode:
          type: string
          description: SourceCode of transaction
          example: RT
        migrateStatusCode:
          type: string
          description: 'Status of the migrated transaction (used if the migrate parameter is true): posted (default) or cancelled'
        customData:
          $ref: '#/components/schemas/CustomData'
        spend:
          $ref: '#/components/schemas/TransactionSpend'
        hotelTransaction:
          $ref: '#/components/schemas/HotelTransaction'
        travelTransaction:
          $ref: '#/components/schemas/TravelTransaction'
        transactionPartner:
          $ref: '#/components/schemas/TransactionPartnerEarn'
        transactionReference:
          type: object
          additionalProperties:
            type: object
            properties: {}
          description: Client custom data defined by the program configuration
    BonusRequest:
      type: object
      properties:
        bonusCode:
          type: string
          description: Code identifying bonus to be awarded
        amount:
          type: number
          description: Value of bonus award if bonus is configured as provided (i.e. number of points, coupons, etc.)
        counterAmounts:
          $ref: '#/components/schemas/CountersMap'
        referenceId:
          type: string
          description: Client or partner reference identifier to bonus earning
        comment:
          maxLength: 3000
          type: string
          description: Creates Call Log comment associated to bonus
        quantity:
          type: integer
          description: Number of times the bonus will be requested
          format: int32
        customData:
          $ref: '#/components/schemas/CustomData'
    TransactionTransfer:
      type: object
      properties:
        fromMemberAccountNumber:
          type: string
          description: "If this a transfer, the transferor's account number"
          example: A234567890
        fromMemberName:
          type: string
          description: "If this a transfer, the transferor's name"
          example: Marcel Rufus
        toMemberAccountNumber:
          type: string
          description: "If this a transfer, the transferee's account number"
          example: B987654321
        toMemberName:
          type: string
          description: "If this a transfer, the transferee's name"
          example: Janel Liesje
        transferredBy:
          maxLength: 25
          type: string
          description: 'Describes who initiated the transfer, can be an account number, member name, or other identifying data'
          example: A0123456789
    MemberTransactionUpdateRequest:
      required:
        - transaction
        - comments
      type: object
      properties:
        transaction:
          $ref: '#/components/schemas/Transaction'
        validateOnly:
          type: boolean
        reason:
          type: string
          description: Reason the transaction is being edited, Datacode of codetype CommentReason
        comments:
          type: string
          description: Additional comments about the transaction edit
    MergeDetail:
      type: object
      properties:
        fromMemberAccountNumber:
          type: string
          description: 'If member is merged, the account number from which the transaction was merged'
          example: A234567890
    TransactionRelationship:
      type: object
      properties:
        type:
          type: string
          description: Type of relationship.
            B2B_PREDECESSOR = Link to a back-to-back stay that was merged into this stay.
            B2B_SUCCESSOR = Link to a back-to-back stay that this stay was merged into.
            CLONE_SOURCE = Link to an earning from which this earning was cloned.
            CLONE_TARGET = Link to an earning that this earning was cloned into.
          example: B2B_SUCCESSOR
          readOnly: true
          enum:
            - B2B_PREDECESSOR
            - B2B_SUCCESSOR
            - CLONE_SOURCE
            - CLONE_TARGET
        key:
          type: string
          description:
            Identifies a related transaction or object, with the relationship type defining its specific meaning.
            B2B_PREDECESSOR = Transaction ID of the back-to-back stay that was merged into this stay.
            B2B_SUCCESSOR = Transaction ID of the back-to-back stay that this stay was merged into.
            CLONE_SOURCE = Transaction ID of the earning from which this earning was cloned.
            CLONE_TARGET = Transaction ID of the earning that this earning was cloned into.
          example: 'EB-1234'
          readOnly: true
    PointsTransferRequest:
      type: object
      properties:
        partnerTransactionNumber:
          type: string
          description: Unique identifier on the partner side
          example: P987654321
        rewardCode:
          type: string
          description: RedemptionRule for the Partner used to transfer points
          example: AXBYC
        recipientAccountNumber:
          type: string
          description: AccountNumber of the recipient (to whom the points are given)
          example: B987654321
        bonusCode:
          type: string
          description: Bonus code used to deposit the points into recipient account
        transferAmount:
          type: integer
          description: Amount of points to be transferred
          format: int32
        transferredBy:
          maxLength: 25
          type: string
          description: 'Describes who initiated the transfer, can be an account number, member name, or other identifying data'
          example: A0123456789
        customData:
          $ref: '#/components/schemas/CustomData'
    PointsTransferResponse:
      type: object
      properties:
        partnerTransactionNumber:
          type: string
          description: Unique Partner Transaction Number
        accountNumber:
          type: string
          description: AccountNumber of the sender account
        correctedAccountNumber:
          type: string
          description: 'If original account number was victim of merge, include survivor account number'
        rewardCode:
          type: string
          description: RedemptionRule for the Partner used to transfer points
        orderNumber:
          type: integer
          description: External Unique identifier of MemberRedemption
          format: int32
        recipientAccountNumber:
          type: string
          description: AccountNumber of the recipient (to whom the points are given)
        correctedRecipientAccountNumber:
          type: string
          description: 'If original account number was victim of merge, include survivor account number'
        bonusCode:
          type: string
          description: Bonus code used to deposit points into recipient account
        transferAmount:
          type: integer
          description: Amount of points transferred
          format: int32
    MemberUpdateEnrollmentDateRequest:
      required:
        - enrollmentDate
      type: object
      properties:
        enrollmentDate:
          type: string
          description: Date of member enrollment
          format: date
          example: 2024-05-31
    UnderInvestigationReport:
      type: object
      properties:
        createDate:
          type: string
          description: Date record was created
          format: date-time
        memberIdentifier:
          type: integer
          description: Internal Tally member identifier
          format: int64
        accountNumber:
          type: string
          description: Member's account number
          example: '123456789'
        fullName:
          type: string
          description: Member's first and last name
          example: John Smith
        country:
          type: string
          description: Member's primary address country
          example: US
        reasonCodes:
          type: string
          description: Description(s) of potential fraud reasons
          example: Stay > Total Points Threshold
        pointBalance:
          type: number
          description: Member's current point balance
          example: 12345.0
        suspendedSource:
          type: string
          description: Source of potential fraud (system or manual)
          example: System
        instances:
          type: integer
          description: Number of potential fraud instances
          example: 1
    User:
      type: object
      required:
        - loginName
        - firstName
        - lastName
      properties:
        userId:
          type: integer
          format: int64
          description: Internal Tally Identifier.
          readOnly: true
        name:
          type: string
          maxLength: 30
          description: Screen Name.
        loginName:
          type: string
          minLength: 7
          maxLength: 75
          description: Unique User LoginName.
        firstName:
          type: string
          maxLength: 75
          description: User first name.
        lastName:
          type: string
          maxLength: 75
          description: User last name.
        emailAddress:
          type: string
          maxLength: 75
          description: User email address. Required except for API users. Must be unique if provided.
        active:
          type: boolean
          description: If true, the user is active.
        typeCode:
          type: string
          description: Type of user account, one of - P (Partner), CC (Call Center), OUATH, OAUTH_PROXY, F5_BIG_IP, API
          example: CC (Call Center), P (Partner), API (platform-api-security client)
        password:
          type: string
          maxLength: 200
          writeOnly: true
          description: Use the supplied password
        confirmPassword:
          type: string
          maxLength: 200
          writeOnly: true
          description: The confirmation of the password. Must match the password field.
        userRoleNames:
          type: array
          items:
            type: string
        userEntitlements:
          type: array
          items:
            $ref: '#/components/schemas/UserEntitlement'
          readOnly: true
    UserEntitlement:
      type: object
      properties:
        name:
          type: string
          description: Element name
          example: twa:member:search
        description:
          type: string
          description: Description of the element
          example: 'Tally Call Center: Search Member'
          readOnly: true
    UserRole:
      required:
        - roleName
        - roleDescription
        - rank
      type: object
      properties:
        userRoleId:
          type: integer
          description: User role unique identifier
          format: int64
          readOnly: true
        roleName:
          type: string
          description: Name of user role
          minLength: 1
          maxLength: 30
        roleDescription:
          type: string
          description: Description of user role
          maxLength: 200
        active:
          type: boolean
          description: Indicates whether a user role is active or not
        rank:
          type: integer
          description: Used for filtering in bonus rule search and preventing a user from modifying a more privileged user
          minimum: 0
          maximum: 9999
        channelCode:
          type: string
          description: Code representing user role channel type
          example: API
        entitlements:
          type: array
          description: |
            For GET, all entitlements for the userRole will be returned.
            For POST, only provided entitlements are assigned.
            For PUT, only provided entitlements are assigned, and missing entitlements are removed.
          items:
            $ref: '#/components/schemas/UserEntitlement'
    UserTask:
      type: object
      properties:
        userTaskId:
          type: integer
          description: User task identifier
          format: int64
        title:
          type: string
          description: Title of the user task
        status:
          type: string
          description: 'Status of the user task, one of: C (Closed), O (Open)'
        followUpFlag:
          type: boolean
          description: Indicates if follow up is required
        followUpDate:
          type: string
          description: Due date for follow up (if follow up flag is set)
          format: date
        assignedTo:
          type: string
          description: Name of user role the user task is assigned to or ME if assigned to current user
        comments:
          type: array
          items:
            $ref: '#/components/schemas/UserTaskComment'
    UserTaskComment:
      type: object
      properties:
        createDate:
          type: string
          description: Date/time the comment was entered
          format: date-time
        createdBy:
          type: string
          description: Name of comment creator
        comment:
          type: string
          description: Comment text
        assignedTo:
          type: string
          description: User now responsible
        assignedFrom:
          type: string
          description: User that originally assigned it
    UserTaskRequest:
      required:
        - comment
        - followUpFlag
        - status
        - title
      type: object
      properties:
        title:
          type: string
          description: Title of the user task
        status:
          type: string
          description: 'Status of the user task, one of: C (Closed), O (Open)'
        followUpFlag:
          type: boolean
          description: Indicates if follow up is required
        followUpDate:
          type: string
          description: Due date for follow up (if follow up flag is set)
          format: date
        assignedTo:
          type: integer
          description: User role to assign the user task to i.e. the ID of a data code of type UserTaskAssignTo
          format: int64
        comment:
          type: string
          description: Comment text
    LinkedAccount:
      type: object
      required:
        - memberIdentifier
        - linkedType
      properties:
        memberIdentifier:
          type: string
          description: Unique identifier for the linked member account.
          example: '500000003B'
        accountNumber:
          type: string
          description: Account number for the linked member account.
          example: '500000003B'
        linkedType:
          type: string
          description: Type of link to the member account (e.g., "CORP" for corporate).
          example: 'CORP'
        administrator:
          type: boolean
          default: false
          example: true
    EventRuleRequest:
      type: object
      required:
        - eventRuleCode
        - eventRuleName
        - eventType
        - status
        - startDate
      properties:
        eventRuleCode:
          type: string
        eventRuleName:
          type: string
        eventRuleDescription:
          type: string
          description: Event rule description
        eventType:
          type: string
          description: Type of event. This is a dataCode of type eventType
        startDate:
          type: string
          format: date
          description: Start date of rule
        endDate:
          type: string
          format: date
          description: End date of rule
        status:
          type: string
          description: Status of the event rule. This is a dataCode of type eventRuleStatus
        dataRelease:
          type: integer
          format: int64
        workflowStatus:
          type: string
          description: This is a dataCode of type ruleWorkflowStatus
        rank:
          type: integer
          description: Processing order relative to other event rules.
          minimum: 0
          maximum: 999
        rawExpression:
          type: string
          description: Expression for member and event conditions
        results:
          type: array
          items:
            $ref: '#/components/schemas/EventRuleResult'
    MemberReferral:
      type: object
      properties:
        memberReferralId:
          type: integer
          description: Member referral identifier
          format: int64
          example: 147258369
        referralType:
          type: string
          description: 'Type of referral (e.g. email, code, etc.)'
          example: Email
        referralValue:
          type: string
          description: Email address of referee or referral code
          example: friend.email.2@gmail.com
        referralDate:
          type: string
          description: Date the referral occurred
          format: date
          example: 2023-10-28
        referredAccountNumber:
          type: string
          description: Account number of referee
          example: '78508238'
        active:
          type: boolean
          description: Member referral is active
          example: true
        updateDateTime:
          type: string
          description: Last time the referral was updated
          format: date-time
          readOnly: true
    ReferredByResponse:
      type: object
      properties:
        accountNumber:
          type: string
          description: External account identifier
          example: '121279666'
        memberIdentifier:
          type: string
          description: Channel/Partner specific member identifier
          example: '1000032'
        firstName:
          type: string
          description: First name
          example: John
        lastName:
          type: string
          description: Last name
          example: Smith
    MemberReferralCode:
      type: object
      properties:
        memberReferralCodeId:
          type: integer
          description: Member referral code identifier
          format: int64
          example: 147258369
        referralCode:
          type: string
          description: Generated code for referral
          example: F9DA265FD56D496C
        active:
          type: boolean
          description: active
        updateDateTime:
          type: string
          description: Last time the referral was updated
          format: date-time
          readOnly: true
    HotelDailySummary:
      required:
        - availableRoomCount
        - averageDailyRateUSD
        - date
        - occupiedRoomCount
      type: object
      properties:
        date:
          type: string
          description: Day of the month
          format: date
        currencyTypeCode:
          maxLength: 50
          minLength: 1
          type: string
          description: 'Identifies the currency type (USD, CAD, EUR) code'
          default: USD
        currencyExchangeRate:
          type: number
          description: Currency exchange rate
          readOnly: true
          example: 1.5
        availableRoomCount:
          type: integer
          description: Available room count
          example: 100
        occupiedRoomCount:
          type: integer
          description: Occupied room count
          example: 10
        averageDailyRateUSD:
          type: number
          description: Posted average daily rate in USD
          example: 10.24
        averageDailyRateIntl:
          type: number
          description: Average daily rate in non USD (editable)
          example: 11.21
    CustomerSatisfaction:
      required:
        - metricType
        - ace03
        - reportDate
      type: object
      properties:
        metricType:
          type: string
          example: 'Overall Satisfaction'
        ace03:
          type: string
          example: 20763
        reportDate:
          type: string
          format: date
        override:
          type: number
          description: If an override is provided for a site, it may be used to replace the existing scores
          format: double
          example: 30
        score:
          type: number
          format: double
    Role:
      type: object
      properties:
        roleId:
          type: integer
          format: int64
          example: 1
        name:
          type: string
          example: Admin
        description:
          type: string
          example: Tally Super Admin
        rank:
          type: integer
          format: int32
          example: 0
        channelCode:
          type: string
          example: CAL
        active:
          type: boolean
        editable:
          type: boolean
    BackgroundTask:
      type: object
      properties:
        status:
          maxLength: 50
          minLength: 1
          type: string
          description: Current status of the background task execution.
          example: Processed
        commandResponse:
          type: object
          properties: {}
          description: Successful response object of command processed asynchronously.
    AsyncTask:
      type: object
      properties:
        asyncTaskId:
          type: integer
          format: int64
        taskTypeCode:
          type: string
          description: 'Task source'
          example: PlatformAPI
        taskCode:
          type: string
          description: 'Task type'
          example: enrollMember
        requestDate:
          type: string
          description: 'Date and time the async task was created'
          format: date-time
        requestData:
          type: object
          properties: {}
          description: 'Inputs for async task'
        statusCode:
          type: string
          description: 'Execution status of async task, one of: queued, processed, error'
        responseDate:
          type: string
          description: 'Date and time the async task finished processing'
          format: date-time
        responseData:
          type: object
          properties: {}
          description: 'Outputs of async task'
        fileName:
          type: string
          description: 'Name of uploaded file'
        lineNumber:
          type: integer
          description: 'Line number in uploaded file'
        fileData:
          type: string
          description: 'Data from uploaded file'
    FindAsyncTasksResponse:
      type: object
      properties:
        asyncTasks:
          type: array
          items:
            $ref: '#/components/schemas/AsyncTask'
        pageInfo:
          $ref: '#/components/schemas/PageInfo'
    AsyncTaskBatch:
      type: object
      properties:
        asyncTaskBatchId:
          type: integer
        taskTypeCode:
          type: string
          description: Source of async tasks
          example: PlatformAPI
        taskCode:
          type: string
          description: Type of task
          example: enrollMember
        schema:
          type: string
          description: CSV schema
          example: DefaultSchema
        fileName:
          type: string
          description: Name of uploaded file
        lineCount:
          type: integer
          description: Number of lines in uploaded file
    AsyncTaskBatchType:
      type: object
      properties:
        typeCode:
          type: string
          description: Indicates operation and CSV layout, a data code of type AsyncBatchTaskType
          example: postBonusTransactionDefaultSchema
        taskTypeCode:
          type: string
          description: Source of async tasks
          example: PlatformAPI
        taskCode:
          type: string
          description: Type of task
          example: enrollMember
        schema:
          type: string
          description: CSV schema
          example: DefaultSchema
        header:
          type: string
          description: CSV header
        sampleData:
          type: array
          description: Sample CSV data
          items:
            type: string
    BroadcastMessage:
      required:
        - type
        - startDate
        - endDate
        - status
      type: object
      properties:
        broadcastMessageId:
          type: integer
          description: Broadcast Message identifier - ignored when creating a new broadcast message
          format: int64
          example: 97432
        message:
          type: string
          maxLength: 500
          minLength: 1
          description: Full message for display to user
        title:
          type: string
          maxLength: 75
          minLength: 1
          description: Short title for display
        type:
          type: string
          maxLength: 50
          minLength: 1
          description: Type of message
          default: general
        startDate:
          type: string
          description: First date the message should display
          format: date
          example: 2024-03-20
        endDate:
          type: string
          description: Last date the message should display
          format: date
          example: 2024-03-20
        status:
          type: string
          maxLength: 50
          minLength: 1
          description: Status of message - active or inactive
          default: active
        rawExpression:
          type: string
          description: Expression to target users
    EntityConfigurationData:
      type: object
      properties:
        fieldName:
          type: string
          description: The name of the field.
          example: 'member.memberPreference.preferenceValue.raw'
        dataType:
          type: string
          description: The data type of the field.
          example: 'TEXT'
        dataHint:
          type: string
          description: Additional hint about the field data.
        searchable:
          type: boolean
          example: false
        oid:
          type: boolean
          example: false
        collection:
          type: boolean
          example: false
        updatable:
          type: boolean
          example: true
        contentKey:
          type: string
          description: The display name of the field.
          example: 'Preference Value'
        groupName:
          type: string
          description: The group to which the field belongs.
          example: 'member.memberPreference'
        displayOrder:
          type: integer
          description: The order in which the field should be displayed.
          example: 0
    StandardReportResponse:
      type: object
      properties:
        resultRows:
          type: array
          description: "The report's tabular data in rows, as objects"
          items:
            type: object
        pageInfo:
          $ref: '#/components/schemas/PageInfo'
    FindOutboundNotificationResponse:
      type: object
      properties:
        outboundNotifications:
          type: array
          description: The returned outbound notifications
          items:
            $ref: '#/components/schemas/OutboundNotificationPage'
        pageInfo:
          $ref: '#/components/schemas/PageInfo'
    OutboundNotificationPage:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: Object Identifier
        type:
          type: string
          description: Outbound Notification Type
        snapshotDate:
          type: string
          description: Date and time the outbound notification was sent
          format: date-time
    PageRequest:
      type: object
      properties:
        number:
          type: integer
          description: 'The page number requested, starting (indexed) from 1'
          minimum: 1
          default: 1
        size:
          type: integer
          description: 'The requested number of results per page'
          minimum: 1
          maximum: 500
          default: 500
    PageInfo:
      type: object
      properties:
        number:
          type: integer
          description: 'The current page number of results, starting (indexed) from 0'
        size:
          type: integer
          description: 'The number of results per page'
        totalItems:
          type: integer
          description: 'The total number of items available in the requested data set'
        hasNext:
          type: boolean
          description: 'Whether a subsequent page is available for further requests'
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          description: List of errors
          items:
            $ref: '#/components/schemas/ValidationError'
    ValidationError:
      type: object
      properties:
        code:
          type: string
          description: Error code assigned to this violation
        fieldName:
          type: string
          description: Name of field that violated validation constraint (optional)
        message:
          type: string
          description: Internal message describing the error
        messageParameters:
          type: array
          description: Error message parameters
          items:
            type: object
            properties: {}
    EnrollCode:
      type: object
      properties:
        enrollCodeId:
          type: integer
          readOnly: true
          description: Enroll Code Identifier
          format: int64
          example: 1
        enrollCode:
          type: string
          description: Code
          example: B
          minLength: 1
          maxLength: 50
        description:
          type: string
          description: Enroll code description
          example: This is an example base type
          minLength: 1
          maxLength: 500
        name:
          type: string
          description: Name of enroll code
          maxLength: 2000
        status:
          type: string
          description: Status of enroll code
            type
          example: pending
        startDate:
          type: string
          description: Enroll code start date
          format: date
          example: 2024-03-20
        endDate:
          type: string
          description: Enroll code end date
          format: date
          example: 2024-03-21
        locationCode:
          type: string
          description: Location code for the enroll code type
          example: MSP123
    ManagedEntityOption:
      type: object
      properties:
        id:
          type: integer
          format: int64
        code:
          type: string
        description:
          type: string
    CountersMap:
      type: object
      additionalProperties:
        type: number
        minimum: 0
        example: '123.45'
        description: Map containing counter values for Bonus Rules that award result counters of Result Type 'Provided'
  securitySchemes:
    OAuth2:
      type: oauth2
      description: See https://docs.wearephaedon.com/docs/platform-api-authentication
      flows:
        clientCredentials:
          tokenUrl: https://phaedon.oktapreview.com/oauth2/auscfbbmieFBGGOzR1d7/v1/token
          scopes:
            api:custom-data:read: Grants read access to custom data information
            api:custom-data:modify: Grants modify access to custom data information
            api:data-codes:read: Grants read access to data codes
            api:data-codes:modify: Grants modify access to data codes
            api:coupon-compensation:read: Grants read access to compensations for coupon code
            api:coupon-request:modify: Grants modify access to create coupons
            api:member:search: Grants search access to member information
            api:member:verify: Grants verify access to member information
            api:member:merge: Grants access to merge members
            api:member:modify: Grants modify access to member information
            api:member:read: Grants read access to member information
            api:member:close: Grants access to close member account
            api:member:migrate: Grants access to migrate member accounts
            api:member-address:read: Grants read access to member address information
            api:member-address:modify: Grants modify access to member address information
            api:member-alias:read: Grants read access to member alias information
            api:member-alias:modify: Grants modify access to member alias information
            api:member-badge:read: Grants read access to member badge information
            api:member-badge:modify: Grants modify access to member badge information
            api:member-bonus:add: Grants access to add a bonus to a member
            api:member-bonus:read: Grants read access to member bonus information
            api:member-comments:read: Grants read access to member comments information
            api:member-comments:modify: Grants modify access to member comments information
            api:member-communication:read: Grants read access to member communication information
            api:member-communication:modify: Grants modify access to member communication information
            api:member-coupon:read: Grants read access to member coupon information
            api:member-coupon-use:cancel: Grants access to cancel member coupon uses
            api:member-coupon:transfer: Grants access to transfer a member coupon
            api:member-coupon-use:update: Grants access to update member coupon uses
            api:member-currency:read: Grants read access to member currency information
            api:member-currency:adjust: Grants access to adjust member currency
            api:member-currency:migrate: Grants access to migrate member currency
            api:member-currency-conversion:convert: Grants access to convert member currency
            api:member-email:read: Grants read access to member email information
            api:member-email:modify: Grants modify access to member email information
            api:member-event:read: Grants read access to member events
            api:member-event:modify: Grants modify access to member events
            api:event-rule:read: Grants read access to event rules
            api:event-rule:modify: Grants access to modify event rule
            api:member-list:read: Grants read access to member list information
            api:member-list:modify: Grants modify access to member list information
            api:member-partner-link:read: Grants read access to member partner link information
            api:member-partner-link:modify: Grants modify access to member partner link information
            api:member-payment-card:read: Grants read access to member payment card information
            api:member-payment-card:modify: Grants modify access to member payment card information
            api:member-phone:read: Grants read access to member phone information
            api:member-phone:modify: Grants modify access to member phone information
            api:member-preference:read: Grants read access to member preference information
            api:member-preference:modify: Grants read access to member preference information
            api:member-promotion:read: Grants read access to member promotion information
            api:member-promotion:register: Grants access to register a member into a promotion
            api:member-redemption:create: Grants redeem access to member redemption information
            api:member-redemption:over-redeem: Grants access to over redeem
            api:member-redemption:read: Grants read access to member redemption information
            api:member-redemption:cancel: Grants access to cancel member redemptions
            api:member-redemption:migrate: Allows migration of member redemption information
            api:member-redemption:patch: Grants patching access to member redemption
            api:member-tier:read: Grants read access to member tier information
            api:member-tier:adjust: Grants access to adjust member tiers
            api:member-tier:migrate: Grants access to migrate member tiers
            api:member-transaction:read: Grants read access to transaction information
            api:member-transaction:cancel: Grants access to cancel transactions
            api:member-transaction:clone: Grants access to clone transactions
            api:member-transfer:transfer: Grants access to do member to member transfers
            api:preference:read: Grants read access to preference information
            api:promotion:read: Grants read access to promotion information
            api:tier:read: Grant read access to tier information
            api:promotion:register: Grants access to register a member into a promotion using token
            api:promotion-token:manage: Grants access to generate promotion token
            api:redemption:read: Grants read access to redemption information
            api:reports:under-investigation: Grants access to under investigation report
            api:transaction:submit: Grants access to submit transactions
            api:transaction:migrate: Grants access to migrate transactions
            api:user:read: Grants access to read user information
            api:user:modify: Grants access to create user
            api:user-task:read: Grants read access to user tasks
            api:user-task:modify: Grants modify access to user tasks
            api:user-role:read: Grants read access to user roles
            api:user-role:modify: Grants modify access to user roles
            api:compensation:read: Grants read access to hotel summary information
            api:compensation:modify: Grants modify access to hotel summary information
            api:member-referral:read: Grants read access to member referral information
            api:member-referral:modify: Grants modify access to member referral information
            api:member-referral-codes:read: Grants read access to member referral codes
            api:member-referral-codes:create: Grants access to create member referral codes
            api:outbound-notification:modify: Grants access to send outbound notification
            api:outbound-notification:read: Grants access to read outbound notification types
            api:background-task:read: Grants read access to background task information
            api:async-task:create: Grants access to submit operations for background processing
            api:async-task:read: Grants read access to background processing results
            api:badge:read: Grant read access to badge information
            api:broadcast-messages:read: Grant Read access to broadcast messages
            api:expression-config:read: Grant read access to expression builder configuration
            api:managed-entity:read: Grant read access to managed entity data
            api:customer-satisfaction:modify: Grants modify access to customer satisfaction metrics
            api:member-linked-account:modify: Grant modify access to member linked account
            api:member-linked-account:read: Grants access to read linked member accounts
            api:enroll-codes:read: Grants access to read enroll codes
x-original-swagger-version: '2.0'
