> ## 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 challenge by ID

> Retrieve a challenge by its ID.



## OpenAPI

````yaml openapi/integration.json GET /challenges/{challengeId}
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:
  /challenges/{challengeId}:
    get:
      tags:
        - Challenge
      summary: Get challenge by ID
      description: Retrieve a challenge by its ID.
      operationId: getChallengeById
      parameters:
        - in: path
          name: challengeId
          schema:
            type: string
          required: true
        - in: header
          name: x-language
          description: >-
            The language to return the challenge in. If not provided, the
            default language for the organisation will be used.
          schema:
            type: string
            description: >-
              The language to return the challenge in. If not provided, the
              default language for the organisation will be used.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Challenge'
        '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:
    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
    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
    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
    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
    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
    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
    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.
    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
    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

````