Extole Campaign Controllers API

The Campaign Controllers API from Extole — 2 operation(s) for campaign controllers.

Operations 3

GET /v2/campaigns/{campaignId}{version}/controllers List campaign controllers #
POST /v2/campaigns/{campaignId}{version}/controllers Create a campaign controller #
GET /v2/campaigns/{campaignId}{version}/controllers/built List built campaign controllers #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/extole-campaign-controllers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

extole-campaign-controllers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Consumer-to-Extole integration endpoints: consumer event submission, zone rendering, profile management, and SDK-backing operations for browser and native app environments.'
  title: Integration API - Consumer to Extole Audiences Campaign Controllers API
  version: '1.0'
servers:
- description: Production
  url: https://{brand}.extole.io
  variables:
    brand:
      default: yourcompany
      description: Your Extole client subdomain (e.g. 'mycompany' for mycompany.extole.io)
security:
- HEADER: []
- QUERY: []
- COOKIE: []
tags:
- name: Campaign Controllers
paths:
  /v2/campaigns/{campaignId}{version}/controllers:
    get:
      description: Returns all controllers for the specified campaign.
      operationId: listCampaignControllers
      parameters:
      - in: path
        name: campaignId
        required: true
        schema:
          type: string
      - in: path
        name: version
        required: true
        schema:
          pattern: (/version/.+)?
          type: string
      - in: query
        name: type
        schema:
          enum:
          - CONTROLLER
          - FRONTEND_CONTROLLER
          - JOURNEY_ENTRY
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/CampaignStepResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                campaign_concurrent_update:
                  $ref: '#/components/examples/campaign_concurrent_update'
                campaign_has_pending_changes:
                  $ref: '#/components/examples/campaign_has_pending_changes'
                campaign_locked:
                  $ref: '#/components/examples/campaign_locked'
                campaign_version_malformed:
                  $ref: '#/components/examples/campaign_version_malformed'
                date_invalid:
                  $ref: '#/components/examples/date_invalid'
                invalid_campaign_id:
                  $ref: '#/components/examples/invalid_campaign_id'
                invalid_campaign_state:
                  $ref: '#/components/examples/invalid_campaign_state'
                invalid_campaign_version:
                  $ref: '#/components/examples/invalid_campaign_version'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                lock_missing_lock_types:
                  $ref: '#/components/examples/lock_missing_lock_types'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
                unlock_missing_lock_types:
                  $ref: '#/components/examples/unlock_missing_lock_types'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: List campaign controllers
      tags:
      - Campaign Controllers
      x-extole-bundle: management-expert
      x-extole-visibility: expert
    post:
      description: Adds a new controller to the specified campaign. Controllers orchestrate campaign logic by combining triggers (conditions) with actions (side effects). Returns the created controller with its server-assigned id.
      operationId: createCampaignController
      parameters:
      - in: path
        name: campaignId
        required: true
        schema:
          type: string
      - in: path
        name: version
        required: true
        schema:
          pattern: (/version/.+)?
          type: string
      requestBody:
        content:
          application/json:
            example:
              aliases:
              - aliase
              component_ids:
              - component_id
              component_references:
              - component_id: component_id
                socket_names:
                - socket_name
              data:
              - component_ids:
                - component_id
                component_references:
                - component_id: component_id
                  socket_names:
                  - socket_name
                default_value: {}
                dimension: true
                enabled: true
                key_type: NONE
                name: name
                persist_types:
                - JOURNEY
                scope: CLIENT
                value: {}
              enabled: true
              enabled_on_states:
              - ARCHIVED
              journey_names:
              - journey_name
              name: name
              scope: CLIENT
              selectors:
              - BEST_REFERRAL
              send_policy: ALL
              step_builder: {}
              type: CONTROLLER
            schema:
              $ref: '#/components/schemas/CampaignStepCreateRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignStepResponse'
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                campaign_build_failed:
                  $ref: '#/components/examples/campaign_build_failed'
                campaign_component_absolute_name_missing:
                  $ref: '#/components/examples/campaign_component_absolute_name_missing'
                campaign_component_description_out_of_range:
                  $ref: '#/components/examples/campaign_component_description_out_of_range'
                campaign_component_display_name_contains_illegal_character:
                  $ref: '#/components/examples/campaign_component_display_name_contains_illegal_character'
                campaign_component_display_name_out_of_range:
                  $ref: '#/components/examples/campaign_component_display_name_out_of_range'
                campaign_component_id_missing:
                  $ref: '#/components/examples/campaign_component_id_missing'
                campaign_component_name_already_in_use:
                  $ref: '#/components/examples/campaign_component_name_already_in_use'
                campaign_component_name_contains_illegal_character:
                  $ref: '#/components/examples/campaign_component_name_contains_illegal_character'
                campaign_component_name_out_of_range:
                  $ref: '#/components/examples/campaign_component_name_out_of_range'
                campaign_component_type_validation_failed:
                  $ref: '#/components/examples/campaign_component_type_validation_failed'
                campaign_concurrent_update:
                  $ref: '#/components/examples/campaign_concurrent_update'
                campaign_controller_data_legacy_action_id_step_data_deletion:
                  $ref: '#/components/examples/campaign_controller_data_legacy_action_id_step_data_deletion'
                campaign_controller_duplicate_controller:
                  $ref: '#/components/examples/campaign_controller_duplicate_controller'
                campaign_controller_invalid_enabled_on_state:
                  $ref: '#/components/examples/campaign_controller_invalid_enabled_on_state'
                campaign_controller_missing_event_trigger:
                  $ref: '#/components/examples/campaign_controller_missing_event_trigger'
                campaign_controller_missing_journey_name:
                  $ref: '#/components/examples/campaign_controller_missing_journey_name'
                campaign_controller_name_contains_illegal_character:
                  $ref: '#/components/examples/campaign_controller_name_contains_illegal_character'
                campaign_controller_name_missing:
                  $ref: '#/components/examples/campaign_controller_name_missing'
                campaign_controller_name_out_of_range:
                  $ref: '#/components/examples/campaign_controller_name_out_of_range'
                campaign_controller_name_same_as_a_default_controller_name:
                  $ref: '#/components/examples/campaign_controller_name_same_as_a_default_controller_name'
                campaign_controller_too_many_journey_names:
                  $ref: '#/components/examples/campaign_controller_too_many_journey_names'
                campaign_frontend_controller_duplicate_controller:
                  $ref: '#/components/examples/campaign_frontend_controller_duplicate_controller'
                campaign_has_pending_changes:
                  $ref: '#/components/examples/campaign_has_pending_changes'
                campaign_journey_entry_duplicate_journey_entry:
                  $ref: '#/components/examples/campaign_journey_entry_duplicate_journey_entry'
                campaign_journey_entry_invalid_journey_key_name:
                  $ref: '#/components/examples/campaign_journey_entry_invalid_journey_key_name'
                campaign_journey_entry_invalid_trigger_phase:
                  $ref: '#/components/examples/campaign_journey_entry_invalid_trigger_phase'
                campaign_journey_entry_journey_key_name_invalid_length:
                  $ref: '#/components/examples/campaign_journey_entry_journey_key_name_invalid_length'
                campaign_journey_entry_null_journey_key_name:
                  $ref: '#/components/examples/campaign_journey_entry_null_journey_key_name'
                campaign_journey_entry_null_journey_key_value:
                  $ref: '#/components/examples/campaign_journey_entry_null_journey_key_value'
                campaign_locked:
                  $ref: '#/components/examples/campaign_locked'
                campaign_stale_version:
                  $ref: '#/components/examples/campaign_stale_version'
                campaign_step_data_default_value_expression_length_out_of_range:
                  $ref: '#/components/examples/campaign_step_data_default_value_expression_length_out_of_range'
                campaign_step_data_name_length_out_of_range:
                  $ref: '#/components/examples/campaign_step_data_name_length_out_of_range'
                campaign_step_data_value_expression_length_out_of_range:
                  $ref: '#/components/examples/campaign_step_data_value_expression_length_out_of_range'
                campaign_step_duplicate_data_name:
                  $ref: '#/components/examples/campaign_step_duplicate_data_name'
                campaign_step_missing_data_name:
                  $ref: '#/components/examples/campaign_step_missing_data_name'
                campaign_step_missing_data_value:
                  $ref: '#/components/examples/campaign_step_missing_data_value'
                campaign_version_malformed:
                  $ref: '#/components/examples/campaign_version_malformed'
                circular_component_reference:
                  $ref: '#/components/examples/circular_component_reference'
                component_facets_not_found:
                  $ref: '#/components/examples/component_facets_not_found'
                controller_misconfiguration:
                  $ref: '#/components/examples/controller_misconfiguration'
                controller_name_length_out_of_range:
                  $ref: '#/components/examples/controller_name_length_out_of_range'
                controller_state_misconfiguration:
                  $ref: '#/components/examples/controller_state_misconfiguration'
                date_invalid:
                  $ref: '#/components/examples/date_invalid'
                excessive_component_reference:
                  $ref: '#/components/examples/excessive_component_reference'
                expression_invalid_syntax:
                  $ref: '#/components/examples/expression_invalid_syntax'
                external_element_is_referenced_by_active_configuration:
                  $ref: '#/components/examples/external_element_is_referenced_by_active_configuration'
                external_elements_cannot_have_multiple_references:
                  $ref: '#/components/examples/external_elements_cannot_have_multiple_references'
                invalid_campaign_id:
                  $ref: '#/components/examples/invalid_campaign_id'
                invalid_campaign_state:
                  $ref: '#/components/examples/invalid_campaign_state'
                invalid_campaign_version:
                  $ref: '#/components/examples/invalid_campaign_version'
                invalid_component_installed_into_socket:
                  $ref: '#/components/examples/invalid_component_installed_into_socket'
                invalid_component_reference:
                  $ref: '#/components/examples/invalid_component_reference'
                invalid_component_reference_socket_name:
                  $ref: '#/components/examples/invalid_component_reference_socket_name'
                invalid_external_component_reference:
                  $ref: '#/components/examples/invalid_external_component_reference'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_null:
                  $ref: '#/components/examples/invalid_null'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                invalid_step_alias:
                  $ref: '#/components/examples/invalid_step_alias'
                journey_name_invalid:
                  $ref: '#/components/examples/journey_name_invalid'
                journey_name_length_out_of_range:
                  $ref: '#/components/examples/journey_name_length_out_of_range'
                lock_missing_lock_types:
                  $ref: '#/components/examples/lock_missing_lock_types'
                missing_persist_type_for_step:
                  $ref: '#/components/examples/missing_persist_type_for_step'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
                multiple_keys_not_allowed:
                  $ref: '#/components/examples/multiple_keys_not_allowed'
                name_contains_illegal_character:
                  $ref: '#/components/examples/name_contains_illegal_character'
                not_found_page_forbidden_runtime_expressions:
                  $ref: '#/components/examples/not_found_page_forbidden_runtime_expressions'
                not_found_page_invalid_action:
                  $ref: '#/components/examples/not_found_page_invalid_action'
                null_journey_name:
                  $ref: '#/components/examples/null_journey_name'
                orphan_external_component_reference:
                  $ref: '#/components/examples/orphan_external_component_reference'
                rebuild_campaigns_build_failed:
                  $ref: '#/components/examples/rebuild_campaigns_build_failed'
                redundant_component_reference:
                  $ref: '#/components/examples/redundant_component_reference'
                reserved_name:
                  $ref: '#/components/examples/reserved_name'
                self_component_reference:
                  $ref: '#/components/examples/self_component_reference'
                unlock_missing_lock_types:
                  $ref: '#/components/examples/unlock_missing_lock_types'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Create a campaign controller
      tags:
      - Campaign Controllers
      x-extole-bundle: management-expert
      x-extole-visibility: expert
  /v2/campaigns/{campaignId}{version}/controllers/built:
    get:
      description: Returns all campaign controllers in their fully evaluated runtime form.
      operationId: listBuiltCampaignControllers
      parameters:
      - in: path
        name: campaignId
        required: true
        schema:
          type: string
      - in: path
        name: version
        required: true
        schema:
          pattern: (/version/.+)?
          type: string
      - in: query
        name: type
        schema:
          enum:
          - CONTROLLER
          - FRONTEND_CONTROLLER
          - JOURNEY_ENTRY
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/BuiltCampaignStepResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                campaign_concurrent_update:
                  $ref: '#/components/examples/campaign_concurrent_update'
                campaign_has_pending_changes:
                  $ref: '#/components/examples/campaign_has_pending_changes'
                campaign_locked:
                  $ref: '#/components/examples/campaign_locked'
                campaign_version_malformed:
                  $ref: '#/components/examples/campaign_version_malformed'
                date_invalid:
                  $ref: '#/components/examples/date_invalid'
                invalid_campaign_id:
                  $ref: '#/components/examples/invalid_campaign_id'
                invalid_campaign_state:
                  $ref: '#/components/examples/invalid_campaign_state'
                invalid_campaign_version:
                  $ref: '#/components/examples/invalid_campaign_version'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                lock_missing_lock_types:
                  $ref: '#/components/examples/lock_missing_lock_types'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
                unlock_missing_lock_types:
                  $ref: '#/components/examples/unlock_missing_lock_types'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: List built campaign controllers
      tags:
      - Campaign Controllers
      x-extole-bundle: management-expert
      x-extole-visibility: expert
components:
  schemas:
    SlotsInCampaignControllerActionEarnRewardResponse:
      description: 'The slots as configured: a literal value, or an expression (type:string) when defined dynamically.'
      oneOf:
      - description: Literal slots
        items:
          type: string
        title: Static Value
        type: array
        uniqueItems: true
      - description: Handlebars expression with [ControllerBuildtimeContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts).
        example: handlebars@buildtime:{{slots}}
        externalDocs:
          description: ControllerBuildtimeContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts
        pattern: ^handlebars@buildtime:.*
        title: Buildtime - Handlebars
        type: string
      - description: Javascript expression with [ControllerBuildtimeContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts).
        example: javascript@buildtime:function() { return context.getVariableContext().get('slots');}
        externalDocs:
          description: ControllerBuildtimeContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts
        pattern: ^javascript@buildtime:.*
        title: Buildtime - Javascript
        type: string
      - description: Handlebars expression with [RewardActionContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/step/action/reward/RewardActionContext.d.ts).
        example: handlebars@runtime:{{slots}}
        externalDocs:
          description: RewardActionContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/step/action/reward/RewardActionContext.d.ts
        pattern: ^handlebars@runtime:.*
        title: Runtime - Handlebars
        type: string
      - description: Javascript expression with [RewardActionContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/step/action/reward/RewardActionContext.d.ts).
        example: javascript@runtime:function() { return context.get('slots');}
        externalDocs:
          description: RewardActionContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/step/action/reward/RewardActionContext.d.ts
        pattern: ^javascript@runtime:.*
        title: Runtime - Javascript
        type: string
    EventNameInCampaignControllerActionFireAsPersonResponse:
      description: 'The event name as configured: a literal value, or an expression (type:string) when defined dynamically.'
      oneOf:
      - allOf:
        - type: string
        - not:
            anyOf:
            - pattern: ^handlebars@buildtime:.*
              type: string
            - pattern: ^javascript@buildtime:.*
              type: string
          type: string
        description: Literal event name
        title: Static Value
      - description: Handlebars expression with [ControllerBuildtimeContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts).
        example: handlebars@buildtime:{{eventName}}
        externalDocs:
          description: ControllerBuildtimeContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts
        pattern: ^handlebars@buildtime:.*
        title: Buildtime - Handlebars
        type: string
      - description: Javascript expression with [ControllerBuildtimeContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts).
        example: javascript@buildtime:function() { return context.getVariableContext().get('eventName');}
        externalDocs:
          description: ControllerBuildtimeContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/campaign/ControllerBuildtimeContext.d.ts
        pattern: ^javascript@buildtime:.*
        title: Buildtime - Javascript
        type: string
    CampaignControllerActionResponse:
      description: Stored campaign controller action definition. Field `enabled` is unevaluated and appears in buildtime-evaluatable form.
      discriminator:
        mapping:
          APPROVE: '#/components/schemas/CampaignControllerActionApproveResponse'
          CANCEL_REWARD: '#/components/schemas/CampaignControllerActionCancelRewardResponse'
          CREATE_MEMBERSHIP: '#/components/schemas/CampaignControllerActionCreateMembershipResponse'
          CREATIVE: '#/components/schemas/CampaignControllerActionCreativeResponse'
          DATA_INTELLIGENCE: '#/components/schemas/CampaignControllerActionDataIntelligenceResponse'
          DECLINE: '#/components/schemas/CampaignControllerActionDeclineResponse'
          DISPLAY: '#/components/schemas/CampaignControllerActionDisplayResponse'
          EARN_REWARD: '#/components/schemas/CampaignControllerActionEarnRewardResponse'
          EMAIL: '#/components/schemas/CampaignControllerActionEmailResponse'
          EXPRESSION: '#/components/schemas/CampaignControllerActionExpressionResponse'
          FIRE_AS_PERSON: '#/components/schemas/CampaignControllerActionFireAsPersonResponse'
          FULFILL_REWARD: '#/components/schemas/CampaignControllerActionFulfillRewardResponse'
          INCENTIVIZE: '#/components/schemas/CampaignControllerActionIncentivizeResponse'
          INCENTIVIZE_STATUS_UPDATE: '#/components/schemas/CampaignControllerActionIncentivizeStatusUpdateResponse'
          REDEEM_REWARD: '#/components/schemas/CampaignControllerActionRedeemRewardResponse'
          REMOVE_MEMBERSHIP: '#/components/schemas/CampaignControllerActionRemoveMembershipResponse'
          REVOKE_REWARD: '#/components/schemas/CampaignControllerActionRevokeRewardResponse'
          SCHEDULE: '#/components/schemas/CampaignControllerActionScheduleResponse'
          SHARE_EVENT: '#/components/schemas/CampaignControllerActionShareEventResponse'
          SIGNAL: '#/components/schemas/CampaignControllerActionSignalResponse'
          SIGNAL_V1: '#/components/schemas/CampaignControllerActionSignalV1Response'
          STEP_SIGNAL: '#/components/schemas/CampaignControllerActionStepSignalResponse'
          WEBHOOK: '#/components/schemas/CampaignControllerActionWebhookResponse'
        propertyName: action_type
      oneOf:
      - $ref: '#/components/schemas/CampaignControllerActionApproveResponse'
      - $ref: '#/components/schemas/CampaignControllerActionCancelRewardResponse'
      - $ref: '#/components/schemas/CampaignControllerActionCreateMembershipResponse'
      - $ref: '#/components/schemas/CampaignControllerActionCreativeResponse'
      - $ref: '#/components/schemas/CampaignControllerActionDataIntelligenceResponse'
      - $ref: '#/components/schemas/CampaignControllerActionDeclineResponse'
      - $ref: '#/components/schemas/CampaignControllerActionDisplayResponse'
      - $ref: '#/components/schemas/CampaignControllerActionEarnRewardResponse'
      - $ref: '#/components/schemas/CampaignControllerActionEmailResponse'
      - $ref: '#/components/schemas/CampaignControllerActionExpressionResponse'
      - $ref: '#/components/schemas/CampaignControllerActionFireAsPersonResponse'
      - $ref: '#/components/schemas/CampaignControllerActionFulfillRewardResponse'
      - $ref: '#/components/schemas/CampaignControllerActionIncentivizeResponse'
      - $ref: '#/components/schemas/CampaignControllerActionIncentivizeStatusUpdateResponse'
      - $ref: '#/components/schemas/CampaignControllerActionRedeemRewardResponse'
      - $ref: '#/components/schemas/CampaignControllerActionRemoveMembershipResponse'
      - $ref: '#/components/schemas/CampaignControllerActionRevokeRewardResponse'
      - $ref: '#/components/schemas/CampaignControllerActionScheduleResponse'
      - $ref: '#/components/schemas/CampaignControllerActionShareEventResponse'
      - $ref: '#/components/schemas/CampaignControllerActionSignalResponse'
      - $ref: '#/components/schemas/CampaignControllerActionSignalV1Response'
      - $ref: '#/compo

# --- truncated at 32 KB (636 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-campaign-controllers-api-openapi.yml