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/optimizely-campaigns-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: 3.2.0
info:
title: Optimizely Campaigns API
version: '1.0'
description: 'Operations tagged Campaigns across 4 of this provider''s published API definitions: optimizely-cmp-openapi.yml, optimizely-content-marketing-platform-optimizely-cmp-open-api-documentation-openapi.json, optimizely-web-experimentation-openapi.yml, optimizely-web-experimentation-optimizely-api-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.cmp.optimizely.com/v0
description: Optimizely CMP API Server
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
- url: https://api.optimizely.com/v2
description: Optimizely REST API v2 Production Server
tags:
- name: Campaigns
description: Manage content campaigns and editorial calendar entries.
paths:
/campaigns:
get:
operationId: listCampaigns
summary: List campaigns
description: Returns a list of content campaigns in the editorial calendar.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
responses:
'200':
description: Successfully retrieved the list of campaigns
content:
application/json:
schema:
type: object
properties:
data:
type: array
description: List of campaigns
items:
$ref: '#/components/schemas/CmpCampaign'
pagination:
$ref: '#/components/schemas/Pagination'
'401':
description: Authentication credentials are missing or invalid
security:
- oauth2: []
post:
operationId: createCampaign
tags:
- Campaigns
summary: POST /campaigns
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Create a campaign
requestBody:
description: Payload to create a campaign
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignCreateRequest'
responses:
'201':
description: Created campaign
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
security:
- oauth2: []
servers:
- url: https://api.cmp.optimizely.com/v0
description: Optimizely CMP API Server
/campaigns/{campaignId}:
get:
operationId: getCampaign
summary: Get a campaign
description: Retrieves the details of a specific content campaign.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/campaignId'
responses:
'200':
description: Successfully retrieved the campaign
content:
application/json:
schema:
$ref: '#/components/schemas/CmpCampaign'
'401':
description: Authentication credentials are missing or invalid
'404':
description: Campaign not found
security:
- oauth2: []
servers:
- url: https://api.cmp.optimizely.com/v0
description: Optimizely CMP API Server
/campaigns/{id}:
get:
operationId: getCampaign
tags:
- Campaigns
summary: GET /campaigns/{id}
description: Get a campaign
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 8q7f910551b00a722e0418830cee6612
responses:
'200':
description: Fetched campaign
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
patch:
operationId: updateCampaign
tags:
- Campaigns
summary: PATCH /campaigns/{id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update a campaign '
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 8q7f910551b00a722e0418830cee6612
requestBody:
description: Payload to update the campaign
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignUpdateRequest'
responses:
'204':
description: Campaign updated
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{id}/comments:
post:
operationId: addCommentToCampaign
tags:
- Campaigns
summary: POST /campaigns/{id}/comments
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Post a comment on a campaign. '
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: da80cfd7bbf84959a8a981acbad996b3
requestBody:
description: Payload to add a comment
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentCreateRequest'
responses:
'201':
description: Created a comment for the campaign
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignCommentResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{id}/fields:
get:
operationId: listCampaignFields
tags:
- Campaigns
summary: GET campaigns/{id}/fields
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of fields of a campaign. '
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 5f857f30e1c4a2038d6179e9
- $ref: '#/components/parameters/offset_2'
- $ref: '#/components/parameters/page_size'
responses:
'200':
description: List of fetched fields
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
data:
description: List of fields
type: array
items:
$ref: '#/components/schemas/FieldListResponseItem'
pagination:
allOf:
- $ref: '#/components/schemas/Pagination_2'
- type: object
properties:
next:
type:
- string
- 'null'
example: https://api.cmp.optimizely.com/v3/campaigns/5f857f30e1c4a2038d6179e9/fields?offset=10&page_size=10
required:
- data
- pagination
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
post:
operationId: addFieldToCampaign
tags:
- Campaigns
summary: POST campaigns/{id}/fields
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add a field to a campaign.
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 5f857f30e1c4a2038d6179e9
requestBody:
description: Payload to add a field to a campaign
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectFieldCreateRequest'
responses:
'201':
description: Added field to a campaign.
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectFieldCreateResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{id}/brief:
get:
operationId: getCampaignBrief
tags:
- Campaigns
summary: GET /campaigns/{id}/brief
description: Get brief of the campaign
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 5f857f30e1c4a2038d6179e9
responses:
'200':
description: Fetched brief of the campaign
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignBriefResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{id}/attachments:
post:
operationId: addAttachmentToCampaign
tags:
- Campaigns
summary: POST /campaigns/{id}/attachments
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add an attachment to the campaign. '
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 5f857f30e1c4a2038d6179e9
requestBody:
description: Payload to add an attachment
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AttachmentRequest'
responses:
'201':
description: Attachment added to the campaign
content:
application/json:
schema:
$ref: '#/components/schemas/AttachmentResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{campaign_id}/fields/{field_id}:
put:
operationId: updateCampaignField
tags:
- Campaigns
summary: PUT /campaigns/{campaign_id}/fields/{field_id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update the field value of a campaign. '
parameters:
- name: campaign_id
in: path
required: true
schema:
type: string
description: Unique identifier of the campaign
example: 5f857f30e1c4a2038d6179e9
- name: field_id
in: path
required: true
schema:
type: string
description: Unique identifier of the field of the campaign
example: 4f857f30e1c4a2038d6179e7
requestBody:
description: Payload to update the field value
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignFieldUpdateRequest'
responses:
'200':
description: Updated the campaign field
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignFieldUpdateResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
/campaigns/{campaign_id}:
get:
operationId: getCampaign
summary: Get a campaign
description: Retrieves the full details of a specific campaign by its identifier.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/campaignId_2'
responses:
'200':
description: Successfully retrieved the campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'401':
description: Authentication credentials are missing or invalid
'404':
description: Campaign not found
security:
- bearerAuth: []
patch:
operationId: updateCampaign
summary: Update a campaign
description: Updates the specified campaign with the provided fields.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/campaignId_2'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignInput'
responses:
'200':
description: Campaign successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'400':
description: Invalid request body
'401':
description: Authentication credentials are missing or invalid
'404':
description: Campaign not found
security:
- bearerAuth: []
delete:
operationId: deleteCampaign
summary: Delete a campaign
description: Archives or permanently deletes the specified campaign.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/campaignId_2'
responses:
'204':
description: Campaign successfully deleted
'401':
description: Authentication credentials are missing or invalid
'404':
description: Campaign not found
security:
- bearerAuth: []
servers:
- url: https://api.optimizely.com/v2
description: Optimizely REST API v2 Production Server
/campaigns/{campaign_id}/results:
get:
operationId: getCampaignResults
summary: Get campaign results
description: Retrieves the statistical results for a specific campaign.
tags:
- Campaigns
parameters:
- $ref: '#/components/parameters/campaignId_2'
responses:
'200':
description: Successfully retrieved campaign results
content:
application/json:
schema:
$ref: '#/components/schemas/ExperimentResults'
'401':
description: Authentication credentials are missing or invalid
'404':
description: Campaign not found
security:
- bearerAuth: []
servers:
- url: https://api.optimizely.com/v2
description: Optimizely REST API v2 Production Server
/campaigns/{campaign_id}/results/share:
get:
description: This link allows read-only access for anyone to view the results, even if they don't have an Optimizely account. Because anyone can use the link, be careful where you share it.
operationId: get_campaign_results_share_link
parameters:
- description: The ID of the campaign to generate a shareable link for
in: path
name: campaign_id
required: true
schema:
format: int64
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsShareLink'
description: Return a sharable link for the campaign's results page
default:
content:
application/json:
schema:
$ref: '#/components/schemas/Error_2'
description: Unexpected error
summary: Get a sharable link for the campaign's results page
tags:
- Campaigns
x-release-state: alpha
security:
- apiKey: []
- OAuth2:
- read
- write
servers:
- url: https://api.optimizely.com/v2
/export/campaigns/{campaign_id}/results/csv:
get:
description: Get results for a Campaign as a CSV
operationId: get_campaign_results_csv
parameters:
- description: The ID for the Campaign you want results for
in: path
name: campaign_id
required: true
schema:
format: int64
type: integer
- description: The start time of the time interval (beginning time included) used to calculate the results over. If unspecified, defaults to the time that the Campaign was first activated. The start time will be rounded the smallest time modulo 5 minutes larger or equal to start_time.
in: query
name: start_time
schema:
format: date-time
type: string
- description: The end of the time interval (end time excluded) used to calculate results over. If unspecified, defaults to the current time if the Experiment is still running, otherwise defaults to the time the experiment was last active. The end time will be rounded to the largest time modulo 5 minutes smaller or equal to end_time. The end_time in the response may be earlier than requested if fresher results are not available yet. In this case, the results will continue to calculate in the background and subsequent requests will eventually return the full results.
in: query
name: end_time
schema:
format: date-time
type: string
- $ref: '#/components/parameters/browser_segment'
- $ref: '#/components/parameters/device_segment'
- $ref: '#/components/parameters/source_segment'
- $ref: '#/components/parameters/attribute_id_segment'
- $ref: '#/components/parameters/attribute_value_segment'
- $ref: '#/components/parameters/segment_conditions'
responses:
'200':
description: '<p>Return Campaign results in CSV format</p> <p>Name of the columns returned: ''Start Time (UTC)'', ''End Time (UTC)'', ''Is Baseline Variation'', ''Metric Event Name'', ''Metric Event ID'', ''Metric Numerator Type'', ''Metric Denominator Type'', ''Metric Winning Direction'', ''Numerator Value'', ''Denominator Value'', ''Metric Value'', ''Improvement Status from Baseline'', ''Improvement Value from Baseline'', ''Statistical Significance'', ''Is Improvement Significant'', ''Confidence Interval - Low'', ''Confidence Interval - High'', ''Samples Remaining to Significance''</p> <p>(<a href="https://help.optimizely.com/Export_to_CSV_column_reference_for_campaigns_and_experiments">Column reference guide for CSV export</a>)</p>'
'202':
description: The results request has been received but has not yet finished processing. Wait a bit and try again.
'204':
description: There are no results data for this Campaign yet. Make sure the Campaign is started and try again later.
default:
content:
text/csv:
schema:
$ref: '#/components/schemas/Error_2'
description: Unexpected error
summary: Get Campaign results as a CSV
tags:
- Campaigns
x-release-state: beta
security:
- apiKey: []
- OAuth2:
- read
- write
servers:
- url: https://api.optimizely.com/v2
components:
parameters:
campaignId:
name: campaignId
in: path
required: true
description: The unique identifier for the campaign
schema:
type: string
offset:
name: offset
in: query
required: false
description: Number of items to skip for pagination
schema:
type: integer
default: 0
minimum: 0
limit:
name: limit
in: query
required: false
description: Maximum number of items to return
schema:
type: integer
default: 25
minimum: 1
maximum: 100
page_size:
name: page_size
in: query
description: Number of results to return per page
schema:
type: integer
minimum: 1
maximum: 100
default: 10
example: 15
offset_2:
name: offset
in: query
description: Starting index of results (zero indexed)
schema:
type: integer
minimum: 0
default: 0
example: 5
campaignId_2:
name: campaign_id
in: path
required: true
description: The unique identifier for the campaign
schema:
type: integer
format: int64
projectIdQuery:
name: project_id
in: query
required: true
description: The unique identifier for the project to filter by
schema:
type: integer
format: int64
page:
name: page
in: query
required: false
description: Page number for pagination
schema:
type: integer
default: 1
minimum: 1
perPage:
name: per_page
in: query
required: false
description: Number of results per page
schema:
type: integer
default: 25
minimum: 1
maximum: 100
attribute_id_segment:
description: 'ID of the attribute to segment results by. Requests containing attribute_id will return the results for all visitors that have attribute_value for the attribute represented by attribute_id. If present, the attribute_value parameter must also be present, and it cannot be sent with any other segmentation parameters, i.e. any parameters in [browser, device, source].
'
in: query
name: attribute_id
schema:
format: int64
type: integer
page_2:
description: 'Optional pagination argument that specifies the page to return. If you have 140 objects and you choose to return 100 objects per page you will be able to access the last 40 objects on page 2. The default value is 1.
'
in: query
name: page
required: false
schema:
default: 1
type: integer
source_segment:
description: 'Source to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [browser, device, attribute_id, attribute_value].
Campaign: Contains users that arrive on a URL containing a ''utm_campaign,'' ''utm_source,'' ''gclid,'' or ''otm_source'' query parameter. If the URL contains one of these parameters, the visitor will count as "Campaign" traffic even if they arrived through search.
Direct: Includes all users who do not have any external referrer in their URL.
Referral: Includes all users that come from another URL that doesn''t count as Campaign.
'
in: query
name: source
schema:
enum:
- campaign
- direct
- referral
- search
type: string
attribute_value_segment:
description: 'UTF-8 encoded value correlating to attribute_id. If present, the attribute_id parameter must also be present. This parameter also requires attribute_id to be set, and cannot be sent with any other segmentation parameters, i.e. any parameters in [browser, device, source].
'
in: query
name: attribute_value
schema:
type: string
device_segment:
description: Device to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [browser, source, attribute_id, attribute_value].
in: query
name: device
schema:
enum:
- desktop
- ipad
- iphone
- mobile
- tablet
type: string
browser_segment:
description: Browser to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [device, source, attribute_id, attribute_value].
in: query
name: browser
schema:
enum:
- firefox
- chrome
- internet_explorer
- opera
- safari
type: string
per_page:
description: Optional pagination argument that specifies the maximum number of objects to return per request
in: query
name: per_page
required: false
schema:
default: 25
maximum: 100
type: integer
segment_conditions:
description: '(BETA) A string representation of a JSON Segment Conditions Expression. This parameter can be either URL-escaped stringified JSON or Base64-encoded stringified JSON using URL-safe alphabet (preferred).
Segment Conditions Expressions consist of Logical Expressions and Match Expressions.
Logical Expressions are represented as an array of the format [<operator>, <expression>...], where the supported operators are "and", "or" and "not".
Match Expressions are represented as an object of the format {"attribute_id": <attribute_id>, "attribute_value": <value>[, "match_type": <match_type>]}, where supported values for match_type are "exact" match type will match only an exact string match between "value" string and the attribute value. "substring" match type will match if "value" is a substring of the attribute value. "prefix" match type will match if "value" is a string prefix of the attribute value. "regex" match type will match if "value" is a regular expression match for the attribute value. The default match_type is "exact".
'
in: query
name: segment_conditions
schema:
type: string
schemas:
Pagination:
type: object
description: Pagination metadata
properties:
total:
type: integer
description: Total number of items
limit:
type: integer
description: Maximum items per page
offset:
type: integer
description: Current offset
CmpCampaign:
type: object
description: A content campaign in the editorial calendar
properties:
id:
type: string
description: Unique identifier for the campaign
title:
type: string
description: Title of the campaign
description:
type: string
description: Description of the campaign
start_date:
type: string
format: date
description: Campaign start date
end_date:
type: string
format: date
description: Campaign end date
status:
type: string
description: Current status of the campaign
labels:
type: array
description: Labels associated with the campaign
items:
type: string
created_at:
type: string
format: date-time
description: Timestamp when the campaign was created
updated_at:
type: string
format: date-time
description: Timestamp when the campaign was last updated
CampaignBriefResponse:
type: object
additionalProperties: false
properties:
type:
type: string
description: Type of the campaign brief
example: template
enum:
- template
- attachment
- text
title:
type: string
description: Title of the campaign brief
example: Awesome Campaign Brief
template:
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/CampaignBriefTemplateValue'
fields:
description: List of fields of the brief
type: array
items:
type: object
additionalProperties: false
properties:
name:
type: string
description: Name of the brief field
example: My Dropdown
value:
type: array
description: List of values set for the brief field
items:
type: string
description: value set in the brief field
example: option 1
required:
- name
- value
links:
type: object
additionalProperties: false
description: Meta links
properties:
self:
type: string
description: URL of the brief
example: https://api.cmp.optimizely.com/v3/campaigns/5f857f30e1c4a2038d6179e9/brief
campaign:
type: string
description: URL of the campaign
example: https://api.cmp.optimizely.com/v3/campaigns/5f857f30e1c4a2038d6179e9
required:
- self
- campaign
required:
- type
- title
- fields
- links
CampaignUpdateRequest:
type: object
additionalProperties: false
properties:
title:
type: string
description: Title of the campaign
example: The awesome campaign
start_date:
type:
- string
- 'null'
description: 'Start date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2022-09-06'
end_date:
type:
- string
- 'null'
description: 'End date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2022-09-06'
owner_id:
type: string
description: Unique identifier of the campaign owner
# --- truncated at 32 KB (97 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/optimizely/refs/heads/main/openapi/optimizely-campaigns-api-openapi.yml