openapi: 3.0.3 info: title: iconik API description: >- iconik is a hybrid cloud media asset management (MAM) platform. Its public API is API-first and organized as versioned REST microservices under https://app.iconik.io/API/{service}/v1/. This document models the core logical APIs an integrator uses most: Assets and Collections (assets microservice), Metadata, Search, Files, and Jobs. Every request is authenticated with two headers - App-ID (application identifier) and Auth-Token (auth token) - generated by an administrator in the iconik web UI under Settings / Application Tokens. Requests and responses are JSON. List responses are paginated and return page metadata (page, pages, total). Endpoints are grounded in iconik's published API reference; request and response schemas are honestly modeled and simplified where the interactive reference is the authoritative source of the full object shapes. version: '1.0' contact: name: iconik url: https://www.iconik.io servers: - url: https://app.iconik.io/API description: iconik (US / default region) - url: https://eu.iconik.io/API description: iconik (EU region) security: - appId: [] authToken: [] tags: - name: Assets description: Core media asset containers. - name: Collections description: Folder-like grouping of assets and sub-collections. - name: Metadata description: Custom metadata fields, views, and values. - name: Search description: Full-text and metadata search across the catalog. - name: Files description: Files, proxies, formats, and storages attached to assets. - name: Jobs description: Asynchronous job tracking and orchestration. paths: /assets/v1/assets/: get: operationId: listAssets tags: - Assets summary: List assets description: Lists assets in the account, paginated. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: A paginated list of assets. content: application/json: schema: $ref: '#/components/schemas/AssetList' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createAsset tags: - Assets summary: Create an asset description: Creates a new asset container. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetCreate' responses: '201': description: The created asset. content: application/json: schema: $ref: '#/components/schemas/Asset' '401': $ref: '#/components/responses/Unauthorized' /assets/v1/assets/{asset_id}/: parameters: - $ref: '#/components/parameters/AssetId' get: operationId: getAsset tags: - Assets summary: Get an asset description: Retrieves a single asset by ID. Supports include_collections and include_users query flags. parameters: - name: include_collections in: query required: false schema: type: boolean - name: include_users in: query required: false schema: type: boolean responses: '200': description: The asset. content: application/json: schema: $ref: '#/components/schemas/Asset' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateAsset tags: - Assets summary: Update an asset description: Partially updates an asset. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetCreate' responses: '200': description: The updated asset. content: application/json: schema: $ref: '#/components/schemas/Asset' put: operationId: replaceAsset tags: - Assets summary: Replace an asset description: Replaces an asset. In iconik, PUT and PATCH have the same update-or-replace behavior. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssetCreate' responses: '200': description: The replaced asset. content: application/json: schema: $ref: '#/components/schemas/Asset' delete: operationId: deleteAsset tags: - Assets summary: Delete an asset description: Deletes an asset (moves it to the delete queue). responses: '204': description: The asset was deleted. /assets/v1/collections/: get: operationId: listCollections tags: - Collections summary: List collections description: Lists collections in the account, paginated. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: A paginated list of collections. content: application/json: schema: $ref: '#/components/schemas/CollectionList' post: operationId: createCollection tags: - Collections summary: Create a collection description: Creates a new collection. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CollectionCreate' responses: '201': description: The created collection. content: application/json: schema: $ref: '#/components/schemas/Collection' /assets/v1/collections/{collection_id}/: parameters: - $ref: '#/components/parameters/CollectionId' get: operationId: getCollection tags: - Collections summary: Get a collection description: Retrieves a single collection by ID. responses: '200': description: The collection. content: application/json: schema: $ref: '#/components/schemas/Collection' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCollection tags: - Collections summary: Delete a collection description: Deletes a collection. responses: '204': description: The collection was deleted. /assets/v1/collections/{collection_id}/contents/: parameters: - $ref: '#/components/parameters/CollectionId' get: operationId: getCollectionContents tags: - Collections summary: List collection contents description: Lists the assets and sub-collections contained within a collection, paginated. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: The contents of the collection. content: application/json: schema: type: object properties: objects: type: array items: type: object pages: type: integer total: type: integer /metadata/v1/fields/: get: operationId: listMetadataFields tags: - Metadata summary: List metadata fields description: Lists all custom metadata fields defined in the account. responses: '200': description: A list of metadata fields. content: application/json: schema: type: object properties: objects: type: array items: $ref: '#/components/schemas/MetadataField' post: operationId: createMetadataField tags: - Metadata summary: Create a metadata field description: Creates a new custom metadata field. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MetadataField' responses: '201': description: The created metadata field. content: application/json: schema: $ref: '#/components/schemas/MetadataField' /metadata/v1/views/: get: operationId: listMetadataViews tags: - Metadata summary: List metadata views description: Lists all metadata views, which group fields into a form used to read and write values. responses: '200': description: A list of metadata views. content: application/json: schema: type: object properties: objects: type: array items: type: object /metadata/v1/assets/{asset_id}/views/{view_id}/: parameters: - $ref: '#/components/parameters/AssetId' - name: view_id in: path required: true schema: type: string get: operationId: getAssetMetadata tags: - Metadata summary: Get asset metadata for a view description: Reads the metadata values on an asset for the fields in a given view. responses: '200': description: The metadata values for the asset in the view. content: application/json: schema: $ref: '#/components/schemas/MetadataValues' put: operationId: putAssetMetadata tags: - Metadata summary: Set asset metadata for a view description: Writes metadata values on an asset for the fields in a given view. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MetadataValues' responses: '200': description: The updated metadata values. content: application/json: schema: $ref: '#/components/schemas/MetadataValues' /search/v1/search/: post: operationId: search tags: - Search summary: Search description: >- Runs a search across assets and collections using full-text, metadata, and facet filters, with sorting and pagination supplied in the request body. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SearchRequest' responses: '200': description: Search results. content: application/json: schema: type: object properties: objects: type: array items: type: object pages: type: integer total: type: integer /files/v1/assets/{asset_id}/files/: parameters: - $ref: '#/components/parameters/AssetId' get: operationId: listAssetFiles tags: - Files summary: List files for an asset description: Lists the files associated with an asset. responses: '200': description: A list of files. content: application/json: schema: type: object properties: objects: type: array items: $ref: '#/components/schemas/File' post: operationId: createAssetFile tags: - Files summary: Associate a file with an asset description: Associates a new file record with an asset on a storage. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/File' responses: '201': description: The created file. content: application/json: schema: $ref: '#/components/schemas/File' /files/v1/assets/{asset_id}/proxies/: parameters: - $ref: '#/components/parameters/AssetId' get: operationId: listAssetProxies tags: - Files summary: List proxies for an asset description: Lists the low-resolution proxy previews associated with an asset. responses: '200': description: A list of proxies. content: application/json: schema: type: object properties: objects: type: array items: type: object /files/v1/storages/: get: operationId: listStorages tags: - Files summary: List storages description: Lists the connected storages (cloud or on-premise) available in the account. responses: '200': description: A list of storages. content: application/json: schema: type: object properties: objects: type: array items: $ref: '#/components/schemas/Storage' /jobs/v1/jobs/: get: operationId: listJobs tags: - Jobs summary: List jobs description: Lists jobs, paginated. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: A paginated list of jobs. content: application/json: schema: type: object properties: objects: type: array items: $ref: '#/components/schemas/Job' post: operationId: createJob tags: - Jobs summary: Create a job description: Creates a new job. Requires at least title, type, and status. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JobCreate' responses: '201': description: The created job. content: application/json: schema: $ref: '#/components/schemas/Job' /jobs/v1/jobs/{job_id}/: parameters: - name: job_id in: path required: true schema: type: string get: operationId: getJob tags: - Jobs summary: Get a job description: Retrieves a single job by ID, including its status and progress. responses: '200': description: The job. content: application/json: schema: $ref: '#/components/schemas/Job' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateJob tags: - Jobs summary: Update a job description: Updates a job, for example to report progress or change status. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JobCreate' responses: '200': description: The updated job. content: application/json: schema: $ref: '#/components/schemas/Job' delete: operationId: deleteJob tags: - Jobs summary: Delete a job description: Deletes a job. responses: '204': description: The job was deleted. components: securitySchemes: appId: type: apiKey in: header name: App-ID description: The iconik application ID generated in the web UI. authToken: type: apiKey in: header name: Auth-Token description: The iconik auth token paired with the application ID. parameters: Page: name: page in: query required: false description: The page number of results to return. schema: type: integer default: 1 PerPage: name: per_page in: query required: false description: The number of results per page. schema: type: integer default: 10 AssetId: name: asset_id in: path required: true description: The unique ID of the asset. schema: type: string CollectionId: name: collection_id in: path required: true description: The unique ID of the collection. schema: type: string responses: Unauthorized: description: Missing or invalid App-ID / Auth-Token credentials. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested object was not found. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Asset: type: object properties: id: type: string title: type: string type: type: string description: The asset type, e.g. ASSET, SEQUENCE, or NLE_PROJECT. status: type: string date_created: type: string format: date-time date_modified: type: string format: date-time AssetCreate: type: object required: - title properties: title: type: string type: type: string AssetList: type: object properties: objects: type: array items: $ref: '#/components/schemas/Asset' page: type: integer pages: type: integer total: type: integer Collection: type: object properties: id: type: string title: type: string parent_id: type: string date_created: type: string format: date-time CollectionCreate: type: object required: - title properties: title: type: string parent_id: type: string CollectionList: type: object properties: objects: type: array items: $ref: '#/components/schemas/Collection' page: type: integer pages: type: integer total: type: integer MetadataField: type: object properties: name: type: string label: type: string field_type: type: string description: The field data type, e.g. string, text, integer, boolean, date, drop_down. required: type: boolean MetadataValues: type: object properties: metadata_values: type: object additionalProperties: true description: A map of field name to its value object for the view. SearchRequest: type: object properties: query: type: string description: Full-text query string. doc_types: type: array items: type: string description: Object types to search, e.g. assets, collections. filter: type: object description: Structured metadata / facet filter. sort: type: array items: type: object File: type: object properties: id: type: string name: type: string directory_path: type: string size: type: integer format: int64 storage_id: type: string status: type: string Storage: type: object properties: id: type: string name: type: string method: type: string description: The storage method, e.g. S3, GCS, AZURE, FILE, GCP. status: type: string Job: type: object properties: id: type: string title: type: string type: type: string status: type: string description: The job status, e.g. STARTED, IN_PROGRESS, FINISHED, FAILED. progress_processed: type: integer parent_id: type: string date_created: type: string format: date-time JobCreate: type: object required: - title - type - status properties: title: type: string type: type: string status: type: string Error: type: object properties: error: type: string errors: type: array items: type: string