Optimizely Tasks API

Manage content tasks, assignments, and workflow steps within the content marketing platform.

Operations 46

GET /tasks List tasks #
POST /tasks Create a task #
GET /tasks/{taskId} Get a task #
PUT /tasks/{taskId} Update a task #
GET /tasks/{id} GET /tasks/{id} #
PATCH /tasks/{id} PATCH /tasks/{id} #
POST /tasks/{task_id}/urls POST /tasks/{task_id}/urls #
GET /tasks/{id}/brief GET /tasks/{id}/brief #
GET /tasks/{id}/custom-fields GET tasks/{id}/custom-fields #
GET /tasks/{task_id}/custom-fields/{custom_field_id} GET /tasks/{task_id}/custom-fields/{custom_field_id} #
PATCH /tasks/{task_id}/custom-fields/{custom_field_id} PATCH /tasks/{task_id}/custom-fields/{custom_field_id} #
GET /tasks/{task_id}/custom-fields/{custom_field_id}/choices GET /tasks/{task_id}/custom-fields/{custom_field_id}/choices #
GET /tasks/{task_id}/fields GET tasks/{task_id}/fields #
POST /tasks/{task_id}/fields POST tasks/{task_id}/fields #
PUT /tasks/{task_id}/fields/{field_id} PUT tasks/{taks_id}/fields/{field_id} #
DELETE /tasks/{task_id}/fields/{field_id} DELETE tasks/{task_id}/fields/{field_id} #
GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id} GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id} #
PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id} PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id} #
GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work #
PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work #
GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments #
POST /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments POST /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments #
GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/fields GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/fields #
GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} #
PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} #
DELETE /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} DELETE /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments/{comment_id} #
GET /tasks/{id}/assets GET /tasks/{id}/assets #
POST /tasks/{id}/assets POST /tasks/{id}/assets #
POST /tasks/{task_id}/assets/{asset_id}/drafts POST /tasks/{task_id}/assets/{asset_id}/drafts #
GET /tasks/{task_id}/assets/{asset_id}/drafts GET /tasks/{task_id}/assets/{asset_id}/drafts #
GET /tasks/{task_id}/assets/{asset_id}/comments GET /tasks/{task_id}/assets/{asset_id}/comments #
POST /tasks/{task_id}/assets/{asset_id}/comments POST /tasks/{task_id}/assets/{asset_id}/comments #
GET /tasks/{task_id}/assets/{asset_id}/fields GET /tasks/{task_id}/assets/{asset_id}/fields #
PUT /tasks/{task_id}/assets/{asset_id}/fields PUT tasks/{task_id}/assets/{asset_id}/fields #
GET /tasks/{id}/attachments GET /tasks/{id}/attachments #
GET /tasks/{task_id}/articles/{article_id} GET /tasks/{task_id}/articles/{article_id} #
GET /tasks/{task_id}/images/{image_id} GET /tasks/{task_id}/images/{image_id} #
GET /tasks/{task_id}/videos/{video_id} GET /tasks/{task_id}/videos/{video_id} #
GET /tasks/{task_id}/raw-files/{raw_file_id} GET /tasks/{task_id}/raw-files/{raw_file_id} #
POST /tasks/{task_id}/comments POST /tasks/{task_id}/comments #
POST /tasks/{task_id}/publishing-intents POST /tasks/{task_id}/publishing-intents #
POST /tasks/{task_id}/structured-contents POST /tasks/{task_id}/structured-contents #
GET /tasks/{task_id}/structured-contents/{content_id} GET /tasks/{task_id}/structured-contents/{content_id} #
PATCH /tasks/{task_id}/structured-contents/{content_id} PATCH /tasks/{task_id}/structured-contents/{content_id} #
DELETE /tasks/{task_id}/structured-contents/{content_id} DELETE /tasks/{task_id}/structured-contents/{content_id} #
POST /tasks/{task_id}/structured-contents/{content_id}/drafts POST /tasks/{task_id}/structured-contents/{content_id}/drafts #

Documentation

Specifications

Other Resources

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/optimizely-tasks-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

optimizely-tasks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Optimizely Tasks API
  version: '1.0'
  description: 'Operations tagged Tasks across 2 of this provider''s published API definitions: optimizely-cmp-openapi.yml, optimizely-content-marketing-platform-optimizely-cmp-open-api-documentation-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
tags:
- name: Tasks
  description: Manage content tasks, assignments, and workflow steps within the content marketing platform.
paths:
  /tasks:
    get:
      operationId: listTasks
      summary: List tasks
      description: Returns a list of content tasks and their current workflow status.
      tags:
      - Tasks
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: Successfully retrieved the list of tasks
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    description: List of tasks
                    items:
                      $ref: '#/components/schemas/Task'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          description: Authentication credentials are missing or invalid
      security:
      - oauth2: []
    post:
      operationId: createTask
      summary: Create a task
      description: Creates a new content task with the specified configuration.
      tags:
      - Tasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskInput'
      responses:
        '201':
          description: Task successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          description: Invalid request body
        '401':
          description: Authentication credentials are missing or invalid
      security:
      - oauth2: []
    servers:
    - url: https://api.cmp.optimizely.com/v0
      description: Optimizely CMP API Server
  /tasks/{taskId}:
    get:
      operationId: getTask
      summary: Get a task
      description: Retrieves the details of a specific task by its identifier.
      tags:
      - Tasks
      parameters:
      - $ref: '#/components/parameters/taskId'
      responses:
        '200':
          description: Successfully retrieved the task
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '401':
          description: Authentication credentials are missing or invalid
        '404':
          description: Task not found
      security:
      - oauth2: []
    put:
      operationId: updateTask
      summary: Update a task
      description: Updates the specified task with the provided fields.
      tags:
      - Tasks
      parameters:
      - $ref: '#/components/parameters/taskId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskInput'
      responses:
        '202':
          description: Task successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          description: Invalid request body
        '401':
          description: Authentication credentials are missing or invalid
        '404':
          description: Task not found
      security:
      - oauth2: []
    servers:
    - url: https://api.cmp.optimizely.com/v0
      description: Optimizely CMP API Server
  /tasks/{id}:
    get:
      operationId: getTask
      tags:
      - Tasks
      summary: GET /tasks/{id}
      description: Get a task
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      responses:
        '200':
          description: Fetched task
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskResponse'
        '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: updateTask
      tags:
      - Tasks
      summary: PATCH /tasks/{id}
      description: Update a task
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      requestBody:
        description: Payload to update the task
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskUpdateRequest'
      responses:
        '200':
          description: Updated task
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskResponse'
        '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
  /tasks/{task_id}/urls:
    post:
      operationId: addUrlToTask
      tags:
      - Tasks
      summary: POST /tasks/{task_id}/urls
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Adds a URL to a task.
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 68fdf93d09caf1463f145dc6
      requestBody:
        description: Payload to add a URL to a task
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUrlToTaskRequest'
      responses:
        '201':
          description: Created task URL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskUrlResponse'
        '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
  /tasks/{id}/brief:
    get:
      operationId: getTaskBrief
      tags:
      - Tasks
      summary: GET /tasks/{id}/brief
      description: Get brief of the task
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      responses:
        '200':
          description: Fetched brief of the task
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskBriefResponse'
        '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
  /tasks/{id}/custom-fields:
    get:
      operationId: listTaskCustomFields
      tags:
      - Tasks
      summary: GET tasks/{id}/custom-fields
      description: Get the list of custom fields added to a task.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      - $ref: '#/components/parameters/offset_2'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          description: List of fetched custom fields
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    description: List of custom fields
                    type: array
                    items:
                      $ref: '#/components/schemas/TaskCustomField'
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination_2'
                    - type: object
                      properties:
                        next:
                          type:
                          - string
                          - 'null'
                          example: https://api.cmp.optimizely.com/v3/tasks/5f857f30e1c4a2038d6179e9/custom-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
    servers:
    - url: https://api.cmp.optimizely.com/v3
      description: v3 version of Optimizely CMP Open API
  /tasks/{task_id}/custom-fields/{custom_field_id}:
    get:
      operationId: getTaskCustomField
      tags:
      - Tasks
      summary: GET /tasks/{task_id}/custom-fields/{custom_field_id}
      description: Get a custom field of a task
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      - name: custom_field_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the custom field
        example: 9nu8ue9wf8u9nusd9q
      responses:
        '200':
          description: Fetched custom field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCustomField'
        '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: updateTaskCustomField
      tags:
      - Tasks
      summary: PATCH /tasks/{task_id}/custom-fields/{custom_field_id}
      description: 'Update a custom field of a task.

        You can update the following types:  `text_field`, `multi_line_text_field`, `checkboxes`, `dropdown`, `multi_select_dropdown`, `multiple_choice`, `date_field`, `rich_text_field`

        '
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      - name: custom_field_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the custom field
        example: 9nu8ue9wf8u9nusd9q
      requestBody:
        description: 'Payload to update the custom field.

          '
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCustomFieldUpdateRequest'
      responses:
        '200':
          description: Updated custom field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCustomField'
        '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
  /tasks/{task_id}/custom-fields/{custom_field_id}/choices:
    get:
      operationId: listTaskCustomFieldChoices
      tags:
      - Tasks
      summary: GET /tasks/{task_id}/custom-fields/{custom_field_id}/choices
      description: Get the list of the choices of a custom field in a task.
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      - name: custom_field_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the custom field
        example: 9nu8ue9wf8u9nusd9q
      - $ref: '#/components/parameters/offset_2'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          description: List of fetched custom field choices
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    description: List of custom field choices
                    type: array
                    items:
                      $ref: '#/components/schemas/TaskCustomFieldChoiceListResponseItem'
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination_2'
                    - type: object
                      properties:
                        next:
                          type:
                          - string
                          - 'null'
                          example: https://api.cmp.optimizely.com/v3/tasks/5f857f30e1c4a2038d6179e9/custom-fields/j90uv0sd9i0si09sdip/choices?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
    servers:
    - url: https://api.cmp.optimizely.com/v3
      description: v3 version of Optimizely CMP Open API
  /tasks/{task_id}/fields:
    get:
      operationId: listTaskFields
      tags:
      - Tasks
      summary: GET tasks/{task_id}/fields
      description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of fields of a task. '
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        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/tasks/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: addFieldToTask
      tags:
      - Tasks
      summary: POST tasks/{task_id}/fields
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add a field to a task.
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      requestBody:
        description: Payload to add a field to a task
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ObjectFieldCreateRequest'
      responses:
        '201':
          description: Added field to a task.
          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
  /tasks/{task_id}/fields/{field_id}:
    put:
      operationId: updateTaskField
      tags:
      - Tasks
      summary: PUT tasks/{taks_id}/fields/{field_id}
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update a field of a task.
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 124p857f3i220y38ad6179e9
      - name: field_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the field of the task
        example: 124p857f3i220y38ad6179e9
      requestBody:
        description: Payload to update a field of a task
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskFieldUpdateRequest'
      responses:
        '204':
          description: The field of the task was updated.
        '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
    delete:
      operationId: removeTaskField
      tags:
      - Tasks
      summary: DELETE tasks/{task_id}/fields/{field_id}
      description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Remove a field of a task. '
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 5f857f30e1c4a2038d6179e9
      - name: field_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the field
        example: fa63cece6aa811efb70202420ac80016
      responses:
        '204':
          description: The field is removed from the task
        '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
  /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}:
    get:
      operationId: getTaskSubStep
      tags:
      - Tasks
      summary: GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}
      description: Get the substep of a task
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      responses:
        '200':
          description: Fetched task substep information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSubStep'
        '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: updateTaskSubStep
      tags:
      - Tasks
      summary: PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}
      description: Update a substep of a step in a task
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      requestBody:
        description: Payload to update the substep
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskSubStepRequest'
            examples:
              is_in_progress:
                summary: Mark the substep as In Progress
                value:
                  is_in_progress: true
              is_completed:
                summary: Mark the substep as completed
                value:
                  is_completed: true
              assignee_id:
                summary: Change the assignee of the substep
                value:
                  assignee_id: 5fdf31d57f0d0e362e2b5908
      responses:
        '200':
          description: Fetched task substep information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSubStep'
        '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
  /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work:
    get:
      operationId: getTaskSubStepExternalWork
      tags:
      - Tasks
      summary: GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work
      description: Get the external work information of a task external substep
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      responses:
        '200':
          description: Fetched external work information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskExternalWorkResponse'
        '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: updateTaskSubStepExternalWork
      tags:
      - Tasks
      summary: PATCH /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/external-work
      description: Update the external work information of a task external substep
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      requestBody:
        description: Payload to update the external work information
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskExternalWorkRequest'
      responses:
        '200':
          description: Updated external work information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskExternalWorkResponse'
        '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
  /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments:
    get:
      operationId: listTaskSubStepComments
      tags:
      - Tasks
      summary: GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments
      description: Get the list of the comments of a task substep
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      responses:
        '200':
          description: List of fetched task substep comments
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    description: List of substep comments
                    type: array
                    items:
                      $ref: '#/components/schemas/TaskSubStepCommentResponse'
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination_2'
                    - type: object
                      properties:
                        next:
                          type:
                          - string
                          - 'null'
                          example: https://api.cmp.optimizely.com/v3/tasks/7d7f910551b00a722e0418830cee6612/steps/897f910551b00a722e0418830cee6612/sub-steps/700f910551b00a722e0418830cee6612/comments?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: addCommentToTaskSubStep
      tags:
      - Tasks
      summary: POST /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/comments
      description: Create a task substep comment
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the task
        example: 7d7f910551b00a722e0418830cee6612
      - name: step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the step
        example: 897f910551b00a722e0418830cee6612
      - name: sub_step_id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the substep
        example: 700f910551b00a722e0418830cee6612
      requestBody:
        description: Payload to create substep comment
        require

# --- truncated at 32 KB (202 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/optimizely/refs/heads/main/openapi/optimizely-tasks-api-openapi.yml