Extole Campaigns API
The Campaigns API from Extole — 31 operation(s) for campaigns.
The Campaigns API from Extole — 31 operation(s) for campaigns.
openapi: 3.0.1
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 Campaigns 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: Campaigns
paths:
/v2/campaign-summaries:
get:
description: Returns lightweight read-only summaries of campaigns, including id, name, state, and dates. Supports filtering via query parameters.
operationId: listCampaignSummaries
parameters:
- in: query
name: version
schema:
type: string
- in: query
name: program_type
schema:
type: string
- in: query
name: tags
schema:
items:
type: string
type: array
uniqueItems: true
- in: query
name: labels
schema:
items:
type: string
type: array
uniqueItems: true
- in: query
name: program_label
schema:
type: string
- in: query
name: states
schema:
items:
enum:
- ARCHIVED
- ENDED
- LIVE
- NOT_LAUNCHED
- PAUSED
- STOPPED
type: string
type: array
uniqueItems: true
- in: query
name: include_archived
schema:
type: boolean
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/CampaignSummaryResponse'
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 summaries
tags:
- Campaigns
x-extole-bundle: management
x-extole-visibility: visible
/v2/campaign-summaries/{campaignId}{version}:
get:
description: Returns a lightweight read-only summary of the specified campaign, including id, name, state, and dates.
operationId: getCampaignSummary
parameters:
- in: path
name: campaignId
required: true
schema:
type: string
- in: path
name: version
required: true
schema:
pattern: (/version/.+)?
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignSummaryResponse'
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: Get a campaign summary
tags:
- Campaigns
x-extole-bundle: management
x-extole-visibility: visible
/v2/campaigns:
get:
description: Returns campaigns for the calling client, filtered and ordered by the supplied query parameters. Supports filtering by state (draft, published, archived), label, and date range. Use `GET /v2/campaigns/built` for fully evaluated runtime forms.
operationId: listCampaigns
parameters:
- in: query
name: version
schema:
type: string
- in: query
name: reward_supplier_id
schema:
type: string
- in: query
name: tags
schema:
items:
type: string
type: array
uniqueItems: true
- in: query
name: include_archived
schema:
type: boolean
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/CampaignResponse'
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 campaigns
tags:
- Campaigns
x-extole-bundle: management
x-extole-visibility: visible
post:
description: Creates a new campaign by importing a campaign ZIP archive previously exported via `GET /v2/campaigns/{id}.zip`. All components, controllers, flow steps, and creative assets contained in the archive are imported and the new campaign is created in DRAFT state with a server-assigned id.
operationId: uploadNewCampaignArchive
requestBody:
content:
multipart/form-data:
example:
file:
creationDate: '2025-10-24T09:00:00.000Z'
fileName: fileName
modificationDate: '2025-10-24T09:00:00.000Z'
name: name
parameters:
parameters_key: parameters_key
readDate: '2025-10-24T09:00:00.000Z'
size: 1
type: type
schema:
properties:
file:
$ref: '#/components/schemas/FormDataContentDisposition'
type: object
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignResponse'
description: Successful response
'400':
content:
application/json:
examples:
action_count_invalid:
$ref: '#/components/examples/action_count_invalid'
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_not_found:
$ref: '#/components/examples/campaign_component_not_found'
campaign_component_type_validation_failed:
$ref: '#/components/examples/campaign_component_type_validation_failed'
campaign_concurrent_update:
$ref: '#/components/examples/campaign_concurrent_update'
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_flow_step_app_description_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_app_description_length_out_of_range'
campaign_flow_step_app_name_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_app_name_length_out_of_range'
campaign_flow_step_app_name_missing:
$ref: '#/components/examples/campaign_flow_step_app_name_missing'
campaign_flow_step_app_type_missing:
$ref: '#/components/examples/campaign_flow_step_app_type_missing'
campaign_flow_step_app_type_name_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_app_type_name_length_out_of_range'
campaign_flow_step_app_type_name_missing:
$ref: '#/components/examples/campaign_flow_step_app_type_name_missing'
campaign_flow_step_description_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_description_length_out_of_range'
campaign_flow_step_flow_path_invalid:
$ref: '#/components/examples/campaign_flow_step_flow_path_invalid'
campaign_flow_step_flow_path_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_flow_path_length_out_of_range'
campaign_flow_step_flow_path_missing:
$ref: '#/components/examples/campaign_flow_step_flow_path_missing'
campaign_flow_step_icon_color_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_icon_color_length_out_of_range'
campaign_flow_step_icon_type_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_icon_type_length_out_of_range'
campaign_flow_step_icon_type_missing:
$ref: '#/components/examples/campaign_flow_step_icon_type_missing'
campaign_flow_step_metric_description_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_metric_description_length_out_of_range'
campaign_flow_step_metric_duplicate_exists:
$ref: '#/components/examples/campaign_flow_step_metric_duplicate_exists'
campaign_flow_step_metric_expression_invalid:
$ref: '#/components/examples/campaign_flow_step_metric_expression_invalid'
campaign_flow_step_metric_expression_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_metric_expression_length_out_of_range'
campaign_flow_step_metric_expression_missing:
$ref: '#/components/examples/campaign_flow_step_metric_expression_missing'
campaign_flow_step_metric_name_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_metric_name_length_out_of_range'
campaign_flow_step_metric_name_missing:
$ref: '#/components/examples/campaign_flow_step_metric_name_missing'
campaign_flow_step_metric_tags_missing:
$ref: '#/components/examples/campaign_flow_step_metric_tags_missing'
campaign_flow_step_metric_unit_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_metric_unit_length_out_of_range'
campaign_flow_step_metric_unit_missing:
$ref: '#/components/examples/campaign_flow_step_metric_unit_missing'
campaign_flow_step_name_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_name_length_out_of_range'
campaign_flow_step_sequence_invalid:
$ref: '#/components/examples/campaign_flow_step_sequence_invalid'
campaign_flow_step_sequence_missing:
$ref: '#/components/examples/campaign_flow_step_sequence_missing'
campaign_flow_step_step_name_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_step_name_length_out_of_range'
campaign_flow_step_step_name_missing:
$ref: '#/components/examples/campaign_flow_step_step_name_missing'
campaign_flow_step_word_length_out_of_range:
$ref: '#/components/examples/campaign_flow_step_word_length_out_of_range'
campaign_frontend_controller_duplicate_controller:
$ref: '#/components/examples/campaign_frontend_controller_duplicate_controller'
campaign_global_archive:
$ref: '#/components/examples/campaign_global_archive'
campaign_global_rename:
$ref: '#/components/examples/campaign_global_rename'
campaign_global_type_change:
$ref: '#/components/examples/campaign_global_type_change'
campaign_has_pending_changes:
$ref: '#/components/examples/campaign_has_pending_changes'
campaign_invalid_tag:
$ref: '#/components/examples/campaign_invalid_tag'
campaign_locked:
$ref: '#/components/examples/campaign_locked'
campaign_stale_version:
$ref: '#/components/examples/campaign_stale_version'
campaign_tags_too_long:
$ref: '#/components/examples/campaign_tags_too_long'
campaign_version_malformed:
$ref: '#/components/examples/campaign_version_malformed'
circular_component_reference:
$ref: '#/components/examples/circular_component_reference'
component_asset_content_length_out_of_range:
$ref: '#/components/examples/component_asset_content_length_out_of_range'
component_asset_content_missing:
$ref: '#/components/examples/component_asset_content_missing'
component_asset_content_upload_error:
$ref: '#/components/examples/component_asset_content_upload_error'
component_asset_description_length_out_of_range:
$ref: '#/components/examples/component_asset_description_length_out_of_range'
component_asset_filename_contains_illegal_character:
$ref: '#/components/examples/component_asset_filename_contains_illegal_character'
component_asset_filename_length_out_of_range:
$ref: '#/components/examples/component_asset_filename_length_out_of_range'
component_asset_filename_missing:
$ref: '#/components/examples/component_asset_filename_missing'
component_asset_name_contains_illegal_character:
$ref: '#/components/examples/component_asset_name_contains_illegal_character'
component_asset_name_duplicated:
$ref: '#/components/examples/component_asset_name_duplicated'
component_asset_name_length_out_of_range:
$ref: '#/components/examples/component_asset_name_length_out_of_range'
component_asset_name_missing:
$ref: '#/components/examples/component_asset_name_missing'
component_facets_not_found:
$ref: '#/components/examples/component_facets_not_found'
component_id_not_accessible:
$ref: '#/components/examples/component_id_not_accessible'
component_type_not_found:
$ref: '#/components/examples/component_type_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'
creative_archive_size_too_big:
$ref: '#/components/examples/creative_archive_size_too_big'
creative_asset_file_path_invalid:
$ref: '#/components/examples/creative_asset_file_path_invalid'
creative_asset_file_path_too_long:
$ref: '#/components/examples/creative_asset_file_path_too_long'
creative_asset_file_size_too_big:
$ref: '#/components/examples/creative_asset_file_size_too_big'
creative_asset_invalid_character_encoding:
$ref: '#/components/examples/creative_asset_invalid_character_encoding'
creative_has_default_locale_disabled:
$ref: '#/components/examples/creative_has_default_locale_disabled'
creative_has_incompatible_api_version:
$ref: '#/components/examples/creative_has_incompatible_api_version'
creative_has_invalid_api_version:
$ref: '#/components/examples/creative_has_invalid_api_version'
creative_has_invalid_locale:
$ref: '#/components/examples/creative_has_invalid_locale'
creative_has_unknown_classification:
$ref: '#/components/examples/creative_has_unknown_classification'
creative_is_missing_attributes:
$ref: '#/components/examples/creative_is_missing_attributes'
creative_is_missing_renderer:
$ref: '#/components/examples/creative_is_missing_renderer'
creative_mismatch_api_version:
$ref: '#/components/examples/creative_mismatch_api_version'
data_attribute_name_out_of_range:
$ref: '#/components/examples/data_attribute_name_out_of_range'
data_attribute_regexp_invalid:
$ref: '#/components/examples/data_attribute_regexp_invalid'
data_attribute_value_out_of_range:
$ref: '#/components/examples/data_attribute_value_out_of_range'
data_attribute_value_type_required:
$ref: '#/components/examples/data_attribute_value_type_required'
date_invalid:
$ref: '#/components/examples/date_invalid'
default_key_not_allowed:
$ref: '#/components/examples/default_key_not_allowed'
display_name_has_illegal_character:
$ref: '#/components/examples/display_name_has_illegal_character'
download_error:
$ref: '#/components/examples/download_error'
duplicate_step_data_name:
$ref: '#/components/examples/duplicate_step_data_name'
excessive_component_reference:
$ref: '#/components/examples/excessive_component_reference'
expression_invalid_syntax:
$ref: '#/components/examples/expression_invalid_syntax'
expression_invalid_type:
$ref: '#/components/examples/expression_invalid_type'
expression_missing_type:
$ref: '#/components/examples/expression_missing_type'
expression_missing_value:
$ref: '#/components/examples/expression_missing_value'
expression_value_invalid:
$ref: '#/components/examples/expression_value_invalid'
expression_value_invalid_length:
$ref: '#/components/examples/expression_value_invalid_length'
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'
identity_key_incompatible_usage:
$ref: '#/components/examples/identity_key_incompatible_usage'
invalid_archive_id:
$ref: '#/components/examples/invalid_archive_id'
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_parameter:
$ref: '#/components/examples/invalid_parameter'
invalid_program_type:
$ref: '#/components/examples/invalid_program_type'
invalid_step_alias:
# --- truncated at 32 KB (1157 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-campaigns-api-openapi.yml