Mimir REST API (1.0)

Download OpenAPI specification:

Using the REST API

To use the API, the user needs to authenticate with an API KEY obtained from the Mimir web console.

Procedure to create an API KEY:

  • Visit the user settings page from the profile dropdown.
  • Create a new API key from the API Keys tab under the user settings page.
  • Once obtained, the API KEY can be used in the x-mimir-cognito-id-token request header when making REST API requests.

Example using curl:

Here's how you would retrieve details about an item with the ID 00112233-4455-6677-8899-aabbccddeeff:

  curl 'https://mimir.mjoll.no/api/v1/items/00112233-4455-6677-8899-aabbccddeeff?readableMetadataFields=true' \
  -H 'Accept: application/json' \
  -H 'x-mimir-cognito-id-token: Bearer <your-api-key>'

(Replace <your-api-key> with your actual API key)

Metadata field IDs

Endpoints that read or write structured metadata accept the readableMetadataFields query parameter. Always pass it as true. Without it, metadata.formData keys are internal GUIDs that integration code must never depend on; with it, the keys are the human-readable MDF field ids documented on each response schema in this specification — title, createdOn, mediaCreatedOn, and any custom field ids defined by your tenant's MDFs. The same flag applies symmetrically to write bodies. Treating GUID-keyed metadata as a public contract will break when MDFs are reorganised; the readable form is the supported one.

Folder

Create a Folder entry

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
name
required
string

Name of the folder

parent
required
string

The ID of the parent folder that will contain the newly created folder. Use 'tenant-root' to create a folder under the root folder.

sortKey
string or null

A unique sortKey for a folder entry. This key determines the lexical order of the children in the folder in which they should be displayed. Since we follow LexoRank-based ordering, providing a unique sortKey is essential.

Responses

Request samples

Content type
application/json
{
  • "name": "sport-clips",
  • "parent": "26700756-0c4e-5550-330b-03812e39c778",
  • "sortKey": "unique-key"
}

Response samples

Content type
application/json
{
  • "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
  • "name": "sport-clips",
  • "owner": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
  • "createdOn": "2019-11-20T11:27:41.107Z",
  • "hasSubfolder": false
}

Retrieve a folder entry

Returns the folder entry identified by folderId. Two well-known string aliases are also accepted in place of a folder UUID:

  • tenant-root — the synthetic root folder under which every other folder in the tenant lives. Use this as the entry point for a folder-tree walk: GET /api/v1/folders/tenant-root returns the root's real id and kind: "tenant-root".
  • archive-root — the synthetic root of the tenant's archive folder tree, when archive is enabled.

These aliases are also accepted as the parent of a POST /api/v1/folders create call. The kind field on the response distinguishes a synthetic root from a regular user-created folder.

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Responses

Response samples

Content type
application/json
{
  • "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
  • "name": "Archive",
  • "owner": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
  • "createdOn": "2019-11-20T11:27:41.107Z",
  • "hasSubfolder": true,
  • "kind": "archive-root",
  • "metadata": {
    }
}

Rename, move, change owner, or update access-controls or sortKey of a folder

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

query Parameters
noRecursiveUpdate
boolean

If true, when updating visibility of a folder, its nested contents will not be updated. By default false if not given.

implicitVisibilityUpdate
boolean

If false, when updating parent of a folder i.e., moving a folder, the folder and its nested contents will not inherit the visibility of the destination folder. By default true if not given.

Request Body schema: application/json
name
string

New name of the folder. This value is ignored if a parentId property is provided.

parentId
string

The id of the new parent folder the folder should be moved to

object

The visibility of the folder

object

The update access-control of the folder

sortKey
string or null

A unique sortKey for a folder entry. This key determines the lexical order of the children in the folder in which they should be displayed. Since we follow LexoRank-based ordering, providing a unique sortKey is essential.

owner
string

The user ID of the new owner. Requires the folder/changeOwner permission. Cannot be used on root folders (tenant root or archive root).

Responses

Request samples

Content type
application/json
{
  • "name": "foobar",
  • "parentId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "visibleTo": {
    },
  • "updatableBy": {
    },
  • "sortKey": "unique-key",
  • "owner": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}

Response samples

Content type
application/json
{
  • "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
  • "name": "foobar",
  • "owner": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
  • "createdOn": "2019-11-20T11:27:41.107Z",
  • "hasSubfolder": true,
  • "kind": "archive-root",
  • "metadata": {
    }
}

Delete a folder

Recursively delete a folder. All subfolders are removed. All items are soft-deleted, i.e. they are still accessible in the recycle bin.

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Update metadata of a folder

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string

The identifier string for a folder.

Request Body schema: application/json
object

Select metadata properties that need to be updated. Properties in this object will be added to item metadata (overwriting existing fields)

Responses

Request samples

Content type
application/json
{
  • "metadataDelta": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "metadata": {
    }
}

Retrieve the content of a folder

Lists the children of folderId. The response shape and pagination contract depend on the type query parameter; the modes below cover the combinations and the differences between them.

Walking a folder tree (type=folder)

Pass ?type=folder to list only the immediate child folders. In this mode the response is a plain JSON array of folder entries, not the {from, total, hits} envelope shown in the schema. The array carries every direct child folder of the parent in a single response — there is no pagination cursor and no need for from/itemsPerPage. Each entry includes id, name, hasSubfolder, parent, owner, createdOn, and itemType: "folder".

This is the right call for building a folder browser or walking the full tree from tenant-root down. Use the hasSubfolder flag on each entry to skip recursion into leaf folders without paying an extra HTTP call per leaf.

Listing items in a folder (type=item or no filter)

Without type, or with type=item, the response uses the {from, total, hits} envelope documented in the schema, and mScrollId is not returned in this mode. Both from and itemsPerPage are honoured — use them to paginate through the results.

When itemsPerPage is omitted, OpenSearch defaults to 10 results per page. Pass itemsPerPage to get a larger page. The from field in the response reflects the from query parameter you sent.

To enumerate every item beneath a folder (and its subfolders), use ?fetchAllRecursively=true instead. This returns a different shape from the regular item-listing mode: hits are in items (not hits), from is absent, and mScrollId is present while more pages remain. Pass the cursor back as mScrollId on the next call until the response no longer carries it. See the third oneOf variant in the response schema for the exact shape.

Discovering the root

The root folder is reachable by the alias tenant-root — see GET /api/v1/folders/tenant-root for the discovery entry point. Once you have the root's id, walk down with ?type=folder calls.

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

query Parameters
type
string
Enum: "folder" "item"

An optional filter to constrain the type of children we want to retrieve

fetchAllRecursively
boolean

Used to fetch all descendants of the requested folder. Returns one page of results together with a scroll id that can be used as a mScrollId param to fetch the next page of results.

mScrollId
string

If mScrollId is provided (obtained from a previous fetchAllRecursively request), returns next page of results

skipFolders
boolean

If skipFolders is true, folders are not returned in the response. Only items are returned.

readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Responses

Response samples

Content type
application/json
Example
[
  • {
    }
]

Add an item to a folder

Sends PUT /api/v1/folders/{folderId}/content with { "id": "<itemId>" } in the body. Note the trailing /content segment — the membership operations live one level deeper than /api/v1/folders/{folderId}, which targets the folder itself (rename, move, delete) and would return 405 Method Not Allowed for a PUT body in this shape.

An item can belong to multiple folders. Adding an item to a folder adds a reference to the item in this folder, unless it is already present (the call is idempotent — adding twice is a no-op).

Moving an item between folders

Folder membership is a multi-set: an item can have several folderParents simultaneously, and the API exposes per-membership add and remove operations rather than a single "set folders" call. To move an item from one folder to another:

  1. GET /api/v1/items/{itemId} to read the item's current folderParents.
  2. For each parent that is not the destination, DELETE /api/v1/folders/{parentId}/content?id=<itemId> to drop the membership.
  3. PUT /api/v1/folders/{destinationId}/content with { "id": "<itemId>" } to add the destination membership.

The order of (2) and (3) does not matter for a single item, but doing the add first is safer if the source DELETE could fail — an item with no folder parents at all becomes harder to find again.

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

Request Body schema: application/json
required
id
required
string

ID of the item to add

Responses

Request samples

Content type
application/json
{
  • "id": "1acb5bba-98a5-795c-0dd5-a46bf5be10af"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Removes an item from a folder

Removes one item's membership in the folder identified by folderId — the item itself is not deleted, and any other folders that contain it are unaffected.

Note the URL shape: membership operations live under /api/v1/folders/{folderId}/content, one level deeper than /api/v1/folders/{folderId} (which addresses the folder itself — DELETE on that path deletes the folder entity, not a membership).

Authorizations:
ApiKeyAuth
path Parameters
folderId
required
string
Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The folder ID

query Parameters
id
required
string
Example: id=04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The ID of this item/subfolder to remove

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Retrieve folder path for a set of items or folders

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
ids
required
Array of strings

A set of id's to request folder path for. Should either only contain item id's or folder id's.

type
required
string

Whether to do an item look up or folder look up. If POSTing an array of item id's, type should be set to 'item'. For folders, it should be 'folder'.

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ],
  • "type": "item"
}

Response samples

Content type
application/json
{
  • "property1": {
    },
  • "property2": {
    }
}

Create folder structure for given path

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
path
required
string

/ delimited path of folders to create. Can not be empty or contain characters like ., .., *, ?

rootFolderId
string

GUID of the folder that the path should be created under. If not passed, the path will be created as subfolders of the tenant root folder.

Responses

Request samples

Content type
application/json
{
  • "path": "/path/to/folder/",
  • "rootFolderId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

MDF

Retrieve MDF entries

Retrieve lightweight versions of the MDF entries of the tenant, without the field definitions

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "_embedded": {
    }
}

Create an MDF entry

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
label
required
string

Name of the MDF model.

flavor
string

A value used to group MDF models by classes. If no flavor is provided, the MDF will be treated as a general MDF that can be used to type a media asset. If the 'timed-metadata' value is provided, the MDF will be treated as a model defining a type of timed metadata to be used for logging. Any other value will result in the MDF not being shown in the UI.

active
boolean
Default: false

Whether users can see / use the form.

displayName
string

The name to be displayed in the UI. If not provided, the label will be used. This is useful for providing a more user-friendly name for the MDF.

Responses

Request samples

Content type
application/json
{
  • "label": "Artist",
  • "flavor": "timed-metadata",
  • "active": false,
  • "displayName": "Recording Artists"
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "label": "Artist",
  • "flavor": "timed-metadata",
  • "active": false,
  • "fields": [
    ],
  • "displayName": "Recording Artists"
}

Retrieve an MDF entry

Authorizations:
ApiKeyAuth
path Parameters
mdfId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the MDF model

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "label": "Artist",
  • "active": false,
  • "fields": [
    ],
  • "views": {
    },
  • "viewSections": {
    },
  • "flavor": "timed-metadata",
  • "color": "#008DFFFF",
  • "icon": "radio",
  • "rule": "{name}-{genre}",
  • "displayName": "Recording Artists"
}

Update an MDF entry

Authorizations:
ApiKeyAuth
path Parameters
mdfId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the MDF model

Request Body schema: application/json
required
required
Array of objects (MdfField)

The fields in this form.

label
string

Name of the MDF model

active
boolean

Whether users can see / use the form.

object

Information about how to present the MDF fields when editing the payload, when searching and in the item details page

color
string

This value is only relevant for timed metadata MDFs. It is a color represented as an '#RRGGBBAA' hexadecimal value.

icon
string

This value is only relevant for timed metadata MDFs. It is the name of the Material Design icon to use for this timed metadata MDF.

rule
string

This value is only relevant for timed metadata MDFs. This is the template to use to generate a description for an object with this MDF model. It can be parameterized with field IDs between curly brackets like 'foo-{field1}-{field3}'

displayName
string

The name to be displayed in the UI. If not provided, the label will be used. This is useful for providing a more user-friendly name for the MDF.

object

Information about how to organize MDF fields into sections for supported views. Sections allow visual grouping and organization of fields in the UI. Currently only supports the 'item' view type.

Responses

Request samples

Content type
application/json
{
  • "fields": [
    ],
  • "label": "Artist",
  • "active": false,
  • "views": {
    },
  • "color": "#008DFFFF",
  • "icon": "radio",
  • "rule": "{name}-{genre}",
  • "displayName": "Recording Artists",
  • "viewSections": {
    }
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "label": "Artist",
  • "active": false,
  • "fields": [
    ],
  • "views": {
    },
  • "viewSections": {
    },
  • "flavor": "timed-metadata",
  • "color": "#008DFFFF",
  • "icon": "radio",
  • "rule": "{name}-{genre}",
  • "displayName": "Recording Artists"
}

Delete an MDF entry

Authorizations:
ApiKeyAuth
path Parameters
mdfId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the MDF model

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Option lists

Retrieve option lists

Retrieve the option lists of the tenant

Authorizations:
ApiKeyAuth
query Parameters
idsOnly
boolean

If true, only ids of the option lists are returned in response

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an option list

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
name
required
string

Display name of the option list

required
Array of objects

The possible options

optionListType
string
Enum: "choice" "treeChoice"

For Choice/Multi-Choice fields optionListType is choice. For TreeChoice fields optionListType is treeChoice. If optionListType not provided then choice will be considered as default.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "alternatives": [
    ],
  • "optionListType": "choice"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "alternatives": [
    ]
}

Retrieve an option list

Authorizations:
ApiKeyAuth
path Parameters
optionListId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the option model

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "alternatives": [
    ]
}

Update an option list

Authorizations:
ApiKeyAuth
path Parameters
optionListId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the option list

Request Body schema: application/json
required
name
required
string

Display name of the option list

required
Array of objects

The possible options

optionListType
string
Enum: "choice" "treeChoice"

For Choice/Multi-Choice fields optionListType is choice. For TreeChoice fields optionListType is treeChoice. If optionListType not provided then choice will be considered as default.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "alternatives": [
    ],
  • "optionListType": "choice"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "alternatives": [
    ]
}

Delete an option list

Authorizations:
ApiKeyAuth
path Parameters
optionListId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the option list model

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Item

Poll items

This endpoint is used for polling items to known their state.

Authorizations:
ApiKeyAuth
query Parameters
ids
string
Example: ids=["7c964cb5-0b9f-9e48-1669-0af85a036487"]

Given an array of item IDs like ["7c964cb5-0b9f-9e48-1669-0af85a036487"], the parameter value must be the URL-encoded string representation of this array. If 'ids' is not provided, 'folderPath' and 'itemTitle' query parameters must be provided.

readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

fields
string
Example: fields=originalFileName,createdOn,transcodingState

Specifies which of the items fields should be returned.

folderPath
string
Example: folderPath=/foo/bar

If provided along with 'itemTitle' query parameter, describes the mimir folder path where the desired items are.

itemTitle
string
Example: itemTitle=hello world

When provided along with 'folderPath' query parameter, the api will return items that have the exact title (case insensitive) under folderPath in mimir.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an Item entry

Creates an item entry placeholder with a description of which operations to apply when the item's media file will be uploaded. The request may use the 'sequenceDetails' field to describe the Mimir items this new item was created from. If this is the case, enabling a service like transcription will re-run the service on the uploaded media file; not enabling a service will cause the backend to derive the data from the segments that compose the new item. For instance, disabling transcription for an item made of two segments from existing Mimir items will generate a transcription by combining the cuts of the transcriptions found for the Mimir items the segments were taken from.

After the creation of the item entry, the next step is to actually upload the media file. In order to do that, it is necessary to first acquire the upload lock of the item to prevent concurrent modifications, which is done by using the item upload endpoint. The response object from this endpoint will include the necessary information to upload either as a single PUT request or as a multipart S3 upload.

Note that when uploading to an AWS S3 bucket, there is a restriction on the maximum size for a single PUT request. If the file size is lower than 5 gigabytes, the upload may be done with a single PUT towards the upload url. Otherwise, the upload must be done with a multipart S3 upload.

Single-PUT upload flow

  1. POST /api/v1/items to create the item placeholder (this endpoint).
  2. PUT /api/v1/items/{itemId}/upload with lockOwnerInstanceId, fileName, and contentType (no isMultiPartUpload). The response carries uploadSignedUrl.
  3. PUT the file bytes to that signed URL with the same Content-Type. The signed URL authenticates the request — do not add the Mimir auth header on this call.
  4. PATCH /api/v1/itemMetadata/{itemId}?readableMetadataFields=true to set title, description, or any other metadata field.

Multipart upload flow

  1. POST /api/v1/items to create the item placeholder.
  2. PUT /api/v1/items/{itemId}/upload with isMultiPartUpload=true, fileSize, contentType, and a lockOwnerInstanceId. The response carries the values you need on every subsequent multipart call — uploadId, uploadLocationId, targetKey, uploadPartCount, and uploadPartSize.
  3. POST /api/v1/items/{itemId}/itemUploadPartsSignUrls with uploadId, uploadLocationId, targetKey, firstPartNumber, and partCount to receive a signed PUT URL per part. Pass uploadLocationId and targetKey verbatim from step 2 — omitting them returns an empty list with no error.
  4. PUT each chunk of the file to its signed URL. Capture the ETag response header from each PUT.
  5. POST /api/v1/items/{itemId}/multipartUploadComplete with uploadId, uploadLocationId, targetKey, and an uploadParts array of {PartNumber, ETag} pairs. Again pass uploadLocationId and targetKey from step 2; omitting them produces a 500 "Failed to reserve upload".
  6. PATCH /api/v1/itemMetadata/{itemId}?readableMetadataFields=true to set metadata as in the single-PUT flow.

Virtual Clip

This endpoint also supports creating virtual clips. A virtual clip is a new Mimir item, but will have a reference to the media of the clip it has been created from. This allows for creating Mimir items based off the same source material, without duplicating the video footage in the storage.

Example payload to create a virtual clip:

  {
    "masterClipId": string,
    "inPoint": number,
    "outPoint": number,
    "title": string,
    "parentClipId": string,
    "startOffsetMasterClip": number
  }

Required
masterClipId: Mimir itemId of the master clip, from which the virtual clip will be created.
inPoint: TimeCode of selected in-point in milliseconds of the master clip.

Optional
outPoint: TimeCode of selected out-point in milliseconds of the master clip. If not provided, the end of the master clip will be considered as the outPoint.
title: Title of the new virtual clip item. For virtual clips this is the supported way to set the title at creation time — the top-level title field on the request body. The "deprecated: use metadata.formData.title" guidance on the title field applies only to file-upload items; for virtual clips, metadata.formData.title in the request body is not honoured. To read the title back, look at metadata.formData.title on the GET response (in readable-field-id mode).
parentClipId: If a virtual clip needs to be created from another virtual clip, then "parentClipId" is needed to relate them with each other. Otherwise virtual clip will be shown as children of the master clip.
parentClipId:
folderParents: An array of folder IDs. The newly created virtual clip item will appear in all the given folders instead of the folders where the source item belongs.
startOffsetMasterClip: If a virtual clip needs to be created from another virtual clip, then "startOffsetMasterClip" would be the source virtual clip's in-point.
visibleTo: Specify who can view this item.
updatableBy: Specify who can update this item.

Authorizations:
ApiKeyAuth
query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Request Body schema: application/json
required

Item resource

title
string

Title to use for the item.

For file-upload items (this body's itemType form), this field is deprecated — set the title after creation via PATCH /api/v1/itemMetadata/{itemId} with metadata.formData.title in the recommended readable-field-id mode.

For virtual clips (this body's masterClipId/inPoint/outPoint form), title IS the supported way to set the clip's title at creation time. The deprecation does not apply to virtual clips — metadata.formData.title is not honoured by the create call when the body is a virtual-clip body.

itemType
string
Enum: "video" "image" "audio" "file" "clipList"

What type of item this should be treated as in the system. This property also determines what type of media users will be able to upload to the item. For example, users will only be allowed to upload a video to an item if the "itemType" is "video". If "itemType" is not provided but "filename" is, then the itemType value is derived from the filename. Otherwise, the default value is "file".

languageCode
string

The language code to use for the transcription, if transcription is enabled for this item. The combination (languageCode,transcriptionService) must match one of the transcription configuration exposed in the tenant configuration.

externalId
string

An external id that can be later used to retrieve the associated item id that will be created.

transcriptionService
string

The name of the transcription service to use. The combination (languageCode,transcriptionService) must match one of the transcription configuration exposed in the tenant configuration.

transcriptionChannels
Array of integers[ items [ 0 .. 15 ] ]

The numbers of the channels for which to generate individual audio proxies. The values must be between 0 and 15

transcriptionEnabled
boolean

A boolean that determines if the transcription will run after upload or not

celebrityDetectionEnabled
boolean

A boolean that determines if the celebrity detection will run after upload or not

labelDetectionEnabled
boolean

A boolean that determines if the label detection will run after upload or not

personDetectionEnabled
boolean

A boolean that determines if the person detection will run after upload or not

folderParents
Array of strings or null
Default: null

An array of folder IDs or null. The newly created item will appear in all the given folders

object (ItemAccessControl)

Specify who can view/update this item.

object (ItemAccessControl)

Specify who can view/update this item.

parentItemIds
Array of strings

When an item is created with segments from existing Mimir items (like in Adobe Premiere), this array is used to track the origin of the content by listing the IDs of the items that were used to create this new item.

object

When an item is created with segments from existing Mimir items (like in Adobe Premiere), this array is used to describe these segments.

object (Metadata)

Item's metadata object

itemIdToCopyMetadataFrom
string

Instead of providing your own metadata, you can specify the ID of an existing item to copy the metadata from. If 'metadata' and this property are provided at the same time, 'metadata' will be given precedence. So if you want the new item to have the exact same metadata as the item with this ID, only specify 'itemIdToCopyMetadataFrom'.

Access controls like 'visibleTo' and 'updatableBy' properties will also be copied if not provided explicitly in the payload.

Responses

Request samples

Content type
application/json
{
  • "title": "News clip",
  • "itemType": "video",
  • "languageCode": "en-US",
  • "externalId": "4191dc5a-f632-a070",
  • "transcriptionService": "speechmaticsSpeechToText",
  • "transcriptionChannels": [
    ],
  • "transcriptionEnabled": true,
  • "celebrityDetectionEnabled": true,
  • "labelDetectionEnabled": true,
  • "personDetectionEnabled": true,
  • "folderParents": null,
  • "visibleTo": {
    },
  • "updatableBy": {
    },
  • "parentItemIds": [
    ],
  • "sequenceDetails": {
    },
  • "metadata": {
    },
  • "itemIdToCopyMetadataFrom": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}

Response samples

Content type
application/json
{
  • "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
  • "mediaType": "video/mp4",
  • "celebrityDetectionEnabled": true,
  • "labelDetectionEnabled": true,
  • "personDetectionEnabled": true,
  • "transcriptionEnabled": true,
  • "itemType": "video"
}

Update item metadata

Update item metadata

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

requiredMetadataVersion
number
Example: requiredMetadataVersion=2

The update will be made on condition that the current item.metadataVersion value matches the provided value. If the precondition check fails, a 409 Conflict response is returned with the response body having error.payload.reason="PreconditionFailed".

Request Body schema: application/json
object

Select metadata properties that need to be updated. Properties in this object will be added to item metadata (overwriting existing fields)

Responses

Request samples

Content type
application/json
{
  • "metadataDelta": {
    }
}

Response samples

Content type
application/json
{
  • "metadata": {
    },
  • "metadataVersion": 0
}

Create items in batches

Create items in batches. Limited to 1000 items per request.

Authorizations:
ApiKeyAuth
query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

passive
boolean

If the value is "true", some actions such as sending webhooks, websockets etc will be skipped

Request Body schema: application/json
required

Item dtos

Array of objects (createItem.requestBody)

Array of dtos for creating items.

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Update items in batches

Update items in batches. Limited to 1000 updates per request.

Authorizations:
ApiKeyAuth
query Parameters
passive
boolean

If the value is "true", some actions such as sending webhooks, websockets etc will be skipped

Request Body schema: application/json
required

Item dtos

Array of objects

Array of dtos for updating items.

Responses

Request samples

Content type
application/json
{
  • "updates": [
    ]
}

Response samples

Content type
application/json
{
  • "updates": [
    ]
}

Delete items in batches

Delete items in batches. Limited to 100 items per request.

When folderId is provided, the API will:

  • Fetch all items in the specified folder
  • Validate that requested items belong to the folder
  • For items with multiple parent folders: remove from the specified folder only
  • For items with only the specified folder as parent: mark for deletion

This ensures proper handling of items that exist in multiple folders.

Authorizations:
ApiKeyAuth
query Parameters
folderId
string <uuid>
Example: folderId=00112233-4455-6677-8899-aabbccddeeff

Optional folder ID to optimize deletion process. When provided, the API validates that all requested items belong to this folder and handles multi-parent scenarios correctly.

Request Body schema: application/json
required

Batch delete request containing item IDs and deletion options

deletes
required
Array of strings <uuid> <= 100 items [ items <uuid > ]

Array of item IDs to delete. Maximum 100 items per request.

immediate
boolean
Default: false

If true, items will be deleted immediately. If false (default), items will be marked for deletion.

promoteNewVersion
boolean
Default: false

If true, promotes the newest version of the item before deletion.

executeSameActionOnArchiveCopy
boolean
Default: false

If true, the same delete action will be executed on the archive copy of the item.

folderId
string <uuid>

Optional folder ID for folder-aware deletion. When provided:

  • Validates that all requested items belong to this folder
  • Items with multiple parent folders are removed from this folder only
  • Items with only this folder as parent are marked for deletion

This is useful when deleting items from a specific folder context.

Responses

Request samples

Content type
application/json
{
  • "deletes": [
    ],
  • "immediate": false,
  • "promoteNewVersion": false,
  • "executeSameActionOnArchiveCopy": false,
  • "folderId": "00112233-4455-6677-8899-aabbccddeeff"
}

Response samples

Content type
application/json
{
  • "deletes": [
    ]
}

Get item ids from external ids

During item creation, if an external id was provided, that can be used to retrieve the item id using this api.

Authorizations:
ApiKeyAuth
query Parameters
ids
string
Example: ids=["7c964cb5-0b9f-9e48", "1669-0af85a036487"]

An array of external ids like ["7c964cb5-0b9f-9e48", "1669-0af85a036487"]. The parameter value must be the URL-encoded string representation of this array

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Retrieve an Item entry

Retrieve an item entry with specified identifier string

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
searchString
string
Example: searchString=prezident figting

Space-separated terms to highlight when loading the item.

isFuzzy
boolean
Example: isFuzzy=true

This is only relevant in combination with searchString. If false, only terms matching exactly will be highlighted. If true, fuzzy matches will be highlighted as well.

readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

fields
string
Example: fields=originalFileName,createdOn,transcodingState

Specifies which of the item fields should be returned.

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "originalFileName": "President Foo is Fighting for You.mp4",
  • "hasProxy": true,
  • "audioChannels": 2,
  • "mediaDuration": 37547,
  • "mediaFramerate": 23.976023976023978,
  • "frameCaptureFrequency": {
    },
  • "thumbnailInfo": {
    },
  • "folderParents": [
    ],
  • "isArchived": true,
  • "transcriptionService": "speechmaticsSpeechToText",
  • "languageCode": "en-US",
  • "translationLanguage": "no",
  • "metadata": {
    },
  • "geoLocation": {
    },
  • "transcriptionEnabled": true,
  • "labelDetectionEnabled": true,
  • "celebrityDetectionEnabled": true,
  • "personDetectionEnabled": true,
  • "transcodingState": "complete",
  • "transcriptionState": "complete",
  • "labelDetectionState": "complete",
  • "celebrityDetectionState": "complete",
  • "personDetectionState": "complete",
  • "itemState": "complete",
  • "searchHitsInTranscript": 1,
  • "searchHitsInTranslatedTranscript": 1,
  • "searchHitsInCelebrities": 1,
  • "searchHitsInPersons": 1,
  • "searchHitsInLabels": 1,
  • "searchHitsInTranscriptWords": [
    ],
  • "searchHitsInTranslatedTranscriptWords": [
    ],
  • "timedTranscriptUrl": "string",
  • "timedTranslatedTranscriptUrl": "string",
  • "detectedCelebrities": [
    ],
  • "detectedPersons": [
    ],
  • "detectedLabels": [
    ],
  • "paragraphRulesParameters": {
    },
  • "subtitleRulesParameters": {
    },
  • "translationParagraphRulesParameters": {
    },
  • "translationSubtitleRulesParameters": {
    },
  • "isTranslationUpdated": true,
  • "paragraphMarkers": [
    ],
  • "subtitleMarkers": [
    ],
  • "translationParagraphMarkers": [
    ],
  • "translationSubtitleMarkers": [
    ],
  • "virtualClipInfo": {
    }
}

Update an Item entry

Update an item entry with specified identifier string

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

requiredMetadataVersion
number
Example: requiredMetadataVersion=2

The update will be made on condition that the current item.metadataVersion value matches the provided value. If the precondition check fails, a 409 Conflict response is returned with the response body having error.payload.reason="PreconditionFailed".

Request Body schema: application/json
object (Metadata)

Item's metadata object

object

Select metadata properties that need to be updated. Properties in this object will be added to item metadata (overwriting existing fields)

object

If a highres file from Kelda on-premise is removed e.g., from indexed folder, this property can be used to indicate that after removing the file. The updateItem api will remove the corresponding highres reference properties (if any) from the item and mark the item as highres deleted if there are no alternative highres references.

object

If a highres file in Kelda on-premise is restored e.g., in indexed folder, this property can be used to indicate that after restoring the file. The updateItem api will update the corresponding highres reference properties and will unmark the item as highres deleted if the item was marked as such before.

isArchived
boolean

Set to true when archiving the item.

archiveFileTransferState
string
Enum: "initiated" "progressing" "complete" "canceled" "error"

Set to complete when highres is successfully copied to archive bucket.

archiveFileTransferErrorMessage
string

Set to the stringified error when highres copy to archive bucket fails.

archiveS3Bucket
string

Name of the archive bucket.

archiveLocationFullPath
string

The full path of the highres in the archive bucket.

object (ItemAccessControl)

Specify who can view/update this item.

object (ItemAccessControl)

Specify who can view/update this item.

ingestSourceStorageId
string or null

The value of 'id' field of the storage configuration where this item's highres is located. This id will be used to resolve credentials and acquire access to the storage. The id can be found by inspecting the API response of getAllIngestStorageConfigs API (for ingest configurations) and getUploadLocations API (for upload configurations).

ingestSourceS3Bucket
string or null

The name of the storage bucket.

ingestSourceFullPath
string or null

The full path to the highRes file inside the storage.

object (Ingest)

Describes the location of a file in a storage.

object (ProxyFileLocation)

Describes the location of the proxy file in a storage. If exists this reference will be used to generate the link to the proxy file. Otherwise, the location of the proxy file will be implicitly assumed to be in the 'generated-media' storage managed by Mimir.

object (ProxyFileLocation)

Describes the location of the proxy file in a storage. If exists this reference will be used to generate the link to the proxy file. Otherwise, the location of the proxy file will be implicitly assumed to be in the 'generated-media' storage managed by Mimir.

object

Select highresDeletion properties that need to be updated. Properties in this object will be added to item highresDeletion (overwriting existing fields)

object

Information about the webproxy audio channel down-mixing

Array of objects (DetectedPerson)

List of people detected in the media. When provided in an update, this replaces the existing list. Each entry corresponds to a person and may include the time segments where the person appears.

Array of objects (DetectedCelebrity)

List of celebrities detected in the media. When provided in an update, this replaces the existing list. Each entry corresponds to a celebrity and may include the time segments where the celebrity appears.

externalId
string or null

An external id that can be used to retrieve the associated item id. Set to null to clear.

Responses

Request samples

Content type
application/json
{
  • "metadata": {
    },
  • "metadataDelta": {
    },
  • "highresFileDeleted": {
    },
  • "highresFileRestored": {
    },
  • "isArchived": true,
  • "archiveFileTransferState": "initiated",
  • "archiveFileTransferErrorMessage": "string",
  • "archiveS3Bucket": "string",
  • "archiveLocationFullPath": "string",
  • "visibleTo": {
    },
  • "updatableBy": {
    },
  • "ingestSourceStorageId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "ingestSourceS3Bucket": "my-s3-bucket",
  • "ingestSourceFullPath": "my folder/folder1/file.mp4",
  • "ingest": {
    },
  • "webProxyLocation": {
    },
  • "editProxyLocation": {
    },
  • "highresDeletion": {
    },
  • "webProxyAudioDownMixInfo": {
    },
  • "detectedPersons": [
    ],
  • "detectedCelebrities": [
    ],
  • "externalId": "4191dc5a-f632-a070"
}

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "celebrityDetectionState": "string",
  • "labelDetectionState": "string",
  • "personDetectionState": "string",
  • "transcriptionState": "string",
  • "itemState": "string",
  • "labelDetectionBy": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "personDetectionBy": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "transcriptionBy": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "celebrityDetectionBy": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "labelDetectionEnabled": true,
  • "personDetectionEnabled": true,
  • "transcriptionEnabled": true,
  • "celebrityDetectionEnabled": true,
  • "hasAudio": true,
  • "mediaType": "string",
  • "mediaCreatedOn": "2019-08-24T14:15:22Z",
  • "mediaDuration": 0,
  • "mediaCodec": "string",
  • "mediaCodecTag": "string",
  • "mediaFrameRate": 0,
  • "mediaHeight": 0,
  • "mediaWidth": 0,
  • "mediaSize": 0,
  • "title": "string",
  • "description": "string",
  • "originalFileName": "string",
  • "createdBy": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "thumbnail": "string",
  • "highRes": "string",
  • "folderParents": [
    ],
  • "proxy": "string",
  • "frameCaptureFrequency": {
    },
  • "timecode": "string",
  • "detectedPersons": [
    ],
  • "detectedCelebrities": [
    ]
}

Delete an Item entry

Delete an item entry with specified identifier string

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
immediate
string
Example: immediate=true

If true, indicates that the item should be deleted immediately. Otherwise, the item is sent to the recycle bin where it will stay until purge or restoration. Note that it is not permitted to delete permanently an item if there are virtual clips that have been created from it.

promoteNewVersion
string
Example: promoteNewVersion=true

If true, indicates that if the item has version history and item is the current leading version then the item will be deleted and newest version will be promoted as new leading version.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Undelete an Item entry if not permanently deleted

Undelete an item entry with specified identifier string, if that is not

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Read the analysis-pipeline state for an item

Returns the per-operation status of the media-analysis pipeline for an item — what's been processed, what's pending, what failed. The array always contains exactly one entry per built-in system operation plus one type: "plugins" entry for plugin- driven analyses the tenant has configured.

Response is a plain JSON array, not an envelope. The type field on each entry distinguishes built-in pipeline steps (type: "system") from plugin-driven analyses; to show only the built-in pipeline steps, filter to type === "system".

Scene-change detection is not a system operation. Its state is stored in the type: "plugins" entry under analyticPlugins["scene change detection"], not as a type: "system" entry.

The status field is reported as an empty string for operations that have not yet started — translate that to a display string like pending for human-readable output.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve the version history of an item

Retrieve the media-version snapshots of an item — the chain of prior media-replaced or promoted item ids, latest first. This is not an edit log: it does not carry actor, timestamp of an edit, metadata diffs, or any record of metadata-only changes.

For an item-edit history (who changed what, when), use GET /auxiliary/api/v1/systemActivity/item/{itemId} — that endpoint returns granular events with actionType, executedOn, executedBy, and an mdfDiff body, and is the right call for any audit / change-log / "what happened to this item over time" workflow.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
fetchItemProperties
boolean

If true, versions with extra item properties will be provided

Responses

Response samples

Content type
application/json
{
  • "versions": [
    ]
}

Promote an item to latest version

Promotes the item as the latest version in its version history if it was an old item version.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
  • "hasRelations": "false",
  • "hasArchiveRelation": "false",
  • "metadata": {
    }
}

Update version name

Updates the name of a version of an item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
name
string

If provided, a name for the new version. If not provided, the version will be referred to by its number and date of creation.

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Retrieve an Item's latest version

Retrieve an item's latest version with specified identifier string

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}

Create a new version of item

Creates a new version of the item with the old item's metadata. The old item is hidden.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
withArchiveLinked
boolean

If true, and if the item has a 'clean copy' related item, a new version of the clean copy item will be automatically created.

copyMediaToNewVersion
string
Enum: "highRes" "editProxy"

If provided, the specified media will be copied to the new version as its highres.

object (Metadata)

Item's metadata object

name
string

If provided, a name for the new version. If not provided, the version will be referred to by its date of creation.

promoteToCurrent
boolean
Default: true

If true (default), the new version will be promoted to be the latest version by hiding the old version and setting its replacedBy field. If false, the new version is created but the old version remains visible and is not marked as replaced.

Responses

Request samples

Content type
application/json
{
  • "withArchiveLinked": true,
  • "copyMediaToNewVersion": "highRes",
  • "metadata": {
    },
  • "name": "string",
  • "promoteToCurrent": true
}

Response samples

Content type
application/json
{
  • "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
  • "hasRelations": "false",
  • "hasArchiveRelation": "false",
  • "metadata": {
    }
}

Get thumbnail URL at time position

Returns a pre-signed S3 URL for a thumbnail image at the specified time position.

The response body contains the URL as plain text (not JSON). Use this URL to fetch the actual JPEG thumbnail image from S3.

Thumbnail Resolution

All thumbnails are 320x180 pixels in JPEG format.

Frame Capture Frequency

Thumbnails are captured at fixed intervals during transcoding, not for every millisecond. The API returns the thumbnail at or before the requested position.

Index Calculation

The thumbnail index is calculated as:

index = floor(position_in_seconds × frame_capture_frequency)

Caching

The pre-signed URL is valid for 55 minutes. The response includes a Cache-Control: max-age=3300 header allowing clients to cache the URL.

Limitations

  • Only video items have timed thumbnails
  • Virtual clips use thumbnails from their source (master clip) item
  • Items without generated thumbnails return a 400 error
Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

position
required
integer >= 0
Example: 5000

Time position in milliseconds. The API returns the thumbnail closest to (but not exceeding) the requested position based on the item's frame capture frequency.

Responses

Response samples

Content type
application/json
{
  • "code": "THUMBNAIL_ERROR",
  • "message": "Failed to generate thumbnail URL"
}

Get bulk thumbnail URLs

Returns pre-signed S3 URLs for multiple thumbnails in a single request. Supports pagination for items with many thumbnails.

Query Modes

You can query thumbnails in two ways (mutually exclusive):

Index-based (default)

Use startIndex and limit to paginate through thumbnails by their index.

Time-based

Use startMs and optionally endMs to get thumbnails within a time range.

Pagination

The response includes nextIndex for cursor-based pagination:

  • If nextIndex is a number, use it as startIndex in the next request
  • If nextIndex is null, there are no more thumbnails

maxIndex Parameter

The maxIndex parameter is conditionally required:

  • Required for index-based queries when item has no duration
  • Required for time-based queries without endMs when item has no duration
  • Optional when item has duration or endMs is provided - caps results below computed maximum

URL Validity

Pre-signed URLs are valid for 55 minutes.

Limitations

  • Only items with configured thumbnails are supported
  • Cannot mix index-based and time-based query parameters
Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
startIndex
integer >= 0
Default: 0

Starting thumbnail index (0-based). Cannot be used with startMs/endMs.

limit
integer [ 1 .. 200 ]
Default: 200
Example: limit=50

Maximum number of thumbnail URLs to return (max 200)

maxIndex
integer >= 0
Example: maxIndex=100

Maximum thumbnail index (exclusive). Required if:

  • Using index-based query and item has no duration
  • Using time-based query without endMs and item has no duration

When item has duration or endMs is provided, this parameter is optional and can be used to override/cap the computed maximum.

startMs
integer >= 0

Start time in milliseconds for time-based query. Cannot be used with startIndex.

endMs
integer >= 0
Example: endMs=30000

End time in milliseconds for time-based query. Must be >= startMs.

Responses

Response samples

Content type
application/json
Example
{}

Generate thumbnail upload URLs

Generates pre-signed S3 PUT URLs for uploading thumbnails to an item. Supports single thumbnail upload or batch (stream) upload with indexed filenames.

Response

The response includes expectedThumbnailInfo which must be set on the item (via item update API) after all uploads complete. This tells Mimir where to find the uploaded thumbnails.

URL Validity

Pre-signed PUT URLs are valid for 55 minutes.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
mode
required
string

Upload mode for single thumbnail

filename
required
string

Full filename for the thumbnail (e.g., "thumbnail.jpg")

required
object (ThumbnailUploadStorage)

Storage configuration for thumbnail upload

Responses

Request samples

Content type
application/json
Example
{
  • "mode": "single",
  • "filename": "thumbnail.jpg",
  • "storage": {
    }
}

Response samples

Content type
application/json
Example
{}

Delete item's highres media

Initiate deletion of highres media (single flat file or segment files if the item is a live recording) of an item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
deletionDate
string

Optional property to specify a future date when the highres media will be deleted. Has to be a valid date string (e.g. YYYY-MM-DD format). The default deletion date is the current day if this property is not provided.

Responses

Request samples

Content type
application/json
{
  • "deletionDate": "string"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Cancel highres deletion of an item

Cancel highres deletion of an item scheduled using the 'delete highres' API. Will only succeed if the highres deletion request hasn't already been processed or in progress.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Get media segment URLs for an item

Retrieve pre-signed S3 URLs for media segments of an item.

This endpoint is used to fetch the actual video/audio data for playback. Each segment is a fixed duration of media (typically between 2 and 10 seconds) in MPEG-TS (.ts) or fragmented MP4 format.

Live Video Playback

For live recordings, use this endpoint in combination with getPlayableItem:

  1. Call getPlayableItem to get the current segmentCount from media
  2. Call this endpoint with firstSegmentIndex=0 to get initial segment URLs
  3. Fetch and play the segments
  4. Poll getPlayableItem when approaching the end of buffered segments to check for new segments
  5. When segmentCount increases, call this endpoint again to get new segment URLs
  6. Continue until media.streaming becomes false

Segment URL Expiration

The returned URLs are pre-signed and expire after 4 days.

Response Format

The response is an object where keys are stream IDs and values are objects mapping segment indices to pre-signed URLs. Up to 20 segments are returned per request.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

streamIds
required
string
Example: lrwt

Comma-separated list of media stream IDs for which the segment URLs are requested.

Live Recording Streams (MPEG-TS format, for items currently being recorded):

  • lrwt - LiveRecordWebproxyTs - Web-optimized H.264 video with AAC audio
  • lrht - LiveRecordHighresTs - High-resolution/original quality
  • lrah - LiveRecordAudioOnlyHighresTs - Audio-only high-resolution
  • lrap - LiveRecordAudioOnlyProxyTs - Audio-only proxy

Transcoded Proxy Streams (for completed/processed items):

  • bpv - BrowsePreviewVideo - H.264 video for web playback
  • bpad - BrowsePreviewAudioDownmix - Stereo audio downmix
  • epf - EditProxyFull - Video with all audio tracks for editing
signedForMethod
required
string
Enum: "get" "put"
Example: get

HTTP method to sign the URLs for. Use get for playback.

firstSegmentIndex
required
number
Example: 0

Zero-based index of the first media segment to get URL for. The API returns URLs for up to 20 segments starting from this index.

Responses

Retrieve system activity for a specific item

Returns the edit log for one item — the recorded changes, the user who made each one, when it happened, and a structured diff of what changed. This is the canonical endpoint for any audit / change-log / "what happened to this item over time" workflow.

Each entry on the response carries at minimum actionType (e.g. metadataUpdate), executedOn (RFC 3339 date-time, e.g. 2024-05-12T14:30:00.000Z), executedBy (user id) and email (the actor's email), plus an mdfDiff body describing the metadata fields that changed.

Sort order defaults to desc (newest first); pass sortOrder=asc for chronological order.

This endpoint does not validate that the supplied itemId exists. An item id that has no corresponding item — or that the caller has no permission to see — comes back as 200 OK with an empty events array, indistinguishable from "the item exists but has no recorded activity yet". If your tool needs to distinguish the two, add a separate GET /api/v1/items/{itemId} to confirm the item exists before reading its activity.

This is distinct from GET /api/v1/items/{itemId}/versionsHistory, which returns the coarser media-version snapshots of the item and does not carry actor, timestamps of edits, or metadata diffs.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item to retrieve activity for

query Parameters
sortOrder
string
Default: "desc"
Enum: "asc" "desc"
Example: sortOrder=desc

To sort ascending or descending on the executedOn time

size
number [ 1 .. 100 ]
Example: size=50

The maximum number of events to return per page. Must be between 1 and 100 inclusive — values outside that range are rejected with 400 Bad Request and the message "size must be in [1, 100]". Use the pageStartKey parameter with the response's nextPageStartKey to walk past the cap.

pageStartKey
string

The nextPageStartKey retrieved from previous query response

Responses

Response samples

Content type
application/json
{
  • "events": [
    ],
  • "nextPageStartKey": "string"
}

Get playable item information for media playback

Retrieve information needed to play an item's media. This endpoint is essential for:

  • Live video playback: Poll this endpoint when approaching the end of buffered segments while media.streaming is true to get updated segment counts as new media arrives.
  • Determining playable formats: Check playableArtifact to see what format is available (segmented streams, flat proxy files, or TAMS references).
  • Audio waveform data: Retrieve peak data for audio visualization.

Live Video Playback Workflow

For live recordings, follow this workflow:

  1. Call this endpoint to get initial media information
  2. Check if media.streaming is true (item is still receiving media)
  3. Use media.segmentCount to know how many segments are available
  4. Call getMediaSegments to get pre-signed URLs for the segments
  5. Poll this endpoint when approaching the end of buffered segments to get updated segmentCount
  6. Stop polling when media.streaming becomes false or itemState is COMPLETE

Stream Set Preference

The streamSetPreference option specifies which streams to use, in order of preference:

  • lrwt - Live Recording Web Proxy TS (for live items)
  • lrht - Live Recording High-res TS (for live items)
  • bpv - Browse Preview Video (for transcoded items)
  • bpad - Browse Preview Audio Downmix
  • epf - Edit Proxy Full

Example preference: [["lrwt"], ["bpv", "bpad"]] means "prefer live web proxy, fall back to browse preview video + audio".

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item to retrieve playback information for.

query Parameters
options
required
string
Example: options={"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]}

JSON-encoded options for selecting the playable artifact. Example: {"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]}

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "media": {
    },
  • "liveRecordingInfo": {
    },
  • "hasUploadProgress": false,
  • "itemType": "video",
  • "itemState": "COMPLETE",
  • "proxyAudioTrackUrls": [ ],
  • "webProxyAudioDownMixInfo": { },
  • "languageCode": "en",
  • "virtualClipInfo": {
    },
  • "frameDuration": {
    },
  • "playableArtifact": {
    },
  • "durationFromTechnicalMetadata": 125.5,
  • "peaksDelta": null,
  • "peaksUrls": null,
  • "nPeaksPerSecondPerChannel": 10,
  • "playableDuration": {
    }
}

Item - Transcript

Update transcript of the Item

Update the transcript of the item.

This path is PUT-only — there is no GET companion. To read a transcript, fetch the signed timedTranscriptUrl returned on the item-detail response (GET /api/v1/items/{itemId}), which points at the canonical word-timed JSON in S3. vttUrl and srtUrl on the same item carry the caption-player flavours.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required

Item transcript resource

languageCode
required
string

Language code. If the request is for translation, this is the source language.

required
Array of objects non-empty

A array containing transcripts with associated time.

isTranslation
boolean

Specifies if this request is for translation.

translationTargetLanguage
string

Target language for translation. Required if isTranslation is true and the item was not already translated before.

Responses

Request samples

Content type
application/json
{
  • "languageCode": "string",
  • "timedTranscript": [
    ],
  • "isTranslation": true,
  • "translationTargetLanguage": "en"
}

Response samples

Content type
application/json
{
  • "languageCode": "string",
  • "timedTranscriptUrl": "string",
  • "timedTranslatedTranscriptUrl": "string"
}

Item - Ancestry

Get the ancestries of the item.

Get the ancestries of the item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "ancestry": [
    ]
}

Item - Label

Delete label(s) from the Item

Delete label(s) from the Item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
labels
Array of strings non-empty

Responses

Request samples

Content type
application/json
{
  • "labels": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Item - Archiving

Archives/Unarchives an item

Archives or unarchives an item entry. Archived items appear under a special folder structure whose root is named 'Archive'. Attempting to archive an item that is already archived or to unarchive an item that is not archived will result in a 409 Conflict response.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required

Archiving operation

type
required
string
Enum: "archive" "unarchive"

Type of operation

archivePath
string

The folder path this item will be archived in. If not given or empty, will default to a path of the form 'year/month/day' value of current date. The path delimiter is '/'. Only relevant for type 'archive'.

mediaOnly
boolean

If an archive storage is configured and this is set to true, only copies high-resolution and proxy media files and skips copying metadata. Default is false. Only relevant for type 'archive'.

Responses

Request samples

Content type
application/json
{
  • "type": "archive",
  • "archivePath": "My Archive/2020/",
  • "mediaOnly": true
}

Response samples

Content type
application/json
{
  • "type": "archive",
  • "payload": {
    }
}

Item - Upload

Get upload lock information for an item

Retrieves the upload lock information for an item.

The lambda will provide caller with basic information about the upload and also define if the upload is currently locked.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "isUploadLocked": true
}

Create upload lock for an item

Creates upload lock for an item by checking if the item is in itemState.NEW and no other upload request has been made within the last 10 minutes.

The lambda will return necessary configuration to initiate an upload to the item. The possible upload methods supported:

  • S3 PUT for objects < 5GB
  • S3 Multipart upload for objects > 5GB

Authentication is performed using the provided signed URL.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
optional
lockOwnerInstanceId
required
string

A universal unique identifier id.

uploadLocationId
string

The id of the location you want to upload. If not provided, will generate signedUrl for default upload location. The id can be found by inspecting the API response of getUploadLocations API

fileName
string

The name of the file with proper extension. This is the name and extension the file will be saved in the bucket. If not provided the item must have originalFileName property with extension. If item doesn't have originalFileName property, then this property is required. In case of both originalFileName property in item and fileName property in request body fileName takes precedence and originalFileName will be updated with the fileName. Example, image.jpg / example-video.mp4.

isMultiPartUpload
boolean

If this is going to be a multipart upload

fileSize
number

size of the file. This property is required if isMultiPartUpload is set to true.

contentType
string

This property is required if isMultiPartUpload is set to true.

chunkSize
number

The chunk size you want for each part. If not sent, will be set to 50Mb.

Responses

Request samples

Content type
application/json
{
  • "lockOwnerInstanceId": "23e4567-e89b-12d3-a456-426614174000.",
  • "uploadLocationId": "string",
  • "fileName": "image.jpg / example-video.mp4",
  • "isMultiPartUpload": true,
  • "fileSize": 0,
  • "contentType": "string",
  • "chunkSize": 0
}

Response samples

Content type
application/json
{
  • "bucket": "upload-bucket-name",
  • "type": "s3Bucket",
  • "enableS3Acceleration": true,
  • "bucketEndpoint": "http://my.minio.server:9000/",
  • "isExternalBucket": true,
  • "uploadSignedUrl": "string",
  • "bucketCredentials": "string",
  • "uploadId": "string",
  • "uploadPartSize": "string",
  • "uploadPartCount": 0,
  • "uploadLocationId": "DEFAULT_UPLOAD_LOCATION",
  • "targetKey": "28918036-feae-495c-b54f-83827d2eef76"
}

Deletes the upload lock on an item

Deletes the upload lock for an item by resetting the uploadRequestedAt field on the item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Create signed urls for multipart upload for an item.

Create signed urls for a multipart upload which has been created when item upload lock was created. The number of links generated can be controlled by using firstPartNumber and partCount properties.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
uploadId
required
string

The uploadId returned when creating an upload lock using multipart.

uploadLocationId
string

The uploadLocationId returned by the multipart upload-lock call. If omitted, the server falls back to DEFAULT_UPLOAD_LOCATION for backward compatibility with old clients. If the upload was locked to a different storage location (e.g. a custom external bucket), that fallback targets the wrong bucket, and the signed URLs produced will be for the wrong S3 bucket — uploading to them will not advance the actual upload. Pass the value from the upload-lock response verbatim.

targetKey
string

The targetKey returned by the multipart upload-lock call. Omitting it causes the signed-URL generation to use an undefined S3 key, which silently produces no URLs. Pass the value from the upload-lock response verbatim.

firstPartNumber
required
number

The part number you want to start generating signed upload urls

partCount
required
number

The part till you want the upload url.

Responses

Request samples

Content type
application/json
{
  • "uploadId": "pxAPdnBCXiHdH0DIBDhH3wzWL8N22Bu26N02eIOx2u88uOxmz4eLOIEofPLaYKXD0agA",
  • "uploadLocationId": "DEFAULT_UPLOAD_LOCATION",
  • "targetKey": "28918036-feae-495c-b54f-83827d2eef76",
  • "firstPartNumber": 1,
  • "partCount": 0
}

Response samples

Content type
application/json
{
  • "uploadPartsSignedUrls": [
    ]
}

Complete multipart upload for an item

Complete multipart upload for an item after uploading al the parts

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
uploadId
required
string

The uploadId returned when creating an upload lock using multipart.

uploadLocationId
string

The uploadLocationId returned by the multipart upload-lock call. If omitted, the server falls back to DEFAULT_UPLOAD_LOCATION for backward compatibility with old clients. If the upload was locked to a different storage location (e.g. a custom external bucket), that fallback targets the wrong bucket and the S3 multipart-complete call will fail because the upload ID was never created there. Pass the value from the upload-lock response verbatim.

targetKey
string

The targetKey returned by the multipart upload-lock call. Omitting it causes the S3 multipart-complete to use an undefined key, which will fail at the storage layer. Pass the value from the upload-lock response verbatim.

isCanceled
boolean

If multipart upload needs to be cancelled

Array of objects

Responses

Request samples

Content type
application/json
{
  • "uploadId": "pxAPdnBCXiHdH0DIBDhH3wzWL8N22Bu26N02eIOx2u88uOxmz4eLOIEofPLaYKXD0agA",
  • "uploadLocationId": "DEFAULT_UPLOAD_LOCATION",
  • "targetKey": "28918036-feae-495c-b54f-83827d2eef76",
  • "isCanceled": 1,
  • "uploadParts": [
    ]
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Item - Sign Upload

Signs an upload part using the AWS v4 signing algorithm

Performs part signing based on the algorithm defined here: https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
datetime
required
string
Example: datetime=20190203T120000Z

Timestamp of the signing request

to_sign
required
string
Example: to_sign=AWS4-HMAC-SHA256 20190203T120000Z 20190203/eu-west-1/s3/aws4_request f536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59

The string to sign

Responses

Response samples

Content type
application/json
"string"

Item - Attachment

Get list of attachments or specific one.

Returns the list of attachments available for the item, or a specific one if 'attachment' query parameter is passed.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
attachment
string

The file name of a specific attachment

Responses

Response samples

Content type
application/json
[]

Create an attachment to a specific item.

This API is used to create an attachment for a specific item. It will return a signed URL to upload the associated file by using an HTTP PUT request.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
isPrecheck
boolean

If set to true, performs a check on whether a given filename already exists and returns a list of already existing files

Request Body schema: application/json
fileName
required
string

Name of the attachment file. Filename must be unique for a given attachment.

type
required
string
Enum: "poster" "prproj" "image" "subtitle" "file" "sequence" "timeline"

Type of the attachment file.

role
required
string
Enum: "thumbnail" "poster" "subtitle" "file" "render_source"

Role of the attachment. This describes the purpose attachment file is being used for.

language
string

Language of the attachment file

description
string

Description text for the attachment file

Responses

Request samples

Content type
application/json
{
  • "fileName": "item-attachment.txt",
  • "type": "poster",
  • "role": "thumbnail",
  • "language": "English",
  • "description": "New attachment"
}

Response samples

Content type
application/json
Example
"string"

Update an existing item attachment.

This API is used to update an attachment for a specific item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
fileName
required
string

Name of the attachment file. Filename must be unique for a given attachment.

type
required
string
Enum: "poster" "prproj" "image" "subtitle" "file" "sequence" "timeline"

Type of the attachment file.

role
required
string
Enum: "thumbnail" "poster" "subtitle" "file" "render_source"

Role of the attachment. This describes the purpose attachment file is being used for.

language
string

Language of the attachment file

description
string

Description text for the attachment file

Responses

Request samples

Content type
application/json
{
  • "fileName": "item-attachment.txt",
  • "type": "poster",
  • "role": "thumbnail",
  • "language": "English",
  • "description": "New attachment"
}

Response samples

Content type
application/json
{
  • "fileName": "item-attachment.txt",
  • "type": "poster",
  • "role": "thumbnail",
  • "language": "English",
  • "description": "New attachment"
}

Delete an attachment from a specific item.

This API is used to delete an attachment from a specific item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
fileName
required
string

Name of the attachment file

type
required
string
Enum: "poster" "prproj" "image" "subtitle" "file"

Type of the attachment file

Responses

Request samples

Content type
application/json
{
  • "fileName": "item-attachment.txt",
  • "type": "poster"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Item - mediaUsage

Update the media usage of an item.

This API endpoint allows you to update an item's media usage to reflect when and where the media was last used. At the time of accessing this API, this endpoint will set a UTC date on the "lastUsedOn" attribute.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
lastUsedWorkflow
required
string
Enum: "import" "desktop_download" "central_conform" "local_conform"

This property is used to set in which workflow the media was last used in.

Responses

Request samples

Content type
application/json
{
  • "lastUsedWorkflow": "import"
}

Response samples

Content type
application/json
{
  • "itemId": "4191dc5a-f632-a070-6a9a-2e3499449a31",
  • "mediaUsage": {
    }
}

Ongoing Tasks

Cancel an ongoing task

Cancel an ongoing tasks or operations performed on the item. e.g. ongoing render sequences, kelda requests, or pending operations etc. Only the owner of the item or an admin can perform this action.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required

Task information that needs to be canceled.

type
required
string
Enum: "render-sequence-kelda" "render-sequence-cloud"

Type of the task to be canceled.

pendingOperationId
string

Identifier for the pending operation (required for render-sequence-cloud tasks).

keldaRequestId
string

Identifier for the Kelda request (required for render-sequence-kelda tasks).

Responses

Request samples

Content type
application/json
{
  • "type": "render-sequence-kelda",
  • "pendingOperationId": "string",
  • "keldaRequestId": "string"
}

Response samples

Content type
application/json
{
  • "success": true
}

Item - Timed metadata

Get the timed metadata of an item

Get the timed metadata collection associated to the given item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Item - Timed metadata (log events)

Update timed metadata of an item

Update the timed metadata collection associated to the given item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required

Timed metadata collection

required
object

An object containing the timed metadata items to update where each key is the same as the value of the id property of its corresponding timed metadata item.

Responses

Request samples

Content type
application/json
{
  • "items": {
    }
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Item - Relations

Retrieve all relation of the item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

relationType
string
Example: relationType=parents

Fetch only relations of the specified type. Defaults to fetching relations of all types if not provided.

size
number
Example: size=50

The maximum number of related items to return in the response. Note that if the item has relation references to other now deleted items, the number of returned items may be less than the specified size, also when the item has more than the specified size of relations. A maximum of 5000 related items can be returned in one request.

from
number
Example: from=0

The index of the first related item to return in the response.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update relation entries of a single relation type

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

relationType
required
string

The type of the relation

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Request Body schema: application/json
required
Array
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Response samples

Content type
application/json
[
  • {
    }
]

Create a relation entry between two items

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

relationType
required
string

The type of the relation

query Parameters
readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Request Body schema: application/json
required
relatedItemId
required
string

The ID of the related item

Responses

Request samples

Content type
application/json
{
  • "relatedItemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}

Response samples

Content type
application/json
{
  • "type": "parents",
  • "item": {
    }
}

Delete a relation entry between two items

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

relationType
required
string

The type of the relation

relatedItemId
required
string
Example: a1e0b6bd-d3be-4d1b-a529-41dd8927325e

The ID of the related item

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Media Segments

Get media segment URLs for an item

Retrieve pre-signed S3 URLs for media segments of an item.

This endpoint is used to fetch the actual video/audio data for playback. Each segment is a fixed duration of media (typically between 2 and 10 seconds) in MPEG-TS (.ts) or fragmented MP4 format.

Live Video Playback

For live recordings, use this endpoint in combination with getPlayableItem:

  1. Call getPlayableItem to get the current segmentCount from media
  2. Call this endpoint with firstSegmentIndex=0 to get initial segment URLs
  3. Fetch and play the segments
  4. Poll getPlayableItem when approaching the end of buffered segments to check for new segments
  5. When segmentCount increases, call this endpoint again to get new segment URLs
  6. Continue until media.streaming becomes false

Segment URL Expiration

The returned URLs are pre-signed and expire after 4 days.

Response Format

The response is an object where keys are stream IDs and values are objects mapping segment indices to pre-signed URLs. Up to 20 segments are returned per request.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

streamIds
required
string
Example: lrwt

Comma-separated list of media stream IDs for which the segment URLs are requested.

Live Recording Streams (MPEG-TS format, for items currently being recorded):

  • lrwt - LiveRecordWebproxyTs - Web-optimized H.264 video with AAC audio
  • lrht - LiveRecordHighresTs - High-resolution/original quality
  • lrah - LiveRecordAudioOnlyHighresTs - Audio-only high-resolution
  • lrap - LiveRecordAudioOnlyProxyTs - Audio-only proxy

Transcoded Proxy Streams (for completed/processed items):

  • bpv - BrowsePreviewVideo - H.264 video for web playback
  • bpad - BrowsePreviewAudioDownmix - Stereo audio downmix
  • epf - EditProxyFull - Video with all audio tracks for editing
signedForMethod
required
string
Enum: "get" "put"
Example: get

HTTP method to sign the URLs for. Use get for playback.

firstSegmentIndex
required
number
Example: 0

Zero-based index of the first media segment to get URL for. The API returns URLs for up to 20 segments starting from this index.

Responses

Live Video

Get media segment URLs for an item

Retrieve pre-signed S3 URLs for media segments of an item.

This endpoint is used to fetch the actual video/audio data for playback. Each segment is a fixed duration of media (typically between 2 and 10 seconds) in MPEG-TS (.ts) or fragmented MP4 format.

Live Video Playback

For live recordings, use this endpoint in combination with getPlayableItem:

  1. Call getPlayableItem to get the current segmentCount from media
  2. Call this endpoint with firstSegmentIndex=0 to get initial segment URLs
  3. Fetch and play the segments
  4. Poll getPlayableItem when approaching the end of buffered segments to check for new segments
  5. When segmentCount increases, call this endpoint again to get new segment URLs
  6. Continue until media.streaming becomes false

Segment URL Expiration

The returned URLs are pre-signed and expire after 4 days.

Response Format

The response is an object where keys are stream IDs and values are objects mapping segment indices to pre-signed URLs. Up to 20 segments are returned per request.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

streamIds
required
string
Example: lrwt

Comma-separated list of media stream IDs for which the segment URLs are requested.

Live Recording Streams (MPEG-TS format, for items currently being recorded):

  • lrwt - LiveRecordWebproxyTs - Web-optimized H.264 video with AAC audio
  • lrht - LiveRecordHighresTs - High-resolution/original quality
  • lrah - LiveRecordAudioOnlyHighresTs - Audio-only high-resolution
  • lrap - LiveRecordAudioOnlyProxyTs - Audio-only proxy

Transcoded Proxy Streams (for completed/processed items):

  • bpv - BrowsePreviewVideo - H.264 video for web playback
  • bpad - BrowsePreviewAudioDownmix - Stereo audio downmix
  • epf - EditProxyFull - Video with all audio tracks for editing
signedForMethod
required
string
Enum: "get" "put"
Example: get

HTTP method to sign the URLs for. Use get for playback.

firstSegmentIndex
required
number
Example: 0

Zero-based index of the first media segment to get URL for. The API returns URLs for up to 20 segments starting from this index.

Responses

Get playable item information for media playback

Retrieve information needed to play an item's media. This endpoint is essential for:

  • Live video playback: Poll this endpoint when approaching the end of buffered segments while media.streaming is true to get updated segment counts as new media arrives.
  • Determining playable formats: Check playableArtifact to see what format is available (segmented streams, flat proxy files, or TAMS references).
  • Audio waveform data: Retrieve peak data for audio visualization.

Live Video Playback Workflow

For live recordings, follow this workflow:

  1. Call this endpoint to get initial media information
  2. Check if media.streaming is true (item is still receiving media)
  3. Use media.segmentCount to know how many segments are available
  4. Call getMediaSegments to get pre-signed URLs for the segments
  5. Poll this endpoint when approaching the end of buffered segments to get updated segmentCount
  6. Stop polling when media.streaming becomes false or itemState is COMPLETE

Stream Set Preference

The streamSetPreference option specifies which streams to use, in order of preference:

  • lrwt - Live Recording Web Proxy TS (for live items)
  • lrht - Live Recording High-res TS (for live items)
  • bpv - Browse Preview Video (for transcoded items)
  • bpad - Browse Preview Audio Downmix
  • epf - Edit Proxy Full

Example preference: [["lrwt"], ["bpv", "bpad"]] means "prefer live web proxy, fall back to browse preview video + audio".

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item to retrieve playback information for.

query Parameters
options
required
string
Example: options={"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]}

JSON-encoded options for selecting the playable artifact. Example: {"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]}

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "media": {
    },
  • "liveRecordingInfo": {
    },
  • "hasUploadProgress": false,
  • "itemType": "video",
  • "itemState": "COMPLETE",
  • "proxyAudioTrackUrls": [ ],
  • "webProxyAudioDownMixInfo": { },
  • "languageCode": "en",
  • "virtualClipInfo": {
    },
  • "frameDuration": {
    },
  • "playableArtifact": {
    },
  • "durationFromTechnicalMetadata": 125.5,
  • "peaksDelta": null,
  • "peaksUrls": null,
  • "nPeaksPerSecondPerChannel": 10,
  • "playableDuration": {
    }
}

Item - Comments

Get all comments for an item

Retrieve all comments (top-level and replies) for a specific item. Comments are returned in chronological order with replies following their parent comments. Deleted comments are included in the response with a deletedOn timestamp.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Responses

Response samples

Content type
application/json
{
  • "comments": [
    ],
  • "mScrollId": null
}

Create a new comment

Create a new comment on an item. Supports both top-level comments and replies.

Top-level comments can include timeline context (start/end timecodes) and an optional assignee. When a user is assigned, they will receive an in-app notification.

Replies reference a parent top-level comment by ID.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
type
required
string

Comment type (must be 'top')

text
required
string non-empty

Comment text content

required
object (ItemCommentContextDto)
object

Optional user to assign this comment to

Responses

Request samples

Content type
application/json
Example
{
  • "type": "top",
  • "text": "Processing failed due to HDR10 conversion error",
  • "context": {
    },
  • "assignee": {
    }
}

Response samples

Content type
application/json
Example
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "GetTopLevelCommentDto",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Get a specific comment

Retrieve a single comment by its ID.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

commentId
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

The ID of the comment

Responses

Response samples

Content type
application/json
Example
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "GetTopLevelCommentDto",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Delete a comment

Soft-delete a comment. The comment is not permanently removed but marked as deleted.

Permissions:

  • Users with item/commentDeleteOwn can delete their own comments
  • Users with item/commentDeleteOthers can delete any comment

Note: This is a soft delete - the comment remains in the database with:

  • deletedOn timestamp set
  • text field cleared
  • Comment is still returned in GET requests but marked as deleted
Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

commentId
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

The ID of the comment

Responses

Response samples

Content type
application/json
Example
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "GetTopLevelCommentDto",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Update comment status

Update the status of a top-level comment (assign/unassign user, resolve/unresolve).

Note: Only top-level comments can have their status updated. This endpoint will return an error if called on a reply.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

commentId
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

The ID of the comment

Request Body schema: application/json
required
object (InternalCommentAuthorDto)
resolved
boolean

Whether the comment is marked as resolved

Responses

Request samples

Content type
application/json
Example
{
  • "assignee": {
    }
}

Response samples

Content type
application/json
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "top",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Edit comment text

Edit the text of a comment. Only the comment author can edit their own comments.

When a comment is edited, the textEditedOn timestamp is updated.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

commentId
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

The ID of the comment

Request Body schema: application/json
required
text
required
string non-empty

Updated comment text

Responses

Request samples

Content type
application/json
{
  • "text": "Updated comment text with more details"
}

Response samples

Content type
application/json
Example
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "GetTopLevelCommentDto",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Add or remove a reaction

Add or remove a reaction emoji to/from a comment.

Reactions are idempotent:

  • Adding the same reaction twice has no effect
  • Removing a non-existent reaction has no effect

Available reactions: smile 🙂, thumb_up 👍, thumb_down 👎, heart ❤️, tada 🎉, green_check ✅, red_x ❌

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

commentId
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

The ID of the comment

Request Body schema: application/json
required
action
required
string
Enum: "add" "remove"

Whether to add or remove the reaction

reaction
required
string
Enum: "smile" "thumb_up" "thumb_down" "heart" "tada" "green_check" "red_x"

The reaction emoji type

Responses

Request samples

Content type
application/json
Example
{
  • "action": "add",
  • "reaction": "thumb_up"
}

Response samples

Content type
application/json
Example
{
  • "id": "b0d8d5be-07b8-4119-b204-19faae64704e",
  • "type": "GetTopLevelCommentDto",
  • "text": "Processing failed due to HDR10 conversion error",
  • "createdOn": "2025-01-10T12:00:00.000Z",
  • "modifiedOn": "2025-01-10T12:00:00.000Z",
  • "deletedOn": null,
  • "textEditedOn": null,
  • "author": {
    },
  • "reactions": [
    ],
  • "resolved": false,
  • "assignedOn": null,
  • "assignee": {
    },
  • "context": {
    }
}

Item - Custom Icons

Get all custom icons for an item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string

The ID of the item to retrieve custom icons for

Responses

Response samples

Content type
application/json
{
  • "customIcons": {
    }
}

Save custom icons for an item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string

The ID of the item to save custom icons for

Request Body schema: application/json
required
required
object

Collection of custom icons keyed by predefined position slots. (supports a maximum of 8 positions)

Responses

Request samples

Content type
application/json
{
  • "customIcons": {
    }
}

Response samples

Content type
application/json
""

Partially update custom icons for an item

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string

The ID of the item to update custom icons for

Request Body schema: application/json
required
required
object

Collection of custom icons keyed by predefined position slots. (supports a maximum of 8 positions)

Responses

Request samples

Content type
application/json
{
  • "customIcons": {
    }
}

Response samples

Content type
application/json
""

Item - AAF

AAF subclip generation

Generate an AAF subclip file with transcript as markers for given item ingested from Avid Mediafiles

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item ingested from Avid Mediafiles folder

Request Body schema: application/json
required

AAF subclip generation request

inPoint
required
number

The 'mark in' or start time of the subclip in milliseconds

outPoint
required
number

The 'mark out' or end time of the subclip in milliseconds

Array of objects

Array of transcript blocks that will be added to the subclip as markers

Responses

Request samples

Content type
application/json
{
  • "inPoint": 1000,
  • "outPoint": 4000,
  • "markers": [
    ]
}

Response samples

Content type
application/json
{
  • "base64Aaf": "string"
}

Item - Migration

Migrate media location for an item

Migrate high-resolution, proxy, and thumbnail stream for an item to new storage locations. The file path in the new location is expected to be the same as the current high-res or proxy location of the item. This API will verify that the media exists in the new location and also verify the file size for high-resolution media. If migration is successful it'll automatically schedule deletion of the original media if the 'keepSource' property is false
NOTE: This API doesn't do any file transfer itself. It only updates the location properties of the item after verifying the file existence.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item whose media is being migrated.

Request Body schema: application/json
required
Array of MigratedHighres (object) or MigratedProxy (object) or MigratedThumbnailStream (object)

List of media to be migrated

Responses

Request samples

Content type
application/json
{
  • "migrated": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Media migration successful"
}

Item - Copy media

Copy media to placeholder

Copy source media, analytics and log events from an item into a placeholder

Authorizations:
ApiKeyAuth
Request Body schema: application/json
sourceItemId
required
string

ID of the source item to copy data from

targetItemId
required
string

ID of the target placeholder to copy data to

mediaToCopy
string
Enum: "highRes" "editProxy"

Which media should be copied as the placeholder's high resolution file. Defaults to 'highRes'

Responses

Request samples

Content type
application/json
{
  • "sourceItemId": "string",
  • "targetItemId": "string",
  • "mediaToCopy": "highRes"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Item - Get by storage

Returns item id by storage & object key

Returns item id by storage name (bucket name) and storage object key. Virtual clips are ignored.

Authorizations:
ApiKeyAuth
path Parameters
bucketName
required
string
Example: ingest-bucket-2

Name of the bucket to query

objectKey
required
string
Example: N.FOLDER1%2FSOME-SUB-DIR%2FMore_Dir%2F10_18_2017%2011_20_06%20AM%20(UTC%2B06_00).mp4

Bucket object key or full path of the object in the bucket

  • objectKey must be URL encoded.
  • "N.FOLDER1/SOME-SUB-DIR/More_Dir/10_18_2017 11_20_06 AM (UTC+06_00).mp4" should be given as
  • "N.FOLDER1%2FSOME-SUB-DIR%2FMore_Dir%2F10_18_2017%2011_20_06%20AM%20(UTC%2B06_00).mp4"
  • Above example decoded using encodeURIComponent method of JavaScript

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}

Restore Media

Create a restore request in Glacier for a media

Create a restore request in Glacier for a media

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
tier
required
string

Among 3 different AWS restore tiers which should be used. Value can be Expedited, Standard or Bulk:

  • Expedited - Fastest method to restore a media, takes 1-5 minutes for a media size of 250 MB
  • Standard - Takes 2 - 5 hours to restore a media
  • Bulk - Takes 12 -48 hours to restore a media
retentionDays
required
number

Number of days to keep the media online after restore.

Responses

Request samples

Content type
application/json
{
  • "tier": {
    },
  • "retentionDays": 5
}

Response samples

Person

Create a person

Create a person

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Person resource

name
required
string

Name of the person.

description
string

Description of the person.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "name": "string",
  • "description": "string",
  • "imageIds": [
    ],
  • "itemType": "string",
  • "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "createdOn": "2019-08-24T14:15:22Z"
}

update a person

update a person

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

Request Body schema: application/json
required

Person resource

name
required
string

Name of the person.

description
string

Description of the person.

primaryImageId
string <= 50 characters

Primary Image Id of the person image.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "name": "string",
  • "description": "string",
  • "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "imageIds": [
    ],
  • "itemType": "string",
  • "createdOn": "2019-08-24T14:15:22Z",
  • "itemState": "new"
}

Delete a person

Delete a person

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Get person information

Get person information

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

query Parameters
itemsPerPage
required
number

Number of items should be returned per page.

from
required
number

Start number of the page

searchString
required
string

Actual Search String.

rangeStart
number

A number that determines if the start number of the page

timeZone
string

time zone of the client

isFuzzy
boolean

A boolean that indicates if the search should run as fuzzy or not.

folderId
string <= 50 characters
Example: folderId=04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The id of the folder in which the search should perform.

Responses

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "name": "string",
  • "description": "string",
  • "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "imageIds": [
    ],
  • "itemType": "string",
  • "createdOn": "2019-08-24T14:15:22Z"
}

List the reference images registered for a person

Returns the set of reference face images registered for the specified person. The recogniser uses these as the source-of- truth signatures for matching faces detected in video and image items.

The response uses a legacy {total, _embedded.collection} envelope that several older endpoints still emit. _embedded.collection holds one entry per image, each shaped like a regular image item (id, title, itemType, itemState, plus a signed thumbnail URL).

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Create a person image

Create a person image

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

Request Body schema: application/json
required

Person image resource

fileName
required
string

Name of the image file.

Responses

Request samples

Content type
application/json
{
  • "fileName": "string"
}

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "title": "string",
  • "itemType": "image",
  • "itemState": "string",
  • "personId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "thumbnail": "string",
  • "transcodingState": "string",
  • "mediaType": "string",
  • "createdOn": "2019-08-24T14:15:22Z",
  • "createdBy": "string",
  • "originalFileName": "string"
}

Fetch a single reference image registered for a person

Returns the metadata for a single reference image — id, title, itemType, itemState, the owning personId, and a signed thumbnail URL.

Use this when a person-detail UI has an image id in hand (e.g. from detectedPersons[].segments[].imageId on a video item) and needs the image record without listing all the person's images.

Authorizations:
ApiKeyAuth
path Parameters
personId
required
string

The identifier string for person.

imageId
required
string
Example: aa8d5e51-88f4-4988-b5d3-6f47e4644631

The ID of the image

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "string",
  • "itemType": "image",
  • "itemState": "string",
  • "personId": "string",
  • "thumbnail": "string"
}

Storage

Create a storage under the tenant

Create a storage under the tenant

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Storage resource

id
required
string

id of the storage. It must follow this syntax {tenantId}-id.

name
string

Name of the storage

description
string

Description of the storage.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "tenantId": "string",
  • "createdOn": "2019-08-24T14:15:22Z"
}

Get all storages under the tenant

Get all storages under the tenant

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Update a storage under the tenant

Update a storage under the tenant

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

Responses

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "createdOn": "2019-08-24T14:15:22Z",
  • "tenantId": "string",
  • "name": "string",
  • "description": "string"
}

Delete a storage entry.

Delete a storage entry.

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Transfer Request

Create a transfer request for the storage.

Create a transfer request for the storage.
Note: the API tries to ensure that for a given item, storage, artefact and 'targetFileName' there'll be one active request at a time, so that multiple 'Storage Manager' | processes don't try to write to the same file path at the same time. However, if 'targetFileName' is specified and depending on how the storage is configured, the destination file name might | vary, so it isn't always guaranteed there won't be duplicate requests.'

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

Id of storage to create the request for

Request Body schema: application/json
required

Storage resource

itemId
required
string <= 50 characters

Id of the Item.

artefact
string
Enum: "proxy" "highres" "aaf"

Which artefact should be retrieved by the transfer request

targetFileName
string

Filename to use when writing the file to target storage. This should not include file extension as it is taken from originalFileName.

createLinkForTargetFileName
boolean

If true, the file will be downloaded as . and a hard link to that GUID based file will be created in the storage folder, which has the "targetFileName" as the name of the link file.

any (ArtifactReference)

A reference to a media artifact. The type discriminator determines which artifact reference variant is used.

version
string

This is needed to be "v2" if "artifactReference" is used. Leave empty if "artifactReference" is not used.

Responses

Request samples

Content type
application/json
{
  • "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "artefact": "proxy",
  • "targetFileName": "downloaded_to_storage1.mp4",
  • "createLinkForTargetFileName": true,
  • "artifactReference": {
    },
  • "version": "string"
}

Response samples

Content type
application/json
{
  • "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "artefact": "proxy",
  • "targetFileName": "downloaded_to_storage1.mp4",
  • "createLinkForTargetFileName": true,
  • "artifactReference": {
    },
  • "version": "string"
}

Get all transfer requests for a particular storage.

Get all transfer requests for a particular storage.

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": [
    ]
}

Getting an exclusive lock on a transfer request from storage.

Getting an exclusive lock on a transfer request from storage.

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

transferRequestId
required
string

The identifier string for transfer request.

Request Body schema: application/json
required

Transfer request resource.

storageManagerInstanceId
required
string

Id of the corresponding storage manager.

transferState
required
string

state of the transfer request.

Responses

Request samples

Content type
application/json
{
  • "storageManagerInstanceId": "string",
  • "transferState": "string"
}

Response samples

Content type
application/json
{
  • "cutoffTime": 0
}

Get a transfer request for the particular storage by it's id.

Get a transfer request for the particular storage by it's id.

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

transferRequestId
required
string

The identifier string for transfer request.

Responses

Response samples

Content type
application/json
{
  • "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "storageManagerInstanceId": "string",
  • "transferState": "string"
}

Delete a transfer request.

Delete a transfer request.

Authorizations:
ApiKeyAuth
path Parameters
storageId
required
string

The identifier string for storage.

transferRequestId
required
string

The identifier string for transfer request.

Request Body schema: application/json
optional

Storage transfer request delete from client

transferState
string

Transfer request state

Responses

Request samples

Content type
application/json
{
  • "transferState": "string"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Get all transfer request.

Get all transfer request of that organization that are active.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Storage transfers V2 API

Get storage transfers.

Get current storage transfers based on different parameters

Authorizations:
ApiKeyAuth
query Parameters
dstStorageId
string
Example: dstStorageId=my-destination-storage

The unique ID of the destination storage. Get a specific transfer request by specifying the destination storage ID and path

dstPath
string
Example: dstPath=target-path/target-file.mp4

The destination path of the transfer. Can be derived from the API response when the transfer was created. The parameter 'dstStorage' is required alongside 'dstPath'

Responses

Response samples

Content type
application/json
{
  • "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "artefact": "highres",
  • "source": {
    },
  • "destination": {
    },
  • "state": "error",
  • "progressInfo": {
    },
  • "statusMessage": "string",
  • "requestByUserId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "createdOn": "2022-08-18T10:36:37.362Z",
  • "modifiedOn": "2022-08-18T10:36:37.362Z"
}

Create storage transfers.

Create a storage transfer request for an item

Authorizations:
ApiKeyAuth
Request Body schema: application/json
itemId
required
string

The ID of the Mimir item to be transferred.
Note For now, this API only supports transferring items that have their media stored in a AWS S3 cloud storage.

artefact
string (StorageTransferArtefact)
Value: "highres"

Artifacts are different types of media associated with a Mimir item. This property will be available if a specific artefact was requested for transfer

destinationStorageId
required
string

The ID of the destination storage. Can be derived from the API response of storage creation or by getting all storages.

targetFileName
string

The name of the transferred file. If not provided, the item's 'originalFileName' value will be used instead.

Responses

Request samples

Content type
application/json
{
  • "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "artefact": "highres",
  • "destinationStorageId": "destination-bucket#aws-s3#destination-path/",
  • "targetFileName": "target-file-name"
}

Response samples

Content type
application/json
{
  • "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "artefact": "highres",
  • "source": {
    },
  • "destination": {
    },
  • "state": "error",
  • "progressInfo": {
    },
  • "statusMessage": "string",
  • "requestByUserId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "createdOn": "2022-08-18T10:36:37.362Z",
  • "modifiedOn": "2022-08-18T10:36:37.362Z"
}

Storage location V2 API

Get storage locations.

Get all storage locations

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create storage location.

Create a new storage location

Authorizations:
ApiKeyAuth
Request Body schema: application/json
id
required
string

A unique identifier for the storage. Can be any string value as long as there are no other storage with the same id.

name
required
string

The name of the storage

folderPath
required
string

The path inside the storage. Empty string is considered to be the root of the storage.

storageType
required
string (StorageLocationTypeDto)
Value: "aws-s3"

Storage location types

associatedArtifactsToTransfer
Array of strings (StorageTransferAssociatedArtifacts)
Items Value: "transcript-srt"

Artifacts associated with a Mimir item that can be transferred alongside media to the destination storage.

required
object (StorageLocationKeysPayload)

Access keys of a storage

Responses

Request samples

Content type
application/json
{
  • "id": "my-s3-storage",
  • "name": "my_storage_name",
  • "folderPath": "path/inside/storage",
  • "storageType": "aws-s3",
  • "associatedArtifactsToTransfer": [
    ],
  • "keys": {
    }
}

Response samples

Content type
application/json
{
  • "id": "my_storage_name#aws-s3#path/inside/storage",
  • "name": "my_storage_name",
  • "folderPath": "path/inside/storage",
  • "storageType": "aws-s3",
  • "createdBy": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "keys": {
    },
  • "associatedArtifactsToTransfer": [
    ]
}

Update storage location.

Update an existing storage location

Authorizations:
ApiKeyAuth
Request Body schema: application/json
id
required
string

The ID that uniquely identifies the storage.

associatedArtifactsToTransfer
Array of strings (StorageTransferAssociatedArtifacts)
Items Value: "transcript-srt"

Artifacts associated with a Mimir item that can be transferred alongside media to the destination storage.

object (StorageLocationKeysPayload)

Access keys of a storage

Responses

Request samples

Content type
application/json
{
  • "id": "my_storage_name#aws-s3#path/inside/storage",
  • "associatedArtifactsToTransfer": [
    ],
  • "keys": {
    }
}

Response samples

Content type
application/json
{
  • "id": "my_storage_name#aws-s3#path/inside/storage",
  • "name": "my_storage_name",
  • "folderPath": "path/inside/storage",
  • "storageType": "aws-s3",
  • "createdBy": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "keys": {
    },
  • "associatedArtifactsToTransfer": [
    ]
}

Delete storage location.

Delete a storage location

Authorizations:
ApiKeyAuth
Request Body schema: application/json
id
required
string

The ID that uniquely identifies the storage.

Responses

Request samples

Content type
application/json
{
  • "id": "my_storage_name#aws-s3#path/inside/storage"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Ingest configuration

Get all ingest configuration in the system

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new ingest storage configuration

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
enableS3Acceleration
boolean
Default: false

Whether to enable S3 acceleration

isDisabled
boolean
Default: false

Whether this configuration is active or not

title
string

Title of the configuration

ingestConfigType
string
Enum: "ingest_media" "ingest_persons"

Type of the ingest configuration

storageProvider
string
Enum: "s3_native" "s3_clone" "azure_blob" "gcs"

The type of the ingest storage

sourceBucket
string

Name of the ingest storage

sourceKeyPrefix
string

Prefix/subfolder to apply when checking for matched content

sourceBucketCredentials
string

Reference to the secret stored in secrets manager for access credentials

sourceEndpoint
string

Endpoint URL for non-AWS S3 storages (e.g. MinIO)

ingestFileExtensions
string

List of file extensions that will trigger an ingest (an empty string means that there is no restriction on the file extension)

highresFolder
string

High-resolution folder for ingested items

targetFolder
string

Mimir folder to use as base folder when building target path for the ingested item

targetFolderRemoveSourcePrefix
boolean
Default: true

Defines if we should remove the path defined by sourceKeyPrefix when creating target path for the item

requireSidecar
boolean
Default: false

Defines if the ingest process requires a sidecar file to be present before starting ingest

sidecarParser
string
Enum: "custom_xml" "custom_json" "vizOneXml"

The type of sidecar parser to be used

sidecarFileName
string

Expected filename for the sidecar

confidence
number <float>

Confidence level for face detection

sourceLastModified
string <date-time>

Timestamp of the most recent ingested content

object (AnalyticConfig)

Configuration object for different types of analytic operations that can be run on an item.

isProxyOnlyIngestConfig
boolean
Default: false

If true, items ingested through this configuration are stored as 'proxy only' items

deleteEnabled
boolean
Default: false

If true, high-res files associated with an item will be deleted when the item is permanently deleted

accessType
string
Enum: "assume-role" "iam-user"

The type of access for the storage

accessKey
string

Access key for the user granting access to the storage. (Only used for IAM user access type)

secretKey
string

Secret key for the user granting access to the storage. (Only used for IAM user access type)

accessKeyId
string

Access key ID for the user granting access to the storage. ARN of the role granting access. (Only used for Assume Role access type)

externalId
string

External ID used for role assumption

skipProcessing
boolean
Default: false

If enabled, Mimir will only index the media and skip various kinds of processing (i.e. transcoding, analytics etc.)

object (Metadata)

Item's metadata object

object (Item.TimedMetadataCollection)
object

The configured visibility settings will be applied to items created through this configuration.

Responses

Request samples

Content type
application/json
{
  • "enableS3Acceleration": false,
  • "isDisabled": false,
  • "title": "ingest_media-testing",
  • "ingestConfigType": "ingest_media",
  • "storageProvider": "s3_native",
  • "sourceBucket": "testing",
  • "sourceKeyPrefix": "",
  • "sourceBucketCredentials": "",
  • "sourceEndpoint": "",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": false,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "isProxyOnlyIngestConfig": false,
  • "deleteEnabled": false,
  • "accessType": "assume-role",
  • "accessKey": "AKIAIOSFODNN7EXAMP2E",
  • "secretKey": "wJalrXUtnFEMI/K7MDENG/*PxRfiCYEXAMPLEKEY",
  • "accessKeyId": "arn:aws:iam::123456789012:role/role-name",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "skipProcessing": false,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "visibleTo": {
    }
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "title": "ingest_media_my-bucket",
  • "ingestConfigType": "ingest_media",
  • "isDisabled": true,
  • "storageProvider": "s3_native",
  • "sourceBucket": "my-bucket",
  • "sourceKeyPrefix": "my-folder/path",
  • "sourceEndpoint": "http://myhost.mydns.com:9000/",
  • "accessKey": "AKIA57FV897ULUTY9JNV",
  • "accessType": "assume-role",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "ingest-folder/inside/mimir",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": true,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "{filename}.xml",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "enableS3Acceleration": false,
  • "deleteEnabled": true,
  • "isProxyOnlyIngestConfig": true,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "scanStorageState": {
    },
  • "visibleTo": {
    },
  • "visibleToGroupList": null,
  • "tenantId": "mimir-tenant",
  • "awsAccountId": null
}

Get a single ingest configurations in the system

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: 803081ea-e797-41ea-bc28-cb26a3f908ce

Unique identifier of the ingest storage configuration to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "title": "ingest_media_my-bucket",
  • "ingestConfigType": "ingest_media",
  • "isDisabled": true,
  • "storageProvider": "s3_native",
  • "sourceBucket": "my-bucket",
  • "sourceKeyPrefix": "my-folder/path",
  • "sourceEndpoint": "http://myhost.mydns.com:9000/",
  • "accessKey": "AKIA57FV897ULUTY9JNV",
  • "accessType": "assume-role",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "ingest-folder/inside/mimir",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": true,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "{filename}.xml",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "enableS3Acceleration": false,
  • "deleteEnabled": true,
  • "isProxyOnlyIngestConfig": true,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "scanStorageState": {
    },
  • "visibleTo": {
    },
  • "visibleToGroupList": null,
  • "tenantId": "mimir-tenant",
  • "awsAccountId": null
}

Update an ingest storage configuration

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: 084c06bf-cc0d-404d-a409-947935983f79

Unique identifier of the ingest storage configuration to update

Request Body schema: application/json
required
id
string

Unique identifier for this configuration

title
string

Title of the configuration

ingestConfigType
string
Enum: "ingest_media" "ingest_persons"

Type of the ingest configuration

isDisabled
boolean

Whether this configuration is active or not

storageProvider
string
Enum: "s3_native" "s3_clone" "azure_blob" "gcs"

The type of the ingest storage

sourceBucket
string

Name of the ingest storage

sourceKeyPrefix
string

Prefix/subfolder to apply when checking for matched content. Might use '*' or be empty to indicate all content.

sourceEndpoint
string

Endpoint URL for non-AWS S3 storages (e.g. MinIO)

accessType
string
Enum: "assume-role" "iam-user"

The type of access for the storage

accessKey
string

The access key ID for the user granting access to the storage. (relevant for IAM user access type)

secretKey
string

The secret key for the user granting access to the storage. (relevant for IAM user access type)

accessKeyId
string

The access key ID (or ARN) for the user granting access to the storage. (relevant for assume-role access type)

externalId
string

External ID used for role assumption

ingestFileExtensions
string

File extensions that will trigger an ingest. Can be empty or '*' to allow all files to be ingested.

highresFolder
string

High-resolution folder for ingested items

targetFolder
string

Mimir folder to use as base folder when building target path for the ingested item.

targetFolderRemoveSourcePrefix
boolean

Defines if we should remove the path defined by sourceKeyPrefix when creating target path for the item.

requireSidecar
boolean

Defines if the ingest process requires a sidecar file to be present before starting ingest.

sidecarParser
string
Enum: "custom_xml" "custom_json" "vizOneXml"

The type of sidecar parser to be used

sidecarFileName
string

Expected filename for the sidecar. Either a fixed name or template based.

confidence
integer

Confidence level for face detection

sourceLastModified
string <date-time>

Timestamp of the most recent ingested content

object (AnalyticConfig)

Configuration object for different types of analytic operations that can be run on an item.

enableS3Acceleration
boolean

If true, S3 acceleration is enabled

deleteEnabled
boolean

If true, highres file associated with an item will be deleted from the bucket when that item is permanently deleted from Mimir.

isProxyOnlyIngestConfig
boolean

If true, items ingested through this configuration are stored as 'proxy only' items. These items have no highres and don't get processed, but they are preview-able in the browser (if browser supports previewing the media type).

object (Metadata)

Item's metadata object

object (Item.TimedMetadataCollection)
object

State of the scan storage

object
visibleToGroupList
Array of strings

List of groups that have permission to see the location

tenantId
string

Identifier of the tenant

awsAccountId
string

AWS account ID associated with the access key

Responses

Request samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "title": "ingest_media_my-bucket",
  • "ingestConfigType": "ingest_media",
  • "isDisabled": true,
  • "storageProvider": "s3_native",
  • "sourceBucket": "my-bucket",
  • "sourceKeyPrefix": "my-folder/path",
  • "sourceEndpoint": "http://myhost.mydns.com:9000/",
  • "accessType": "assume-role",
  • "accessKey": "AKIA57FV897ULUTY9JNV",
  • "secretKey": "1234567890abcdef1234567890abcdef12345678",
  • "accessKeyId": "arn:aws:iam::123456789012:user/ingest-user",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "ingest-folder/inside/mimir",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": true,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "{filename}.xml",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "enableS3Acceleration": false,
  • "deleteEnabled": true,
  • "isProxyOnlyIngestConfig": true,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "scanStorageState": {
    },
  • "visibleTo": {
    },
  • "visibleToGroupList": null,
  • "tenantId": "mimir-tenant",
  • "awsAccountId": null
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "title": "ingest_media_my-bucket",
  • "ingestConfigType": "ingest_media",
  • "isDisabled": true,
  • "storageProvider": "s3_native",
  • "sourceBucket": "my-bucket",
  • "sourceKeyPrefix": "my-folder/path",
  • "sourceEndpoint": "http://myhost.mydns.com:9000/",
  • "accessKey": "AKIA57FV897ULUTY9JNV",
  • "accessType": "assume-role",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "ingest-folder/inside/mimir",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": true,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "{filename}.xml",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "enableS3Acceleration": false,
  • "deleteEnabled": true,
  • "isProxyOnlyIngestConfig": true,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "scanStorageState": {
    },
  • "visibleTo": {
    },
  • "visibleToGroupList": null,
  • "tenantId": "mimir-tenant",
  • "awsAccountId": null
}

Delete an ingest storage configuration

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: 803081ea-e797-41ea-bc28-cb26a3f908ce

Unique identifier of the ingest storage configuration to delete

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Upload location

Get all upload locations in the system

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
Example
[
  • {
    }
]

Get the default upload location in the system

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
Example
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "title": "ingest_media_my-bucket",
  • "ingestConfigType": "ingest_media",
  • "isDisabled": true,
  • "storageProvider": "s3_native",
  • "sourceBucket": "my-bucket",
  • "sourceKeyPrefix": "my-folder/path",
  • "sourceEndpoint": "http://myhost.mydns.com:9000/",
  • "accessKey": "AKIA57FV897ULUTY9JNV",
  • "accessType": "assume-role",
  • "externalId": "b21vcmZhcnVrcmFraWIjNjRlN2U1MTEtNzY4MS00OTljLTg1YjAtOGMxMTFiM2ZlNGUz",
  • "ingestFileExtensions": ".mp4,.m4v",
  • "highresFolder": "",
  • "targetFolder": "ingest-folder/inside/mimir",
  • "targetFolderRemoveSourcePrefix": true,
  • "requireSidecar": true,
  • "sidecarParser": "custom_xml",
  • "sidecarFileName": "{filename}.xml",
  • "confidence": 90,
  • "sourceLastModified": "2024-10-22T03:13:00.280Z",
  • "analyticConfig": {
    },
  • "enableS3Acceleration": false,
  • "deleteEnabled": true,
  • "isProxyOnlyIngestConfig": true,
  • "defaultMetadata": {
    },
  • "defaultTimedMetadata": {
    },
  • "scanStorageState": {
    },
  • "visibleTo": {
    },
  • "visibleToGroupList": null,
  • "tenantId": "mimir-tenant",
  • "awsAccountId": null
}

Update the default upload location

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
id
string

Unique identifier of the upload location to be set as default

Responses

Request samples

Content type
application/json
{
  • "id": "e35bd40d-56e1-4515-ae04-5a38d9614136"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Media Processing

Execute Media Processing

The Process API executes various operations on media items, including transcoding, transcription, person detection, celebrity detection, label detection, text detection, subclip creation, and archive file transfer. Each operation requires an itemId, operationType, and optional operationParams. The forced field determines if the operation should run even when disabled.

N.B: These operations may invoke additional costs depending on the nature of the operation.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Execute Media Processing with provided parameters. The request body contains the itemId, operationType, and operationParams, which define the operation to be performed and the specific settings for the chosen operation.

itemId
required
string

The item entry identifier.

operationType
required
string
Enum: "transcoding" "transcription" "personDetection" "celebrityDetection" "labelDetection" "textDetection" "subclip" "archiveFileTransfer"

The type of analysis operation to perform.

(TranscriptionParams (object or null)) or (PersonDetectionParams (object or null)) or (TextDetectionParams (object or null)) or (SubclipParams (object or null)) or (ArchiveFileTransferParams (object or null))

Operation-specific parameters for the analysis.

forced
boolean

Whether the operation should run even if it is disabled.

Responses

Request samples

Content type
application/json
Example
{
  • "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
  • "operationType": "transcription",
  • "operationParams": {
    },
  • "forced": false
}

Response samples

Content type
application/json
{
  • "message": "Operation completed successfully"
}

Tenant

Get tenant configuration information

Get tenant configuration information

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{ }

Update the tenant configuration information

Update the tenant configuration information

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Tenant User Config Resource

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{ }

Get transcription language settings for the tenant

Get transcription language settings for the tenant

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Create transcription language settings for the tenant

Create transcription language settings for the tenant

Authorizations:
ApiKeyAuth
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Get tenant generated media locations

Get tenant generated media locations

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create generated media location

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
bucketName
required
string

The name of the bucket.

pathPrefix
required
string

A prefix controlling where in the bucket should the generated media content be stored. Note that the S3 trigger monitoring for .ts live segments will only monitor S3 paths with this prefix.

accessKey
required
string

Credentials to be used to access this bucket.

secretKey
required
string

Credentials to be used to access this bucket.

backup
required
boolean

If true, this bucket will be used as a secondary location by Elemental live transcoding jobs.

deleteEnabled
boolean

Whether to delete from the bucket when Mimir item is permanently deleted.

autoCreateItems
required
boolean

If true, we will auto create items when receiving live media. The bucket then cannot be used for "normal" Mimir-controlled scheduled recordings, where items are created ahead of time.

uploadGeneratedMedia
required
boolean

Whether to use this location as the default upload bucket for generated content (edit proxy, web proxy).

storageProvider
string
Enum: "s3_native" "s3_clone"

Type of storage provider. If undefined, assume AWS S3.

sourceEndpoint
string

Custom endpoint URL of the storage. Relevant for S3 compatible storages.

Responses

Request samples

Content type
application/json
{
  • "bucketName": "string",
  • "pathPrefix": "string",
  • "accessKey": "string",
  • "secretKey": "string",
  • "backup": true,
  • "deleteEnabled": true,
  • "autoCreateItems": true,
  • "uploadGeneratedMedia": true,
  • "storageProvider": "s3_native",
  • "sourceEndpoint": "string"
}

Response samples

Content type
application/json
{
  • "id": "my-generated-media-bucket/path1/",
  • "bucketName": "string",
  • "pathPrefix": "string",
  • "accessKey": "string",
  • "secretKey": "string",
  • "backup": true,
  • "deleteEnabled": true,
  • "autoCreateItems": true,
  • "uploadGeneratedMedia": true,
  • "storageProvider": "s3_native",
  • "sourceEndpoint": "string"
}

Get tenant generated media location

Get tenant generated media location

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

ID of the generated media location

Responses

Response samples

Content type
application/json
{
  • "id": "my-generated-media-bucket/path1/",
  • "bucketName": "string",
  • "pathPrefix": "string",
  • "accessKey": "string",
  • "secretKey": "string",
  • "backup": true,
  • "deleteEnabled": true,
  • "autoCreateItems": true,
  • "uploadGeneratedMedia": true,
  • "storageProvider": "s3_native",
  • "sourceEndpoint": "string"
}

Update tenant generated media location

Update tenant generated media location

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

ID of the generated media location

Request Body schema: application/json
bucketName
string

The name of the bucket.

accessKey
string

AWS access key to use to access the bucket.

secretKey
string

AWS secret key to use to access the bucket.

uploadGeneratedMedia
boolean

Whether to use this location as the default upload bucket for generated content (edit proxy, web proxy)

deleteEnabled
boolean

Whether to delete from the bucket when Mimir item is permanently deleted.

storageProvider
string
Enum: "s3_native" "s3_clone"

Type of storage provider. If undefined, assume AWS S3.

sourceEndpoint
string or null

Custom endpoint URL of the storage. Relevant for S3 compatible storages.

Responses

Request samples

Content type
application/json
{
  • "bucketName": "string",
  • "accessKey": "FGHFRHGTHYJYrDFDF",
  • "secretKey": "FGHFRHfgkjfdgkjfsmjbmlkfjgdslkjfGTHYJYrDFDF",
  • "uploadGeneratedMedia": true,
  • "deleteEnabled": true,
  • "storageProvider": "s3_native",
  • "sourceEndpoint": "string"
}

Response samples

Content type
application/json
{
  • "id": "7c964cb5-0b9f-9e48-1669-0af85a036487",
  • "bucketName": "my-bucket",
  • "pathPrefix": "generated/media/",
  • "accessKey": "FGHFRHGTHYJYrDFDF",
  • "secretKey": "FGHFRHfgkjfdgkjfsmjbmlkfjgdslkjfGTHYJYrDFDF",
  • "uploadGeneratedMedia": true
}

Delete tenant generated media location

Delete tenant generated media location

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

ID of the generated media location

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Webhooks

Get all configured webhooks

Get all configured webhooks

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new webhook

Create a new webhook

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
protected
required
boolean

When true, only the id, type, and label of the webhook is made visible over the Mimir API

type
required
string (webhookType)
Enum: "itemNotification" "itemDeletion" "itemCreation" "itemChange" "itemParentChange" "itemRelationsChange" "transfer" "folderCreate" "folderChange" "folderDelete" "timedMetadata" "systemWarning" "recordingWebhook" "transcriptionUpdate"

The type of webhook.

url
required
string

The URL to which webhook HTTP requests will be sent.

label
required
string

A descriptive label shown by Mimir in the webhook config UI.

required
AlwaysConditionDto (object) or MetadataConditionDto (object) or AndConditionDto (object) or OrConditionDto (object) or ItemTypeConditionDto (object) (WebhookCondition)

A criteria for which new states should be posted to the URL.

required
object

A key/value map of custom HTTP headers to include with webhook requests.

Responses

Request samples

Content type
application/json
{
  • "protected": false,
  • "type": "itemChange",
  • "label": "Example Webhook",
  • "condition": {
    },
  • "headers": {
    }
}

Response samples

Content type
application/json
{
  • "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
  • "protected": true,
  • "type": "itemChange",
  • "label": "My Protected Webhook"
}

Update an existing webhook

Updates an existing webhook to the provided state

Authorizations:
ApiKeyAuth
path Parameters
webhookId
required
string

The unique identifier of the webhook to update.

Request Body schema: application/json
required
protected
required
boolean

When true, only the id, type, and label of the webhook is made visible over the Mimir API

type
required
string (webhookType)
Enum: "itemNotification" "itemDeletion" "itemCreation" "itemChange" "itemParentChange" "itemRelationsChange" "transfer" "folderCreate" "folderChange" "folderDelete" "timedMetadata" "systemWarning" "recordingWebhook" "transcriptionUpdate"

The type of webhook.

url
required
string

The URL to which webhook HTTP requests will be sent.

label
required
string

A descriptive label shown by Mimir in the webhook config UI.

required
AlwaysConditionDto (object) or MetadataConditionDto (object) or AndConditionDto (object) or OrConditionDto (object) or ItemTypeConditionDto (object) (WebhookCondition)

A criteria for which new states should be posted to the URL.

required
object

A key/value map of custom HTTP headers to include with webhook requests.

Responses

Request samples

Content type
application/json
{
  • "protected": false,
  • "type": "itemChange",
  • "label": "Example Webhook",
  • "condition": {
    },
  • "headers": {
    }
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Delete a webhook

Deletes the specified webhook.

Authorizations:
ApiKeyAuth
path Parameters
webhookId
required
string

The unique identifier of the webhook to delete.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

TenantIds

Get tenant ids list

Get all the tenant ids list

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "ids": [
    ]
}

Bookmark

Retrieve all visible system bookmarks

Retrieve all system bookmarks that are visible to the current user. Users who are part of a group with ManageSystemBookmarks permission can see all system bookmarks. API versioning is supported via the version query parameter. If omitted, version 1 is used by default. API version 2 and later do not include folderTreePath in the response.

Authorizations:
ApiKeyAuth
query Parameters
version
integer >= 1
Example: version=2

API version number. If not provided, defaults to version 1.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new system bookmark

Creates a new system bookmark. Users must have the necessary permissions to manage system bookmarks. API versioning is supported via the version query parameter. If omitted, version 1 is used by default. API version 2 and later do not support folderTreePath.

Authorizations:
ApiKeyAuth
query Parameters
version
integer >= 1
Example: version=2

API version number. If not provided, defaults to version 1.

Request Body schema: application/json
path
required
string

Path to a location within Mimir. Must be prefixed by '/' and contain a valid sub path Mimir will recognize.

title
required
string

The title of the bookmark that will be presented to the users

icon
required
string

A Material Design icon string that determines which icon is visible in front of the system bookmark

parentFolder
string

Available in API version 2 and later. The parent folder of the bookmark. If not specified, the bookmark will be created at the root level. If specified, the bookmark will be created under the specified folder. The folder must exist and get the folder ID from the folder API.

isFilterBookmark
boolean

Indicates whether the bookmark is a filter type bookmark or not.

visibleToGroups
Array of strings or null

If unspecified or null, this system bookmark will be visible to everyone. If specified, bookmark will have visibility groups attached to it. An array with groups will make this bookmark visible only to users who are part of at-least one of these groups.

folderTreePath
string
Deprecated

Deprecated in API version 2 and later. The hierarchical path for bookmark organization. This property should not be included when using API version 2 or later.

Responses

Request samples

Content type
application/json
{
  • "path": "/search-item",
  • "title": "My bookmark",
  • "icon": "local_offer",
  • "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470",
  • "isFilterBookmark": true,
  • "visibleToGroups": [
    ],
  • "folderTreePath": "root/folder1/folder2"
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "path": "/search-item",
  • "title": "My bookmark",
  • "icon": "local_offer",
  • "isFilterBookmark": true,
  • "visibleToGroups": [
    ],
  • "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}

Delete old system bookmarks and create new bookmarks from payload

Authorizations:
ApiKeyAuth
Request Body schema: application/json
Array
path
required
string

Path to a location within Mimir. Must be prefixed by '/' and contain a valid sub path Mimir will recognize.

title
required
string

The title of the bookmark that will be presented to the users

icon
required
string

A Material Design icon string that determines which icon is visible in front of the system bookmark

isFilterBookmark
boolean

Indicates whether the bookmark is a filter type bookmark or not.

visibleToGroups
Array of strings or null

If unspecified or null, this system bookmark will be visible to everyone. If specified, bookmark will have visibility groups attached to it. An array with groups will make this bookmark visible only to users who are part of at-least one of these groups.

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve a system bookmark

Authorizations:
ApiKeyAuth
path Parameters
bookmarkId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the bookmark

Responses

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "path": "/search-item",
  • "title": "My bookmark",
  • "icon": "local_offer",
  • "isFilterBookmark": true,
  • "visibleToGroups": [
    ],
  • "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}

Update a system bookmark

Updates an existing system bookmark by ID. Only users with ManageSystemBookmarks permission can update bookmarks. API versioning is supported via the version query parameter. If omitted, version 1 is used by default. API version 2 and later do not support folderTreePath in the request payload.

Authorizations:
ApiKeyAuth
path Parameters
bookmarkId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the bookmark

query Parameters
version
integer >= 1
Example: version=2

API version number. If not provided, defaults to version 1.

Request Body schema: application/json
required
title
required
string

The title of the bookmark that will be presented to the users

icon
required
string

A Material Design icon string that determines which icon is visible in front of the system bookmark

visibleToGroups
Array of strings or null

If unspecified or null, this system bookmark will be visible to everyone. If specified, bookmark will have visibility groups attached to it. An array with groups will make this bookmark visible only to users who are part of at-least one of these groups.

parentFolder
string

Available in API version 2 and later. The parent folder of the bookmark. If not specified, the bookmark will be created at the root level. If specified, the bookmark will be created under the specified folder. The folder must exist and get the folder ID from the folder API.

folderTreePath
string
Deprecated

Deprecated in API version 2 and later. This property should not be included when using API version 2 or later.

Responses

Request samples

Content type
application/json
{
  • "title": "My bookmark",
  • "icon": "local_offer",
  • "visibleToGroups": [
    ],
  • "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470",
  • "folderTreePath": "root/folder1/folder2"
}

Response samples

Content type
application/json
{
  • "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "path": "/search-item",
  • "title": "My bookmark",
  • "icon": "local_offer",
  • "isFilterBookmark": true,
  • "visibleToGroups": [
    ],
  • "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}

Delete a system bookmark

Delete a system bookmark

Authorizations:
ApiKeyAuth
path Parameters
bookmarkId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the bookmark

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Bookmark Folders

Retrieve Bookmark Folders

Retrieves the list of bookmark folders. If no bookmark folders exist, an empty list is returned. The response includes an ETag header that can be used for conditional updates when modifying bookmark folders.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "folders": [
    ]
}

Write Bookmark Folders

Writes the list of bookmark folders. The request must include an If-Match header with a valid ETag to ensure the resource has not been modified by another process. Weak ETags (W/"") are not supported.

If the If-Match ETag does not match the current version of the resource, the request will fail with a 412 Precondition Failed response. Upon a successful write, a new ETag is returned in the response.

The request body must contain a bookmarkFolders object with a folders array, which includes all existing folders along with any new or updated folders. The recursiveUpdate flag indicates whether to update the visibility of bookmarks and subfolders. If set to true, it will update the visibility of all bookmarks and subfolders in the specified folders.

Note: If one or more folders need to be added or updated, the request body must include all existing folders along with the newly added or updated ones.

Authorizations:
ApiKeyAuth
header Parameters
If-Match
required
string

The ETag value from the last GET response. Ensures that the update is only applied if the resource has not changed.

Request Body schema: application/json
required
required
object
recursiveUpdate
required
boolean

If true, updates the visibility of bookmarks and subfolders in the specified folders.

Responses

Request samples

Content type
application/json
{
  • "bookmarkFolders": {
    },
  • "recursiveUpdate": true
}

Response samples

Content type
application/json
{
  • "folders": [
    ]
}

Ingest File

Ingest file in an external storage into Mimir.

Ingest file in an external storage into Mimir.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
configId
required
string

Id of the storage configuration where the file has been uploaded. This id will be used to resolve credentials and acquire access to the storage. The id can be found by inspecting the API response of getAllIngestStorageConfigs API (for ingest configurations) and getUploadLocations API (for upload configurations).

srcKey
required
string

The full path to the file inside the storage

placeholderId
string

ID of the placeholder item where the media should be ingested. This is optional. If not provided, a new Mimir item will be created.

Responses

Request samples

Content type
application/json
{
  • "configId": "410021cc-5086-4a9a-9e81-7d04b29be6ea",
  • "srcKey": "upload/folder1/folder1/1.mp4",
  • "placeholderId": "cfa094c7-a031-46f3-a4b7-18375411afff"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

System Config

Get All Transcription Language Settings for the system.

Perform search operation on items

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Search

Perform search operation on items

Search across items in the authenticated tenant. Results are paginated via from and itemsPerPage and ordered by last-modified time, descending, by default. The searchString parameter combines free-text keywords with the field-filter DSL — for example <keyword> type:video restricts a keyword search to videos only. The user-visible label of each hit is read from the response's metadata.formData.title, falling back to originalFileName when no metadata title is set.

This endpoint is sized for ad-hoc and interactive use. Calling it on a hot loop from an automated process is likely to be throttled. For workflows that need to walk a complete result set — exports, syncs, bulk processing — use scroll mode (scroll=true) instead of issuing many short paged requests.

Always pass readableMetadataFields=true. Without it, metadata.formData keys are internal GUIDs that integration code should never depend on. The response schema below documents the readable shape.

Type breakdown and date histogram aggregations. The response schema's typeCount (array) and dateHits (object) sibling fields populate only when the request explicitly asks for them. To get a type breakdown alongside the regular hits, pass includeTypeCounts=true. To get a per-day histogram of the results, pass includeDateCounts=true; the histogram buckets by defaultDateRangeField (defaults to mediaCreatedOn when omitted). Pass defaultDateRangeFormId when the bucketing field lives on a non-default MDF. Both flags compose with each other and with the rest of the search request. The dateHits value is keyed by dd-MM-yyyy strings — convert to ISO if the UI expects YYYY-MM-DD. The unrelated request flag typeCount=true is a separate "give me only a flat type-count array" mode that replaces the entire response body.

Persons appear in unfiltered search results. A search with no searchString, or with a searchString that does not constrain type:, returns hits with itemType: "person" mixed in among videos, audio, and images. Person records are not items: they have no proxy, no mediaDuration, no metadata.formData.title (their human label is the top-level name field), and GET /api/v1/items/{id} returns 404 for a person id — the detail endpoint is GET /api/v1/persons/{id} instead. To list media items only, either issue one search per media type (type:video, type:image, type:audio, type:file, type:clipList, type:timeline) and merge client-side, or filter itemType !== "person" on the response.

Folder scoping. Pass folderId to restrict results to items inside a given folder. Pass includeSubfolders=true to also include items in any descendant subfolders of that folder; without this flag the search is flat. Folder scoping and the searchString DSL compose — both are in effect on the same call.

Walking a complete result set. The default from + itemsPerPage pagination style is capped and is not suitable for export, sync, or bulk-process integrations. Use scroll=true to start a scroll: the response carries hits at the top level under items (not _embedded.collection) and an mScrollId cursor while more pages remain. Pass the cursor back as mScrollId on the next call (also with scroll=true) to fetch the next page; stop when the response no longer includes mScrollId. The page size in scroll mode is server-defined — the itemsPerPage value does not control it.

Finding a folder by name. The searchString DSL has no name: field filter and does not support a type:folder form. To resolve a folder by its exact name, pass includeFolders=true as a query parameter alongside the name as a plain keyword in searchString (quote it to require the exact phrase), then filter the response hits by itemType === "folder" and name === "<target name>". Example: searchString="Editorial" with includeFolders=true, then keep hits where itemType === "folder" and name === "Editorial".

Authorizations:
ApiKeyAuth
query Parameters
itemsPerPage
required
number

Number of items should be returned per page.

from
required
number

Start number of the page

searchString
required
string
Example: searchString=keyword type:video

The search query string. Supports several filter types:

  • Text search: keyword

  • Item type filter: type:video (also type:audio, type:image, type:file, type:clipList, type:timeline, type:person). Use the DSL keyword type: here. Note that the itemType field on a search hit uses a different name — type is the query keyword, itemType is the response field. Combine with a keyword like <keyword> type:video to filter a keyword search to videos only.

    The DSL keyword does not include a type:folder form. To bring folders into a search response, set the includeFolders=true query parameter instead — folders and items then share the same _embedded.collection envelope and are distinguished by itemType === "folder" on each hit.

  • Content-based filters that match against indexed fields the media-analysis pipeline produces or that come from item metadata:

    • says:<word> — matches against the transcript text (what someone said in the audio).
    • label:<word> — matches detected object/scene labels (what appeared in the frame, e.g. label:car, label:dog).
    • person:<name> — matches detected persons by name (e.g. person:Trump).
    • text:<word> — matches text the OCR pipeline detected on-screen (e.g. text:CNN).
    • title:<word> — matches the item's title metadata field.
    • description:<word> — matches the item's description field.
    • events:<word> — matches indexed event labels.

    Multiple filters in the same searchString are ANDed together — the search returns only items that match every filter. The DSL has no OR or negation operator; do that combination work client-side.

    Other indexed fields can be filtered with the same fieldName:value shape — for example mediaCreatedOn or createdOn. The DSL does not support a free-form name: filter — to find an item or folder by exact name, search with the name as a plain keyword (optionally quoted to require the exact phrase) plus a type: constraint, then filter the response by the top-level name field for an exact match.

  • Date range filters:

    • Absolute dates: mediaCreatedOn:[2024-01-01T00:00:00Z to 2024-12-31T23:59:59Z]
    • Relative dates: mediaCreatedOn:[-7d to +30d] (7 days ago to 30 days from now)
    • Partial ranges: mediaCreatedOn:[2024-01-01T00:00:00Z to *] or mediaCreatedOn:[* to +30d]
    • Mixed ranges: mediaCreatedOn:[-7d to 2024-12-31T23:59:59Z]
  • Relative date syntax:

    • +Nd for N days in the future (e.g., +30d = 30 days from now)
    • -Nd for N days in the past (e.g., -7d = 7 days ago)
    • +0d or -0d for today
    • * as wildcard for open-ended ranges

Default ordering of search results is by last-modified time, descending (most recently modified first).

rangeStart
number

A number that determines if the start number of the page

timeZone
string

time zone of the client

isFuzzy
boolean
Default: false

A boolean that indicates if the search should run as fuzzy or not.

atSameTime
boolean
Default: false

A boolean that indicates if matching to filters need to happen at the same time within the video or if match within the same video item is sufficient.

typeCount
boolean

When set to true, the response body is replaced with a flat JSON array of {key, doc_count} type-breakdown entries — no envelope, no hits, no aggregations. This is a different response shape from the regular search response.

For a sibling type-breakdown alongside the regular hits, use includeTypeCounts=true instead (see below).

includeTypeCounts
boolean

When set to true, the regular search response carries a sibling typeCount array — [{key, doc_count}] per item type matching the keyword. Composes with all other search parameters; does not change the response envelope.

The breakdown is over every itemType, ignoring any type: constraint in the searchString — the same set of counts comes back regardless of which type the search filtered to.

includeDateCounts
boolean

When set to true, the regular search response carries a sibling dateHits object — a per-day histogram of the results. Must be paired with defaultDateRangeField (and, when the bucketing field lives on a non-default MDF, with defaultDateRangeFormId); without those, dateHits will not populate.

defaultDateRangeField
string
Example: defaultDateRangeField=createdOn

Item field to bucket on for the dateHits histogram — typically createdOn, mediaCreatedOn, or modifiedOn. Required for includeDateCounts=true to produce non-empty buckets. Items missing the field are excluded from the histogram.

defaultDateRangeFormId
string

Identifies the MDF (Metadata Form) that defines the field named in defaultDateRangeField. Pass this when the bucketing field comes from a custom MDF (not a system field) so the server resolves the right schema for the field. For system fields like createdOn and modifiedOn, omit this parameter.

folderId
string <= 50 characters
Example: folderId=04509a7f-3b4z-459f-a1a9-d0c43b7e5d13

The id of the folder in which the search should perform.

includeSubfolders
boolean

Look for search hits in sub-folders as well.

includeFolders
boolean

A boolean value that represents whether or not folders should be included in the search results.

scroll
boolean

Set to true to walk a complete result set across multiple pages. Scroll mode is the right tool for export, sync, or bulk-process integrations; the offset-based from + itemsPerPage style is capped and is not suitable for walking large result sets.

Scroll mode changes the response shape: hits are returned at the top level under items (not _embedded.collection), the page size is server-defined (the itemsPerPage value does not control it), and the response carries an mScrollId cursor while more pages remain. Pass that cursor back as mScrollId on the next call; stop when the response no longer includes mScrollId.

mScrollId
string

Scroll cursor returned by a previous scroll=true response. Pass it back to fetch the next page of the same scroll. The scroll ends when a response no longer includes an mScrollId.

fetchFatVersion
boolean

A boolean value that represents whether to return more properties in the search scroll API.

fetchFullVersion
boolean

A boolean value that represents whether to include the requested MDF fields in the search scroll API. Indicating a regular search with the scroll API.

excludeFields
string
Example: excludeFields=field1,field2,field2

List of fields to be excluded from the search results.

readableMetadataFields
boolean

Recommended: always set to true. With true, metadata.formData (and any equivalent metadata-form payloads on the response) is keyed by the human-readable MDF field ids — title, createdOn, mediaCreatedOn, and so on. With the parameter omitted or false, those keys are internal GUIDs that integrations must never depend on. The response schemas in this document describe the readable form.

Responses

Request samples

curl --get 'https://mimir.mjoll.no/api/v1/search' \
  --data-urlencode 'searchString=<keyword> type:video' \
  --data-urlencode 'from=0' \
  --data-urlencode 'itemsPerPage=10' \
  --data-urlencode 'readableMetadataFields=true' \
  -H 'Accept: application/json' \
  -H 'x-mimir-cognito-id-token: Bearer <your-api-key>'

Response samples

Content type
application/json
{
  • "total": 0,
  • "count": 0,
  • "items": [
    ],
  • "mScrollId": "string",
  • "dateHits": {
    },
  • "typeCount": [
    ],
  • "from": 0,
  • "incompleteFolderCount": 100,
  • "_embedded": {
    }
}

kelda

Ingest a file via kelda

Api for making kelda start ingesting a file immediately. Useful for indexed folder mirror mode where scanning can take a while to get to new files.

Authorizations:
ApiKeyAuth
path Parameters
keldaId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the corresponding kelda

Request Body schema: application/json
type
string
Value: "single_file_new"

new file ingest type

filepath
string

filepath from root inside kelda container

Responses

Request samples

Content type
application/json
{
  • "type": "single_file_new",
  • "filepath": "/kelda/kelda-root/indexedfolders/indexed1/hello.mp4"
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

System Activity

Retrieve system activity events for your tenant

Authorizations:
ApiKeyAuth
query Parameters
from
required
string <date-time>
Example: from=2025-06-01T00:00:00Z

From time in ISO format. Must be in the same UTC month as to.

to
required
string <date-time>
Example: to=2025-06-30T23:59:59Z

To time in ISO format. Must be in the same UTC month as from.

sortOrder
string
Default: "desc"
Enum: "asc" "desc"
Example: sortOrder=desc

To sort ascending or descending on the executedOn time

actionType
string
Example: actionType=transcoding

To only return events of this type.

size
number
Example: size=50

The max number of events to return

pageStartKey
string

The nextPageStartKey retrieved from previous query response

Responses

Response samples

Content type
application/json
{
  • "events": [
    ],
  • "nextPageStartKey": "string"
}

Retrieve system activity for a specific item

Returns the edit log for one item — the recorded changes, the user who made each one, when it happened, and a structured diff of what changed. This is the canonical endpoint for any audit / change-log / "what happened to this item over time" workflow.

Each entry on the response carries at minimum actionType (e.g. metadataUpdate), executedOn (RFC 3339 date-time, e.g. 2024-05-12T14:30:00.000Z), executedBy (user id) and email (the actor's email), plus an mdfDiff body describing the metadata fields that changed.

Sort order defaults to desc (newest first); pass sortOrder=asc for chronological order.

This endpoint does not validate that the supplied itemId exists. An item id that has no corresponding item — or that the caller has no permission to see — comes back as 200 OK with an empty events array, indistinguishable from "the item exists but has no recorded activity yet". If your tool needs to distinguish the two, add a separate GET /api/v1/items/{itemId} to confirm the item exists before reading its activity.

This is distinct from GET /api/v1/items/{itemId}/versionsHistory, which returns the coarser media-version snapshots of the item and does not carry actor, timestamps of edits, or metadata diffs.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item to retrieve activity for

query Parameters
sortOrder
string
Default: "desc"
Enum: "asc" "desc"
Example: sortOrder=desc

To sort ascending or descending on the executedOn time

size
number [ 1 .. 100 ]
Example: size=50

The maximum number of events to return per page. Must be between 1 and 100 inclusive — values outside that range are rejected with 400 Bad Request and the message "size must be in [1, 100]". Use the pageStartKey parameter with the response's nextPageStartKey to walk past the cap.

pageStartKey
string

The nextPageStartKey retrieved from previous query response

Responses

Response samples

Content type
application/json
{
  • "events": [
    ],
  • "nextPageStartKey": "string"
}

User settings

Retrieve user settings

Retrieve settings of the user associated with the credentials used to perform the HTTP request.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "bookmarks": [
    ],
  • "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
  • "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
  • "defaultFilters": [
    ],
  • "dismissedNotifications": {
    },
  • "showRenameSubclipDialog": true
}

Update user settings

Update settings of a user.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
Array of objects

List of bookmarks user created.

workFolderId
string <uuid>

ID of the work folder of the user.

lastSeenChangelogId
string <uuid>

Last seen change-log ID.

Array of objects

Default filters.

object
showRenameSubclipDialog
boolean

Responses

Request samples

Content type
application/json
{
  • "bookmarks": [
    ],
  • "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
  • "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
  • "defaultFilters": [
    ],
  • "dismissedNotifications": {
    },
  • "showRenameSubclipDialog": true
}

Response samples

Content type
application/json
{
  • "bookmarks": [
    ],
  • "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
  • "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
  • "defaultFilters": [
    ],
  • "dismissedNotifications": {
    },
  • "showRenameSubclipDialog": true
}

User info

Retrieve user information

Retrieve information about a specific user, or all users if no query parameter is provided.

Authorizations:
ApiKeyAuth
query Parameters
id
string
Example: id=b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the user

email
string
Example: email=john.doe@company.com

The email of the user

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Security

Get security

Retrieve a JSON object describing how to verify external authentication tokens that a tenant can use to access their resources in the Mimir API.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
Example

Put security

Store a JSON object describing how to verify external authentication tokens that a tenant can use to access their resources in the Mimir API.

Authorizations:
ApiKeyAuth
Request Body schema: application/json

Tenant security to store

jwksUrl
string or null

The URL of a JSON Token Key Set.

Security considerations

Mimir will trust every bearer of oidc tokens containing JWT tokens signed by this JSON Token Key Set. Therefore only ever specify a JSON Token Key Set that is exclusively used for signing access tokens you would want to use for accessing your Mimir system on your behalf.

Storing a new URL, or setting it to null does not immediately invalidate tokens that have previously been verified using the previous tenant security settings. It can take up to five minutes before previously verified auth tokens stop working.

OIDC token format

Once a JSON Token Key Set URL has been set, then the Mimir API endpoints will start accepting an HTTP request header named x-mimir-cognito-id-token with value "oidc p=TENANT t=JWT", where TENANT is the tenant ID of your Mimir account, and JWT is a valid JWT token signed by the specified JSON Token Key Set.

The JWT token is required to contain the claims email, given_name and family_name of type string.

The JWT token may optionally provide a groups claim of type array of string.

Each unique email claim value that Mimir sees through the oidc authentication scheme will establish a unique Mimir user account.

When there exists a Mimir group with ID "TENANT:GROUP", where TENANT is the tenant ID of your Mimir account, and GROUP is a string occuring in the groups claim array, then the bearer of the oidc token will be granted the permissions granted by the Mimir group.

autoAddUsersToOrganizationGroup
boolean or null

If this property is undefined or true, the bearer of the oidc token will be treated as a member of the "TENANT:Organization" group.

Responses

Request samples

Content type
application/json
Example

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

User

Update an user.

Update an user with specified identifier string.

Authorizations:
ApiKeyAuth
path Parameters
userId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The user identifier.

Request Body schema: application/json
givenName
string

The user's given (first) name.

familyName
string

The user's family (last) name.

accountStatus
string
Value: "VERIFIED"

The status of the user's account.

groups
required
Array of strings

List of group IDs the user belongs to.

notListable
boolean

Indicates if the user should not be listed in user list of metadata user field.

isDeactivated
boolean

Indicates if the user account is deactivated.

Responses

Request samples

Content type
application/json
{
  • "givenName": "John",
  • "familyName": "Doe",
  • "accountStatus": "VERIFIED",
  • "groups": [
    ],
  • "notListable": true,
  • "isDeactivated": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "givenName": "string",
  • "familyName": "string",
  • "email": "string",
  • "accountStatus": "VERIFIED",
  • "groups": [
    ],
  • "permissions": [
    ],
  • "createdOn": "2019-11-20T11:27:41.107Z",
  • "modifiedOn": "2019-11-20T11:27:41.107Z",
  • "isExternal": true,
  • "notListable": true,
  • "avatar": "string",
  • "highResAvatar": "string",
  • "groupLabels": [
    ],
  • "extGroupsHint": [
    ],
  • "primaryGroupDefaultUploadLocationId": "string",
  • "primaryGroupKeldaIdForConformLocation": "string",
  • "isDeactivated": true
}

User deactivation status.

Get the deactivation status of a user.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "isDeactivated": true
}

API keys

Get all API keys

Returns a list of API keys created by the user making the request. NOTE: The keys returned only contain information about the keys, not the full authentication tokens. The full token can only be retrieved once the very first time the key is created.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new API key

Keys created using this endpoint are exclusively owned by the user making the request and can not be viewed or modified by other users.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
isActive
required
boolean

Whether the key should be active or not

expiryDate
required
string

Date of expiry for the key in ISO date string format (specifically, YYYY-MM-DDTHH:mm:ss.sssZ) or a static value 'indefinite'. 'indefinite' indicates that the key is valid forever.

label
required
string

Human readable label to help identify the API key

maxUnusedDays
required
number or null

Maximum amount of time (in days) a key can be unused before being deemed invalid. Null if indefinite. A key is considered unused if it has not been used to successfully authenticate a request or, no property of the key was updated. If a key is invalid due to being unused, the unused time can be reset by updating any property of the key (e.g. label, expiryDate).

Responses

Request samples

Content type
application/json
{
  • "isActive": true,
  • "expiryDate": "2023-12-31T20:59:59.999Z",
  • "label": "string",
  • "maxUnusedDays": 0
}

Response samples

Content type
application/json
{
  • "keyId": "string",
  • "isActive": true,
  • "expiryDate": "string",
  • "modifiedOnIsoDateString": "string",
  • "label": "string",
  • "lastUsedOnIsoDate": "string",
  • "maxUnusedDays": 0,
  • "apiKeyHeaderValue": "string"
}

Update an API key

Authorizations:
ApiKeyAuth
path Parameters
keyId
required
string
Example: test-key

The unique identifier of the key to update

Request Body schema: application/json
isActive
required
boolean

Whether the key should be active or not

expiryDate
required
string

Date of expiry for the key in ISO date string format (specifically, YYYY-MM-DDTHH:mm:ss.sssZ) or a static value 'indefinite'. 'indefinite' indicates that the key is valid forever.

label
required
string

Human readable label to help identify the API key

maxUnusedDays
required
number or null

Maximum amount of time (in days) a key can be unused before being deemed invalid. Null if indefinite. A key is considered unused if it has not been used to successfully authenticate a request or, no property of the key was updated. If a key is invalid due to being unused, the unused time can be reset by updating any property of the key (e.g. label, expiryDate).

Responses

Request samples

Content type
application/json
{
  • "isActive": true,
  • "expiryDate": "2023-12-31T20:59:59.999Z",
  • "label": "string",
  • "maxUnusedDays": 0
}

Response samples

Content type
application/json
{
  • "keyId": "string",
  • "isActive": true,
  • "expiryDate": "string",
  • "modifiedOnIsoDateString": "string",
  • "label": "string",
  • "lastUsedOnIsoDate": "string",
  • "maxUnusedDays": 0
}

Delete an API key

Authorizations:
ApiKeyAuth
path Parameters
keyId
required
string
Example: test-key

The unique identifier of the key to delete

Responses

API keys admin

Get API keys for specified users

Returns API keys for the specified users, grouped by user ID. Only accessible by super admins and tenant admins. The userIds query parameter accepts a comma-separated list of user IDs (max 30).

Authorizations:
ApiKeyAuth
query Parameters
userIds
required
string
Example: userIds=b60d57d2-4b12-a80c-6f14-c5eefaa91460,1a2b3c4d-5e6f-7g8h-9i0j-k1l2m3n4o5p6

Comma-separated list of user IDs to retrieve API keys for (max 30)

Responses

Response samples

Content type
application/json
{
  • "b60d57d2-4b12-a80c-6f14-c5eefaa91460": [
    ],
  • "1a2b3c4d-5e6f-7a8b-9c0d-e1f2a3b4c5d6": [
    ]
}

Update an API key's active status

Allows a super admin or tenant admin to enable or disable an API key for a specific user.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
keyId
required
string

The unique identifier of the API key to update

userId
required
string

The user ID that owns the API key

isActive
required
boolean

Whether the API key should be active or inactive

Responses

Request samples

Content type
application/json
{
  • "keyId": "string",
  • "userId": "string",
  • "isActive": true
}

Response samples

Content type
application/json
{
  • "keyId": "string",
  • "isActive": true,
  • "expiryDate": "string",
  • "modifiedOnIsoDateString": "string",
  • "label": "string",
  • "lastUsedOnIsoDate": "string",
  • "maxUnusedDays": 0
}

Delete an API key for a user

Allows a super admin or tenant admin to delete an API key belonging to a specific user.

Authorizations:
ApiKeyAuth
query Parameters
keyId
required
string

The unique identifier of the API key to delete

userId
required
string

The user ID that owns the API key

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Metering

Get metering information for one or several tenants.

Get metering information for one or several tenants.

Authorizations:
ApiKeyAuth
query Parameters
isAdmin
boolean or null

A boolean which determines if the metering information should be fetched for Admin panel or not.

month
string or null

Month in the format of YYYY-MM.

Responses

Response samples

Content type
application/json
Example
{
  • "meteringDataGroupByTenant": [
    ],
  • "startDay": 0,
  • "endDay": 0,
  • "cost": 0
}

Storage Managers

Get Status of all the Storage Managers.

Get Status of all the Storage Managers.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "_embedded": {
    }
}

Live

List the live ingest sources configured in the tenant

Returns the tenant's live ingest sources — the named feeds (cameras, satellite receivers, NDI/VDCP inputs, etc.) that the system records into the asset library. Each source is anchored at a locationId that resolves through GET /prime/api/v1/liveLocations to a human-readable label and IANA timezone — joining the two on locationId is the standard pattern for an ingest scheduler UI.

The response is a plain JSON array, not an envelope.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List the live ingest locations configured in the tenant

Returns the tenant's live ingest locations — the named places (studios, control rooms, cities) that live sources are attached to. Each location carries a human-readable label and an IANA timezone used by the scheduling layer to interpret recording windows.

Pair this list with GET /prime/api/v1/live/sourcesV2 and join on idsource.locationId to render a feed list with geography and timezone alongside the source name.

The response is a plain JSON array, not an envelope.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Sharing

List public shares created in the tenant

Returns the tenant's public shares — links that grant external recipients access to a set of items and/or folders. Shares are returned in pages keyed by nextToken, ordered most-recent-first by createdOn. To enumerate all shares, follow the cursor:

GET /prime/api/v1/shares
  -> { shares: [...], nextToken: "<token>" }
GET /prime/api/v1/shares?nextToken=<token>
  -> { shares: [...], nextToken: "<next>" or null }

Stop when nextToken is null. The default page size is 50; pass ?limit=N (1–50) to lower it.

Each entry's enabled flag tells you whether the link still serves recipients. A "Recent shares" UI typically filters enabled === true and sorts by createdOn descending — the endpoint already returns shares in that order on the first page.

Authorizations:
ApiKeyAuth
query Parameters
nextToken
string

Pagination cursor returned by a previous call. Pass it back verbatim (URL-encoded) to fetch the next page; omit on the first call.

limit
integer [ 1 .. 50 ]
Example: limit=50

Maximum number of shares per page. Defaults to 50.

contentId
string

Filter to shares that include a specific item or folder id. When present, pagination (nextToken/limit) is not applied and the full matching set is returned in one response.

tenant
string
Value: "true"

Set to true to return shares created by any user in the tenant (not just the caller's own shares). Requires tenant- admin or super-admin role; returns 403 otherwise.

startDate
string <date-time>

RFC 3339 date-time in UTC (e.g. 2024-05-01T00:00:00.000Z). When provided together with endDate, only shares whose createdOn falls within [startDate, endDate] (inclusive) are returned.

endDate
string <date-time>

RFC 3339 date-time in UTC (e.g. 2024-05-31T23:59:59.000Z). Upper bound of the createdOn filter. Must be provided together with startDate; ignored when startDate is absent.

Responses

Response samples

Content type
application/json
{
  • "shares": [
    ],
  • "nextToken": "string"
}

Tasks

List tasks routed to a user (or to everyone)

Returns the tenant's task queue — comments routed to a specific user for review/action, plus other workflow tasks. Each task carries an assignee, a creator, an assignment timestamp, and a resolved/unresolved flag.

The path segment {assignee} selects whose queue to read. Two modes:

  • <userId> — a real Mimir user UUID returns only tasks routed to that user.
  • all — the magic literal all returns every task in the tenant, regardless of assignee. Use this for an admin dashboard or a tenant-wide queue view.

Quirks worth knowing

  • context.item is null whenever the underlying item has been deleted or the caller cannot see it. Code that joins tasks to items must handle the null case explicitly.
  • The text column on each task often carries @<name> mention markers extracted from the source comment; treat them as opaque text.
  • The startSecond value here is a flat fractional number of seconds (e.g. 59.0924). The same conceptual field on the /items/{id}/comments endpoint is a FuzzyValue object — they are not interchangeable.
  • The assignee and createdBy fields carry only user UUIDs; resolve to names via GET /auth/api/v1/userInfo/users (see the user-id resolution recipe in the integrator guide).
Authorizations:
ApiKeyAuth
path Parameters
assignee
required
string
Example: all

User UUID, or the literal all to return every task in the tenant.

query Parameters
status
string
Enum: "resolved" "unresolved"

Filter to tasks in a specific resolution state. Omitting this defaults to unresolved — only active (unresolved) tasks are returned. Pass resolved for the audit log.

limit
integer >= 1

Maximum number of tasks per page. The server applies a default and a cap; pass this to lower the page size for a small UI.

pageStartKey
string

Pagination cursor returned by a previous call as nextPageStartKey. Pass it back to fetch the next page; omit on the first call.

Responses

Response samples

Content type
application/json
{
  • "tasks": [
    ],
  • "nextPageStartKey": "string"
}

Scheduled recordings

Get scheduled recordings that have a start time within a specified time period

Authorizations:
ApiKeyAuth
query Parameters
from
required
integer <int64>
Example: from=1745064000000

Recording start time lower bound, as epoch milliseconds (UTC). Must be a 13-digit millisecond value. A 10-digit seconds value is not rejected as invalid input but is interpreted as a 1970-era moment, so the response comes back 200 OK with an empty recording list — easy to misread as "no recordings in this range".

to
required
integer <int64>
Example: to=1745150400000

Recording start time upper bound, as epoch milliseconds (UTC). Same encoding requirement as from: 13 digits, not seconds.

Responses

Response samples

Content type
application/json
{
  • "recordings": [
    ],
  • "series": [
    ]
}

Get a scheduled recording item

Authorizations:
ApiKeyAuth
path Parameters
id
required
string
Example: 238cfd24-3c16-4325-85d4-496d0cf74e5c

Recording item id

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": { },
  • "startTimeMs": "string",
  • "durationMs": "string",
  • "ingestFrom": { },
  • "liveRecording": {
    },
  • "seriesId": "string"
}

Recording series

Get a recording series by id

A recording series defines a recurring recording, such as a recording happening once a week, and contains the needed information for creating the individual recordings.

Authorizations:
ApiKeyAuth
path Parameters
id
required
string or null

The id of the recording series

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "createdOn": "string",
  • "createdBy": "string",
  • "recurrenceSchedule": { },
  • "metadataTemplate": { },
  • "activeFrom": "string",
  • "activeTo": "string",
  • "recordingItems": { },
  • "recordingParams": {
    }
}

Update a recording series

Authorizations:
ApiKeyAuth
path Parameters
id
required
string or null

The id of the recording series

Request Body schema: application/json
recurrenceSchedule
object

Defines how the series recurs, such as daily at a given time of day.

metadataTemplate
object

The metadata that will be applied to the individual recording items

activeFrom
string

No recordings will be created before this time. In ISO format.

activeTo
string

If defined, no recordings will be created after this time. In ISO format.

object

The live parameters that will be applied to the individual recordings.

Responses

Request samples

Content type
application/json
{
  • "recurrenceSchedule": { },
  • "metadataTemplate": { },
  • "activeFrom": "string",
  • "activeTo": "string",
  • "recordingParams": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "createdOn": "string",
  • "createdBy": "string",
  • "recurrenceSchedule": { },
  • "metadataTemplate": { },
  • "activeFrom": "string",
  • "activeTo": "string",
  • "recordingItems": { },
  • "recordingParams": {
    }
}

Create a recording series

Authorizations:
ApiKeyAuth
path Parameters
id
required
string or null

The id of the recording series

Request Body schema: application/json
recurrenceSchedule
object

Defines how the series recurs, such as daily at a given time of day.

object
activeTo
string

If defined, no recordings will be created after this time. In ISO format.

Responses

Request samples

Content type
application/json
{
  • "recurrenceSchedule": { },
  • "source": {
    },
  • "activeTo": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "createdOn": "string",
  • "createdBy": "string",
  • "recurrenceSchedule": { },
  • "metadataTemplate": { },
  • "activeFrom": "string",
  • "activeTo": "string",
  • "recordingItems": { },
  • "recordingParams": {
    }
}

Create an Item for an upcoming series recording.

The created recording item may then be edited independently of the series.

Authorizations:
ApiKeyAuth
path Parameters
id
required
string or null

The id of the recording series

Request Body schema: application/json
scheduledStartTimeMs
number

The scheduled start time in milliseconds per the series recurrence schedule.

object

The metadata that will be applied to the individual recording items

Responses

Request samples

Content type
application/json
{
  • "scheduledStartTimeMs": 0,
  • "overrides": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": { },
  • "startTimeMs": "string",
  • "durationMs": "string",
  • "ingestFrom": { },
  • "liveRecording": {
    },
  • "seriesId": "string"
}

Statistics

Retrieve various statistics for the tenant

Retrieve various statistics for the tenant. Each returned statistic is given as a single count value for the queried time span.

Authorizations:
ApiKeyAuth
query Parameters
from
string or null

From date, inclusive. In yyyy-mm-dd format. If not provided then no lower bound is used.

to
string or null

To date, inclusive. In yyyy-mm-dd format. Defaults to the current date, and should only be provided if "from" is also specified

Responses

Response samples

Content type
application/json
{
  • "dateRange": {
    },
  • "counts": {
    }
}

Replication

Get Feed Items

Retrieve a list of items that have been modified in a replication significant way since a given date.

Authorizations:
ApiKeyAuth
path Parameters
since
required
string <date-time>
Example: 2024-04-18T00:00:00.000Z

The date to retrieve feed items since.

query Parameters
next
string

The opaque cursor for the next page of results if there are more to fetch.

Responses

Response samples

Content type
application/json
{
  • "tenant": {
    },
  • "modifications": [
    ],
  • "next": "string"
}

Get Item Bundle

This API is used for system-to-system replication of items and their associated resources. The exact nature of the resource requests and responses will evolve as both replication support and the information associated with an item in the system evolves. Information about item state and resources are delivered in bundles. Multiple bundles may be needed to fully replicate the state and resources of an item.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string
Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460

The ID of the item

Request Body schema: application/json
required
object

The replica request object. This object contains the information needed to replicate the item.

Responses

Request samples

Content type
application/json
{
  • "replica": {
    }
}

Response samples

Content type
application/json
{
  • "strippedItemEntity": { },
  • "normalizedFolderPath": "",
  • "resources": [
    ],
  • "modifiedOn": "2024-05-15T11:12:09.235Z",
  • "truncated": false,
  • "schemas": [
    ],
  • "optionLists": [
    ]
}

Get Replication

Retrieve configuration controlling automated replication of content from other Mimir systems.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "modified": {
    },
  • "sources": [
    ]
}

Put Replication

Put the configuration controlling automated replication of content from other Mimir systems, replacing any existing configuration.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
Array of objects

What Mimir systems to replicate content from

Responses

Request samples

Content type
application/json
{
  • "sources": [
    ]
}

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Custom notifications

Get notifications for the current user

Get all notifications for given recipient type and status for the current user.

Authorizations:
ApiKeyAuth
query Parameters
type
required
string
Enum: "user" "primary-group" "tenant-wide" "system-wide"

The recipient type of notifications to retrieve

status
required
string
Enum: "read" "unread"

The status of notifications to retrieve

limit
integer
Default: 10

The maximum number of notifications to retrieve

nextToken
string

The token for pagination that was returned in the previous response. Leave empty to start from the beginning.

Responses

Response samples

Content type
application/json
{
  • "notifications": [
    ],
  • "nextToken": "string"
}

Create and send custom notifications

Create and send a custom notification to user(s) based on the provided parameters.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
One of
recipientType
required
string
Value: "user-email"
email
required
string

The email of the user

title
required
string

The title of the notification

description
required
string

The description text shown in the notification

object

Optional action associated with the notification

validUntilDate
required
string

The day until which the notification is valid in 'YYYY-MM-DD' format. NOTE: Notifications will be automatically purged within 48 hours of this date.

Responses

Request samples

Content type
application/json
Example
{
  • "recipientType": "user-email",
  • "email": "user1@example.com",
  • "title": "Test notification",
  • "description": "This is a test notification",
  • "action": {},
  • "validUntilDate": "2024-12-31"
}

Response samples

Content type
application/json
Example
{
  • "recipientType": "user",
  • "userId": "123e4567-e89b-12d3-a456-426614174000",
  • "id": "string",
  • "createdByUserId": "123e4567-e89b-12d3-a456-426614174000",
  • "creationDate": "2021-01-01T12:00:00Z",
  • "status": "read",
  • "title": "Test notification",
  • "description": "This is a test notification",
  • "action": {},
  • "validUntilDate": "2024-12-31"
}

Get notification for given unique id

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

The ID of the notification to retrieve

Responses

Response samples

Content type
application/json
Example
{
  • "recipientType": "user",
  • "userId": "123e4567-e89b-12d3-a456-426614174000",
  • "id": "string",
  • "createdByUserId": "123e4567-e89b-12d3-a456-426614174000",
  • "creationDate": "2021-01-01T12:00:00Z",
  • "status": "read",
  • "title": "Test notification",
  • "description": "This is a test notification",
  • "action": {},
  • "validUntilDate": "2024-12-31"
}

Mark notification as read

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

The ID of the notification to mark as read

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Images

Crop an image

Creates a new cropped image item for the given crop area of an existing image.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
One of
sourceItemId
required
string

The ID of the source image to crop.

outputFileBaseName
required
string

The base name (excluding file extension) of the output file.

required
object
type
required
string
Value: "create-item"

The cropped image will be saved as a new separate item.

required
object

Responses

Request samples

Content type
application/json
Example
{
  • "sourceItemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
  • "outputFileBaseName": "cropped-image",
  • "cropArea": {
    },
  • "type": "create-item",
  • "itemCreationRequest": {
    }
}

Response samples

Content type
application/json
{
  • "createdItem": {
    },
  • "cropResult": {
    }
}

Item - Clip list

Get clip entries of a sequence

Get list of clip entries of a clipList item (i.e. a sequence)

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string

The ID of the item whose clip list is being retrieved.

Responses

Response samples

Content type
application/json
{
  • "version": 1,
  • "clips": [
    ]
}

Update clip list of a sequence

Update a clipList item (i.e. a sequence) with a given list of clips. A maximum of 1000 entries is allowed. This update is conditional and requires the If-Match header to specify the expected clip list version.

Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string

The ID of the item whose clip list is being updated. When creating a clip list for the first time, create a placeholder item with the itemType set to clipList beforehand to obtain this ID. See create item API for more details on how to create item entries.

header Parameters
If-Match
required
number

The required clip list version. If missing, the server will respond with a 428 status.

Request Body schema: application/json
required
Array
itemId
required
string <= 50 characters

ID of the media asset

title
required
string

A title for this specific clip segment.

required
object

An object containing the in-point duration of the media.

required
object

An object containing the out-point duration of the media.

audioMapping
Array of numbers or null[ items ]

A 2D matrix of 0 and 1 values to toggle specific audio channels. The index of the outer array determines which channel number it's targeting and the inner array is to toggle left-right channels. The first value in the inner array is for the left-channel and the second is for right. For example, the value [[0, 1], [1, 1]] means:

  • For channel number 1: disable left channel and enable right
  • For channel number 2: enable both left-right channels

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Sequence Rendering

Create a render sequence request

Creates a request to render a sequence from multiple video clips into a single output file. This endpoint supports rendering sequences either in the cloud or through on-premise Kelda instances.

The render sequence operation takes a list of clips (segments from existing Mimir items) and combines them into a new video file according to the specified output profile or encoding preset. Each clip includes in/out points and optional audio mapping configuration.

Authentication

This endpoint requires authentication via the `x-mimir-cognito-id-token` header and the user must have permission to create items.

Target Options

The rendered sequence can be saved to: - A new item: Creates a brand new Mimir item with the rendered video - An existing placeholder item: Updates an existing placeholder item with the rendered video

Render Delegation

The rendering can be performed by: - Cloud: Uses Mimir's cloud infrastructure for rendering - Kelda: Uses on-premise Kelda instances for rendering (requires a valid Kelda configuration ID)

Output Format

The output format can be specified using: - Output Profile: Direct specification of video/audio codecs and container format - Preset Reference: Reference to a pre-configured encoding preset

Clip Validation

The system validates that: - All referenced items exist - In/out points are valid (within media duration) - Out point is after in point - Audio mapping (if specified) has valid channel counts
Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
type
required
string

Indicates preset reference

presetId
required
string

ID of the encoding preset to use

required
Array of objects (schemas-ClipListEntryDto) non-empty

List of clips to render in sequence

required
any (RenderSequenceTarget)
required
any (RenderDelegate)

Responses

Request samples

Content type
application/json
Example
{
  • "type": "preset_ref",
  • "presetId": "default-h264-preset",
  • "clips": [
    ],
  • "target": {
    },
  • "delegate": {
    }
}

Response samples

Content type
application/json
Example
{
  • "keldaRequestId": null,
  • "itemId": "423e4567-e89b-12d3-a456-426614174099"
}

Create a render sequence request (V2)

Creates a request to render a sequence into a single output file. This is the V2 endpoint that replaces the original POST /prime/api/v1/renderSequenceRequests.

The key difference from V1 is that the serialized timeline is no longer sent inline in the request body. Instead, the caller must upload the timeline as an attachment to the target item before calling this endpoint.

Prerequisites

Before calling this endpoint, the caller must:

  1. Create a placeholder item (or use an existing one) — the {itemId} path parameter
  2. Upload the timeline as an attachment to that item via POST /api/v1/items/{itemId}/attachments with type: "timeline" and role: "render_source", then PUT the timeline JSON to the returned presigned URL

The server reads and validates the timeline from the item's attachment with type: "timeline" and role: "render_source". The attachment file must have the .json extension.

Authentication

This endpoint requires authentication via the `x-mimir-cognito-id-token` header and the user must have permission to create items.

Render Delegation

The rendering can be performed by: - Cloud: Uses Mimir's cloud infrastructure (Mxcoder/Fargate) for rendering - Kelda: Uses on-premise Kelda instances for rendering (requires a valid Kelda configuration ID)

Validation

The server validates that: - The target item exists and is a placeholder - The item has a timeline attachment (`type: "timeline"`, `role: "render_source"`) - The timeline is valid JSON in a supported timeline format - The timeline contains at least one clip - The preset resolves to valid output profiles
Authorizations:
ApiKeyAuth
path Parameters
itemId
required
string <uuid>

ID of the target placeholder item that has the timeline attachment

Request Body schema: application/json
required
required
any (RenderDelegate)
presetId
required
string

ID of the encoding preset to use for the render

Responses

Request samples

Content type
application/json
Example
{
  • "delegate": {
    },
  • "presetId": "default-h264-preset"
}

Response samples

Content type
application/json
Example
{
  • "keldaRequestId": null,
  • "itemId": "423e4567-e89b-12d3-a456-426614174099"
}

Mimir Presets

Create a new Mimir preset

Creates a new preset configuration for media processing workflows.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
id
required
string

Unique identifier for the preset. You have to provide a custom ID. For example, you can use a pattern like preset-${Date.now()} to generate a unique ID.

name
required
string

Human-readable name for the preset

description
string

Optional description of the preset

capabilities
required
Array of strings non-empty
Items Enum: "rendering" "direct_s3_live" "web_proxy" "edit_proxy" "transparency" "growing" "audio-only"

List of capabilities supported by this preset

visibleTo
Array of strings

Optional list of groups that this preset is visible to. If not specified, visible to everyone.

startTimecode
string^(\d{2}):(\d{2}):(\d{2}):(\d{2})$

Optional start timecode override for the output

type
required
string

Type of preset configuration for unresolved presets

required
object

Filter configuration for the preset. Filter configuration is required for broadcast and generic presets.

audioMapping
Array of integers = 16 items [ items [ 1 .. 8 ] items [ items [ 0 .. 1 ] ] ]

Audio channel mapping configuration (exactly 16 channels required). Each channel maps to available input channels.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "preset-1753776375793",
  • "type": "unresolved",
  • "filters": {
    },
  • "audioMapping": [
    ],
  • "name": "XDCAM HD422 1080i59",
  • "capabilities": [
    ],
  • "outputProfile": {
    }
}

Response samples

Content type
application/json
Example
{
  • "id": "preset-1753776375793",
  • "type": "unresolved",
  • "name": "XDCAM HD422 1080i59",
  • "filters": {
    },
  • "audioMapping": [
    ],
  • "capabilities": [
    ],
  • "outputProfile": {
    }
}

Update an existing Mimir preset

Updates an existing preset configuration for media processing workflows. The preset ID cannot be modified and is taken from the URL path.

Authorizations:
ApiKeyAuth
path Parameters
presetId
required
string
Example: preset-1753780305030

Unique identifier of the preset

Request Body schema: application/json
required
name
required
string

Human-readable name for the preset

description
string

Optional description of the preset

capabilities
required
Array of strings non-empty
Items Enum: "rendering" "direct_s3_live" "web_proxy" "edit_proxy" "transparency" "growing" "audio-only"

List of capabilities supported by this preset

visibleTo
Array of strings

Optional list of groups that this preset is visible to. If not specified, visible to everyone.

startTimecode
string^(\d{2}):(\d{2}):(\d{2}):(\d{2})$

Optional start timecode override for the output

type
required
string

Type of preset configuration for unresolved presets

required
object

Filter configuration for the preset. Filter configuration is required for broadcast and generic presets.

audioMapping
Array of integers = 16 items [ items [ 1 .. 8 ] items [ items [ 0 .. 1 ] ] ]

Audio channel mapping configuration (exactly 16 channels required). Each channel maps to available input channels.

Responses

Request samples

Content type
application/json
Example
{
  • "type": "unresolved",
  • "name": "XDCAM HD422 1080i59 - Updated",
  • "filters": {
    },
  • "audioMapping": [
    ],
  • "capabilities": [
    ],
  • "outputProfile": {
    }
}

Response samples

Content type
application/json
Example
{
  • "id": "preset-1753779927809",
  • "type": "unresolved",
  • "name": "XDCAM HD422 1080i59 - Updated",
  • "filters": {
    },
  • "audioMapping": [
    ],
  • "capabilities": [
    ],
  • "outputProfile": {
    }
}

Delete a Mimir preset

Deletes an existing preset configuration. Once deleted, the preset cannot be recovered. This action will permanently remove the preset and all its associated configuration.

Authorizations:
ApiKeyAuth
path Parameters
presetId
required
string
Example: preset-1753780305030

Unique identifier of the preset

Responses

LUT

List LUTs

Returns all completed LUTs belonging to the authenticated tenant. Each LUT entry includes a short-lived pre-signed URL for downloading the .cube file directly from object storage.

A LUT is considered complete once the .cube file has been uploaded and the PUT /prime/api/v1/luts/{id}/complete endpoint has been called successfully. Incomplete (pending) LUTs are not returned.

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{}

Create a LUT

Creates a LUT entry and returns a pre-signed URL for uploading the .cube file to object storage.

Upload flow

  1. POST /prime/api/v1/luts (this endpoint) — creates the LUT entry. The response contains id and uploadUrl.
  2. PUT <uploadUrl> — upload the raw .cube file bytes directly to the pre-signed S3 URL with Content-Type: application/octet-stream. Do not include the Mimir auth header on this call; the signed URL authenticates it.
  3. PUT /prime/api/v1/luts/{id}/complete — signal that the upload is finished. The server validates the .cube file and marks the LUT as complete. Only after this step will the LUT appear in GET /prime/api/v1/luts.
Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
title
required
string

Human-readable name for the LUT.

required
object (LutInterface)

Describes the color space at one boundary of the LUT (input or output).

required
object (LutInterface)

Describes the color space at one boundary of the LUT (input or output).

Responses

Request samples

Content type
application/json
{
  • "title": "Rec.709 to sRGB",
  • "input": {
    },
  • "output": {
    }
}

Response samples

Content type
application/json

Complete a LUT upload

Marks a LUT as complete after its .cube file has been uploaded to the pre-signed URL returned by POST /prime/api/v1/luts.

The server reads the uploaded file, validates that it is a well-formed .cube file, and marks the LUT as complete. Only complete LUTs are returned by GET /prime/api/v1/luts.

Returns 400 if:

  • The .cube file has not been uploaded yet.
  • The uploaded file fails .cube format validation.
  • The LUT has already been marked as complete.
Authorizations:
ApiKeyAuth
path Parameters
id
required
string

The LUT identifier.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}

Delete a LUT

Permanently deletes a LUT entry and its associated .cube file from object storage. This operation cannot be undone.

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

The LUT identifier.

Responses

Response samples

Content type
application/json
{
  • "statusCode": 100,
  • "message": "string",
  • "developerMessage": "string"
}