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: Experimental 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: Experimental 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: Experimental 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: 'Experimental 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/?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