Newscred Tasks API

Facilitates the integration of external systems with Optimizely CMP through the following use cases: 1. **External Work Management** – Use the endpoints to link Optimizely CMP with an external system (such as Jira or Aha). The external system can send status updates back to Optimizely CMP so that the Optimizely CMP user receives in-app updates for the status of the 'ticket' in the external system. 2. **External Document Approval** – (a.k.a. Marketing Legal Review) Use the endpoints to link Optimizely CMP with an external system (such as Veeva PromoMats) to review, annotate, update, and approve marketing assets through the external system. The approval status can be sent back to Optimizely CMP so that the Optimizely CMP user receives in-app updates for the final approval status of the documents from the external system. For information on these use cases, contact Optimizely CMP Support.

Operations 44

GET /tasks GET /tasks #
POST /tasks POST /tasks #
GET /tasks/{id} GET /tasks/{id} #
PATCH /tasks/{id} PATCH /tasks/{id} #
GET /tasks/{id}/assets GET /tasks/{id}/assets #
POST /tasks/{id}/assets POST /tasks/{id}/assets #
GET /tasks/{id}/attachments GET /tasks/{id}/attachments #
GET /tasks/{id}/brief GET /tasks/{id}/brief #
GET /tasks/{id}/custom-fields GET tasks/{id}/custom-fields #
GET /tasks/{task_id}/articles/{article_id} GET /tasks/{task_id}/articles/{article_id} #
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}/drafts GET /tasks/{task_id}/assets/{asset_id}/drafts #
POST /tasks/{task_id}/assets/{asset_id}/drafts POST /tasks/{task_id}/assets/{asset_id}/drafts #
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 #
POST /tasks/{task_id}/comments POST /tasks/{task_id}/comments #
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 #
DELETE /tasks/{task_id}/fields/{field_id} DELETE tasks/{task_id}/fields/{field_id} #
PUT /tasks/{task_id}/fields/{field_id} PUT tasks/{taks_id}/fields/{field_id} #
GET /tasks/{task_id}/images/{image_id} GET /tasks/{task_id}/images/{image_id} #
POST /tasks/{task_id}/publishing-intents POST /tasks/{task_id}/publishing-intents #
GET /tasks/{task_id}/raw-files/{raw_file_id} GET /tasks/{task_id}/raw-files/{raw_file_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}/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 #
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/{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} #
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}/fields GET /tasks/{task_id}/steps/{step_id}/sub-steps/{sub_step_id}/fields #
POST /tasks/{task_id}/structured-contents POST /tasks/{task_id}/structured-contents #
DELETE /tasks/{task_id}/structured-contents/{content_id} DELETE /tasks/{task_id}/structured-contents/{content_id} #
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} #
POST /tasks/{task_id}/structured-contents/{content_id}/drafts POST /tasks/{task_id}/structured-contents/{content_id}/drafts #
POST /tasks/{task_id}/urls POST /tasks/{task_id}/urls #
GET /tasks/{task_id}/videos/{video_id} GET /tasks/{task_id}/videos/{video_id} #

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/newscred-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

newscred-tasks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Newscred Tasks API
  version: V3
  description: 'Operations tagged Tasks across 2 of this provider''s published API definitions: newscred-cmp-open-api-openapi.json, newscred-welcome-open-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- description: v3 version of Optimizely CMP Open API
  url: https://api.cmp.optimizely.com/v3
- url: https://api.welcomesoftware.com/v3
  description: v3 version of _Welcome_ Open API
tags:
- description: 'Facilitates the integration of external systems with Optimizely CMP through the following use cases:

    1. **External Work Management** – Use the endpoints to link Optimizely CMP with an external system (such as Jira or Aha). The external system can send status updates back to Optimizely CMP so that the Optimizely CMP user receives in-app updates for the status of the ''ticket'' in the external system.

    2. **External Document Approval** – (a.k.a. Marketing Legal Review) Use the endpoints to link Optimizely CMP with an external system (such as Veeva PromoMats) to review, annotate, update, and approve marketing assets through the external system. The approval status can be sent back to Optimizely CMP so that the Optimizely CMP user receives in-app updates for the final approval status of the documents from the external system.

    For information on these use cases, contact Optimizely CMP Support.

    '
  name: Tasks
paths:
  /tasks:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get a list of tasks.
      operationId: listTasks
      parameters:
      - example: task 1
        in: query
        name: search_key
        schema:
          description: Search for task title
          type: string
      - example: 8n7f910o51b00b722o0418n30cie8211
        in: query
        name: campaign
        schema:
          description: Campaign id of the tasks
          type: string
      - example: 8n7f910o51b00b722o0418n30cie8211
        in: query
        name: workflow
        schema:
          description: Workflow id of the tasks
          type: string
      - example: 8n7f910o51b00b722o0418n30cie8211
        in: query
        name: milestone
        schema:
          description: Milestone id of the tasks
          type: string
      - example: '2022-08-24T00:00:00.000Z'
        in: query
        name: start_date
        schema:
          description: Start date of the tasks, in ISO 8601 UTC format
          type: string
      - example: '2022-08-24T00:00:00.000Z'
        in: query
        name: due_date
        schema:
          description: Due date of the tasks, in ISO 8601 UTC format
          type: string
      - example:
        - In Progress
        - Not Started
        in: query
        name: status
        schema:
          description: Filter tasks by status. Provide multiple statuses to filter tasks across multiple statuses.
          items:
            enum:
            - Archived
            - Completed
            - Overdue
            - Not Started
            - In Progress
            - On Hold
            type: string
          type: array
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of tasks
                    items:
                      $ref: '#/components/schemas/TaskListResponseItem'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched tasks
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      summary: GET /tasks
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Create a task
      operationId: createTask
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCreateRequest'
        description: Payload to create a task
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskResponse'
          description: Created task
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: POST /tasks
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{id}:
    get:
      description: Get a task
      operationId: getTask
      parameters:
      - example: 7d7f910551b00a722e0418830cee6612
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskResponse'
          description: Fetched task
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{id}
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    patch:
      description: Update a task
      operationId: updateTask
      parameters:
      - example: 7d7f910551b00a722e0418830cee6612
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskUpdateRequest'
        description: Payload to update the task
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskResponse'
          description: Updated task
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: PATCH /tasks/{id}
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{id}/assets:
    get:
      description: Get the list of the assets or contents of a task
      operationId: listTaskAssets
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of assets
                    items:
                      allOf:
                      - $ref: '#/components/schemas/TaskAssetResponse'
                      - properties:
                          library_asset_id:
                            description: Unique identifier of the corresponding library asset — the library asset this task asset was forked from, or the one it was released to.
                            example: 6a8b2c3d4e5f6071829a3b4c
                            type:
                            - string
                            - 'null'
                        type: object
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/5f857f30e1c4a2038d6179e9/assets?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched assets
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{id}/assets
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: This API allows you to add an asset to a task. There currently two mechanisms to add an asset - either by uploading an asset first and then calling this API (for only `images`, `videos`, and `raw files`), or by adding an asset from the library. The 'type' parameter in the request body will determine the mechanism used to add the asset. See [Upload assets](https://docs.developers.optimizely.com/content-marketing-platform/docs/upload-assets) to upload an asset.
      operationId: addAssetToTask
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskAssetRequest'
        description: 'Payload to add an asset. There are two mechanisms for adding assets to a task:

          - `direct_upload` - An asset that has been uploaded using the [Upload assets](https://docs.developers.optimizely.com/content-marketing-platform/docs/upload-assets) endpoint.

          - `fork_from_library` - This will fork an existing asset from the library to the task.

          The `type` field is optional, and will default to `direct_upload` if not provided.

          Note: Renditions is currently not supported for library assets.

          '
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskAssetResponse'
          description: Created asset
        '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'
      summary: POST /tasks/{id}/assets
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{id}/attachments:
    get:
      description: Get the list of the attachments of a task
      operationId: listTaskAttachments
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of attachments
                    items:
                      $ref: '#/components/schemas/AttachmentResponse'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/attachments?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched attachments
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{id}/attachments
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{id}/brief:
    get:
      description: Get brief of the task
      operationId: getTaskBrief
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskBriefResponse'
          description: Fetched brief of the task
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{id}/brief
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{id}/custom-fields:
    get:
      description: Get the list of custom fields added to a task.
      operationId: listTaskCustomFields
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of custom fields
                    items:
                      $ref: '#/components/schemas/TaskCustomField'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/5f857f30e1c4a2038d6179e9/custom-fields?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched custom fields
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET tasks/{id}/custom-fields
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/articles/{article_id}:
    get:
      description: Get an article associated with the task identified by `task_id`.
      operationId: getTaskArticle
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: article_id
        required: true
        schema:
          description: Unique identifier of the article associated with the task
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskArticle'
          description: Fetched article
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{task_id}/articles/{article_id}
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/assets/{asset_id}/comments:
    get:
      description: List all the comments for the latest version of a task asset.
      operationId: listTaskAssetComments
      parameters:
      - example: 7d7f910551b00a722e0418830cee6612
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 897f910551b00a722e0418830cee6612
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of comments
                    items:
                      $ref: '#/components/schemas/TaskAssetCommentResponse'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/7d7f910551b00a722e0418830cee6612/assets/897f910551b00a722e0418830cee6612/comments?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                type: object
          description: List of comments for the asset
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{task_id}/assets/{asset_id}/comments
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: Add a comment to the latest version of a task asset. Supports adding comments to only **images**, **videos** and **raw files** type assets.
      operationId: addCommentToTaskAsset
      parameters:
      - example: 7d7f910551b00a722e0418830cee6612
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 897f910551b00a722e0418830cee6612
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentCreateRequest'
        description: Payload to add comment
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskAssetCommentResponse'
          description: Added comment
        '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'
      summary: POST /tasks/{task_id}/assets/{asset_id}/comments
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/assets/{asset_id}/drafts:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of drafts on an asset of a task.
      operationId: listTaskAssetDrafts
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of drafts
                    items:
                      $ref: '#/components/schemas/TaskAssetDraftListResponseItem'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/5f857f30e1c4a2038d6179e9/assets/5d7f910551b00a722e0418830cee6631/drafts?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched drafts
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{task_id}/assets/{asset_id}/drafts
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: Add a new draft to a task asset. You can add a draft to only `images`, `videos`, and `raw files` type task assets. See [Upload assets](https://docs.developers.optimizely.com/content-marketing-platform/docs/upload-assets) to upload an asset draft.
      operationId: addDraftToTaskAsset
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskAssetRequest'
        description: Payload to add a draft to an asset
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskAssetDraftResponse'
          description: Created draft
        '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'
      summary: POST /tasks/{task_id}/assets/{asset_id}/drafts
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/assets/{asset_id}/fields:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> List all the fields of a task asset.
      operationId: listTaskAssetFields
      parameters:
      - example: 7d7f910551b00a722e0418830cee6612
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 897f910551b00a722e0418830cee6612
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of fields
                    items:
                      $ref: '#/components/schemas/AssetFieldListResponseItem'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/tasks/7d7f910551b00a722e0418830cee6612/assets/897f910551b00a722e0418830cee6612/fields?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                type: object
          description: List of fields for the asset
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{task_id}/assets/{asset_id}/fields
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    put:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Replace fields of an asset in a task.
      operationId: updateTaskAssetFields
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the task asset
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskAssetFieldsUpdateRequest'
        description: Payload to replace the fields
        required: true
      responses:
        '204':
          description: Fields successfulled updated.
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: PUT tasks/{task_id}/assets/{asset_id}/fields
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/comments:
    post:
      description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Post a comment on a task. '
      operationId: addCommentToTask
      parameters:
      - example: da80cfd7bbf84959a8a981acbad996b3
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentCreateRequest'
        description: Payload to add a comment
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentResponse'
          description: Created a comment for the task
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: POST /tasks/{task_id}/comments
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /tasks/{task_id}/custom-fields/{custom_field_id}:
    get:
      description: Get a custom field of a task
      operationId: getTaskCustomField
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: task_id
        required: true
        schema:
          description: Unique identifier of the task
          type: string
      - example: 9nu8ue9wf8u9nusd9q
        in: path
        name: custom_field_id
        required: true
        schema:
          description: Unique identifier of the custom field
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCustomField'
          description: Fetched custom field
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /tasks/{task_id}/custom-fields/{custom_field_id}
      tags:
      - Tasks
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    patch:
      description: 'Update a custom field of a task.

        You can update the fo

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