Newscred Library API

The Library API from Newscred — 24 operation(s) for library.

Business capability
Media Asset Management BC-3710

Operations 41

GET /articles/{id} GET /articles/{id} #
GET /asset-lineages GET /asset-lineages #
GET /assets GET /assets #
POST /assets POST /assets #
GET /assets/{asset_id}/fields GET assets/{asset_id}/fields #
PUT /assets/{asset_id}/fields PUT /assets/{asset_id}/fields #
PUT /assets/{asset_id}/fields/{field_id} PUT /assets/{asset_id}/fields/{field_id} #
POST /assets/{asset_id}/lineages POST /assets/{asset_id}/lineages #
DELETE /assets/{asset_id}/lineages/{lineage_id} DELETE /assets/{asset_id}/lineages/{lineage_id} #
GET /assets/{asset_id}/permissions GET /assets/{asset_id}/permissions #
POST /assets/{asset_id}/permissions POST /assets/{asset_id}/permissions #
DELETE /assets/{asset_id}/permissions/{accessor_id} DELETE /asstes/{asset_id}/permissions/{accessor_id} #
PATCH /assets/{asset_id}/permissions/{accessor_id} PATCH /assets/{asset_id}/permissions/{accessor_id} #
GET /assets/{asset_id}/related-assets GET /assets/{asset_id}/related-assets #
PUT /assets/{asset_id}/related-assets PUT /assets/{asset_id}/related-assets #
GET /assets/{asset_id}/renditions GET /assets/{asset_id}/renditions #
POST /assets/{asset_id}/versions POST /assets/{asset_id}/versions #
POST /file-urls POST /file-urls #
GET /folders GET /folders #
POST /folders POST /folders #
DELETE /folders/{id} DELETE /folders/{id} #
GET /folders/{id} GET /folders/{id} #
PATCH /folders/{id} PATCH /folders/{id} #
GET /folders/{id}/permissions GET /folders/{id}/permissions #
POST /folders/{id}/permissions POST /folders/{id}/permissions #
DELETE /folders/{id}/permissions/{accessor_id} DELETE /folders/{id}/permissions/{accessor_id} #
PATCH /folders/{id}/permissions/{accessor_id} PATCH /folders/{id}/permissions/{accessor_id} #
DELETE /images/{id} DELETE /images/{id} #
GET /images/{id} GET /images/{id} #
PATCH /images/{id} PATCH /images/{id} #
DELETE /raw-files/{id} DELETE /raw-files/{id} #
GET /raw-files/{id} GET /raw-files/{id} #
PATCH /raw-files/{id} PATCH /raw-files/{id} #
GET /rendition-configs/{id} GET /rendition-configs/{id} #
GET /renditions/{id} GET /renditions/{id} #
POST /structured-contents POST /structured-contents #
GET /structured-contents/{id} GET /structured-contents/{id} #
PATCH /structured-contents/{id} PATCH /structured-contents/{id} #
DELETE /videos/{id} DELETE /videos/{id} #
GET /videos/{id} GET /videos/{id} #
PATCH /videos/{id} PATCH /videos/{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-library-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-library-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Newscred Library API
  version: V3
  description: 'Operations tagged Library 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:
- name: Library
paths:
  /articles/{id}:
    get:
      description: Get an article
      operationId: getArticle
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: id
        required: true
        schema:
          description: Unique identifier of the article
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryArticle'
          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 /articles/{id}
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /asset-lineages:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of asset lineage.
      operationId: listAssetLineages
      parameters:
      - example: 1265ca474ba987cc925164aa7
        in: query
        name: asset_id
        schema:
          description: Unique identifier of the asset. Can be appended multiple times, such as `asset_id=assetId1&asset_id=assetId2`
          type: string
      - example: external
        in: query
        name: used_in
        schema:
          description: Indicates where an asset is being used.
          enum:
          - external
          type: string
      - description: Date and time as the lower limit to filter asset lineages by `created_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: created_at__from
        required: false
        schema:
          format: date-time
          type: string
      - description: Date and time as the upper limit to filter asset lineages by `created_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: created_at__to
        required: false
        schema:
          format: date-time
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of asset lineage
                    items:
                      $ref: '#/components/schemas/AssetLineageResponse'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/asset-lineages?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched asset lineage
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      summary: GET /asset-lineages
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets:
    get:
      description: 'Get the list of assets. Assets are sorted by `modified_at` in descending order.

        To get assets that are not inside any folder, pass `include_subfolder_assets=false` in the query param.

        '
      operationId: listAssets
      parameters:
      - description: 'Asset type to filter by. Example: `type=image&type=video`'
        examples:
          multiple:
            summary: Filter by multiple types
            value:
            - article
            - image
            - video
          single:
            summary: Filter by a single type
            value:
            - image
        explode: true
        in: query
        name: type
        schema:
          default:
          - article
          - image
          - video
          - raw_file
          - structured_content
          items:
            enum:
            - article
            - image
            - video
            - raw_file
            - structured_content
            type: string
          type: array
        style: form
      - description: Label to filter by. **Must be passed as urlencoded string**. Labels that do not exist are ignored. If none of the provided labels exist, filtering is not applied. Example – `label=%7B%22group%22%3A%22ee63e3ee43925bb5cc8cd17b817d93ee%22%2C%22values%22%3A%5B%226706efc7828cd6aaedbc0434139cd3e1%22%2C%221f32651216cf2aefcaa08be1ea7dedf1%22%5D%7D`
        examples:
          multiple:
            summary: Filter by multiple labels
            value:
            - '{"group": "ee63e3ee43925bb5cc8cd17b817d93ee", "values": ["6706efc7828cd6aaedbc0434139cd3e1", "1f32651216cf2aefcaa08be1ea7dedf1"]}'
            - '{"group": "126123b543912bb5cc12d17b817d9312", "values": ["aa63e3ee43925bb5cc8cd17b817d93aa", "df697bd824a944bf7d4fb6e350d9c5bd"]}'
          single:
            summary: Filter by a single label
            value:
            - '{"group": "ee63e3ee43925bb5cc8cd17b817d93ee", "values": ["6706efc7828cd6aaedbc0434139cd3e1", "1f32651216cf2aefcaa08be1ea7dedf1"]}'
        explode: true
        in: query
        name: label
        schema:
          items:
            additionalProperties: false
            properties:
              group:
                description: Identifier of the label group
                example: 2467e583a60e23fda2b89db81a453cd2
                type: string
              values:
                description: List of identifiers of the label values
                items:
                  description: Identifier of the label value
                  example: 71c378f3fee3d822759d1bdc2aab628c
                  type: string
                type: array
            required:
            - group
            - values
            type: object
          type: array
        style: form
      - description: List of fields to filter by. **Must be passed as base64 encoded string**. Fields that do not exist are ignored. If none of the provided fields exist, filtering is not applied. Example – `fields=Wwp7CiJpZCI6ICI2N2E4NDZhMWM3NzU1YTFwNThpNjh5MzVhIiwKInZhbHVlcyI6IFsiNjdhODQ2YTFjNzc1YWU1YWExYTE0YTA1Il0KfQpd=`
        examples:
          multiple:
            summary: Filter by multiple fields
            value:
            - '[{"id": "ee63e3ee43925bb5cc8cd17b817d93ee", "values": ["6706efc7828cd6aaedbc0434139cd3e1", "1f32651216cf2aefcaa08be1ea7dedf1"]}, {"id": "126123b543912bb5cc12d17b817d9312", "values": ["aa63e3ee43925bb5cc8cd17b817d93aa", "df697bd824a944bf7d4fb6e350d9c5bd"]}]'
          single:
            summary: Filter by a single field
            value:
            - '[{"id": "ee63e3ee43925bb5cc8cd17b817d93ee", "values": ["6706efc7828cd6aaedbc0434139cd3e1", "1f32651216cf2aefcaa08be1ea7dedf1"]}]'
        explode: true
        in: query
        name: fields
        schema:
          items:
            additionalProperties: false
            properties:
              id:
                description: Identifier of the field
                example: 2467e583a60e23fda2b89db81a453cd2
                type: string
              values:
                description: List of identifiers of the field values
                items:
                  description: Identifier of the field value
                  example: 71c378f3fee3d822759d1bdc2aab628c
                  type: string
                type: array
            required:
            - id
            - values
            type: object
          type: array
        style: form
      - description: Date and time as the lower limit to filter assets by `created_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: created_at__from
        required: false
        schema:
          format: date-time
          type: string
      - description: Date and time as the upper limit to filter assets by `created_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: created_at__to
        required: false
        schema:
          format: date-time
          type: string
      - description: Date and time as the lower limit to filter assets by `modified_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: modified_at__from
        required: false
        schema:
          format: date-time
          type: string
      - description: Date and time as the upper limit to filter assets by `modified_at`, in ISO 8601 UTC format
        example: '2018-11-30T13:32:44Z'
        in: query
        name: modified_at__to
        required: false
        schema:
          format: date-time
          type: string
      - description: ID of the library folder to include assets from
        example: 6bb8db20a5b611ebae319b7c541b1a7f
        in: query
        name: folder_id
        required: false
        schema:
          type: string
      - description: Indicates whether assets from subfolders need to be included
        example: 'false'
        in: query
        name: include_subfolder_assets
        required: false
        schema:
          default: true
          type: boolean
      - description: Search assets by title or content description
        example: Cute Cat
        in: query
        name: search_text
        required: false
        schema:
          type: string
      - description: ID of the campaign to include assets from
        example: 673218bee23887779e9e9a6f
        in: query
        name: campaign_id
        required: false
        schema:
          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:
                      $ref: '#/components/schemas/AssetResponse'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/Pagination'
                    - properties:
                        next:
                          example: https://api.cmp.optimizely.com/v3/assets?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                  total_count:
                    description: Total number of assets found based on the request
                    type: number
                required:
                - data
                - pagination
                - total_count
                type: object
          description: List of fetched assets
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      summary: GET /assets
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: Create a new asset. Supports only `images`, `videos`, and `raw files`. See [Upload assets](https://docs.developers.optimizely.com/content-marketing-platform/docs/upload-assets) to upload an asset.
      operationId: createAsset
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LibraryAssetCreateRequest'
        description: Payload to create an asset
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
          description: Created asset
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      summary: POST /assets
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/fields:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of fields of an asset.
      operationId: listAssetFields
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      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/assets/5f857f30e1c4a2038d6179e9/fields?offset=10&page_size=10
                          type:
                          - string
                          - 'null'
                      type: object
                required:
                - data
                - pagination
                type: object
          description: List of fetched fields
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET assets/{asset_id}/fields
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    put:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Replace existing fields of an asset.
      operationId: updateAssetFields
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFieldsUpdateRequest'
        description: Payload to replace the fields
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: List of fields
                    items:
                      $ref: '#/components/schemas/AssetFieldListResponseItem'
                    type: array
                  links:
                    additionalProperties: false
                    description: Meta links
                    properties:
                      asset_fields:
                        description: URL to get the asset fields
                        example: https://api.cmp.optimizely.com/v3/assets/5f857f30e1c4a2038d6179e9/fields
                        type: string
                      asset_url:
                        description: URL of the asset
                        example: https://api.cmp.optimizely.com/v3/asset-urls/5f857f30e1c4a2038d6179e9
                        type: string
                    required:
                    - asset_fields
                    - asset_url
                    type: object
                required:
                - data
                - links
                type: object
          description: List of fields after replacement
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: PUT /assets/{asset_id}/fields
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/fields/{field_id}:
    put:
      description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update the field value of an asset. '
      operationId: updateAssetField
      parameters:
      - example: 5f857f30e1c4a2038d6179e9
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - example: 4f857f30e1c4a2038d6179e7
        in: path
        name: field_id
        required: true
        schema:
          description: Unique identifier of the field of the asset
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetFieldUpdateRequest'
        description: Payload to update the field value
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetFieldUpdateResponse'
          description: Updated the asset field
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: PUT /assets/{asset_id}/fields/{field_id}
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/lineages:
    post:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add a new external asset lineage.
      operationId: createAssetLineage
      parameters:
      - 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/AssetLineageCreateRequest'
        description: Payload to add an external asset lineage for a library asset
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetLineageResponse'
          description: Created external asset lineage
        '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 /assets/{asset_id}/lineages
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/lineages/{lineage_id}:
    delete:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Delete an asset lineage.
      operationId: deleteAssetLineage
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - example: ff3f8e024f0611ed993202420ac8001b
        in: path
        name: lineage_id
        required: true
        schema:
          description: Unique identifier of the lineage
          type: string
      responses:
        '204':
          description: Deleted the asset lineage
        '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: DELETE /assets/{asset_id}/lineages/{lineage_id}
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/permissions:
    get:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> List of entities that have permission to access the asset
      operationId: listAssetPermissions
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - example: view
        in: query
        name: access
        schema:
          description: To filter by specific access level. Cannot be used in addition to max_access and min_access params.
          enum:
          - view
          - edit
          - comment
          - delete
          type: string
      - example: view
        in: query
        name: max_access
        schema:
          description: To filter by specific access level and higher. Cannot be used in addition to access and min_access params.
          enum:
          - view
          - edit
          - comment
          - delete
          type: string
      - example: view
        in: query
        name: min_access
        schema:
          description: To filter by specific access level and lower. Cannot be used in addition to access and max_access params.
          enum:
          - view
          - edit
          - comment
          - delete
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetPermissionListResponseItem'
          description: List of permissions
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /assets/{asset_id}/permissions
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Grant asset access to users or teams
      operationId: addAssetPermissions
      parameters:
      - 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/AssetPermissionBulkCreateRequest'
        description: Payload to add list of accessors to asset permissions
        required: true
      responses:
        '204':
          description: Permission access granted
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: POST /assets/{asset_id}/permissions
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/permissions/{accessor_id}:
    delete:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Remove accessor's access from an asset
      operationId: removeAssetPermission
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: accessor_id
        required: true
        schema:
          description: Unique identifier of the accessor. Accessor should be a user or a team. Accessor cannot be an owner.
          type: string
      responses:
        '204':
          description: Accessor's access removed
        '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: DELETE /asstes/{asset_id}/permissions/{accessor_id}
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    patch:
      description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update accessor's access level and ownership of asset
      operationId: updateAssetPermission
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: accessor_id
        required: true
        schema:
          description: Unique identifier of the accessor. Accessor should be a user or a team.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetPermissionUpdateRequest'
        description: Payload to update permission of accessors
        required: true
      responses:
        '204':
          description: Permission access granted
        '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: PATCH /assets/{asset_id}/permissions/{accessor_id}
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/related-assets:
    get:
      description: 'Returns a paginated list of related assets for the specified asset. Only supported for asset types: article, image, video, raw_file, and structured_content.'
      operationId: listRelatedAssets
      parameters:
      - example: 5d7f910551b00a722e0418830cee6631
        in: path
        name: asset_id
        required: true
        schema:
          description: Unique identifier of the asset
          type: string
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RelatedAssetsListResponse'
          description: List of related assets
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: GET /assets/{asset_id}/related-assets
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    put:
      description: 'Replaces all related assets for the specified asset. Only supported for asset types: article, image, video, raw_file, and structured_content.'
      operationId: replaceRelatedAssets
      parameters:
      - 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/ReplaceRelatedAssetsRequest'
        description: List of related assets to set for the specified asset
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReplaceRelatedAssetsResponse'
          description: Successfully replaced related assets
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: PUT /assets/{asset_id}/related-assets
      tags:
      - Library
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - description: v3 version of Optimizely CMP Open API
      url: https://api.cmp.optimizely.com/v3
  /assets/{asset_id}/renditions:
    get:
      description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the renditions of an asset given its `id`. '
      operationId: listAssetRenditions
      parameters:
      - 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 renditions
                    items:
                      $ref: '#/components/schemas/BaseAssetRenditionResponse'
                    type: array
                  pagination:
                    allOf:
                    - $ref: '#/components/schemas/

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