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

# Get paginated rewards

> Retrieve a paginated list of rewards.



## OpenAPI

````yaml openapi/integration.json GET /rewards
openapi: 3.0.3
info:
  title: Nudj Integration API
  version: 1.0.0
servers:
  - url: https://{subdomain}.nudj.cx/api/v2/integration
    description: Organization API Server
    variables:
      subdomain:
        description: Your organization's subdomain (required)
        default: your-org
security:
  - ApiToken: []
paths:
  /rewards:
    get:
      tags:
        - Reward
      summary: Get paginated rewards
      description: Retrieve a paginated list of rewards.
      operationId: getPaginatedRewards
      parameters:
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
          required: false
        - in: query
          name: skip
          schema:
            type: integer
            minimum: 0
            default: 0
          required: false
        - in: query
          name: sort
          schema:
            type: string
        - in: query
          name: search
          schema:
            type: string
        - in: query
          name: communityId
          schema:
            type: string
        - in: query
          name: allocationId
          schema:
            type: string
        - in: query
          name: featured
          schema:
            type: boolean
        - in: query
          name: verified
          schema:
            type: boolean
        - in: query
          name: isShop
          schema:
            type: boolean
        - in: query
          name: type
          schema:
            type: string
        - in: query
          name: status
          schema:
            type: string
        - in: query
          name: eventCategory
          schema:
            type: string
        - in: query
          name: eventSubCategory
          schema:
            type: string
        - in: query
          name: eventName
          schema:
            type: string
        - in: query
          name: displayMode
          schema:
            type: string
        - in: query
          name: fromDate
          schema:
            type: string
        - in: query
          name: toDate
          schema:
            type: string
        - in: query
          name: isGlobalTemplate
          schema:
            type: boolean
        - in: query
          name: key
          schema:
            type: string
        - in: query
          name: progressPeriod
          schema:
            type: string
        - in: query
          name: expand
          schema:
            type: string
        - in: query
          name: redeemableType
          schema:
            type: string
        - in: header
          name: x-language
          description: >-
            The language to return the rewards in. If not provided, the default
            language for the organisation will be used.
          schema:
            type: string
            description: >-
              The language to return the rewards in. If not provided, the
              default language for the organisation will be used.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalCount:
                    type: number
                  edges:
                    type: array
                    items:
                      $ref: '#/components/schemas/Reward'
                required:
                  - totalCount
                  - edges
        '400':
          description: Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.BAD_REQUEST'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR'
components:
  schemas:
    Reward:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the reward
        organisationId:
          type: string
          description: The organisation this reward belongs to
        communityId:
          type: string
          description: The community this reward belongs to
        additionalCommunityIds:
          type: array
          items:
            type: string
          description: The additional communities this reward is available in
        details:
          $ref: '#/components/schemas/Details'
        assetPointsPrice:
          type: number
          minimum: 0
          description: >-
            The points cost to acquire one asset of this reward. Must be > 0 if
            allocationsType is assets-only or assets-and-entries.
        assetPointsSwapValue:
          type: number
          minimum: 0
          description: >-
            [Not yet implemented] The points value received when swapping this
            reward asset back. If 0, asset cannot be swapped.
        entryPointsPrice:
          type: number
          minimum: 0
          description: >-
            The points cost to acquire one entry for this reward. Must be > 0 if
            allocationsType is entries-only or assets-and-entries.
        assetsSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: >-
            The total supply of assets available for this reward. Must be > 0 if
            allocationsType is assets-only or assets-and-entries.
        entriesSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: >-
            The total supply of entries available for this reward. Must be > 0
            if allocationsType is entries-only or assets-and-entries.
        maxAssetsPerUser:
          anyOf:
            - type: number
              minimum: 1
            - type: string
              enum:
                - Infinity
          description: >-
            Maximum number of assets a single user can acquire through any
            distribution. Must be > 0 if allocationsType is assets-only or
            assets-and-entries.
        maxEntriesPerUser:
          anyOf:
            - type: number
              minimum: 1
            - type: string
              enum:
                - Infinity
          description: >-
            Maximum number of entries a single user can acquire through any
            distribution. Must be > 0 if allocationsType is entries-only or
            assets-and-entries.
        allocationsType:
          type: string
          enum:
            - assets-only
            - entries-only
            - assets-and-entries
          description: >-
            The type of allocations for this reward. assets-only means only
            assets are allocable, entries-only means only entries are allocable,
            and assets-and-entries means both assets and entries are allocable.
        isSharedAssetsSupply:
          type: boolean
          description: >-
            Whether the assets supply is shared across allocations. If true, the
            total supply of assets across all allocations will be capped at the
            value set here. If false, each allocation will use its own supply
            value.
        isSharedEntriesSupply:
          type: boolean
          description: >-
            Whether the entries supply is shared across allocations. If true,
            the total supply of entries across all allocations will be capped at
            the value set here. If false, each allocation will use its own
            supply value.
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/RewardAllocation'
          description: The allocations configured for this reward
        redemptionConfig:
          $ref: '#/components/schemas/RewardRedemptionConfig'
        featured:
          type: boolean
          nullable: true
          description: Whether this reward is featured
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
          description: The tags the reward is linked to
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'
          description: The campaigns the reward is linked to
        status:
          type: string
          enum:
            - archived
            - draft
            - expired
            - live
            - scheduled
          description: The current status of this reward
        drawsAt:
          type: string
          nullable: true
          description: When this reward giveaway will be drawn
        startsAt:
          type: string
          nullable: true
          description: When this reward becomes available
        expiresAt:
          type: string
          nullable: true
          description: When this reward expires (or giveaway takes place)
        isManualGiveaway:
          type: boolean
          description: Whether the giveaway should be manual (true) or automatic (false)
        availableAsTemplateForOrganisations:
          type: array
          items:
            type: string
          description: The organisations that the reward is available as a template for
        isGlobalTemplate:
          type: boolean
          description: Whether the reward is a global template
        metadata:
          type: object
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
              - type: array
                items:
                  anyOf:
                    - type: string
                    - type: number
                    - type: boolean
          description: Additional metadata for the reward
        createdAt:
          type: string
          description: When this reward was created
        updatedAt:
          type: string
          description: When this reward was last updated
        community:
          type: object
          properties:
            id:
              type: string
              pattern: ^[0-9a-fA-F]{24}$
              description: The id of the community
            name:
              type: string
              description: The name of the community
            descriptionConfig:
              type: object
              nullable: true
              properties:
                content:
                  type: string
                  nullable: true
                  description: The description content (HTML/text)
                disableLineClamp:
                  type: boolean
                  nullable: true
                  description: When true, shows the full description without line clamping
                maxLines:
                  type: number
                  nullable: true
                  minimum: 1
                  maximum: 10
                  description: Maximum number of lines to show before clamping (1-10)
              description: The description configuration of the community
            slug:
              type: string
              description: The slug of the community
            logo:
              type: string
              nullable: true
              description: The url of the community logo image
          required:
            - id
            - name
            - slug
          description: Details of the community this reward belongs to
        challenges:
          type: array
          items:
            $ref: '#/components/schemas/Challenge'
          description: Array of challenges associated with this reward
        achievements:
          type: array
          items:
            $ref: '#/components/schemas/Achievement'
          description: Array of achievements associated with this reward
        initialAssetSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: >-
            Initial total supply of assets configured for this reward when
            created
        initialEntrySupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: >-
            Initial total supply of entries configured for this reward when
            created
        distributedAssetCount:
          type: number
          minimum: 0
          description: Number of assets that have been distributed for this reward
        distributedEntryCount:
          type: number
          minimum: 0
          description: Number of entries that have been distributed for this reward
        remainingAssetSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Number of assets still available for distribution
        remainingEntrySupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Number of entries still available for distribution
        remainingShopAssetSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Number of assets still available for purchase through the shop
        remainingShopEntrySupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Number of entries still available for purchase through the shop
        userEntryCount:
          type: number
          minimum: 0
          default: 0
          description: Number of entries the current user has for this reward
        userAssetCount:
          type: number
          minimum: 0
          default: 0
          description: Number of assets the current user has for this reward
      required:
        - id
        - organisationId
        - communityId
        - additionalCommunityIds
        - details
        - assetPointsPrice
        - assetPointsSwapValue
        - entryPointsPrice
        - assetsSupply
        - entriesSupply
        - maxAssetsPerUser
        - maxEntriesPerUser
        - allocationsType
        - isSharedAssetsSupply
        - isSharedEntriesSupply
        - allocations
        - redemptionConfig
        - tags
        - campaigns
        - status
        - isManualGiveaway
        - availableAsTemplateForOrganisations
        - isGlobalTemplate
        - metadata
        - createdAt
        - updatedAt
        - community
        - challenges
        - achievements
        - initialAssetSupply
        - initialEntrySupply
        - distributedAssetCount
        - distributedEntryCount
        - remainingAssetSupply
        - remainingEntrySupply
        - remainingShopAssetSupply
        - remainingShopEntrySupply
        - userEntryCount
        - userAssetCount
      description: A reward
      title: Reward
    error.BAD_REQUEST:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Invalid input data
        code:
          type: string
          description: The error code
          example: BAD_REQUEST
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              path:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
                description: The path to the field that caused the error
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Error
      description: The error information
      example:
        code: BAD_REQUEST
        message: Invalid input data
        issues: []
    error.NOT_FOUND:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Not found
        code:
          type: string
          description: The error code
          example: NOT_FOUND
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              path:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
                description: The path to the field that caused the error
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Error
      description: The error information
      example:
        code: NOT_FOUND
        message: Not found
        issues: []
    error.INTERNAL_SERVER_ERROR:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Internal server error
        code:
          type: string
          description: The error code
          example: INTERNAL_SERVER_ERROR
        issues:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              path:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
                description: The path to the field that caused the error
            required:
              - message
          description: An array of issues that were responsible for the error
          example: []
      required:
        - message
        - code
      title: Error
      description: The error information
      example:
        code: INTERNAL_SERVER_ERROR
        message: Internal server error
        issues: []
    Details:
      type: object
      properties:
        title:
          type: string
          description: The title of the entity
        description:
          type: string
          nullable: true
          description: The description of the entity
        light:
          type: object
          properties:
            primaryImageUrl:
              type: string
              nullable: true
              description: The url of the primary image for this theme mode
            secondaryImageUrl:
              type: string
              nullable: true
              description: The url of the secondary image for this theme mode
          required:
            - primaryImageUrl
            - secondaryImageUrl
          description: Light theme images
        dark:
          type: object
          properties:
            primaryImageUrl:
              type: string
              nullable: true
              description: The url of the primary image for this theme mode
            secondaryImageUrl:
              type: string
              nullable: true
              description: The url of the secondary image for this theme mode
          required:
            - primaryImageUrl
            - secondaryImageUrl
          description: Dark theme images
      required:
        - title
        - description
        - light
        - dark
      description: Used to describe an entity
      title: Details
    RewardAllocation:
      type: object
      properties:
        id:
          type: string
          description: The ID of this allocation
        allocationType:
          type: string
          enum:
            - assets
            - entries
          description: >-
            The type of allocation, either assets or entries. If the reward has
            a type of assets-and-entries, this allocation can have both assets
            and entries. Otherwise, it can only have one type matching the
            reward's allocation type.
        supply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: >-
            The total supply of this allocation. Only used if
            isSharedAssetsSupply or isSharedEntriesSupply is false on the
            reward.
        amountToDistribute:
          type: number
          minimum: 1
          description: >-
            The quantity of this specific reward to distribute when this
            allocation is selected. For example, if amountToDistribute is 3,
            then 3 units of this reward will be given to the recipient.
        distributed:
          type: number
          minimum: 0
          description: The amount already distributed for this allocation
        isShop:
          type: boolean
          description: Whether this allocation is for the shop
        isLive:
          type: boolean
          description: Whether this allocation is live
      required:
        - id
        - allocationType
        - supply
        - amountToDistribute
        - distributed
        - isShop
        - isLive
      description: A reward allocation
      title: RewardAllocation
    RewardRedemptionConfig:
      oneOf:
        - $ref: '#/components/schemas/RewardRedemptionConfigRichText'
        - $ref: '#/components/schemas/RewardRedemptionConfigCode'
        - $ref: '#/components/schemas/RewardRedemptionConfigBadge'
        - $ref: '#/components/schemas/RewardRedemptionConfigShopify'
      discriminator:
        propertyName: type
        mapping:
          rich-text:
            $ref: '#/components/schemas/RewardRedemptionConfigRichText'
          code:
            $ref: '#/components/schemas/RewardRedemptionConfigCode'
          badge:
            $ref: '#/components/schemas/RewardRedemptionConfigBadge'
          shopify:
            $ref: '#/components/schemas/RewardRedemptionConfigShopify'
      description: A reward redemption config
      title: Reward Redemption Config
    Tag:
      type: object
      properties:
        id:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the tag
        organisationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the organisation the tag belongs to
        value:
          type: string
          minLength: 1
          description: The value of the tag
        config:
          $ref: '#/components/schemas/TagConfig'
        createdAt:
          type: string
          description: The date the tag was created
        updatedAt:
          type: string
          description: The date the tag was last updated
      required:
        - id
        - organisationId
        - value
        - config
        - createdAt
        - updatedAt
      title: Tag
      description: A tag
    Campaign:
      type: object
      properties:
        id:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the campaign
        organisationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the organisation the campaign belongs to
        name:
          type: string
          description: The name of the campaign
        startDate:
          type: string
          description: The start date of the campaign
        endDate:
          type: string
          description: The end date of the campaign
        status:
          type: string
          enum:
            - archived
            - draft
            - expired
            - live
            - scheduled
          description: The status of the campaign
        createdAt:
          type: string
          description: The date the campaign was created
        updatedAt:
          type: string
          description: The date the campaign was last updated
      required:
        - id
        - organisationId
        - name
        - startDate
        - endDate
        - status
        - createdAt
        - updatedAt
      title: Campaign
      description: A campaign
    Challenge:
      type: object
      properties:
        id:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the challenge
        organisationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the organisation the challenge belongs to
        communityId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the community the challenge belongs to
        additionalCommunityIds:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The ids of any additional communities the challenge belongs to
        details:
          $ref: '#/components/schemas/Details'
        progressPeriod:
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
            - open
          description: The progress period of the challenge
        maxCompletionsPerPeriod:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: The maximum number of completions per period for the challenge
        numberOfActions:
          type: number
          minimum: 0
          description: The number of actions in the challenge
        actionIds:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The ids of the actions in the challenge
        challengeType:
          type: string
          nullable: true
          enum:
            - survey
            - null
          description: The type of the challenge
        enabledForSingleView:
          type: boolean
          nullable: true
          description: Whether the challenge is enabled for single view
        actionGroups:
          type: array
          items:
            $ref: '#/components/schemas/ActionGroup'
          description: The action groups of the challenge
        status:
          type: string
          enum:
            - archived
            - draft
            - expired
            - live
            - scheduled
          description: The status of the challenge
        startDate:
          type: string
          nullable: true
          description: Deprecated use `startsAt` instead
        endDate:
          type: string
          nullable: true
          description: Deprecated use `expiresAt` instead
        featured:
          type: boolean
          nullable: true
        threadId:
          type: string
          nullable: true
          description: The thread id of the challenge
        isSkippable:
          type: boolean
          nullable: true
          description: Whether the challenge is skippable
        isLinear:
          type: boolean
          description: Whether the challenge must be completed in sequential order
        unlockPrice:
          type: number
          minimum: 0
          description: The number of keys required to unlock this challenge
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
          description: The tags the challenge is linked to
        startedCount:
          type: number
          minimum: 0
          description: The total number of times participants have started the challenge
        completedCount:
          type: number
          minimum: 0
          description: The total number of times participants have completed the challenge
        uniqueUsersStartedCount:
          type: number
          minimum: 0
          description: The number of distinct participants who have started the challenge
        uniqueUsersCompletedCount:
          type: number
          minimum: 0
          description: The number of distinct participants who have completed the challenge
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'
          description: The campaigns the challenge is linked to
        availableAsTemplateForOrganisations:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The organisations that the challenge is available as a template for
        isGlobalTemplate:
          type: boolean
          description: Whether the challenge is a global template
        startsAt:
          type: string
          nullable: true
          description: The start date of the challenge
        expiresAt:
          type: string
          nullable: true
          description: The expiry date of the challenge
        groupIds:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The challenge groups the challenge belongs to
        createdAt:
          type: string
          description: The creation date of the challenge
        updatedAt:
          type: string
          nullable: true
          description: The update date of the challenge
        videoConfig:
          allOf:
            - $ref: '#/components/schemas/VideoConfig'
          nullable: true
          description: Video configuration for challenges with video content
        xpConfig:
          allOf:
            - $ref: '#/components/schemas/UserXPBreakdown'
          description: >-
            XP breakdown for this challenge. This is the sum of all action
            xpConfigs within the challenge and is automatically calculated.
        rewardDistribution:
          allOf:
            - $ref: '#/components/schemas/EntityRewardDistribution'
          nullable: true
          description: Reward distribution information for the challenge completion itself
        actionsRewardDistribution:
          allOf:
            - $ref: '#/components/schemas/AggregatedRewardDistribution'
          nullable: true
          description: >-
            Aggregated reward distribution information from all actions within
            the challenge
        actions:
          type: array
          items:
            $ref: '#/components/schemas/Action'
          description: The actions of the challenge
        community:
          type: object
          nullable: true
          properties:
            id:
              type: string
              pattern: ^[0-9a-fA-F]{24}$
              description: The id of the community
            name:
              type: string
              description: The name of the community
            descriptionConfig:
              type: object
              nullable: true
              properties:
                content:
                  type: string
                  nullable: true
                  description: The description content (HTML/text)
                disableLineClamp:
                  type: boolean
                  nullable: true
                  description: When true, shows the full description without line clamping
                maxLines:
                  type: number
                  nullable: true
                  minimum: 1
                  maximum: 10
                  description: Maximum number of lines to show before clamping (1-10)
              description: The description configuration of the community
            slug:
              type: string
              description: The slug of the community
            logo:
              type: string
              nullable: true
              description: The url of the community logo image
          required:
            - id
            - name
            - slug
          description: Details of the community this challenge belongs to
        rewards:
          type: array
          items:
            $ref: '#/components/schemas/RewardDistributionItem'
        userState:
          type: object
          properties:
            status:
              type: string
              enum:
                - abandoned
                - completed
                - in-progress
                - locked
                - not-started
                - repeatable
                - skipped
              description: >-
                Current progress state of the user's active attempt at the
                challenge. (not-started, in-progress, completed, repeatable,
                locked)
            challengeProgressId:
              type: string
              nullable: true
              pattern: ^[0-9a-fA-F]{24}$
              description: The ID of the user's challenge progress record.
            completionsInPeriod:
              type: number
              minimum: 0
              default: 0
              description: >-
                The number of times the user has completed this challenge in the
                current period
            totalCompletions:
              type: number
              minimum: 0
              default: 0
              description: >-
                The total number of times the user has completed this challenge
                across all periods
            keysContributed:
              type: number
              minimum: 0
              default: 0
              description: >-
                The number of keys the user has contributed towards unlocking
                this challenge
            latestAttempt:
              type: object
              properties:
                eligibleXp:
                  type: number
                  minimum: 0
                  default: 0
                  description: >-
                    The XP available for the user to earn. This decreases with
                    failed attempts and becomes 0 once completed
                actionsCompletedCount:
                  type: number
                  minimum: 0
                  default: 0
                  description: >-
                    The number of actions the user has completed in the current
                    run of this challenge
                startedAt:
                  type: string
                  nullable: true
                  description: >-
                    The timestamp when the user started their current attempt at
                    this challenge
                earnedXp:
                  type: number
                  minimum: 0
                  default: 0
                  description: >-
                    Total XP the user has earned so far from this challenge
                    (includes both action XP and completion bonus if completed)
                earnedPoints:
                  type: number
                  minimum: 0
                  default: 0
                  description: Total points the user has earned from this challenge
                earnedRewardAssets:
                  type: array
                  items:
                    type: object
                    properties:
                      rewardAssetId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward asset earned
                      rewardId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward this asset belongs to
                    required:
                      - rewardAssetId
                      - rewardId
                  description: The reward assets the user has earned from this challenge
                earnedRewardEntries:
                  type: array
                  items:
                    type: object
                    properties:
                      rewardEntryId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward entry earned
                      rewardId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward this entry belongs to
                      amount:
                        type: number
                        minimum: 0
                        description: Amount refers to entries won from this challenge only
                    required:
                      - rewardEntryId
                      - rewardId
                      - amount
                  description: The reward entries the user has earned from this challenge
                completionTime:
                  type: number
                  minimum: 0
                  default: 0
                  description: >-
                    Time taken to complete the challenge in seconds with 2
                    decimal places precision (e.g. 1.34). 0 if not started.
                successRate:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 0
                  description: >-
                    Percentage of correct answers/successful attempts across all
                    actions (0-100)
              required:
                - eligibleXp
                - actionsCompletedCount
                - earnedXp
                - earnedPoints
                - earnedRewardAssets
                - earnedRewardEntries
                - completionTime
                - successRate
            historicAttempts:
              type: array
              items:
                type: object
                properties:
                  eligibleXp:
                    type: number
                    minimum: 0
                    default: 0
                    description: >-
                      The XP available for the user to earn. This decreases with
                      failed attempts and becomes 0 once completed
                  actionsCompletedCount:
                    type: number
                    minimum: 0
                    default: 0
                    description: >-
                      The number of actions the user has completed in the
                      current run of this challenge
                  startedAt:
                    type: string
                    nullable: true
                    description: >-
                      The timestamp when the user started their current attempt
                      at this challenge
                  earnedXp:
                    type: number
                    minimum: 0
                    default: 0
                    description: >-
                      Total XP the user has earned so far from this challenge
                      (includes both action XP and completion bonus if
                      completed)
                  earnedPoints:
                    type: number
                    minimum: 0
                    default: 0
                    description: Total points the user has earned from this challenge
                  earnedRewardAssets:
                    type: array
                    items:
                      type: object
                      properties:
                        rewardAssetId:
                          type: string
                          pattern: ^[0-9a-fA-F]{24}$
                          description: The ID of the reward asset earned
                        rewardId:
                          type: string
                          pattern: ^[0-9a-fA-F]{24}$
                          description: The ID of the reward this asset belongs to
                      required:
                        - rewardAssetId
                        - rewardId
                    description: The reward assets the user has earned from this challenge
                  earnedRewardEntries:
                    type: array
                    items:
                      type: object
                      properties:
                        rewardEntryId:
                          type: string
                          pattern: ^[0-9a-fA-F]{24}$
                          description: The ID of the reward entry earned
                        rewardId:
                          type: string
                          pattern: ^[0-9a-fA-F]{24}$
                          description: The ID of the reward this entry belongs to
                        amount:
                          type: number
                          minimum: 0
                          description: >-
                            Amount refers to entries won from this challenge
                            only
                      required:
                        - rewardEntryId
                        - rewardId
                        - amount
                    description: The reward entries the user has earned from this challenge
                  completionTime:
                    type: number
                    minimum: 0
                    default: 0
                    description: >-
                      Time taken to complete the challenge in seconds with 2
                      decimal places precision (e.g. 1.34). 0 if not started.
                  successRate:
                    type: number
                    minimum: 0
                    maximum: 100
                    default: 0
                    description: >-
                      Percentage of correct answers/successful attempts across
                      all actions (0-100)
                required:
                  - eligibleXp
                  - actionsCompletedCount
                  - earnedXp
                  - earnedPoints
                  - earnedRewardAssets
                  - earnedRewardEntries
                  - completionTime
                  - successRate
              default: []
              description: >-
                Historic attempts of the user for this challenge in the current
                period
          required:
            - status
            - completionsInPeriod
            - totalCompletions
            - keysContributed
            - latestAttempt
            - historicAttempts
      required:
        - id
        - organisationId
        - communityId
        - additionalCommunityIds
        - details
        - progressPeriod
        - maxCompletionsPerPeriod
        - numberOfActions
        - actionIds
        - actionGroups
        - status
        - isLinear
        - unlockPrice
        - tags
        - startedCount
        - completedCount
        - uniqueUsersStartedCount
        - uniqueUsersCompletedCount
        - campaigns
        - availableAsTemplateForOrganisations
        - isGlobalTemplate
        - groupIds
        - createdAt
        - videoConfig
        - xpConfig
        - rewardDistribution
        - actionsRewardDistribution
        - actions
        - rewards
        - userState
      description: A challenge
      title: Challenge
    Achievement:
      type: object
      properties:
        id:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the achievement
        organisationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the organisation this achievement belongs to
        communityId:
          type: string
          nullable: true
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the community this achievement belongs to
        details:
          $ref: '#/components/schemas/Details'
        progressPeriod:
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
            - open
          description: The period over which progress is tracked/reset
        displayMode:
          type: string
          enum:
            - default
            - custom
          description: >-
            The display mode for the achievement. Useful to make the distinction
            between normal user achievments and achievments designed for
            implementing custom app functionality.
        tags:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The ids of the tags on the achievement
        campaigns:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: The ids of the campaigns on the achievement
        criteria:
          $ref: '#/components/schemas/ConditionNode'
        queries:
          type: array
          items:
            $ref: '#/components/schemas/EventQueryNode'
          description: >-
            The event queries used to measure progress against this
            achievement's criteria
        queryDescriptions:
          type: object
          additionalProperties:
            type: string
          description: >-
            A map of query alias to user-readable descriptions, useful for
            displaying in the UI. Can be localised across additional languages.
        status:
          type: string
          enum:
            - archived
            - draft
            - expired
            - live
            - scheduled
          description: The status of the achievement
        featured:
          type: boolean
          nullable: true
          description: Whether the achievement is featured
        availableAsTemplateForOrganisations:
          type: array
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: >-
            The organisations that the achievement is available as a template
            for
        isGlobalTemplate:
          type: boolean
          description: Whether the achievement is a global template
        startsAt:
          type: string
          nullable: true
          description: When this achievement becomes available to the user
        expiresAt:
          type: string
          nullable: true
          description: When this achievement expires
        createdAt:
          type: string
          description: When this achievement was created
        updatedAt:
          type: string
          description: When this achievement was last updated
        rewardDistribution:
          allOf:
            - $ref: '#/components/schemas/EntityRewardDistribution'
          nullable: true
          description: Reward distribution information for this achievement
        community:
          type: object
          nullable: true
          properties:
            id:
              type: string
              pattern: ^[0-9a-fA-F]{24}$
              description: The id of the community
            name:
              type: string
              description: The name of the community
            descriptionConfig:
              type: object
              nullable: true
              properties:
                content:
                  type: string
                  nullable: true
                  description: The description content (HTML/text)
                disableLineClamp:
                  type: boolean
                  nullable: true
                  description: When true, shows the full description without line clamping
                maxLines:
                  type: number
                  nullable: true
                  minimum: 1
                  maximum: 10
                  description: Maximum number of lines to show before clamping (1-10)
              description: The description configuration of the community
            slug:
              type: string
              description: The slug of the community
            logo:
              type: string
              nullable: true
              description: The url of the community logo image
          required:
            - id
            - name
            - slug
          description: Details of the community this achievement belongs to
        userState:
          allOf:
            - type: object
              properties:
                status:
                  type: string
                  enum:
                    - abandoned
                    - completed
                    - in-progress
                    - locked
                    - not-started
                    - repeatable
                    - skipped
                  description: The status of the user's progress on this achievement
                completedAt:
                  type: string
                  nullable: true
                  description: >-
                    When the achievement was completed by the user, if
                    applicable
                timesCompleted:
                  type: number
                  minimum: 0
                  description: >-
                    The number of times the achievement has been completed in
                    the past by the user
                isClaimable:
                  type: boolean
                  description: >-
                    Whether the achievement is claimable by the user, if
                    applicable
                isClaimed:
                  type: boolean
                  description: >-
                    Whether the achievement has been claimed by the user, if
                    applicable
                updatedAt:
                  type: string
                  description: When progress was last updated for this achievement
                earnedPoints:
                  type: number
                  minimum: 0
                  description: Points earned by the user for this achievement
                earnedRewardAssets:
                  type: array
                  items:
                    type: object
                    properties:
                      rewardAssetId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward asset earned
                      rewardId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward this asset belongs to
                    required:
                      - rewardAssetId
                      - rewardId
                  description: Reward assets earned by the user for this achievement
                earnedRewardEntries:
                  type: array
                  items:
                    type: object
                    properties:
                      rewardEntryId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward entry earned
                      rewardId:
                        type: string
                        pattern: ^[0-9a-fA-F]{24}$
                        description: The ID of the reward this entry belongs to
                      amount:
                        type: number
                        minimum: 0
                        description: The number of entries earned
                    required:
                      - rewardEntryId
                      - rewardId
                      - amount
                  description: Reward entries earned by the user for this achievement
                earnedXp:
                  type: number
                  minimum: 0
                  description: XP earned by the user for this achievement
                progressResetsAt:
                  type: string
                  nullable: true
                  description: When the achievement progress will next reset, if applicable
              required:
                - status
                - timesCompleted
                - isClaimable
                - isClaimed
                - updatedAt
                - earnedPoints
                - earnedRewardAssets
                - earnedRewardEntries
                - earnedXp
            - $ref: '#/components/schemas/AchievementNodeProgress'
          description: The current user's progress on this achievement
        stats:
          type: object
          properties:
            completedCount:
              type: number
              minimum: 0
              description: Number of users who have completed this achievement
          required:
            - completedCount
          description: Statistics about this achievement
        rewards:
          type: array
          items:
            $ref: '#/components/schemas/RewardDistributionItem'
      required:
        - id
        - organisationId
        - details
        - progressPeriod
        - displayMode
        - tags
        - campaigns
        - criteria
        - queries
        - queryDescriptions
        - status
        - availableAsTemplateForOrganisations
        - isGlobalTemplate
        - createdAt
        - updatedAt
        - rewardDistribution
        - userState
        - stats
        - rewards
      description: An achievement
      title: Achievement
    RewardRedemptionConfigRichText:
      type: object
      properties:
        instructions:
          type: string
          nullable: true
          description: Instructions for redeeming this reward. HTML is supported.
        instructionsImageUrl:
          type: string
          nullable: true
          description: The URL of an image to display with the instructions
        supportEmail:
          type: string
          nullable: true
          format: email
          description: The email address of the support team
        supportPhoneNumber:
          type: string
          nullable: true
          description: The phone number of the support team
        supportUrl:
          type: string
          nullable: true
          description: The URL of the support team
        type:
          type: string
          enum:
            - rich-text
          description: Rich text redemption config
        additionalInformation:
          type: array
          items:
            $ref: '#/components/schemas/VariableConfigReference'
          description: >-
            Configurable form fields to collect additional user information when
            user redeems the reward. Each field (e.g., email, phone, address) is
            defined by a variable config that specifies its type, validation
            rules, and display order.
        redeemByDate:
          type: string
          nullable: true
          description: The date by which the reward can be redeemed
        autoRedeem:
          type: boolean
          description: Whether the reward should be automatically redeemed when claimed
          example: false
        content:
          type: string
          description: The rich text content. HTML is supported.
      required:
        - type
        - additionalInformation
        - autoRedeem
        - content
      description: A reward redemption config rich text
      title: RewardRedemptionConfigRichText
    RewardRedemptionConfigCode:
      type: object
      properties:
        instructions:
          type: string
          nullable: true
          description: Instructions for redeeming this reward. HTML is supported.
        instructionsImageUrl:
          type: string
          nullable: true
          description: The URL of an image to display with the instructions
        supportEmail:
          type: string
          nullable: true
          format: email
          description: The email address of the support team
        supportPhoneNumber:
          type: string
          nullable: true
          description: The phone number of the support team
        supportUrl:
          type: string
          nullable: true
          description: The URL of the support team
        type:
          type: string
          enum:
            - code
          description: Code redemption config
        additionalInformation:
          type: array
          items:
            $ref: '#/components/schemas/VariableConfigReference'
          description: >-
            Configurable form fields to collect additional user information when
            user redeems the reward. Each field (e.g., email, phone, address) is
            defined by a variable config that specifies its type, validation
            rules, and display order.
        redeemByDate:
          type: string
          nullable: true
          description: The date by which the reward can be redeemed
        autoRedeem:
          type: boolean
          description: Whether the reward should be automatically redeemed when claimed
          example: false
        prefix:
          type: string
          nullable: true
        displayMode:
          type: string
          enum:
            - text
            - link
            - barcode-code128
            - barcode-code39
            - barcode-code39ext
            - barcode-upca
            - barcode-upce
            - barcode-ean13
            - barcode-ean8
            - barcode-ean5
            - barcode-ean2
            - barcode-itf14
            - barcode-interleaved2of5
            - barcode-qr
            - barcode-datamatrix
            - barcode-pdf417
            - barcode-azteccode
            - shopify-code-and-store-link
            - shopify-checkout-link
          description: Display mode for code redemption
      required:
        - type
        - additionalInformation
        - autoRedeem
        - displayMode
      description: A reward redemption config code
      title: RewardRedemptionConfigCode
    RewardRedemptionConfigBadge:
      type: object
      properties:
        instructions:
          type: string
          nullable: true
          description: Instructions for redeeming this reward. HTML is supported.
        instructionsImageUrl:
          type: string
          nullable: true
          description: The URL of an image to display with the instructions
        supportEmail:
          type: string
          nullable: true
          format: email
          description: The email address of the support team
        supportPhoneNumber:
          type: string
          nullable: true
          description: The phone number of the support team
        supportUrl:
          type: string
          nullable: true
          description: The URL of the support team
        type:
          type: string
          enum:
            - badge
          description: Badge redemption config
        additionalInformation:
          type: array
          items:
            $ref: '#/components/schemas/VariableConfigReference'
          description: >-
            Configurable form fields to collect additional user information when
            user redeems the reward. Each field (e.g., email, phone, address) is
            defined by a variable config that specifies its type, validation
            rules, and display order.
        redeemByDate:
          type: string
          nullable: true
          description: The date by which the reward can be redeemed
        autoRedeem:
          type: boolean
          description: Whether the reward should be automatically redeemed when claimed
          example: false
      required:
        - type
        - additionalInformation
        - autoRedeem
      description: A reward redemption config for badges
      title: Reward Redemption Config Badge
    RewardRedemptionConfigShopify:
      type: object
      properties:
        instructions:
          type: string
          nullable: true
          description: Instructions for redeeming this reward. HTML is supported.
        instructionsImageUrl:
          type: string
          nullable: true
          description: The URL of an image to display with the instructions
        supportEmail:
          type: string
          nullable: true
          format: email
          description: The email address of the support team
        supportPhoneNumber:
          type: string
          nullable: true
          description: The phone number of the support team
        supportUrl:
          type: string
          nullable: true
          description: The URL of the support team
        type:
          type: string
          enum:
            - shopify
          description: Shopify discount redemption config
        additionalInformation:
          type: array
          items:
            $ref: '#/components/schemas/VariableConfigReference'
          description: >-
            Configurable form fields to collect additional user information when
            user redeems the reward. Each field (e.g., email, phone, address) is
            defined by a variable config that specifies its type, validation
            rules, and display order.
        redeemByDate:
          type: string
          nullable: true
          description: The date by which the reward can be redeemed
        autoRedeem:
          type: boolean
          description: Whether the reward should be automatically redeemed when claimed
          example: false
        displayMode:
          type: string
          enum:
            - text
            - link
            - barcode-code128
            - barcode-code39
            - barcode-code39ext
            - barcode-upca
            - barcode-upce
            - barcode-ean13
            - barcode-ean8
            - barcode-ean5
            - barcode-ean2
            - barcode-itf14
            - barcode-interleaved2of5
            - barcode-qr
            - barcode-datamatrix
            - barcode-pdf417
            - barcode-azteccode
            - shopify-code-and-store-link
            - shopify-checkout-link
          description: Display mode for Shopify discount redemption
        shopifyStoreLink:
          type: string
          description: >-
            The Shopify store URL to use for the discount redemption. Useful if
            the store has a custom domain, or you want to redirect to a specific
            product page.
      required:
        - type
        - additionalInformation
        - autoRedeem
        - displayMode
        - shopifyStoreLink
      description: A reward redemption config based on a Shopify discount
      title: RewardRedemptionConfigShopify
    TagConfig:
      type: object
      properties:
        filtering:
          type: array
          items:
            type: string
            enum:
              - achievement
              - action
              - community
              - challenge
              - leaderboard
              - post
              - reward
              - reward-asset
              - reward-entry
          description: The filtering options for the tag
        display:
          type: array
          items:
            type: string
            enum:
              - achievement
              - action
              - community
              - challenge
              - leaderboard
              - post
              - reward
              - reward-asset
              - reward-entry
          description: The display options for the tag
        iconifyIcon:
          type: string
          nullable: true
          description: The iconify icon for the tag
      required:
        - filtering
        - display
      title: TagConfig
      description: The configuration of a tag
    ActionGroup:
      type: object
      properties:
        id:
          type: string
        parentGroupId:
          type: string
          nullable: true
        type:
          type: string
          enum:
            - single
            - group
            - child
        displayType:
          type: string
          nullable: true
          enum:
            - list
            - grid
            - stepper
            - map
            - chapters
            - widget
            - null
        details:
          $ref: '#/components/schemas/Details'
      required:
        - id
        - type
        - details
      title: ActionGroup
      description: An action group
    VideoConfig:
      type: object
      properties:
        videoUrl:
          type: string
          description: The URL of the video
        isVideoEnabled:
          type: boolean
          description: Whether video functionality is enabled for this challenge
      required:
        - videoUrl
        - isVideoEnabled
      description: Video configuration for challenges with video content
      title: Video Config
    UserXPBreakdown:
      type: object
      properties:
        total:
          type: number
          minimum: 0
        knowledge:
          type: number
          minimum: 0
        creativity:
          type: number
          minimum: 0
        loyalty:
          type: number
          minimum: 0
        influence:
          type: number
          minimum: 0
        participation:
          type: number
          minimum: 0
        contribution:
          type: number
          minimum: 0
      required:
        - total
        - knowledge
        - creativity
        - loyalty
        - influence
        - participation
        - contribution
      description: User XP Breakdown
      title: User XP Breakdown
    EntityRewardDistribution:
      type: object
      properties:
        points:
          type: number
          minimum: 0
          description: Number of points awarded upon completion
        xp:
          type: number
          minimum: 0
          description: XP awarded upon completion
        rewardSelectionMethod:
          type: string
          enum:
            - all
            - priority
            - random
            - select
          description: Method for selecting rewards when multiple are available
        distributionEventId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: ID of the distribution event managing these rewards
        rewardAllocations:
          type: array
          items:
            $ref: '#/components/schemas/RewardAllocationReference'
          description: >-
            Array of reward allocations with their types. Filter by
            allocationType to get counts: assets for tangible rewards, entries
            for giveaway entries
        numberOfRewardsToReceive:
          type: number
          minimum: 0
          description: Number of rewards the user will receive from the available rewards
      required:
        - points
        - xp
        - rewardSelectionMethod
        - distributionEventId
        - rewardAllocations
        - numberOfRewardsToReceive
      description: >-
        Reward distribution for a single entity with distribution event
        reference
      title: Entity Reward Distribution
    AggregatedRewardDistribution:
      type: object
      properties:
        points:
          type: number
          minimum: 0
          description: Total number of points from all sources
        xp:
          type: number
          minimum: 0
          description: Total XP from all sources
        rewardAllocations:
          type: array
          items:
            $ref: '#/components/schemas/RewardAllocationReference'
          description: >-
            Array of all reward allocations from all sources. Filter by
            allocationType to get counts: assets for tangible rewards, entries
            for giveaway entries
      required:
        - points
        - xp
        - rewardAllocations
      description: >-
        Aggregated reward distribution summed from multiple sources (e.g.,
        challenge's total action rewards)
      title: Aggregated Reward Distribution
    Action:
      type: object
      properties:
        id:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The id of the action
        organisationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The organisation that the action belongs to
        communityId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: The community that the action belongs to
        allocationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: >-
            The allocation this action is assigned to. This can be set to a
            challenge only at the moment.
        allocatedTo:
          type: string
          enum:
            - achievement
            - action
            - community
            - challenge
            - leaderboard
            - post
            - reward
            - reward-asset
            - reward-entry
          description: >-
            The entity type this action is allocated to. This can be set to a
            'challenge' only at the moment.
        actionGroupId:
          type: string
          nullable: true
          pattern: ^[0-9a-fA-F]{24}$
          description: The action group this action belongs to
        actionGroupIndex:
          type: number
          nullable: true
          description: The index of this action within its action group
        position:
          type: number
          description: The display position of this action
        category:
          type: string
          enum:
            - nudj
            - discord
            - facebook
            - imageAnalysis
            - instagram
            - interaction
            - linkedin
            - question
            - platform
            - spotify
            - tiktok
            - twitter
            - youtube
          description: The category of this action
        key:
          type: string
          enum:
            - facebook-comment
            - facebook-follow
            - facebook-like
            - image-analysis-object-detection
            - image-analysis-receipt-detection
            - instagram-follow
            - instagram-like
            - instagram-comment
            - instagram-share
            - instagram-post
            - interaction-engage-with-content
            - interaction-external-link
            - interaction-image-upload
            - interaction-spot-object
            - platform-comment-on-post
            - platform-complete-achievement
            - platform-generative-action
            - platform-like-post
            - platform-play-game
            - platform-validate-event
            - question-multiple-choice
            - question-open-ended
            - question-rate-your-experience
            - question-secret-access-code
            - question-select-date
            - question-select-from-images
            - question-select-value-in-range
            - question-select-from-list
            - question-closed-ended
            - question-vote
            - spotify-follow
            - spotify-listen
            - spotify-save
            - tiktok-follow
            - tiktok-watch
            - tiktok-post
            - youtube-like
            - youtube-comment
            - youtube-subscribe
          description: The specific type of this action
        details:
          allOf:
            - $ref: '#/components/schemas/Details'
          description: >-
            The details of this action such as title, description, bannerUrl,
            logoUrl
        progressPeriod:
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
            - open
          description: The progress period of the action
        maxCompletionsPerPeriod:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: The maximum number of completions per period for the action
        attributes:
          allOf:
            - $ref: '#/components/schemas/ActionAttributes'
          description: >-
            The specific attributes for this action type. This must symantically
            match the key of this action.
        config:
          allOf:
            - $ref: '#/components/schemas/ActionConfig'
          description: The configuration settings for this action
        xpConfig:
          allOf:
            - $ref: '#/components/schemas/UserXPBreakdown'
          description: >-
            XP breakdown for this action. Can be customized per action or set to
            match platform config defaults.
        videoMetadata:
          allOf:
            - $ref: '#/components/schemas/VideoMetadata'
          nullable: true
          description: Video metadata for actions with video content
        createdAt:
          type: string
          description: The date when this action was created
        availableAsTemplateForOrganisations:
          type: array
          nullable: true
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: List of organisation IDs that can use this action as a template
        isGlobalTemplate:
          type: boolean
          nullable: true
          description: >-
            Indicates if this action is available as a template globally across
            all organisations
        rewardDistribution:
          allOf:
            - $ref: '#/components/schemas/EntityRewardDistribution'
          nullable: true
          description: Reward distribution information for this action
        previousAction:
          type: string
          nullable: true
          description: ID of the action that precedes this one in sequence
        nextAction:
          type: string
          nullable: true
          description: ID of the action that follows this one in sequence
        rewards:
          type: array
          items:
            $ref: '#/components/schemas/RewardDistributionItem'
        userState:
          type: object
          properties:
            criteriaMet:
              type: boolean
              nullable: true
              description: >-
                Indicates whether the user has successfully completed the
                action's requirements
            status:
              type: string
              enum:
                - abandoned
                - completed
                - in-progress
                - locked
                - not-started
                - repeatable
                - skipped
              description: Current progress state of the action for the user
            statusMessage:
              type: string
              nullable: true
              description: Human-readable message explaining the current status to the user
            eligibleXp:
              type: number
              nullable: true
              description: >-
                The XP available for the user to earn. This decreases with
                failed attempts and becomes 0 once completed
            earnedXp:
              type: number
              nullable: true
              description: Total XP the user has earned from this action so far
            attempts:
              type: number
              nullable: true
              description: Number of times the user has attempted this action
            output:
              allOf:
                - $ref: '#/components/schemas/ActionOutput'
              nullable: true
              description: Results from the user's most recent attempt
            unmetCriteriaMessage:
              type: string
              nullable: true
              description: >-
                Explanation of why the action requirements haven't been met, if
                applicable
            metCriteriaMessage:
              type: string
              nullable: true
              description: >-
                Explanation of why the action requirements have been met, if
                applicable
          required:
            - status
        participations:
          type: array
          items:
            $ref: '#/components/schemas/ActionParticipationStatus'
          description: History of all user attempts and interactions with this action
      required:
        - id
        - organisationId
        - communityId
        - allocationId
        - allocatedTo
        - position
        - category
        - key
        - details
        - progressPeriod
        - maxCompletionsPerPeriod
        - attributes
        - config
        - xpConfig
        - videoMetadata
        - createdAt
        - rewardDistribution
        - rewards
        - userState
        - participations
      description: An action
      title: Action
    RewardDistributionItem:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the reward
        details:
          $ref: '#/components/schemas/Details'
        type:
          type: string
          enum:
            - assets
            - entries
          description: The type of reward allocation (assets or entries)
        amountToDistribute:
          type: number
          minimum: 0
          description: Amount of this reward to distribute
        totalSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Total supply available for this reward
        remainingSupply:
          anyOf:
            - type: number
              minimum: 0
            - type: string
              enum:
                - Infinity
          description: Number of items still available for distribution
      required:
        - id
        - details
        - type
        - amountToDistribute
        - totalSupply
        - remainingSupply
      description: A reward distribution item
      title: Reward Distribution Item
    ConditionNode:
      anyOf:
        - $ref: '#/components/schemas/SumConditionNode'
        - $ref: '#/components/schemas/CountConditionNode'
        - $ref: '#/components/schemas/LogicalConditionNode'
      description: >-
        This represents a condition that must be met by a user for the
        achievement to be completed
      title: Condition Node
    EventQueryNode:
      type: object
      properties:
        type:
          type: string
          enum:
            - event
          description: >-
            Identifies this node as an EventQueryNode type, which defines
            criteria for selecting events to be evaluated
        alias:
          type: string
          description: >-
            A unique identifier for this query that can be referenced by
            condition nodes. This allows the same event query to be reused
            across multiple conditions.
        parameters:
          $ref: '#/components/schemas/EventQueryNodeParameters'
        isCommunityScoped:
          type: boolean
          nullable: true
          default: true
          description: >-
            Controls whether the query should only match events within the
            achievement's community context. When true (default), only
            community-specific events are included.
      required:
        - type
        - alias
        - parameters
      description: >-
        Node that defines a reusable query for filtering and selecting events to
        be evaluated by condition nodes
      title: Event Query Node
    AchievementNodeProgress:
      type: object
      properties:
        type:
          type: string
          enum:
            - sum
            - count
            - logical_and
            - logical_or
            - unknown
          description: >-
            The type of the progress node, which determines how the progress is
            calculated
        isComplete:
          type: boolean
          description: Whether this node's condition has been met by the user
        currentValue:
          type: number
          description: Current progress value for this node
        targetValue:
          type: number
          description: Target value to reach for this node
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/AchievementNodeProgress'
          description: >-
            Progress of any child conditions, in the same tree structure as the
            achievement's criteria conditions
      required:
        - type
        - isComplete
        - currentValue
        - targetValue
        - conditions
      description: >-
        A user's progress of a specific achievement criteria node. These can be
        nested in a tree structure to represent a user's progress of an
        achievement, and the structure is defined by the achievement's criteria
        conditions.
      title: Achievement Node Progress
    VariableConfigReference:
      type: object
      properties:
        variableConfigId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: >-
            The ID of the variable config that defines the data type, validation
            rules, and UI rendering
        required:
          type: boolean
          description: >-
            Whether this variable must be filled out by the user before
            proceeding
        position:
          type: number
          minimum: 1
          description: The display order position of this variable in the form or UI
      required:
        - variableConfigId
        - required
        - position
      title: Variable Config Reference
      description: >-
        A reference to a variable configuration that defines a form field or
        data collection point, including its display order, requirement status,
        and validation rules. Used to specify what information to collect from
        users in forms, communities, and other data collection contexts.
    RewardAllocationReference:
      type: object
      properties:
        rewardId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: ID of the reward
        allocationId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
          description: ID of the specific allocation within the reward
        allocationType:
          type: string
          enum:
            - assets
            - entries
          description: >-
            The type of allocation - either 'assets' for tangible rewards or
            'entries' for giveaway entries
        amountToDistribute:
          type: number
          minimum: 1
          description: >-
            The quantity of this specific reward to distribute when this
            allocation is selected
      required:
        - rewardId
        - allocationId
        - allocationType
        - amountToDistribute
      description: Reference to a specific reward and its allocation
      title: Reward Allocation Reference
    ActionAttributes:
      oneOf:
        - $ref: '#/components/schemas/MultipleChoiceActionAttributes'
        - $ref: '#/components/schemas/OpenEndedActionAttributes'
        - $ref: '#/components/schemas/RateYourExperienceActionAttributes'
        - $ref: '#/components/schemas/SecretAccessCodeActionAttributes'
        - $ref: '#/components/schemas/SelectFromImagesActionAttributes'
        - $ref: '#/components/schemas/SelectFromListActionAttributes'
        - $ref: '#/components/schemas/SingleFixedAnswerActionAttributes'
        - $ref: '#/components/schemas/VoteActionAttributes'
        - $ref: '#/components/schemas/SelectADateActionAttributes'
        - $ref: '#/components/schemas/SelectValueInRangeActionAttributes'
        - $ref: '#/components/schemas/ExternalLinkActionAttributes'
        - $ref: '#/components/schemas/EngageWithContentActionAttributes'
        - $ref: '#/components/schemas/ImageUploadActionAttributes'
        - $ref: '#/components/schemas/SpotObjectActionAttributes'
        - $ref: '#/components/schemas/ObjectDetectionActionAttributes'
        - $ref: '#/components/schemas/ReceiptDetectionActionAttributes'
        - $ref: '#/components/schemas/FacebookCommentActionAttributes'
        - $ref: '#/components/schemas/FacebookFollowActionAttributes'
        - $ref: '#/components/schemas/FacebookLikeActionAttributes'
        - $ref: '#/components/schemas/InstagramFollowActionAttributes'
        - $ref: '#/components/schemas/InstagramLikeActionAttributes'
        - $ref: '#/components/schemas/InstagramCommentActionAttributes'
        - $ref: '#/components/schemas/InstagramShareActionAttributes'
        - $ref: '#/components/schemas/InstagramPostActionAttributes'
        - $ref: '#/components/schemas/CommentOnPostActionAttributes'
        - $ref: '#/components/schemas/CompleteAchievementActionAttributes'
        - $ref: '#/components/schemas/GenerativeActionActionAttributes'
        - $ref: '#/components/schemas/LikePostActionAttributes'
        - $ref: '#/components/schemas/PlayGameActionAttributes'
        - $ref: '#/components/schemas/ValidateEventActionAttributes'
        - $ref: '#/components/schemas/SpotifyFollowActionAttributes'
        - $ref: '#/components/schemas/SpotifyListenActionAttributes'
        - $ref: '#/components/schemas/SpotifySaveActionAttributes'
        - $ref: '#/components/schemas/YoutubeCommentActionAttributes'
        - $ref: '#/components/schemas/YoutubeSubscribeActionAttributes'
        - $ref: '#/components/schemas/YoutubeLikeActionAttributes'
        - $ref: '#/components/schemas/TikTokFollowActionAttributes'
        - $ref: '#/components/schemas/TikTokPostActionAttributes'
        - $ref: '#/components/schemas/TikTokWatchActionAttributes'
      discriminator:
        propertyName: key
        mapping:
          question-multiple-choice:
            $ref: '#/components/schemas/MultipleChoiceActionAttributes'
          question-open-ended:
            $ref: '#/components/schemas/OpenEndedActionAttributes'
          question-rate-your-experience:
            $ref: '#/components/schemas/RateYourExperienceActionAttributes'
          question-secret-access-code:
            $ref: '#/components/schemas/SecretAccessCodeActionAttributes'
          question-select-from-images:
            $ref: '#/components/schemas/SelectFromImagesActionAttributes'
          question-select-from-list:
            $ref: '#/components/schemas/SelectFromListActionAttributes'
          question-closed-ended:
            $ref: '#/components/schemas/SingleFixedAnswerActionAttributes'
          question-vote:
            $ref: '#/components/schemas/VoteActionAttributes'
          question-select-date:
            $ref: '#/components/schemas/SelectADateActionAttributes'
          question-select-value-in-range:
            $ref: '#/components/schemas/SelectValueInRangeActionAttributes'
          interaction-external-link:
            $ref: '#/components/schemas/ExternalLinkActionAttributes'
          interaction-engage-with-content:
            $ref: '#/components/schemas/EngageWithContentActionAttributes'
          interaction-image-upload:
            $ref: '#/components/schemas/ImageUploadActionAttributes'
          interaction-spot-object:
            $ref: '#/components/schemas/SpotObjectActionAttributes'
          image-analysis-object-detection:
            $ref: '#/components/schemas/ObjectDetectionActionAttributes'
          image-analysis-receipt-detection:
            $ref: '#/components/schemas/ReceiptDetectionActionAttributes'
          facebook-comment:
            $ref: '#/components/schemas/FacebookCommentActionAttributes'
          facebook-follow:
            $ref: '#/components/schemas/FacebookFollowActionAttributes'
          facebook-like:
            $ref: '#/components/schemas/FacebookLikeActionAttributes'
          instagram-follow:
            $ref: '#/components/schemas/InstagramFollowActionAttributes'
          instagram-like:
            $ref: '#/components/schemas/InstagramLikeActionAttributes'
          instagram-comment:
            $ref: '#/components/schemas/InstagramCommentActionAttributes'
          instagram-share:
            $ref: '#/components/schemas/InstagramShareActionAttributes'
          instagram-post:
            $ref: '#/components/schemas/InstagramPostActionAttributes'
          platform-comment-on-post:
            $ref: '#/components/schemas/CommentOnPostActionAttributes'
          platform-complete-achievement:
            $ref: '#/components/schemas/CompleteAchievementActionAttributes'
          platform-generative-action:
            $ref: '#/components/schemas/GenerativeActionActionAttributes'
          platform-like-post:
            $ref: '#/components/schemas/LikePostActionAttributes'
          platform-play-game:
            $ref: '#/components/schemas/PlayGameActionAttributes'
          platform-validate-event:
            $ref: '#/components/schemas/ValidateEventActionAttributes'
          spotify-follow:
            $ref: '#/components/schemas/SpotifyFollowActionAttributes'
          spotify-listen:
            $ref: '#/components/schemas/SpotifyListenActionAttributes'
          spotify-save:
            $ref: '#/components/schemas/SpotifySaveActionAttributes'
          youtube-comment:
            $ref: '#/components/schemas/YoutubeCommentActionAttributes'
          youtube-subscribe:
            $ref: '#/components/schemas/YoutubeSubscribeActionAttributes'
          youtube-like:
            $ref: '#/components/schemas/YoutubeLikeActionAttributes'
          tiktok-follow:
            $ref: '#/components/schemas/TikTokFollowActionAttributes'
          tiktok-post:
            $ref: '#/components/schemas/TikTokPostActionAttributes'
          tiktok-watch:
            $ref: '#/components/schemas/TikTokWatchActionAttributes'
      description: The attributes of an action
      title: Action Attributes
    ActionConfig:
      type: object
      properties:
        isOptional:
          type: boolean
          description: Whether this action is optional
        socialValidation:
          type: string
          enum:
            - validation-on
            - validation-off
            - user-choice
          description: >-
            Controls how social media validation is handled:

            - validation-on: Strict validation is enforced. The action will only
            be marked as complete if the social media activity is verified.

            - validation-off: No validation is performed. The action is
            automatically marked as complete.

            - user-choice: Allows users to choose whether to bypass validation
            by setting isBypass=true in their action input. If isBypass=false,
            full validation will be performed.
        prerequisites:
          $ref: '#/components/schemas/ActionPrerequisite'
        requiresCorrectAnswer:
          type: boolean
          description: >-
            Whether the action must be answered correctly to count toward
            challenge completion. When false, any participation counts toward
            completion but only correct answers earn rewards.
      required:
        - isOptional
        - socialValidation
      description: Used to configure an action
      title: ActionConfig
    VideoMetadata:
      type: object
      properties:
        startsAtMs:
          type: number
          minimum: 0
          description: >-
            The start time of the action in milliseconds from the start of the
            video
        shouldPause:
          type: boolean
          description: Whether the video should pause at the validation point
        validatesAtMs:
          type: number
          nullable: true
          minimum: 0
          description: >-
            The validation time in milliseconds, null if the user will validate
            themselves
        endsAtMs:
          type: number
          minimum: 0
          description: >-
            The end time of the action in milliseconds from the start of the
            video
      required:
        - startsAtMs
        - shouldPause
        - validatesAtMs
        - endsAtMs
      description: Video metadata for actions with video content
      title: Video Metadata
    ActionOutput:
      oneOf:
        - $ref: '#/components/schemas/ExternalLinkActionOutput'
        - $ref: '#/components/schemas/EngageWithContentActionOutput'
        - $ref: '#/components/schemas/ImageUploadActionOutput'
        - $ref: '#/components/schemas/SpotObjectActionOutput'
        - $ref: '#/components/schemas/OpenEndedActionOutput'
        - $ref: '#/components/schemas/MultipleChoiceActionOutput'
        - $ref: '#/components/schemas/SingleFixedAnswerActionOutput'
        - $ref: '#/components/schemas/SelectFromImagesActionOutput'
        - $ref: '#/components/schemas/RateYourExperienceActionOutput'
        - $ref: '#/components/schemas/SelectFromListActionOutput'
        - $ref: '#/components/schemas/SecretAccessCodeActionOutput'
        - $ref: '#/components/schemas/VoteActionOutput'
        - $ref: '#/components/schemas/SelectADateActionOutput'
        - $ref: '#/components/schemas/SelectValueInRangeActionOutput'
        - $ref: '#/components/schemas/ObjectDetectionActionOutput'
        - $ref: '#/components/schemas/ReceiptDetectionActionOutput'
        - $ref: '#/components/schemas/FacebookCommentActionOutput'
        - $ref: '#/components/schemas/FacebookFollowActionOutput'
        - $ref: '#/components/schemas/FacebookLikeActionOutput'
        - $ref: '#/components/schemas/InstagramFollowActionOutput'
        - $ref: '#/components/schemas/InstagramLikeActionOutput'
        - $ref: '#/components/schemas/InstagramCommentActionOutput'
        - $ref: '#/components/schemas/InstagramShareActionOutput'
        - $ref: '#/components/schemas/InstagramPostActionOutput'
        - $ref: '#/components/schemas/CommentOnPostActionOutput'
        - $ref: '#/components/schemas/CompleteAchievementActionOutput'
        - $ref: '#/components/schemas/GenerativeActionActionOutput'
        - $ref: '#/components/schemas/LikePostActionOutput'
        - $ref: '#/components/schemas/PlayGameActionOutput'
        - $ref: '#/components/schemas/ValidateEventActionOutput'
        - $ref: '#/components/schemas/SpotifyFollowActionOutput'
        - $ref: '#/components/schemas/SpotifyListenActionOutput'
        - $ref: '#/components/schemas/SpotifySaveActionOutput'
        - $ref: '#/components/schemas/TikTokFollowActionOutput'
        - $ref: '#/components/schemas/TikTokPostActionOutput'
        - $ref: '#/components/schemas/TikTokWatchActionOutput'
        - $ref: '#/components/schemas/YoutubeCommentActionOutput'
        - $ref: '#/components/schemas/YoutubeSubscribeActionOutput'
        - $ref: '#/components/schemas/YoutubeLikeActionOutput'
      discriminator:
        propertyName: key
        mapping:
          interaction-external-link:
            $ref: '#/components/schemas/ExternalLinkActionOutput'
          interaction-engage-with-content:
            $ref: '#/components/schemas/EngageWithContentActionOutput'
          interaction-image-upload:
            $ref: '#/components/schemas/ImageUploadActionOutput'
          interaction-spot-object:
            $ref: '#/components/schemas/SpotObjectActionOutput'
          question-open-ended:
            $ref: '#/components/schemas/OpenEndedActionOutput'
          question-multiple-choice:
            $ref: '#/components/schemas/MultipleChoiceActionOutput'
          question-closed-ended:
            $ref: '#/components/schemas/SingleFixedAnswerActionOutput'
          question-select-from-images:
            $ref: '#/components/schemas/SelectFromImagesActionOutput'
          question-rate-your-experience:
            $ref: '#/components/schemas/RateYourExperienceActionOutput'
          question-select-from-list:
            $ref: '#/components/schemas/SelectFromListActionOutput'
          question-secret-access-code:
            $ref: '#/components/schemas/SecretAccessCodeActionOutput'
          question-vote:
            $ref: '#/components/schemas/VoteActionOutput'
          question-select-date:
            $ref: '#/components/schemas/SelectADateActionOutput'
          question-select-value-in-range:
            $ref: '#/components/schemas/SelectValueInRangeActionOutput'
          image-analysis-object-detection:
            $ref: '#/components/schemas/ObjectDetectionActionOutput'
          image-analysis-receipt-detection:
            $ref: '#/components/schemas/ReceiptDetectionActionOutput'
          facebook-comment:
            $ref: '#/components/schemas/FacebookCommentActionOutput'
          facebook-follow:
            $ref: '#/components/schemas/FacebookFollowActionOutput'
          facebook-like:
            $ref: '#/components/schemas/FacebookLikeActionOutput'
          instagram-follow:
            $ref: '#/components/schemas/InstagramFollowActionOutput'
          instagram-like:
            $ref: '#/components/schemas/InstagramLikeActionOutput'
          instagram-comment:
            $ref: '#/components/schemas/InstagramCommentActionOutput'
          instagram-share:
            $ref: '#/components/schemas/InstagramShareActionOutput'
          instagram-post:
            $ref: '#/components/schemas/InstagramPostActionOutput'
          platform-comment-on-post:
            $ref: '#/components/schemas/CommentOnPostActionOutput'
          platform-complete-achievement:
            $ref: '#/components/schemas/CompleteAchievementActionOutput'
          platform-generative-action:
            $ref: '#/components/schemas/GenerativeActionActionOutput'
          platform-like-post:
            $ref: '#/components/schemas/LikePostActionOutput'
          platform-play-game:
            $ref: '#/components/schemas/PlayGameActionOutput'
          platform-validate-event:
            $ref: '#/components/schemas/ValidateEventActionOutput'
          spotify-follow:
            $ref: '#/components/schemas/SpotifyFollowActionOutput'
          spotify-listen:
            $ref: '#/components/schemas/SpotifyListenActionOutput'
          spotify-save:
            $ref: '#/components/schemas/SpotifySaveActionOutput'
          tiktok-follow:
            $ref: '#/components/schemas/TikTokFollowActionOutput'
          tiktok-post:
            $ref: '#/components/schemas/TikTokPostActionOutput'
          tiktok-watch:
            $ref: '#/components/schemas/TikTokWatchActionOutput'
          youtube-comment:
            $ref: '#/components/schemas/YoutubeCommentActionOutput'
          youtube-subscribe:
            $ref: '#/components/schemas/YoutubeSubscribeActionOutput'
          youtube-like:
            $ref: '#/components/schemas/YoutubeLikeActionOutput'
      title: ActionOutput
      description: The output of an action.
    ActionParticipationStatus:
      type: object
      properties:
        id:
          type: string
        criteriaMet:
          type: boolean
        output:
          $ref: '#/components/schemas/ActionOutput'
        status:
          type: string
          enum:
            - pending
            - in-progress
            - processed
            - failed
        participatedAt:
          type: string
        processingStartedAt:
          type: string
          nullable: true
        processedAt:
          type: string
          nullable: true
        unmetCriteriaMessage:
          type: string
          nullable: true
        metCriteriaMessage:
          type: string
          nullable: true
        processingFailedMessage:
          type: string
          nullable: true
      required:
        - id
        - criteriaMet
        - output
        - status
        - participatedAt
      title: ActionParticipationStatus
      description: The status of an action participation.
    SumConditionNode:
      type: object
      properties:
        type:
          type: string
          enum:
            - sum
          description: >-
            Identifies this node as a SumNode type, which is responsible for
            summing numeric attributes from events and comparing against a
            threshold
        parameters:
          $ref: '#/components/schemas/SumConditionNodeParameters'
      required:
        - type
        - parameters
      description: >-
        Node that sums values from a specific event attribute and compares
        against a threshold
      title: Sum Condition Node
    CountConditionNode:
      type: object
      properties:
        type:
          type: string
          enum:
            - count
          description: >-
            Identifies this node as a CountNode type, which is responsible for
            counting occurrences of events and comparing against a threshold
        parameters:
          $ref: '#/components/schemas/CountConditionNodeParameters'
      required:
        - type
        - parameters
      description: Node that counts matching events and compares against a threshold
      title: Count Condition Node
    LogicalConditionNode:
      type: object
      properties:
        type:
          type: string
          enum:
            - logical
          description: >-
            Identifies this node as a LogicalNode type, which combines multiple
            conditions using logical operators
        parameters:
          $ref: '#/components/schemas/LogicalConditionNodeParameters'
      required:
        - type
        - parameters
      description: >-
        Node that combines multiple conditions with a logical operator to form
        complex achievement criteria
      title: Logical Condition Node
    EventQueryNodeParameters:
      type: object
      properties:
        eventName:
          type: string
          description: >-
            The specific name of the event to match. This identifies the type of
            event that should be included in the achievement progress. When
            using a custom event, this should be the name of the event. When
            using a non-custom event, this should be the name of the event
            category and sub-category concatenated with an underscore.
        eventCategory:
          type: string
          enum:
            - achievement
            - action
            - auth
            - blog
            - challenge
            - community
            - custom
            - game
            - leaderboard
            - organisation
            - points
            - post
            - referral
            - reward
            - shop
            - social
            - social-connection
            - streak
            - user
            - variable
            - xp
          description: >-
            The category of events to match. This helps filter events by their
            broad classification within the system.
        eventSubCategory:
          type: string
          enum:
            - achievement-completion
            - facebook-comment
            - facebook-follow
            - facebook-like
            - image-analysis-object-detection
            - image-analysis-receipt-detection
            - instagram-follow
            - instagram-like
            - instagram-comment
            - instagram-share
            - instagram-post
            - interaction-engage-with-content
            - interaction-external-link
            - interaction-image-upload
            - interaction-spot-object
            - platform-comment-on-post
            - platform-complete-achievement
            - platform-generative-action
            - platform-like-post
            - platform-play-game
            - platform-validate-event
            - question-multiple-choice
            - question-open-ended
            - question-rate-your-experience
            - question-secret-access-code
            - question-select-date
            - question-select-from-images
            - question-select-value-in-range
            - question-select-from-list
            - question-closed-ended
            - question-vote
            - spotify-follow
            - spotify-listen
            - spotify-save
            - tiktok-follow
            - tiktok-watch
            - tiktok-post
            - youtube-like
            - youtube-comment
            - youtube-subscribe
            - action-completion
            - skip-action
            - 42-school
            - api-auth-link
            - api-token-link
            - apple
            - asgardeo
            - atlassian
            - auth0
            - authentik
            - azure-ad-b2c
            - azure-ad
            - azure-devops
            - battlenet
            - beyondidentity
            - box
            - boxyhq-saml
            - bungie
            - click-up
            - cognito
            - coinbase
            - descope
            - discord
            - dribbble
            - dropbox
            - duende-identity-server6
            - email
            - eveonline
            - facebook
            - faceit
            - foursquare
            - freshbooks
            - fusionauth
            - github
            - gitlab
            - google
            - hubspot
            - identity-server4
            - instagram
            - kakao
            - keycloak
            - line
            - linkedin
            - mailchimp
            - mailru
            - mastodon
            - mattermost
            - medium
            - naver
            - netlify
            - notion
            - okta
            - onelogin
            - organisation-oidc
            - osso
            - osu
            - passage
            - patreon
            - pinterest
            - pipedrive
            - reddit
            - salesforce
            - slack
            - spotify
            - strava
            - tiktok
            - todoist
            - trakt
            - twitch
            - twitter
            - united-effects
            - vk
            - wikimedia
            - wordpress
            - workos
            - yandex
            - youtube
            - zitadel
            - zoho
            - zoom
            - blog-comment
            - blog-like
            - blog-share
            - blog-view
            - challenge-started
            - challenge-completion
            - challenge-unlock
            - community-visit
            - parental-approval-requested
            - parental-approval-approved
            - parental-approval-rejected
            - custom
            - game-started
            - game-completed
            - leaderboard-finish
            - invite-admin-user
            - points-credit
            - points-spend
            - post-comment
            - post-like
            - post-view
            - reward-redemption
            - reward-allocation-purchase
            - reward-giveaway-winner
            - reward-claim
            - reward-distribution
            - manual-distribution
            - referral-link-used
            - shop-purchase
            - share-challenge-details
            - share-challenge-results
            - share-community
            - share-reward
            - share-post
            - share-profile
            - share-anything
            - streak-extended
            - profile-picture-added
            - bio-added
            - variable-captured
            - xp-gained
            - xp-total
            - xp-leaderboard-topper
          description: >-
            The sub-category of events to match. This provides more granular
            filtering within the selected event category.
        eventSourceId:
          type: string
          nullable: true
          description: >-
            Optional identifier for the source of the events. When specified,
            only events from this source will count towards the achievement
            progress. For example, a challengeId, or another achievementId
        tags:
          type: array
          nullable: true
          items:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: >-
            Optional array of tag ids to filter events by. Only events with all
            specified tags will count towards the achievement progress.
      required:
        - eventName
        - eventCategory
        - eventSubCategory
      description: Parameters that define the criteria for matching and filtering events
      title: Event Query Node Parameters
    MultipleChoiceActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-multiple-choice
          description: The multiple choice question action key
        question:
          type: string
          minLength: 1
          description: >-
            The multiple choice question to be answered ie 'What is your
            favorite color?'
        options:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  The id of the option. This is used to identify the option and
                  each option must be unique ie '1' or '2'
              label:
                type: string
                description: The label of the option ie 'Red' or 'Blue'
            required:
              - id
              - label
          minItems: 2
          description: The multiple choice options available to answer the question
        minimumNumberOfAnswersRequired:
          type: number
          minimum: 1
          description: The minimum number of answers required
        maximumNumberOfAnswersAllowed:
          type: number
          minimum: 1
          description: The maximum number of answers allowed
      required:
        - key
        - question
        - options
        - minimumNumberOfAnswersRequired
        - maximumNumberOfAnswersAllowed
      description: >-
        A multiple choice question with configurable options and correct answer
        validation. The question text is stored in the details.title field of
        the action, while technical configuration remains in attributes.
      x-action-category: Question
      title: Multiple Choice Question
    OpenEndedActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-open-ended
          description: The open ended question action key
        question:
          type: string
          minLength: 1
          description: >-
            The open ended question to be answered ie 'Tell us about your
            skillset?'
      required:
        - key
        - question
      description: A question with a free response
      x-action-category: Question
      title: Open Ended Question
    RateYourExperienceActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-rate-your-experience
          description: The rate your experience question action key
        question:
          type: string
          minLength: 1
          description: The text to be displayed to the user ie 'How was your experience?'
        ratingStyle:
          type: string
          nullable: true
      required:
        - key
        - question
      description: A question with a rating scale
      x-action-category: Question
      title: Rate Your Experience Question
    SecretAccessCodeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-secret-access-code
          description: The secret access code question action key
        question:
          type: string
          minLength: 1
          description: >-
            The secret access code question to be answered ie 'What is the
            secret access code found on your badge?'
      required:
        - key
        - question
      description: A question which requires a secret access code
      x-action-category: Question
      title: Secret Access Code Question
    SelectFromImagesActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-from-images
          description: The select from images question action key
        question:
          type: string
          minLength: 1
          description: The question to be answered ie 'Which image is a cat?'
        images:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  The id of the image. This is used to identify the image and
                  each image must be unique ie '1' or '2'
              name:
                type: string
                description: The display name of the image
              uri:
                type: string
                description: The uri of the image
            required:
              - id
              - name
              - uri
          minItems: 2
          description: The images to select from
        numberOfAnswersRequired:
          type: number
          nullable: true
          description: The number of selections required
      required:
        - key
        - question
        - images
      description: A question with images to select from
      x-action-category: Question
      title: Select From Images Question
    SelectFromListActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-from-list
          description: The select from list question action key
        question:
          type: string
          minLength: 1
          description: >-
            The question to be answered ie 'Which color is your favorite?' from
            a list of options
        minimumNumberOfAnswersRequired:
          type: number
          minimum: 1
          description: The minimum number of answers required
        maximumNumberOfAnswersAllowed:
          type: number
          minimum: 1
          description: The maximum number of answers allowed
        options:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                minLength: 1
                description: >-
                  The id of the option. This is used to identify the option and
                  each option must be unique ie '1' or '2'
              label:
                type: string
                minLength: 1
                description: The label of the option
            required:
              - id
              - label
          minItems: 2
          description: The list of options to select from
      required:
        - key
        - question
        - minimumNumberOfAnswersRequired
        - maximumNumberOfAnswersAllowed
        - options
      description: A question with a list of options to select from
      x-action-category: Question
      title: Select From List Question
    SingleFixedAnswerActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-closed-ended
          description: The single fixed answer question action key
        question:
          type: string
          minLength: 1
          description: The question to be answered ie 'What is the capital of France?'
      required:
        - key
        - question
      description: A question with a single fixed answer
      x-action-category: Question
      title: Single Fixed Answer Question
    VoteActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-vote
          description: The vote question action key
        question:
          type: string
          minLength: 1
          description: The voting question to be answered ie 'What is your favorite color?'
        options:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  The id of the option. This is used to identify the option and
                  each option must be unique ie '1' or '2'
              label:
                type: string
                minLength: 1
                description: The label of the option ie 'Red' or 'Blue'
            required:
              - id
              - label
          minItems: 2
          description: The voting options available (minimum 2, no maximum)
        allowMultipleVotes:
          type: boolean
          description: >-
            If true, users can vote multiple times in repeatable challenges
            (each vote counts separately). If false (default), votes are
            overwritten when the user repeats the action.
      required:
        - key
        - question
        - options
      description: >-
        A voting/polling action where users select one option from a list.
        Results are calculated in real-time by counting all participations for
        this action.
      x-action-category: Question
      title: Vote/Polling Question
    SelectADateActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-date
          description: The select a date question action key
        allowDates:
          type: string
          enum:
            - past
            - future
            - all
          description: The dates to allow ie 'past', 'future' or 'all'
        allowCurrentDate:
          type: boolean
          description: Whether to allow the current date
        question:
          type: string
          minLength: 1
          description: The question to be answered ie 'When is your birthday?'
      required:
        - key
        - allowDates
        - allowCurrentDate
        - question
      description: A question with a date to select from
      x-action-category: Question
      title: Select A Date Question
    SelectValueInRangeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-value-in-range
          description: The select value in range question action key
        question:
          type: string
          minLength: 1
          description: The text to be displayed to the user ie 'How much would you invest?'
        minValue:
          type: number
          description: Minimum value of the range
        maxValue:
          type: number
          description: Maximum value of the range
        step:
          type: number
          description: Step size between values
        unit:
          type: string
          nullable: true
          description: Optional unit for the values (e.g., '£', '%')
        unitPlacement:
          type: string
          nullable: true
          enum:
            - before
            - after
            - null
          description: Whether the unit appears before or after the value
        progressionType:
          type: string
          enum:
            - linear
            - logarithmic
          description: >-
            Type of progression for the slider values: linear (equal intervals
            throughout the range, e.g., 0,10,20,30...) or logarithmic
            (increasing intervals, better for large ranges where precision is
            needed at lower values, e.g., 1,2,5,10,20,50,100...)
      required:
        - key
        - question
        - minValue
        - maxValue
        - step
        - progressionType
      description: A question with a value slider within a defined range
      x-action-category: Question
      title: Select Value In Range Question
    ExternalLinkActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-external-link
        externalLinkSiteName:
          type: string
          minLength: 1
        externalLinkSource:
          type: string
        externalLinkUrl:
          type: string
          minLength: 1
        opensInNewTab:
          type: boolean
        showMetadata:
          type: boolean
          nullable: true
          description: >-
            Whether to show metadata on the external link. Including the title,
            description, and image.
        validateWithEvent:
          type: boolean
          nullable: true
        event:
          allOf:
            - $ref: '#/components/schemas/ExternalLinkActionEvent'
          nullable: true
      required:
        - key
        - externalLinkSiteName
        - externalLinkSource
        - externalLinkUrl
        - opensInNewTab
      x-action-category: Interaction
      title: External Link Interaction
      description: >-
        A task that directs users to visit an external website by clicking a
        link. This action type is commonly used to drive traffic to specific
        webpages for promotional purposes, provide additional information, or
        engage users with related content. The link can be configured to open in
        a new tab and optionally validate that the user visited the destination.
    EngageWithContentActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-engage-with-content
        title:
          type: string
        content:
          type: string
      required:
        - key
        - title
        - content
      x-action-category: Interaction
      title: Engage With Content Interaction
      description: >-
        Creates rich, interactive content experiences using HTML formatting.
        Features include:

        - Full HTML support for advanced content formatting

        - Embedded media integration (YouTube videos, images) 

        - Structured content with headings, lists, and paragraphs

        - Custom styling and layout options


        Common use cases include:

        - Interactive tutorials and guides

        - Rich text announcements and updates 

        - Educational content with embedded videos

        - Formatted instructions and documentation


        Example YouTube embed format:

        <p>Text content</p><div data-youtube-video=""><iframe
        src="https://www.youtube.com/embed/VIDEO_ID" width="640" height="480"
        allowfullscreen="true" class="w-full max-w-full aspect-video
        rounded-lg"></iframe></div>
    ImageUploadActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-image-upload
        description:
          type: string
        disclaimers:
          type: array
          items:
            $ref: '#/components/schemas/ImageUploadDisclaimer'
        allowBypassUpload:
          type: boolean
          nullable: true
      required:
        - key
        - description
        - disclaimers
      x-action-category: Interaction
      title: Image Upload Interaction
      description: >-
        Enables users to upload and submit images with optional AI validation.
        Features include:


        - Configurable AI validation to ensure image meets specific criteria

        - Custom validation prompts for AI checking  

        - Multiple disclaimers for user acknowledgment

        - Optional bypass functionality for image upload requirements


        Common use cases include:

        - Profile pictures and document verification

        - Proof of completion and visual evidence submissions

        - Interactive games and treasure hunts requiring photo verification

        - Scavenger hunt challenges and photo-based puzzle solutions
    SpotObjectActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-spot-object
          description: The spot object interaction action key
        toleranceMs:
          type: number
          minimum: 0
          description: >-
            Tolerance in milliseconds before and after each timestamp that will
            be accepted as correct
      required:
        - key
        - toleranceMs
      description: >-
        An interaction action where users must spot objects at specific
        timestamps with configurable tolerance ranges. The timestamps array
        contains the correct moments (in milliseconds) where objects appear, and
        toleranceMs defines the acceptable range before and after each
        timestamp.
      x-action-category: Interaction
      title: Spot Object Action
    ObjectDetectionActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - image-analysis-object-detection
        description:
          type: string
          minLength: 1
        objects:
          type: array
          items:
            type: string
        allObjectsRequired:
          type: boolean
      required:
        - key
        - description
        - objects
        - allObjectsRequired
      x-action-category: Image Analysis
      title: Object Detection Action Attributes
      description: The attributes of an object detection action
    ReceiptDetectionActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - image-analysis-receipt-detection
        description:
          type: string
          minLength: 1
        minimumAmount:
          type: number
        items:
          type: array
          nullable: true
          items:
            type: string
        allItemsRequired:
          type: boolean
      required:
        - key
        - description
        - minimumAmount
        - allItemsRequired
      x-action-category: Image Analysis
      title: Receipt Detection Action Attributes
      description: The attributes of a receipt detection action
    FacebookCommentActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-comment
        title:
          type: string
          minLength: 1
        postUrl:
          type: string
          minLength: 1
      required:
        - key
        - title
        - postUrl
      x-action-category: Facebook
      title: Facebook Comment Action Attributes
      description: The attributes of a Facebook comment action
    FacebookFollowActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-follow
        title:
          type: string
          minLength: 1
        businessAccountUsername:
          type: string
          minLength: 1
      required:
        - key
        - title
        - businessAccountUsername
      x-action-category: Facebook
      title: Facebook Follow Action Attributes
      description: The attributes of a Facebook follow action
    FacebookLikeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-like
        title:
          type: string
          minLength: 1
        postUrl:
          type: string
          format: uri
      required:
        - key
        - title
        - postUrl
      x-action-category: Facebook
      title: Facebook Like Action Attributes
      description: The attributes of a Facebook like action
    InstagramFollowActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-follow
        title:
          type: string
          minLength: 1
        businessAccountUsername:
          type: string
          minLength: 1
        businessAccountId:
          type: string
          nullable: true
          minLength: 1
      required:
        - key
        - title
        - businessAccountUsername
      x-action-category: Instagram
      title: Instagram Follow Action Attributes
      description: The attributes of an Instagram follow action
    InstagramLikeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-like
        title:
          type: string
          minLength: 1
        postId:
          type: string
          minLength: 1
      required:
        - key
        - title
        - postId
      x-action-category: Instagram
      title: Instagram Like Action Attributes
      description: The attributes of an Instagram like action
    InstagramCommentActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-comment
        title:
          type: string
          minLength: 1
        postId:
          type: string
          minLength: 1
        numberOfMentions:
          type: number
          nullable: true
      required:
        - key
        - title
        - postId
      x-action-category: Instagram
      title: Instagram Comment Action Attributes
      description: The attributes of an Instagram comment action
    InstagramShareActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-share
        title:
          type: string
          minLength: 1
        postId:
          type: string
          minLength: 1
      required:
        - key
        - title
        - postId
      x-action-category: Instagram
      title: Instagram Share Action Attributes
      description: The attributes of an Instagram share action
    InstagramPostActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-post
        title:
          type: string
          minLength: 1
        postContent:
          type: string
          minLength: 1
        postType:
          type: string
          minLength: 1
      required:
        - key
        - title
        - postContent
        - postType
      x-action-category: Instagram
      title: Instagram Post Action Attributes
      description: The attributes of an Instagram post action
    CommentOnPostActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-comment-on-post
        title:
          type: string
          minLength: 1
        postId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
        imageRequired:
          type: boolean
      required:
        - key
        - title
        - postId
        - imageRequired
      x-action-category: Platform
      title: Comment On Post Action Attributes
      description: >-
        Enables commenting on posts with optional image attachments. Features:
        direct commenting via postId, configurable image requirements, custom
        titles. Used for discussions, photo responses, feedback, and community
        engagement.
    CompleteAchievementActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-complete-achievement
        title:
          type: string
          minLength: 1
        achievementId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - title
        - achievementId
      x-action-category: Platform
      title: Complete Achievement Action Attributes
      description: >-
        Enables users to complete specific achievements. Used for tracking
        achievement progress, gamification, and user engagement metrics.
    GenerativeActionActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-generative-action
          description: The generative action key
        title:
          type: string
          minLength: 1
          description: The title of the generative action
        minifiedCode:
          type: string
          minLength: 1
          description: The minified code that will be executed on the client side
      required:
        - key
        - title
        - minifiedCode
      description: >-
        Enables users to interact with generated code or content. Contains both
        the original code and minified version for execution, along with
        associated assets and validation logic.
      x-action-category: Platform
      title: Generative Action Attributes
    LikePostActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-like-post
        title:
          type: string
          minLength: 1
        postId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - title
        - postId
      x-action-category: Platform
      title: Like Post Action Attributes
      description: >-
        Enables users to like/upvote specific posts. Used for engagement
        tracking, content popularity, and community interaction metrics.
    PlayGameActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-play-game
        title:
          type: string
          minLength: 1
        gameConfigId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
        gameType:
          type: string
          enum:
            - catch
            - memory
            - scratch
      required:
        - key
        - title
        - gameConfigId
        - gameType
      x-action-category: Platform
      title: Play Game Action Attributes
      description: Triggers a game defined by a game configuration.
    ValidateEventActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-validate-event
        title:
          type: string
          minLength: 1
          description: Display title for the action
        eventType:
          type: string
          enum:
            - achievement-completion
            - facebook-comment
            - facebook-follow
            - facebook-like
            - image-analysis-object-detection
            - image-analysis-receipt-detection
            - instagram-follow
            - instagram-like
            - instagram-comment
            - instagram-share
            - instagram-post
            - interaction-engage-with-content
            - interaction-external-link
            - interaction-image-upload
            - interaction-spot-object
            - platform-comment-on-post
            - platform-complete-achievement
            - platform-generative-action
            - platform-like-post
            - platform-play-game
            - platform-validate-event
            - question-multiple-choice
            - question-open-ended
            - question-rate-your-experience
            - question-secret-access-code
            - question-select-date
            - question-select-from-images
            - question-select-value-in-range
            - question-select-from-list
            - question-closed-ended
            - question-vote
            - spotify-follow
            - spotify-listen
            - spotify-save
            - tiktok-follow
            - tiktok-watch
            - tiktok-post
            - youtube-like
            - youtube-comment
            - youtube-subscribe
            - action-completion
            - skip-action
            - 42-school
            - api-auth-link
            - api-token-link
            - apple
            - asgardeo
            - atlassian
            - auth0
            - authentik
            - azure-ad-b2c
            - azure-ad
            - azure-devops
            - battlenet
            - beyondidentity
            - box
            - boxyhq-saml
            - bungie
            - click-up
            - cognito
            - coinbase
            - descope
            - discord
            - dribbble
            - dropbox
            - duende-identity-server6
            - email
            - eveonline
            - facebook
            - faceit
            - foursquare
            - freshbooks
            - fusionauth
            - github
            - gitlab
            - google
            - hubspot
            - identity-server4
            - instagram
            - kakao
            - keycloak
            - line
            - linkedin
            - mailchimp
            - mailru
            - mastodon
            - mattermost
            - medium
            - naver
            - netlify
            - notion
            - okta
            - onelogin
            - organisation-oidc
            - osso
            - osu
            - passage
            - patreon
            - pinterest
            - pipedrive
            - reddit
            - salesforce
            - slack
            - spotify
            - strava
            - tiktok
            - todoist
            - trakt
            - twitch
            - twitter
            - united-effects
            - vk
            - wikimedia
            - wordpress
            - workos
            - yandex
            - youtube
            - zitadel
            - zoho
            - zoom
            - blog-comment
            - blog-like
            - blog-share
            - blog-view
            - challenge-started
            - challenge-completion
            - challenge-unlock
            - community-visit
            - parental-approval-requested
            - parental-approval-approved
            - parental-approval-rejected
            - custom
            - game-started
            - game-completed
            - leaderboard-finish
            - invite-admin-user
            - points-credit
            - points-spend
            - post-comment
            - post-like
            - post-view
            - reward-redemption
            - reward-allocation-purchase
            - reward-giveaway-winner
            - reward-claim
            - reward-distribution
            - manual-distribution
            - referral-link-used
            - shop-purchase
            - share-challenge-details
            - share-challenge-results
            - share-community
            - share-reward
            - share-post
            - share-profile
            - share-anything
            - streak-extended
            - profile-picture-added
            - bio-added
            - variable-captured
            - xp-gained
            - xp-total
            - xp-leaderboard-topper
          description: Type of the event to validate
        eventSourceId:
          type: string
          nullable: true
          pattern: ^[0-9a-fA-F]{24}$
          description: Source ID to a specific event source
        eventName:
          type: string
          nullable: true
          minLength: 1
          description: Event name. This is required for custom events
      required:
        - key
        - title
        - eventType
        - eventSourceId
        - eventName
      x-action-category: Platform
      title: Validate Event Action Attributes
      description: Configuration for validating user completion of specific events
    SpotifyFollowActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-follow
        spotifyURL:
          type: string
          minLength: 1
      required:
        - key
        - spotifyURL
      x-action-category: Spotify
      title: Spotify Follow Action Attributes
      description: The attributes of a Spotify follow action
    SpotifyListenActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-listen
        spotifyURL:
          type: string
          minLength: 1
        playCount:
          type: number
          minimum: 1
      required:
        - key
        - spotifyURL
        - playCount
      x-action-category: Spotify
      title: Spotify Listen Action Attributes
      description: The attributes of a Spotify listen action
    SpotifySaveActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-save
        spotifyURL:
          type: string
          minLength: 1
      required:
        - key
        - spotifyURL
      x-action-category: Spotify
      title: Spotify Save Action Attributes
      description: The attributes of a Spotify save action
    YoutubeCommentActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-comment
        videoUrl:
          type: string
          minLength: 1
      required:
        - key
        - videoUrl
      x-action-category: Youtube
      title: Youtube Comment Action Attributes
      description: The attributes of a Youtube comment action
    YoutubeSubscribeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-subscribe
        username:
          type: string
          minLength: 1
      required:
        - key
        - username
      x-action-category: Youtube
      title: Youtube Subscribe Action Attributes
      description: The attributes of a Youtube subscribe action
    YoutubeLikeActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-like
        videoUrl:
          type: string
          minLength: 1
      required:
        - key
        - videoUrl
      x-action-category: Youtube
      title: Youtube Like Action Attributes
      description: The attributes of a Youtube like action
    TikTokFollowActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-follow
        title:
          type: string
          minLength: 1
          maxLength: 100
        accountUsername:
          type: string
          minLength: 1
      required:
        - key
        - title
        - accountUsername
      x-action-category: TikTok
      title: TikTok Follow Action Attributes
      description: The attributes of a TikTok follow action
    TikTokPostActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-post
        title:
          type: string
          minLength: 1
          maxLength: 100
        hashtags:
          type: array
          items:
            type: string
            pattern: ^#?[A-Za-z0-9_]+$
            minLength: 1
          minItems: 1
      required:
        - key
        - title
        - hashtags
      x-action-category: TikTok
      title: TikTok Post Video With Hashtag Action Attributes
      description: The attributes of a TikTok post video with hashtags action
    TikTokWatchActionAttributes:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-watch
        title:
          type: string
          minLength: 1
          maxLength: 100
        videoUrl:
          type: string
          minLength: 1
      required:
        - key
        - title
        - videoUrl
      x-action-category: TikTok
      title: TikTok Watch Video Action Attributes
      description: The attributes of a TikTok watch video action
    ActionPrerequisite:
      type: object
      properties:
        requiredActionCount:
          type: number
          description: >-
            Number of actions that must be completed within the same allocation
            to unlock this action
        actionIds:
          type: array
          items:
            type: string
          description: >-
            Array of specific action IDs that must be completed in the same
            allocation
      required:
        - requiredActionCount
        - actionIds
      description: Used to configure a prerequisite for an action
      title: ActionPrerequisite
    ExternalLinkActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-external-link
        eventId:
          type: string
          nullable: true
      required:
        - key
      x-action-category: Interaction
      title: ExternalLinkActionOutput
      description: The output of an external link action.
    EngageWithContentActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-engage-with-content
        timeOnContentInMilliseconds:
          type: number
      required:
        - key
        - timeOnContentInMilliseconds
      x-action-category: Interaction
      title: EngageWithContentActionOutput
      description: The output of an engage with content action.
    ImageUploadActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-image-upload
        wasBypassed:
          type: boolean
        confidenceScore:
          type: number
          nullable: true
        imageUrl:
          type: string
        disclaimers:
          type: array
          items:
            $ref: '#/components/schemas/ImageUploadDisclaimerStatus'
        imageSummary:
          type: string
          nullable: true
      required:
        - key
        - wasBypassed
        - imageUrl
        - disclaimers
      x-action-category: Interaction
      title: ImageUploadActionOutput
      description: The output of an image upload action.
    SpotObjectActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - interaction-spot-object
        timestamp:
          type: number
      required:
        - key
        - timestamp
      x-action-category: Interaction
      title: SpotObjectActionOutput
      description: The output of a spot object interaction action.
    OpenEndedActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-open-ended
        answer:
          type: string
      required:
        - key
        - answer
      x-action-category: Question
      title: OpenEndedActionOutput
      description: The output of an open ended question action.
    MultipleChoiceActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-multiple-choice
        answers:
          type: array
          items:
            type: string
      required:
        - key
        - answers
      x-action-category: Question
      title: MultipleChoiceActionOutput
      description: The output of a multiple choice question action.
    SingleFixedAnswerActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-closed-ended
        answer:
          type: string
      required:
        - key
        - answer
      x-action-category: Question
      title: SingleFixedAnswerActionOutput
      description: The output of a single fixed answer question action.
    SelectFromImagesActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-from-images
        answers:
          type: array
          items:
            type: string
      required:
        - key
        - answers
      x-action-category: Question
      title: SelectFromImagesActionOutput
      description: The output of a select from images question action.
    RateYourExperienceActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-rate-your-experience
        rating:
          type: number
      required:
        - key
        - rating
      x-action-category: Question
      title: RateYourExperienceActionOutput
      description: The output of a rate your experience question action.
    SelectFromListActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-from-list
        answers:
          type: array
          items:
            type: string
      required:
        - key
        - answers
      x-action-category: Question
      title: SelectFromListActionOutput
      description: The output of a select from list question action.
    SecretAccessCodeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-secret-access-code
        accessCode:
          type: string
          minLength: 1
      required:
        - key
        - accessCode
      x-action-category: Question
      title: SecretAccessCodeActionOutput
      description: The output of a secret access code question action.
    VoteActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-vote
        votedOptionId:
          type: string
          description: The option ID the user voted for in this participation
        results:
          type: array
          items:
            type: object
            properties:
              optionId:
                type: string
                description: The ID of the option
              voteCount:
                type: number
                description: The number of votes this option received
              percentage:
                type: number
                description: The percentage of total votes this option received
            required:
              - optionId
              - voteCount
              - percentage
          description: >-
            The complete voting results at the time of submission, including
            vote counts and percentages for all options
      required:
        - key
        - votedOptionId
        - results
      x-action-category: Question
      title: VoteActionOutput
      description: >-
        The output of a vote question action, including the user's vote and
        real-time results.
    SelectADateActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-date
        date:
          type: string
      required:
        - key
        - date
      x-action-category: Question
      title: SelectADateActionOutput
      description: The output of a select a date question action.
    SelectValueInRangeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - question-select-value-in-range
        selectedValue:
          type: number
      required:
        - key
        - selectedValue
      x-action-category: Question
      title: SelectValueInRangeActionOutput
      description: The output of a select value in range question action.
    ObjectDetectionActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - image-analysis-object-detection
        imageUrl:
          type: string
          minLength: 1
        fileName:
          type: string
          minLength: 1
        detectedObjects:
          type: array
          items:
            type: string
          minItems: 1
      required:
        - key
        - imageUrl
        - fileName
        - detectedObjects
      x-action-category: ImageAnalysis
      title: ObjectDetectionActionOutput
      description: The output of an object detection action.
    ReceiptDetectionActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - image-analysis-receipt-detection
        imageUrl:
          type: string
          minLength: 1
        fileName:
          type: string
          minLength: 1
        detectedItems:
          type: array
          items:
            type: string
          minItems: 1
      required:
        - key
        - imageUrl
        - fileName
        - detectedItems
      x-action-category: ImageAnalysis
      title: ReceiptDetectionActionOutput
      description: The output of a receipt detection action.
    FacebookCommentActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-comment
        postUrl:
          type: string
      required:
        - key
        - postUrl
      x-action-category: Facebook
      title: FacebookCommentActionOutput
      description: The output of a facebook comment action.
    FacebookFollowActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-follow
        businessAccountUsername:
          type: string
      required:
        - key
        - businessAccountUsername
      x-action-category: Facebook
      title: FacebookFollowActionOutput
      description: The output of a facebook follow action.
    FacebookLikeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - facebook-like
        postUrl:
          type: string
      required:
        - key
        - postUrl
      x-action-category: Facebook
      title: FacebookLikeActionOutput
      description: The output of a facebook like action.
    InstagramFollowActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-follow
        businessAccountId:
          type: string
        businessAccountUsername:
          type: string
        followerAccountId:
          type: string
        followerAccountUsername:
          type: string
      required:
        - key
        - businessAccountId
        - businessAccountUsername
        - followerAccountId
        - followerAccountUsername
      x-action-category: Instagram
      title: InstagramFollowActionOutput
      description: The output of a instagram follow action.
    InstagramLikeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-like
        postId:
          type: string
        likerAccountId:
          type: string
        likerAccountUsername:
          type: string
      required:
        - key
        - postId
        - likerAccountId
        - likerAccountUsername
      x-action-category: Instagram
      title: InstagramLikeActionOutput
      description: The output of a instagram like action.
    InstagramCommentActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-comment
        postId:
          type: string
        commenterAccountId:
          type: string
        commenterAccountUsername:
          type: string
        numberOfMentions:
          type: number
          nullable: true
        commentContent:
          type: string
          nullable: true
      required:
        - key
        - postId
        - commenterAccountId
        - commenterAccountUsername
      x-action-category: Instagram
      title: InstagramCommentActionOutput
      description: The output of a instagram comment action.
    InstagramShareActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-share
        postId:
          type: string
        sharerAccountId:
          type: string
        sharerAccountUsername:
          type: string
      required:
        - key
        - postId
        - sharerAccountId
        - sharerAccountUsername
      x-action-category: Instagram
      title: InstagramShareActionOutput
      description: The output of a instagram share action.
    InstagramPostActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - instagram-post
        postId:
          type: string
        posterAccountId:
          type: string
        posterAccountUsername:
          type: string
        postContent:
          type: string
        postMediaUrl:
          type: string
      required:
        - key
        - postId
        - posterAccountId
        - posterAccountUsername
        - postContent
        - postMediaUrl
      x-action-category: Instagram
      title: InstagramPostActionOutput
      description: The output of a instagram post action.
    CommentOnPostActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-comment-on-post
        postId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - postId
      x-action-category: Platform
      title: CommentOnPostActionOutput
      description: The output of a comment on post action.
    CompleteAchievementActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-complete-achievement
        achievementId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - achievementId
      x-action-category: Platform
      title: CompleteAchievementActionOutput
      description: The output of a complete achievement action.
    GenerativeActionActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-generative-action
      required:
        - key
      x-action-category: Platform
      title: GenerativeActionActionOutput
      description: The output of a generative action.
    LikePostActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-like-post
        postId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - postId
      x-action-category: Platform
      title: LikePostActionOutput
      description: The output of a like post action.
    PlayGameActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-play-game
        gameConfigId:
          type: string
          pattern: ^[0-9a-fA-F]{24}$
      required:
        - key
        - gameConfigId
      x-action-category: Platform
      title: PlayGameActionOutput
      description: The output of a play game action.
    ValidateEventActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - platform-validate-event
        eventId:
          type: string
          nullable: true
          description: ID of the validated event
      required:
        - key
        - eventId
      x-action-category: Platform
      title: Validate Event Action Output
      description: Result of event validation containing the validated event ID
    SpotifyFollowActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-follow
        spotifyUsername:
          type: string
        spotifyURL:
          type: string
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
      required:
        - key
        - spotifyUsername
        - spotifyURL
        - wasBypassed
      x-action-category: Spotify
      title: SpotifyFollowActionOutput
      description: The output of a spotify follow action.
    SpotifyListenActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-listen
        spotifyUsername:
          type: string
        spotifyURL:
          type: string
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
      required:
        - key
        - spotifyUsername
        - spotifyURL
        - wasBypassed
      x-action-category: Spotify
      title: SpotifyListenActionOutput
      description: The output of a spotify listen action.
    SpotifySaveActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - spotify-save
        spotifyUsername:
          type: string
        spotifyURL:
          type: string
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
      required:
        - key
        - spotifyUsername
        - spotifyURL
        - wasBypassed
      x-action-category: Spotify
      title: SpotifySaveActionOutput
      description: The output of a spotify save action.
    TikTokFollowActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-follow
        accountUsername:
          type: string
      required:
        - key
        - accountUsername
      x-action-category: TikTok
      title: TikTokFollowActionOutput
      description: The output of a TikTok follow action.
    TikTokPostActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-post
        hashtags:
          type: array
          items:
            type: string
            pattern: ^#[A-Za-z0-9_]+$
            minLength: 1
          minItems: 1
        videoUrl:
          type: string
      required:
        - key
        - hashtags
        - videoUrl
      x-action-category: TikTok
      title: TikTokPostActionOutput
      description: The output of a TikTok post video with hashtag action.
    TikTokWatchActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - tiktok-watch
        videoUrl:
          type: string
      required:
        - key
        - videoUrl
      x-action-category: TikTok
      title: TikTokWatchActionOutput
      description: The output of a TikTok watch video action.
    YoutubeCommentActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-comment
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
        videoUrl:
          type: string
        commenterChannelId:
          type: string
      required:
        - key
        - wasBypassed
        - videoUrl
        - commenterChannelId
      title: YoutubeCommentActionOutput
      description: A youtube comment action output
    YoutubeSubscribeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-subscribe
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
        username:
          type: string
        subscriberChannelId:
          type: string
      required:
        - key
        - wasBypassed
        - username
        - subscriberChannelId
      title: YoutubeSubscribeActionOutput
      description: A youtube subscribe action output
    YoutubeLikeActionOutput:
      type: object
      properties:
        key:
          type: string
          enum:
            - youtube-like
        wasBypassed:
          type: boolean
          description: Indicates whether the validation was bypassed
        videoUrl:
          type: string
        likerChannelId:
          type: string
      required:
        - key
        - wasBypassed
        - videoUrl
        - likerChannelId
      title: YoutubeLikeActionOutput
      description: A youtube like action output
    SumConditionNodeParameters:
      type: object
      properties:
        query:
          type: string
          description: >-
            Reference to the query alias that identifies which events should be
            included in the sum. This query must be defined in an EventQueryNode
            within the achievement's criteria array.
        operator:
          type: string
          enum:
            - '=='
            - '!='
            - '>'
            - <
            - '>='
            - <=
          description: >-
            Comparison operator that defines how to compare the summed value
            against the threshold value. For example, 'GreaterThan' would check
            if the sum exceeds the threshold.
        attribute:
          type: string
          minLength: 1
          description: >-
            The specific event attribute whose values should be summed. This
            must be a numeric attribute present in the matched events.
        value:
          type: number
          description: >-
            The threshold value to compare the sum against. This represents the
            target number that the summed values will be compared to using the
            specified operator.
      required:
        - query
        - operator
        - attribute
        - value
      description: >-
        Parameters for a sum condition node that define the attribute summation
        logic and threshold comparison
      title: Sum Condition Node Parameters
    CountConditionNodeParameters:
      type: object
      properties:
        query:
          type: string
          description: >-
            Reference to the query alias that identifies which events should be
            counted. This query must be defined in an EventQueryNode within the
            achievement's criteria array.
        operator:
          type: string
          enum:
            - '=='
            - '!='
            - '>'
            - <
            - '>='
            - <=
          description: >-
            Comparison operator that defines how to compare the counted events
            against the threshold value. For example, 'GreaterThan' would check
            if the count exceeds the threshold.
        value:
          type: number
          description: >-
            The threshold value to compare the count against. This represents
            the target number that the counted events will be compared to using
            the specified operator.
      required:
        - query
        - operator
        - value
      description: >-
        Parameters for a count condition node that define the counting logic and
        threshold comparison
      title: Count Condition Node Parameters
    LogicalConditionNodeParameters:
      type: object
      properties:
        operator:
          type: string
          enum:
            - and
            - or
          description: >-
            The logical operator to apply to the conditions. AND requires all
            conditions to be true, OR requires at least one condition to be
            true.
        conditions:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/SumConditionNode'
              - $ref: '#/components/schemas/CountConditionNode'
              - $ref: '#/components/schemas/LogicalConditionNode'
          description: >-
            Array of condition nodes to be combined using the logical operator.
            Can include other logical nodes for nested conditions.
      required:
        - operator
        - conditions
      description: >-
        Parameters for a logical condition node that define how multiple
        conditions should be combined
      title: Logical Condition Node Parameters
    ExternalLinkActionEvent:
      type: object
      properties:
        eventCategory:
          type: string
          enum:
            - achievement
            - action
            - auth
            - blog
            - challenge
            - community
            - custom
            - game
            - leaderboard
            - organisation
            - points
            - post
            - referral
            - reward
            - shop
            - social
            - social-connection
            - streak
            - user
            - variable
            - xp
          description: The category of the event.
        eventSubCategory:
          type: string
          enum:
            - achievement-completion
            - facebook-comment
            - facebook-follow
            - facebook-like
            - image-analysis-object-detection
            - image-analysis-receipt-detection
            - instagram-follow
            - instagram-like
            - instagram-comment
            - instagram-share
            - instagram-post
            - interaction-engage-with-content
            - interaction-external-link
            - interaction-image-upload
            - interaction-spot-object
            - platform-comment-on-post
            - platform-complete-achievement
            - platform-generative-action
            - platform-like-post
            - platform-play-game
            - platform-validate-event
            - question-multiple-choice
            - question-open-ended
            - question-rate-your-experience
            - question-secret-access-code
            - question-select-date
            - question-select-from-images
            - question-select-value-in-range
            - question-select-from-list
            - question-closed-ended
            - question-vote
            - spotify-follow
            - spotify-listen
            - spotify-save
            - tiktok-follow
            - tiktok-watch
            - tiktok-post
            - youtube-like
            - youtube-comment
            - youtube-subscribe
            - action-completion
            - skip-action
            - 42-school
            - api-auth-link
            - api-token-link
            - apple
            - asgardeo
            - atlassian
            - auth0
            - authentik
            - azure-ad-b2c
            - azure-ad
            - azure-devops
            - battlenet
            - beyondidentity
            - box
            - boxyhq-saml
            - bungie
            - click-up
            - cognito
            - coinbase
            - descope
            - discord
            - dribbble
            - dropbox
            - duende-identity-server6
            - email
            - eveonline
            - facebook
            - faceit
            - foursquare
            - freshbooks
            - fusionauth
            - github
            - gitlab
            - google
            - hubspot
            - identity-server4
            - instagram
            - kakao
            - keycloak
            - line
            - linkedin
            - mailchimp
            - mailru
            - mastodon
            - mattermost
            - medium
            - naver
            - netlify
            - notion
            - okta
            - onelogin
            - organisation-oidc
            - osso
            - osu
            - passage
            - patreon
            - pinterest
            - pipedrive
            - reddit
            - salesforce
            - slack
            - spotify
            - strava
            - tiktok
            - todoist
            - trakt
            - twitch
            - twitter
            - united-effects
            - vk
            - wikimedia
            - wordpress
            - workos
            - yandex
            - youtube
            - zitadel
            - zoho
            - zoom
            - blog-comment
            - blog-like
            - blog-share
            - blog-view
            - challenge-started
            - challenge-completion
            - challenge-unlock
            - community-visit
            - parental-approval-requested
            - parental-approval-approved
            - parental-approval-rejected
            - custom
            - game-started
            - game-completed
            - leaderboard-finish
            - invite-admin-user
            - points-credit
            - points-spend
            - post-comment
            - post-like
            - post-view
            - reward-redemption
            - reward-allocation-purchase
            - reward-giveaway-winner
            - reward-claim
            - reward-distribution
            - manual-distribution
            - referral-link-used
            - shop-purchase
            - share-challenge-details
            - share-challenge-results
            - share-community
            - share-reward
            - share-post
            - share-profile
            - share-anything
            - streak-extended
            - profile-picture-added
            - bio-added
            - variable-captured
            - xp-gained
            - xp-total
            - xp-leaderboard-topper
          description: The sub-category of the event.
        eventSourceId:
          type: string
          nullable: true
          pattern: ^[0-9a-fA-F]{24}$
          description: The source ID of the event.
        eventName:
          type: string
          nullable: true
          description: The name of the event, required when using a custom event category.
      required:
        - eventCategory
        - eventSubCategory
      x-action-category: Interaction
      title: External Link Event
      description: An event that is triggered when a user clicks on an external link.
    ImageUploadDisclaimer:
      type: object
      properties:
        id:
          type: string
        label:
          type: string
      required:
        - id
        - label
      title: ImageUploadDisclaimer
      description: An image upload disclaimer
    ImageUploadDisclaimerStatus:
      type: object
      properties:
        id:
          type: string
        label:
          type: string
        accepted:
          type: boolean
      required:
        - id
        - label
        - accepted
      title: ImageUploadDisclaimerStatus
      description: An image upload disclaimer with acceptance status
  securitySchemes:
    ApiToken:
      type: apiKey
      in: header
      name: x-api-token

````