Optimizely Milestones API
The Milestones API from Optimizely — 2 operation(s) for milestones.
The Milestones API from Optimizely — 2 operation(s) for milestones.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/optimizely-milestones-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
version: V3
title: Optimizely CMP Open API Documentation Milestones API
servers:
- url: https://api.cmp.optimizely.com/v3
description: v3 version of Optimizely CMP Open API
security:
- OAuth2:
- openid
- profile
- offline_access
tags:
- name: Milestones
paths:
/milestones:
get:
operationId: listMilestones
tags:
- Milestones
summary: GET /milestones
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get a list of milestones.
parameters:
- name: campaign_id
in: query
schema:
type:
- string
- 'null'
description: Filter milestones by campaign association. When a campaign ID is provided, returns only milestones associated with that campaign. When explicitly set to `null`, returns only milestones not associated with any campaign. When omitted, returns all milestones regardless of campaign association.
example: 63f1c2b675be4132854d2742
- name: due_date__from
in: query
schema:
type: string
format: date-time
description: Filter milestones with due date from this date, in ISO 8601 UTC format
example: '2023-10-01T00:00:00Z'
- name: due_date__to
in: query
schema:
type: string
format: date-time
description: Filter milestones with due date up to this date, in ISO 8601 UTC format
example: '2023-10-31T23:59:59Z'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/page_size'
responses:
'200':
description: List of fetched milestones
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
data:
description: List of milestones
type: array
items:
$ref: '#/components/schemas/MilestoneResponse'
pagination:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
next:
type:
- string
- 'null'
example: https://api.cmp.optimizely.com/v3/milestones?offset=10&page_size=10
required:
- data
- pagination
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
post:
operationId: createMilestone
tags:
- Milestones
summary: POST /milestones
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Creates a milestone. Defaults to the organization's campaign if campaign_id is omitted. Tasks are validated against the selected campaign and must belong to it.
requestBody:
description: Payload to create a milestone
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MilestoneCreateRequest'
responses:
'201':
description: Created milestone
content:
application/json:
schema:
$ref: '#/components/schemas/MilestoneResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/milestones/{id}:
get:
operationId: getMilestone
tags:
- Milestones
summary: GET /milestones/{id}
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get a milestone by ID.
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the milestone
example: 63f1c2b675be4132854d2741
responses:
'200':
description: Details of the milestone
content:
application/json:
schema:
$ref: '#/components/schemas/MilestoneResponse'
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateMilestone
tags:
- Milestones
summary: PATCH /milestones/{id}
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Updates a milestone. All fields are optional. Only provided fields will be updated. Note: If tasks array is empty, it will remove all task associations for that milestone.'
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Unique identifier of the milestone
example: 63f1c2b675be4132854d2741
requestBody:
description: Payload to update a milestone
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MilestoneUpdateRequest'
responses:
'200':
description: Updated milestone
content:
application/json:
schema:
$ref: '#/components/schemas/MilestoneResponse'
'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'
components:
schemas:
Error:
type: object
additionalProperties: true
description: Error payload
properties:
message:
type: string
description: Message describing the error
example: Not found
errors:
type: object
description: Additional information
additionalProperties: true
properties: {}
required:
- message
MilestoneUpdateRequest:
type: object
additionalProperties: false
properties:
title:
type: string
description: Title of the milestone. This should be between 1 and 80 characters.
example: Q1 Product Launch
minLength: 1
maxLength: 80
description:
type:
- string
- 'null'
description: Description of the milestone. If provided, this should be between 1 and 250 characters.
example: Complete all tasks for the Q1 product launch
minLength: 1
maxLength: 250
campaign_id:
type: string
description: Id of the campaign to be associated with the milestone
example: 63f1c2b675be4132854d2741
due_date:
type: string
format: date-time
description: Date and time on which the milestone will expire, in ISO 8601 UTC format
example: '2023-10-07T13:15:30Z'
hex_color:
type: string
description: Hex color code for the milestone label
example: '#4ECFD5'
tasks:
type: array
description: List of tasks to be associated with the milestone. This can be an empty array, but in that case it will remove all task associations for that milestone.
items:
type: object
properties:
id:
type: string
description: Task ID
required:
- id
example:
- id: 63f1c2b675be4132854d2741
- id: 63f1c2b675be4132854d2742
MilestoneResponse:
type: object
additionalProperties: false
properties:
id:
type: string
description: Unique identifier of the milestone
example: 63f1c2b675be4132854d2741
title:
type: string
description: Title of the milestone
example: Sample Milestone
color:
type: string
description: Color of the milestone label
example: '#4ECFD5'
description:
type:
- string
- 'null'
description: Description of the milestone
example: This is a milestone
due_date:
type: string
format: date-time
description: Date and time on which the milestone will expire, in ISO 8601 UTC format
example: '2023-10-07T13:15:30Z'
campaign:
type:
- object
- 'null'
description: Campaign associated with the milestone
additionalProperties: false
properties:
id:
type: string
description: Unique identifier of the campaign
example: 63f1c2b675be4132854d2742
required:
- id
links:
type: object
additionalProperties: false
description: Meta links
properties:
self:
type: string
description: URL of the milestone
example: https://api.cmp.optimizely.com/v3/milestones/63f1c2b675be4132854d2741
required:
- self
required:
- id
- title
- color
- description
- due_date
- campaign
- links
Pagination:
type: object
additionalProperties: false
description: Pagination related information
properties:
next:
type:
- string
- 'null'
description: URL to the next page
example: https://api.cmp.optimizely.com/<some-path-to-next-page>?offset=10&page_size=10
previous:
type:
- string
- 'null'
description: URL to the previous page
example: null
required:
- next
- previous
MilestoneCreateRequest:
type: object
additionalProperties: false
properties:
title:
type: string
description: Title of the milestone. This should be between 1 and 80 characters.
example: Q1 Product Launch
minLength: 1
maxLength: 80
description:
type:
- string
- 'null'
description: Description of the milestone. If provided, this should be between 1 and 250 characters.
example: Complete all tasks for the Q1 product launch
minLength: 1
maxLength: 250
campaign_id:
type: string
description: Id of the campaign to be associated with the milestone
example: 63f1c2b675be4132854d2741
due_date:
type: string
format: date-time
description: Date and time on which the milestone will expire, in ISO 8601 UTC format
example: '2023-10-07T13:15:30Z'
hex_color:
type: string
description: Hex color code for the milestone label
example: '#4ECFD5'
tasks:
type: array
description: List of tasks to be associated with the milestone
items:
type: object
properties:
id:
type: string
description: Task ID
required:
- id
example:
- id: 63f1c2b675be4132854d2741
- id: 63f1c2b675be4132854d2742
required:
- title
- due_date
- hex_color
responses:
NotFound:
description: Not found error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: Resource not found
ClientError:
description: Client error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: 'Unsupported arguments: a,b,c'
Forbidden:
description: Permission error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: You do not have the permission to perform this operation
Unauthorized:
description: Authorization error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: Unauthorized
UnprocessableEntity:
description: Unprocessable entity error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: Resource cannot be processed
parameters:
offset:
name: offset
in: query
description: Starting index of results (zero indexed)
schema:
type: integer
minimum: 0
default: 0
example: 5
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
securitySchemes:
OAuth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/auth
tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
scopes:
openid: Grants the ability to receive a unique identifier for the user.
profile: Grants access to user profile information.
offline_access: Grants the ability to refresh access_token using the refresh token even when user is not present (not logged in).
clientCredentials:
tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
scopes: {}
x-tagGroups:
- name: API
tags:
- Uploader
- Library
- Labels
- Brand Compliance
- Tasks
- Task Step
- Campaigns
- Publishing
- Templates
- Users
- Work Requests
- Structured Contents
- Assets
- Milestones
- Teams
- Settings
- Workflows
- Fields
- Events