openapi: 3.0.3 info: title: MediaValet Open API description: >- The MediaValet Open API is a RESTful, JSON, hypermedia-driven interface to the MediaValet cloud digital asset management (DAM) platform. It lets developers and partners automate the management of digital assets, categories, attributes, keywords, uploads, and users. Requests are made to the API gateway at https://api.mediavalet.com and must carry two credentials: an OAuth 2.0 (OIDC) Bearer access token obtained from https://login.mediavalet.com/connect/token, and a per-account subscription key sent in the Ocp-Apim-Subscription-Key header. Access to the API requires a MediaValet subscription and Developer Portal registration. The paths documented here are modeled from MediaValet's public developer documentation and community SDKs; verify exact request/response schemas against the live reference at docs.mediavalet.com. version: '1.0' contact: name: MediaValet url: https://www.mediavalet.com servers: - url: https://api.mediavalet.com description: MediaValet API gateway (public) security: - oauth2: [] subscriptionKey: [] tags: - name: Assets description: Core digital asset objects and their derivatives. - name: Categories description: Hierarchical folders that organize assets. - name: Attributes description: Custom metadata fields and their values on assets. - name: Keywords description: Keyword vocabulary and per-asset tagging. - name: Uploads description: Chunked ingest of new files into a library. - name: Users description: Users, groups, and permissions. paths: /search: get: operationId: searchAssets tags: - Assets summary: Search assets description: Search the library for assets matching a query, with pagination and filtering. parameters: - name: q in: query required: false schema: type: string description: Full-text search query. - name: offset in: query required: false schema: type: integer - name: count in: query required: false schema: type: integer responses: '200': description: A paginated list of matching assets. content: application/json: schema: $ref: '#/components/schemas/AssetList' '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}: get: operationId: getAsset tags: - Assets summary: Get an asset description: Retrieve a single asset by its identifier, including metadata and rendition links. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The requested asset. content: application/json: schema: $ref: '#/components/schemas/Asset' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateAsset tags: - Assets summary: Update an asset description: Update an asset's editable fields. parameters: - $ref: '#/components/parameters/AssetId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Asset' responses: '200': description: The updated asset. content: application/json: schema: $ref: '#/components/schemas/Asset' '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/relatedassets: get: operationId: getRelatedAssets tags: - Assets summary: List related assets description: List assets related to the given asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: A list of related assets. content: application/json: schema: $ref: '#/components/schemas/AssetList' '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/renditions: get: operationId: getAssetRenditions tags: - Assets summary: List asset renditions description: List the generated renditions (thumbnails, previews, derivatives) for an asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: A list of renditions. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/attributes: get: operationId: getAssetAttributes tags: - Assets summary: Get asset attributes description: Retrieve the attribute values applied to an asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The asset's attribute values. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/categories: get: operationId: getAssetCategories tags: - Assets summary: Get asset categories description: List the categories an asset is filed under. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The categories for the asset. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/keywords: get: operationId: getAssetKeywords tags: - Assets summary: Get asset keywords description: List the keywords applied to an asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The keywords for the asset. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' post: operationId: addAssetKeywords tags: - Assets summary: Add keywords to an asset description: Add one or more keywords to an asset. parameters: - $ref: '#/components/parameters/AssetId' requestBody: required: true content: application/json: schema: type: array items: type: string responses: '200': description: Keywords added. '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/keyword/{keyword}: delete: operationId: removeAssetKeyword tags: - Assets summary: Remove a keyword from an asset description: Remove a single keyword from an asset. parameters: - $ref: '#/components/parameters/AssetId' - name: keyword in: path required: true schema: type: string responses: '204': description: Keyword removed. '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/comments: get: operationId: getAssetComments tags: - Assets summary: Get asset comments description: List comments on an asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The asset's comments. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/history: get: operationId: getAssetHistory tags: - Assets summary: Get asset history description: Retrieve the change history / audit trail for an asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The asset's history. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /assets/{assetId}/videoIntelligence/status: get: operationId: getVideoIntelligenceStatus tags: - Assets summary: Get video intelligence status description: Retrieve the processing status of AI video intelligence for a video asset. parameters: - $ref: '#/components/parameters/AssetId' responses: '200': description: The video intelligence status. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /categories: get: operationId: listCategories tags: - Categories summary: List categories description: List the categories in the library. responses: '200': description: A list of categories. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCategory tags: - Categories summary: Create a category description: Create a new category in the library tree. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Category' responses: '201': description: The created category. content: application/json: schema: $ref: '#/components/schemas/Category' '401': $ref: '#/components/responses/Unauthorized' /categories/{categoryId}: get: operationId: getCategory tags: - Categories summary: Get a category description: Retrieve a single category by its identifier. parameters: - $ref: '#/components/parameters/CategoryId' responses: '200': description: The requested category. content: application/json: schema: $ref: '#/components/schemas/Category' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /categories/{categoryId}/assets: get: operationId: getCategoryAssets tags: - Categories summary: List assets in a category description: List the assets filed under a category. parameters: - $ref: '#/components/parameters/CategoryId' responses: '200': description: A list of assets in the category. content: application/json: schema: $ref: '#/components/schemas/AssetList' '401': $ref: '#/components/responses/Unauthorized' /categories/permissionSets: get: operationId: listCategoryPermissionSets tags: - Categories summary: List category permission sets description: List the permission sets that govern access to categories. responses: '200': description: A list of permission sets. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /attributes: get: operationId: listAttributes tags: - Attributes summary: List attributes description: List the custom attribute (metadata field) definitions in the library. responses: '200': description: A list of attribute definitions. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' post: operationId: createAttribute tags: - Attributes summary: Create an attribute description: Create a new custom attribute definition. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Attribute' responses: '201': description: The created attribute. content: application/json: schema: $ref: '#/components/schemas/Attribute' '401': $ref: '#/components/responses/Unauthorized' /attributes/{attributeId}: get: operationId: getAttribute tags: - Attributes summary: Get an attribute description: Retrieve a single attribute definition by its identifier. parameters: - name: attributeId in: path required: true schema: type: string responses: '200': description: The requested attribute. content: application/json: schema: $ref: '#/components/schemas/Attribute' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /keywords: get: operationId: listKeywords tags: - Keywords summary: List keywords description: List the keyword vocabulary for the library. responses: '200': description: A list of keywords. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' post: operationId: createKeyword tags: - Keywords summary: Create a keyword description: Add a new keyword to the library vocabulary. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Keyword' responses: '201': description: The created keyword. content: application/json: schema: $ref: '#/components/schemas/Keyword' '401': $ref: '#/components/responses/Unauthorized' /keywords/{keywordId}: get: operationId: getKeyword tags: - Keywords summary: Get a keyword description: Retrieve a single keyword by its identifier. parameters: - name: keywordId in: path required: true schema: type: string responses: '200': description: The requested keyword. content: application/json: schema: $ref: '#/components/schemas/Keyword' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /keywordGroups: get: operationId: listKeywordGroups tags: - Keywords summary: List keyword groups description: List the keyword groups that organize the keyword vocabulary. responses: '200': description: A list of keyword groups. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /uploads: post: operationId: createUpload tags: - Uploads summary: Create an upload session description: >- Create an upload session for a new file. The response returns the storage location and identifiers used to transfer file chunks and, once all chunks are transferred, to commit the upload for processing into an asset. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UploadRequest' responses: '201': description: The created upload session. content: application/json: schema: $ref: '#/components/schemas/Upload' '401': $ref: '#/components/responses/Unauthorized' /uploads/{uploadId}: get: operationId: getUpload tags: - Uploads summary: Get an upload session description: Retrieve the status of an upload session. parameters: - name: uploadId in: path required: true schema: type: string responses: '200': description: The upload session status. content: application/json: schema: $ref: '#/components/schemas/Upload' '401': $ref: '#/components/responses/Unauthorized' post: operationId: commitUpload tags: - Uploads summary: Commit an upload session description: >- Commit a completed upload session so MediaValet processes the transferred file into a managed asset with generated renditions. parameters: - name: uploadId in: path required: true schema: type: string responses: '202': description: The upload was accepted for processing. '401': $ref: '#/components/responses/Unauthorized' /users: get: operationId: listUsers tags: - Users summary: List users description: List the users in the organization. responses: '200': description: A list of users. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /users/current: get: operationId: getCurrentUser tags: - Users summary: Get the current user description: Retrieve the profile of the authenticated user. responses: '200': description: The current user. content: application/json: schema: $ref: '#/components/schemas/User' '401': $ref: '#/components/responses/Unauthorized' /users/current/permissions: get: operationId: getCurrentUserPermissions tags: - Users summary: Get the current user's permissions description: Retrieve the effective permissions of the authenticated user. responses: '200': description: The current user's permissions. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /users/approvers: get: operationId: listApprovers tags: - Users summary: List approvers description: List the users who can approve requests within the organizational unit. responses: '200': description: A list of approvers. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' /groups: get: operationId: listUserGroups tags: - Users summary: List user groups description: List the user groups in the organization. responses: '200': description: A list of user groups. content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' components: securitySchemes: oauth2: type: oauth2 description: >- OAuth 2.0 / OpenID Connect. Obtain an access token from https://login.mediavalet.com/connect/token using the authorization code flow (interactive apps) or password / client-credential grants, with scopes openid api offline_access. Send the token as a Bearer Authorization header. flows: authorizationCode: authorizationUrl: https://login.mediavalet.com/connect/authorize tokenUrl: https://login.mediavalet.com/connect/token scopes: openid: OpenID Connect identity api: Access the MediaValet API offline_access: Obtain a refresh token subscriptionKey: type: apiKey in: header name: Ocp-Apim-Subscription-Key description: Per-account API subscription key issued through the MediaValet Developer Portal. parameters: AssetId: name: assetId in: path required: true description: The unique identifier (UUID) of the asset. schema: type: string format: uuid CategoryId: name: categoryId in: path required: true description: The unique identifier (UUID) of the category. schema: type: string format: uuid responses: Unauthorized: description: Authentication failed - missing or invalid access token or subscription key. NotFound: description: The requested resource was not found. schemas: Asset: type: object properties: id: type: string format: uuid filename: type: string title: type: string description: type: string mediaType: type: string description: The kind of media, e.g. image, video, document. createdDate: type: string format: date-time modifiedDate: type: string format: date-time AssetList: type: object properties: totalCount: type: integer offset: type: integer count: type: integer payload: type: array items: $ref: '#/components/schemas/Asset' Category: type: object properties: id: type: string format: uuid name: type: string parentId: type: string format: uuid assetCount: type: integer Attribute: type: object properties: id: type: string format: uuid name: type: string type: type: string description: The data type of the attribute, e.g. text, number, date, list. Keyword: type: object properties: id: type: string format: uuid name: type: string keywordGroupId: type: string format: uuid Upload: type: object properties: id: type: string format: uuid filename: type: string status: type: string description: The processing status of the upload session. storageLocation: type: string description: The location to which file chunks are transferred. UploadRequest: type: object required: - filename properties: filename: type: string fileSize: type: integer format: int64 categoryId: type: string format: uuid User: type: object properties: id: type: string format: uuid email: type: string firstName: type: string lastName: type: string role: type: string