Newscred Library API
The Library API from Newscred — 24 operation(s) for library.
The Library API from Newscred — 24 operation(s) for library.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/newscred-library-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
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