iconik Jobs API

Track and drive asynchronous operations such as transfers, transcodes, and ingest. Create, list, retrieve, update, and delete jobs, including parent and child job relationships that report progress and status.

OpenAPI Specification

iconik-openapi.yml Raw ↑
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