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:
user settings page from the profile dropdown.API Keys tab under the user settings page.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)
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.
| 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 |
{- "name": "sport-clips",
- "parent": "26700756-0c4e-5550-330b-03812e39c778",
- "sortKey": "unique-key"
}{- "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "name": "sport-clips",
- "owner": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
- "createdOn": "2019-11-20T11:27:41.107Z",
- "hasSubfolder": false
}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.
| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
| readableMetadataFields | boolean Recommended: always set to |
{- "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": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}
}| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
| 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. |
| 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 |
| owner | string The user ID of the new owner. Requires the |
{- "name": "foobar",
- "parentId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "visibleTo": {
- "level": "tenant",
- "groups": [
- "04509a7f-3b4z-459f-a1b9-d0c43b7e5d13"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "04509a7f-3b4z-459f-a1b9-d0c43b7e5d13"
]
}, - "sortKey": "unique-key",
- "owner": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}{- "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": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}
}Recursively delete a folder. All subfolders are removed. All items are soft-deleted, i.e. they are still accessible in the recycle bin.
| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}| folderId required | string The identifier string for a folder. |
object Select metadata properties that need to be updated. Properties in this object will be added to item metadata (overwriting existing fields) |
{- "metadataDelta": {
- "formId": "default",
- "formData": {
- "description": "New description"
}
}
}{- "id": "string",
- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}
}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.
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.
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.
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.
| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
| 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 |
[- {
- "id": "folder-123",
- "name": "My Folder",
- "owner": "user-456",
- "parent": "folder-000",
- "createdOn": "2024-01-01T00:00:00Z",
- "itemType": "folder",
- "hasSubfolder": false
}
]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).
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:
GET /api/v1/items/{itemId} to read the item's current
folderParents.DELETE /api/v1/folders/{parentId}/content?id=<itemId> to drop
the membership.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.
| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
| id required | string ID of the item to add |
{- "id": "1acb5bba-98a5-795c-0dd5-a46bf5be10af"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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).
| folderId required | string Example: 04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The folder ID |
| id required | string Example: id=04509a7f-3b4z-459f-a1a9-d0c43b7e5d13 The ID of this item/subfolder to remove |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}| 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'. |
{- "ids": [
- "ea5bdeea-dfc2-43b2-b3d6-6556267a1825",
- "ad2fc43f-b7f7-41c4-b659-ba300cea3367"
], - "type": "item"
}{- "property1": {
- "paths": {
- "property1": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "My folder"
}
], - "property2": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "My folder"
}
]
}
}, - "property2": {
- "paths": {
- "property1": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "My folder"
}
], - "property2": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "My folder"
}
]
}
}
}| 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. |
{- "path": "/path/to/folder/",
- "rootFolderId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}[- {
- "path": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}, - {
- "to": "b60d57d2-4b12-a80c-6f14-c5eefaa91461"
}, - {
- "folder": "b60d57d2-4b12-a80c-6f14-c5eefaa91462"
}
]Retrieve lightweight versions of the MDF entries of the tenant, without the field definitions
{- "_embedded": {
- "collection": [
- {
- "active": true,
- "id": "01fc836a-b9c8-6176-16b5-205a020c67ca",
- "color": "#FF0000FF",
- "label": "Celebrity",
- "displayName": "Recording Artists"
}, - {
- "active": true,
- "icon": "ac_unit",
- "label": "Legal Owner",
- "displayName": "Legal Ownership Rights",
- "flavor": "timed-metadata",
- "id": "9282b979-f503-6127-0629-df2ef6568908",
- "color": "#A9751CFF"
}
]
}
}| 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. |
{- "label": "Artist",
- "flavor": "timed-metadata",
- "active": false,
- "displayName": "Recording Artists"
}{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "flavor": "timed-metadata",
- "active": false,
- "fields": [
- {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "active": false,
- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}, - "flavor": "timed-metadata",
- "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists"
}
], - "displayName": "Recording Artists"
}| mdfId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the MDF model |
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "active": false,
- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}, - "flavor": "timed-metadata",
- "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists"
}| mdfId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the MDF model |
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. |
{- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "label": "Artist",
- "active": false,
- "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists",
- "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}
}{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "active": false,
- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}, - "flavor": "timed-metadata",
- "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists"
}Retrieve the option lists of the tenant
| idsOnly | boolean If true, only ids of the option lists are returned in response |
[- {
- "id": "string",
- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
]
}
]| 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. |
{- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
], - "optionListType": "choice"
}{- "id": "string",
- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
]
}| optionListId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the option model |
{- "id": "string",
- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
]
}| optionListId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the option list |
| 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. |
{- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
], - "optionListType": "choice"
}{- "id": "string",
- "name": "string",
- "alternatives": [
- {
- "label": "string",
- "value": "string"
}
]
}| optionListId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the option list model |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}This endpoint is used for polling items to known their state.
| 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 |
| 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. |
[- {
- "id": "7c964cb5-0b9f-9e48-1669-0af85a036487",
- "title": "news.mp4",
- "mediaType": "video/mp4",
- "createdOn": "2019-11-21T12:27:45.551Z",
- "itemState": "progressing",
- "metadata": {
- "formId": "91556211-58aa-bf51-d4a8-f9d871c3a9d5",
- "formData": {
- "e43c556e-304f-a3fa-3851-7d701d3931cd": 1234,
- "default_createdOn": "2019-11-21T13:04:40.429Z",
- "default_title": "news.mp4",
- "default_mediaCreatedOn": "2019-11-21T13:04:40.429Z",
- "3f05bcac-e658-007b-5b9e-d9ad10912e89": true,
- "821ebaab-42cb-d43e-73ab-c3006513dd82": "2019-10-16T00:00:00.000Z",
- "dc02bc4b-5189-9b47-a621-29364492b542": "Some text"
}
}, - "transcodingState": "complete",
- "celebrityDetectionState": "progressing",
- "personDetectionState": "progressing",
- "labelDetectionState": "complete",
- "transcriptionState": "progressing",
- "transcriptionErrorMessage": "Something has gone wrong.",
- "celebrityDetectionErrorMessage": "Something has gone wrong.",
- "labelDetectionErrorMessage": "Something has gone wrong.",
- "transcodingErrorMessage": "Something has gone wrong.",
- "personDetectionErrorMessage": "Something has gone wrong.",
- "folderParents": [
- "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "ccd43f22-8c4c-ece7-8285-7642cde55c35"
]
}
]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.
POST /api/v1/items to create the item placeholder (this endpoint).PUT /api/v1/items/{itemId}/upload with lockOwnerInstanceId,
fileName, and contentType (no isMultiPartUpload). The response
carries uploadSignedUrl.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.PATCH /api/v1/itemMetadata/{itemId}?readableMetadataFields=true
to set title, description, or any other metadata field.POST /api/v1/items to create the item placeholder.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.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.ETag
response header from each PUT.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".PATCH /api/v1/itemMetadata/{itemId}?readableMetadataFields=true
to set metadata as in the single-PUT flow.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.
| readableMetadataFields | boolean Recommended: always set to |
Item resource
| title | string Title to use for the item. For file-upload items (this body's For virtual clips (this body's |
| 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. |
{- "title": "News clip",
- "itemType": "video",
- "languageCode": "en-US",
- "externalId": "4191dc5a-f632-a070",
- "transcriptionService": "speechmaticsSpeechToText",
- "transcriptionChannels": [
- 0,
- 2
], - "transcriptionEnabled": true,
- "celebrityDetectionEnabled": true,
- "labelDetectionEnabled": true,
- "personDetectionEnabled": true,
- "folderParents": null,
- "visibleTo": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "parentItemIds": [
- "2ec80ba8-d06f-2590-fcfe-e6439c66945e",
- "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
], - "sequenceDetails": {
- "tracks": [
- {
- "id": 1,
- "name": "Video 1",
- "mediaType": "video",
- "clips": [
- {
- "start": 0,
- "duration": 800.8,
- "end": 800.8,
- "inPoint": 6106.1,
- "outPoint": 6906.9,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}, - {
- "start": 800.8,
- "duration": 2168.83333333333,
- "end": 2969.63333333333,
- "inPoint": 1768.43333333333,
- "outPoint": 3937.26666666667,
- "mimirItemId": "2ec80ba8-d06f-2590-fcfe-e6439c66945e"
}, - {
- "start": 2969.63333333333,
- "duration": 2235.56666666667,
- "end": 5205.2,
- "inPoint": 2869.53333333333,
- "outPoint": 5105.1,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}
]
}, - {
- "id": 2,
- "name": "Audio 1",
- "mediaType": "audio",
- "clips": [
- {
- "start": 800.8,
- "duration": 2168.83333333333,
- "end": 2969.63333333333,
- "inPoint": 1768.43333333333,
- "outPoint": 3937.26666666667,
- "mimirItemId": "2ec80ba8-d06f-2590-fcfe-e6439c66945e"
}, - {
- "start": 3770.43333333333,
- "duration": 967.633333333333,
- "end": 4738.06666666667,
- "inPoint": 2869.53333333333,
- "outPoint": 3837.16666666667,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}
]
}
]
}, - "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "itemIdToCopyMetadataFrom": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}{- "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "mediaType": "video/mp4",
- "celebrityDetectionEnabled": true,
- "labelDetectionEnabled": true,
- "personDetectionEnabled": true,
- "transcriptionEnabled": true,
- "itemType": "video"
}Update item metadata
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| readableMetadataFields | boolean Recommended: always set to |
| 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". |
object Select metadata properties that need to be updated. Properties in this object will be added to item metadata (overwriting existing fields) |
{- "metadataDelta": {
- "formId": "default",
- "formData": {
- "default_description": "New description"
}
}
}{- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "metadataVersion": 0
}Create items in batches. Limited to 1000 items per request.
| readableMetadataFields | boolean Recommended: always set to |
| passive | boolean If the value is "true", some actions such as sending webhooks, websockets etc will be skipped |
Item dtos
Array of objects (createItem.requestBody) Array of dtos for creating items. |
{- "items": [
- {
- "title": "News clip",
- "itemType": "video",
- "languageCode": "en-US",
- "externalId": "4191dc5a-f632-a070",
- "transcriptionService": "speechmaticsSpeechToText",
- "transcriptionChannels": [
- 0,
- 2
], - "transcriptionEnabled": true,
- "celebrityDetectionEnabled": true,
- "labelDetectionEnabled": true,
- "personDetectionEnabled": true,
- "folderParents": null,
- "visibleTo": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "parentItemIds": [
- "2ec80ba8-d06f-2590-fcfe-e6439c66945e",
- "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
], - "sequenceDetails": {
- "tracks": [
- {
- "id": 1,
- "name": "Video 1",
- "mediaType": "video",
- "clips": [
- {
- "start": 0,
- "duration": 800.8,
- "end": 800.8,
- "inPoint": 6106.1,
- "outPoint": 6906.9,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}, - {
- "start": 800.8,
- "duration": 2168.83333333333,
- "end": 2969.63333333333,
- "inPoint": 1768.43333333333,
- "outPoint": 3937.26666666667,
- "mimirItemId": "2ec80ba8-d06f-2590-fcfe-e6439c66945e"
}, - {
- "start": 2969.63333333333,
- "duration": 2235.56666666667,
- "end": 5205.2,
- "inPoint": 2869.53333333333,
- "outPoint": 5105.1,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}
]
}, - {
- "id": 2,
- "name": "Audio 1",
- "mediaType": "audio",
- "clips": [
- {
- "start": 800.8,
- "duration": 2168.83333333333,
- "end": 2969.63333333333,
- "inPoint": 1768.43333333333,
- "outPoint": 3937.26666666667,
- "mimirItemId": "2ec80ba8-d06f-2590-fcfe-e6439c66945e"
}, - {
- "start": 3770.43333333333,
- "duration": 967.633333333333,
- "end": 4738.06666666667,
- "inPoint": 2869.53333333333,
- "outPoint": 3837.16666666667,
- "mimirItemId": "1ea50583-7fdb-c53b-dde4-d7fd07ec0015"
}
]
}
]
}, - "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "itemIdToCopyMetadataFrom": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}
]
}{- "items": [
- {
- "status": "success",
- "createdItem": {
- "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "mediaType": "video/mp4",
- "celebrityDetectionEnabled": true,
- "labelDetectionEnabled": true,
- "personDetectionEnabled": true,
- "transcriptionEnabled": true,
- "itemType": "video"
}
}
]
}Update items in batches. Limited to 1000 updates per request.
| passive | boolean If the value is "true", some actions such as sending webhooks, websockets etc will be skipped |
Item dtos
Array of objects Array of dtos for updating items. |
{- "updates": [
- {
- "id": "string",
- "update": {
- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "metadataDelta": {
- "formId": "default",
- "formData": {
- "default_description": "New description"
}
}, - "highresFileDeleted": {
- "type": "kelda_on_premise",
- "keldaId": "string"
}, - "highresFileRestored": {
- "type": "kelda_on_premise",
- "ingestSourceStorageId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "ingestSourceFullPath": "indexed1/test.mp4",
- "ingest": {
- "source": {
- "scheme": "kelda",
- "realm": "string",
- "path": "string"
}
}
}, - "isArchived": true,
- "archiveFileTransferState": "initiated",
- "archiveFileTransferErrorMessage": "string",
- "archiveS3Bucket": "string",
- "archiveLocationFullPath": "string",
- "visibleTo": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "ingestSourceStorageId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "ingestSourceS3Bucket": "my-s3-bucket",
- "ingestSourceFullPath": "my folder/folder1/file.mp4",
- "ingest": {
- "source": {
- "scheme": "kelda",
- "realm": "string",
- "path": "string"
}
}, - "webProxyLocation": {
- "scheme": "generated-media-storage",
- "realm": "string",
- "root": "string",
- "path": "string"
}, - "editProxyLocation": {
- "scheme": "generated-media-storage",
- "realm": "string",
- "root": "string",
- "path": "string"
}, - "highresDeletion": {
- "deletionState": "in-progress",
- "statusMessage": "initiated highres deletion",
- "deletionDate": "2024-02-16"
}, - "webProxyAudioDownMixInfo": {
- "downMixChannelSets": "[[0, 1], [3, 4]]"
}, - "detectedPersons": [
- {
- "personId": "string",
- "name": "string",
- "imageId": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0,
- "imageId": "string"
}
]
}
], - "detectedCelebrities": [
- {
- "celebrityId": "string",
- "name": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0.1
}
], - "nameHighlighted": "string"
}
], - "externalId": "4191dc5a-f632-a070"
}, - "requiredMetadataVersion": 0
}
]
}{- "updates": [
- {
- "status": "success",
- "id": "string"
}
]
}Delete items in batches. Limited to 100 items per request.
When folderId is provided, the API will:
This ensures proper handling of items that exist in multiple folders.
| 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. |
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:
This is useful when deleting items from a specific folder context. |
{- "deletes": [
- "00112233-4455-6677-8899-aabbccddeeff",
- "11223344-5566-7788-99aa-bbccddeeff00",
- "22334455-6677-8899-aabb-ccddeeff0011"
], - "immediate": false,
- "promoteNewVersion": false,
- "executeSameActionOnArchiveCopy": false,
- "folderId": "00112233-4455-6677-8899-aabbccddeeff"
}{- "deletes": [
- {
- "status": "success",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}During item creation, if an external id was provided, that can be used to retrieve the item id using this api.
| 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 |
{- "items": [
- {
- "status": "success",
- "externalId": "string",
- "itemId": "string"
}
]
}Retrieve an item entry with specified identifier string
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
| fields | string Example: fields=originalFileName,createdOn,transcodingState Specifies which of the item fields should be returned. |
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "originalFileName": "President Foo is Fighting for You.mp4",
- "hasProxy": true,
- "audioChannels": 2,
- "mediaDuration": 37547,
- "mediaFramerate": 23.976023976023978,
- "frameCaptureFrequency": {
- "numerator": 5,
- "denominator": 1
}, - "thumbnailInfo": {
- "type": "kelda_single_file"
}, - "folderParents": [
- "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "ccd43f22-8c4c-ece7-8285-7642cde55c35"
], - "isArchived": true,
- "transcriptionService": "speechmaticsSpeechToText",
- "languageCode": "en-US",
- "translationLanguage": "no",
- "metadata": {
- "formId": "Common",
- "formData": {
- "title": "President Foo is Fighting for You",
- "createdOn": "2019-11-13T23:06:43.103Z",
- "mediaCreatedOn": "2019-10-11T21:12:31.102Z",
- "description": "Interview of President Foo"
}, - "highlights": {
- "property1": "string",
- "property2": "string"
}
}, - "geoLocation": {
- "coordinates": [
- {
- "lat": 44.33861999999999,
- "lng": 1.2096460000000206,
- "startTime": 3128
}
]
}, - "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": [
- [
- "president",
- "fighting"
]
], - "searchHitsInTranslatedTranscriptWords": [
- [
- "president"
]
], - "timedTranscriptUrl": "string",
- "timedTranslatedTranscriptUrl": "string",
- "detectedCelebrities": [
- {
- "maxConfidence": 87,
- "avgConfidence": 87,
- "celebrityId": "666",
- "name": "Foo",
- "nameHighlighted": "<span class=\"highlighted-search-term\">Foo</span>",
- "segments": [
- {
- "maxConfidence": 100,
- "avgConfidence": 89.0909090909091,
- "start": 834,
- "end": 8626
}
]
}
], - "detectedPersons": [
- {
- "personId": "e4bfeda0-394a-5931-287a-232c0e594abe",
- "name": "Foo",
- "maxConfidence": 99,
- "avgConfidence": 99,
- "nameHighlighted": "<span class=\"highlighted-search-term\">Foo</span>",
- "segments": [
- {
- "imageId": "e7181499-397b-2d6b-4cba-f590aa10d535",
- "maxConfidence": 100,
- "avgConfidence": 89.0909090909091,
- "start": 834,
- "end": 8626
}
]
}
], - "detectedLabels": [
- {
- "maxConfidence": 100,
- "name": "fight",
- "segments": [
- {
- "maxConfidence": 100,
- "start": 1000,
- "end": 239267
}
], - "nameHighlighted": "<span class=\"highlighted-search-term\">fight</span>"
}
], - "paragraphRulesParameters": {
- "punctuation": {
- "isActive": true
}, - "maxCharacters": {
- "isActive": true,
- "value": 385
}, - "maxWords": {
- "isActive": true,
- "value": 54
}, - "maxDuration": {
- "isActive": true,
- "value": 36234
}, - "maxSilence": {
- "isActive": true,
- "value": 1019
}
}, - "subtitleRulesParameters": {
- "punctuation": {
- "isActive": true
}, - "maxCharacters": {
- "isActive": false,
- "value": 99
}, - "maxWords": {
- "isActive": true,
- "value": 8
}, - "maxDuration": {
- "isActive": false,
- "value": 2000
}, - "maxSilence": {
- "isActive": true,
- "value": 800
}
}, - "translationParagraphRulesParameters": {
- "punctuation": {
- "isActive": true
}, - "maxCharacters": {
- "isActive": true,
- "value": 385
}, - "maxWords": {
- "isActive": true,
- "value": 53
}, - "maxDuration": {
- "isActive": true,
- "value": 36234
}, - "maxSilence": {
- "isActive": true,
- "value": 1019
}
}, - "translationSubtitleRulesParameters": {
- "punctuation": {
- "isActive": true
}, - "maxCharacters": {
- "isActive": false,
- "value": 100
}, - "maxWords": {
- "isActive": true,
- "value": 8
}, - "maxDuration": {
- "isActive": false,
- "value": 3000
}, - "maxSilence": {
- "isActive": true,
- "value": 700
}
}, - "isTranslationUpdated": true,
- "paragraphMarkers": [
- {
- "p": 1
}
], - "subtitleMarkers": [
- {
- "p": 1
}
], - "translationParagraphMarkers": [
- {
- "p": 1
}
], - "translationSubtitleMarkers": [
- {
- "p": 1
}
], - "virtualClipInfo": {
- "masterClipId": "string",
- "inPoint": 0,
- "outPoint": 0,
- "state": "string"
}
}Update an item entry with specified identifier string
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| readableMetadataFields | boolean Recommended: always set to |
| 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". |
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. |
{- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "metadataDelta": {
- "formId": "default",
- "formData": {
- "default_description": "New description"
}
}, - "highresFileDeleted": {
- "type": "kelda_on_premise",
- "keldaId": "string"
}, - "highresFileRestored": {
- "type": "kelda_on_premise",
- "ingestSourceStorageId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "ingestSourceFullPath": "indexed1/test.mp4",
- "ingest": {
- "source": {
- "scheme": "kelda",
- "realm": "string",
- "path": "string"
}
}
}, - "isArchived": true,
- "archiveFileTransferState": "initiated",
- "archiveFileTransferErrorMessage": "string",
- "archiveS3Bucket": "string",
- "archiveLocationFullPath": "string",
- "visibleTo": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "ingestSourceStorageId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "ingestSourceS3Bucket": "my-s3-bucket",
- "ingestSourceFullPath": "my folder/folder1/file.mp4",
- "ingest": {
- "source": {
- "scheme": "kelda",
- "realm": "string",
- "path": "string"
}
}, - "webProxyLocation": {
- "scheme": "generated-media-storage",
- "realm": "string",
- "root": "string",
- "path": "string"
}, - "editProxyLocation": {
- "scheme": "generated-media-storage",
- "realm": "string",
- "root": "string",
- "path": "string"
}, - "highresDeletion": {
- "deletionState": "in-progress",
- "statusMessage": "initiated highres deletion",
- "deletionDate": "2024-02-16"
}, - "webProxyAudioDownMixInfo": {
- "downMixChannelSets": "[[0, 1], [3, 4]]"
}, - "detectedPersons": [
- {
- "personId": "string",
- "name": "string",
- "imageId": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0,
- "imageId": "string"
}
]
}
], - "detectedCelebrities": [
- {
- "celebrityId": "string",
- "name": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0.1
}
], - "nameHighlighted": "string"
}
], - "externalId": "4191dc5a-f632-a070"
}{- "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": [
- "string"
], - "proxy": "string",
- "frameCaptureFrequency": {
- "denominator": 0,
- "numerator": 0
}, - "timecode": "string",
- "detectedPersons": [
- {
- "personId": "string",
- "name": "string",
- "imageId": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0,
- "imageId": "string"
}
]
}
], - "detectedCelebrities": [
- {
- "celebrityId": "string",
- "name": "string",
- "maxConfidence": 0.1,
- "avgConfidence": 0.1,
- "segments": [
- {
- "start": 0.1,
- "end": 0.1,
- "maxConfidence": 0.1,
- "avgConfidence": 0.1
}
], - "nameHighlighted": "string"
}
]
}Delete an item entry with specified identifier string
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Undelete an item entry with specified identifier string, if that is not
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
[- {
- "type": "system",
- "operation": "string",
- "status": "string",
- "errorMessage": "string"
}
]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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| fetchItemProperties | boolean If true, versions with extra item properties will be provided |
{- "versions": [
- {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "versionCreatedOn": "2021-12-22T08:51:10.608Z",
- "versionState": "IN_RECYCLE_BIN"
}
]
}Promotes the item as the latest version in its version history if it was an old item version.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "hasRelations": "false",
- "hasArchiveRelation": "false",
- "metadata": {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "active": false,
- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}, - "flavor": "timed-metadata",
- "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists"
}
}Updates the name of a version of an item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "name": "string"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Retrieve an item's latest version with specified identifier string
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}Creates a new version of the item with the old item's metadata. The old item is hidden.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "withArchiveLinked": true,
- "copyMediaToNewVersion": "highRes",
- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "name": "string",
- "promoteToCurrent": true
}{- "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "hasRelations": "false",
- "hasArchiveRelation": "false",
- "metadata": {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "label": "Artist",
- "active": false,
- "fields": [
- {
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "type": "text",
- "required": false,
- "fieldId": "name"
}, - {
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "type": "choice",
- "required": false,
- "fieldId": "genre",
- "defaultValue": "Rock",
- "alternatives": [
- {
- "value": "Rock",
- "label": "Rock"
}, - {
- "value": "Blues",
- "label": "Blues"
}
]
}
], - "views": {
- "item": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "Name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 7,
- "multiline": false,
- "hint": "Main music genre this artist is known for",
- "fieldHeight": 2,
- "icon": "music_note",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "search": [
- {
- "visible": true,
- "flex": 12,
- "multiline": false,
- "hint": "The name of the artist",
- "fieldHeight": 2,
- "icon": "person",
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "label": "Artist name",
- "fieldId": "name"
}, - {
- "visible": false,
- "flex": 6,
- "multiline": false,
- "hint": "The main genre this artist is known for",
- "fieldHeight": 2,
- "icon": "audiotrack",
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "label": "Music genre",
- "fieldId": "genre"
}
], - "editing": [
- {
- "fieldHeight": 2,
- "id": "c42f1570-6b20-2216-a278-6d54ef7dca59",
- "visible": true,
- "flex": 12,
- "fieldId": "name",
- "multiline": false
}, - {
- "fieldHeight": 2,
- "id": "a88b7ead-d0ba-f58e-5e46-bbf957948ce3",
- "visible": true,
- "flex": 12,
- "fieldId": "genre",
- "multiline": false
}
]
}, - "viewSections": {
- "item": [
- {
- "sectionId": "basic-info",
- "label": "Basic Information",
- "placeAboveFieldId": "name",
- "defaultCollapsed": false,
- "icon": "info"
}, - {
- "sectionId": "advanced-settings",
- "label": "Advanced Settings",
- "placeAboveFieldId": "genre",
- "defaultCollapsed": true,
- "icon": "settings"
}
]
}, - "flavor": "timed-metadata",
- "color": "#008DFFFF",
- "icon": "radio",
- "rule": "{name}-{genre}",
- "displayName": "Recording Artists"
}
}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.
All thumbnails are 320x180 pixels in JPEG format.
Thumbnails are captured at fixed intervals during transcoding, not for every millisecond. The API returns the thumbnail at or before the requested position.
The thumbnail index is calculated as:
index = floor(position_in_seconds × frame_capture_frequency)
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.
| 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. |
{- "code": "THUMBNAIL_ERROR",
- "message": "Failed to generate thumbnail URL"
}Returns pre-signed S3 URLs for multiple thumbnails in a single request. Supports pagination for items with many thumbnails.
You can query thumbnails in two ways (mutually exclusive):
Use startIndex and limit to paginate through thumbnails by their index.
Use startMs and optionally endMs to get thumbnails within a time range.
The response includes nextIndex for cursor-based pagination:
nextIndex is a number, use it as startIndex in the next requestnextIndex is null, there are no more thumbnailsThe maxIndex parameter is conditionally required:
endMs when item has no durationendMs is provided - caps results below computed maximumPre-signed URLs are valid for 55 minutes.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| startIndex | integer >= 0 Default: 0 Starting thumbnail index (0-based). Cannot be used with |
| 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:
When item has duration or |
| startMs | integer >= 0 Start time in milliseconds for time-based query. Cannot be used with |
| endMs | integer >= 0 Example: endMs=30000 End time in milliseconds for time-based query. Must be >= |
{- "thumbnails": [
- {
- "index": 0,
- "timeMs": 0,
}, - {
- "index": 1,
- "timeMs": 5000,
}
], - "nextIndex": 2
}Generates pre-signed S3 PUT URLs for uploading thumbnails to an item. Supports single thumbnail upload or batch (stream) upload with indexed filenames.
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.
Pre-signed PUT URLs are valid for 55 minutes.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
{- "mode": "single",
- "filename": "thumbnail.jpg",
- "storage": {
- "pathPrefix": "tenant-id/item-id/thumbnails/"
}
}{- "thumbnails": [
- {
- "index": 0,
- "timeMs": 0,
}
], - "nextIndex": null,
- "expectedThumbnailInfo": {
- "type": "generic_stream",
- "pathPrefix": "tenant-id/item-id/thumbnails/",
- "locationId": "mimir-generated-media",
- "filenamePrefix": "thumbnail.jpg",
- "extension": ""
}
}Initiate deletion of highres media (single flat file or segment files if the item is a live recording) of an item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "deletionDate": "string"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
For live recordings, use this endpoint in combination with getPlayableItem:
getPlayableItem to get the current segmentCount from mediafirstSegmentIndex=0 to get initial segment URLsgetPlayableItem when approaching the end of buffered segments to check for new segmentssegmentCount increases, call this endpoint again to get new segment URLsmedia.streaming becomes falseThe returned URLs are pre-signed and expire after 4 days.
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.
| 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):
Transcoded Proxy Streams (for completed/processed items):
|
| signedForMethod required | string Enum: "get" "put" Example: get HTTP method to sign the URLs for. Use |
| 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. |
{
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item to retrieve activity for |
| 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 |
| pageStartKey | string The nextPageStartKey retrieved from previous query response |
{- "events": [
- {
- "type": "item_activity",
- "itemId": "string",
- "id": "string",
- "actionType": "string",
- "executedBy": "string",
- "email": "string",
- "executedOn": "2019-08-24T14:15:22Z",
- "provider": "string",
- "relatedParameters": { },
- "itemTitle": "string",
- "bulkOperationId": "string",
- "mdfDiff": {
- "oldMdfId": "string",
- "newMdfId": "string",
- "startTime": {
- "oldValue": 0,
- "newValue": 0
}, - "duration": {
- "oldValue": 0,
- "newValue": 0
}, - "metadataFields": [
- {
- "fieldId": "string",
- "oldValue": "string",
- "newValue": "string"
}
]
}, - "storageId": "string",
- "metadataCopiedFromItemId": "string"
}
], - "nextPageStartKey": "string"
}Retrieve information needed to play an item's media. This endpoint is essential for:
media.streaming is true to get updated segment counts as new media arrives.playableArtifact to see what format is available
(segmented streams, flat proxy files, or TAMS references).For live recordings, follow this workflow:
media informationmedia.streaming is true (item is still receiving media)media.segmentCount to know how many segments are availablegetMediaSegments to get pre-signed URLs for the segmentssegmentCountmedia.streaming becomes false or itemState is COMPLETEThe 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 Downmixepf - Edit Proxy FullExample preference: [["lrwt"], ["bpv", "bpad"]] means "prefer live web proxy,
fall back to browse preview video + audio".
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item to retrieve playback information for. |
| options required | string Example: options={"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]} JSON-encoded options for selecting the playable artifact. Example:
|
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "media": {
- "segmentDuration": {
- "n": 6001,
- "d": 1000
}, - "codecsByStreamId": {
- "lrwt": "video/mp2t; codecs=\"avc1.42c020,mp4a.40.2\"",
- "bpv": "video/mp4; codecs=\"avc1.42c020\""
}, - "sizeByStreamId": {
- "lrwt": 750000,
- "bpv": 500000
}, - "expectedStreams": [
- "lrwt",
- "lrht"
], - "segmentCount": 42,
- "streamStartTimestamp": "2024-01-16T14:30:00.000Z",
- "streaming": true
}, - "liveRecordingInfo": {
- "state": "resources_started",
- "scheduledStartTime": 1705420800000,
- "highresData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "webproxyData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "audioHighresData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "audioProxyData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}
}, - "hasUploadProgress": false,
- "itemType": "video",
- "itemState": "COMPLETE",
- "proxyAudioTrackUrls": [ ],
- "webProxyAudioDownMixInfo": { },
- "languageCode": "en",
- "virtualClipInfo": {
- "masterClipId": "string",
- "inPoint": 0,
- "outPoint": 0,
- "state": "string"
}, - "frameDuration": {
- "value": 0.04,
- "fuzzy": false
}, - "playableArtifact": {
- "type": "stream",
- "streamSet": [
- "lrwt",
- "bpv"
]
}, - "durationFromTechnicalMetadata": 125.5,
- "peaksDelta": null,
- "peaksUrls": null,
- "nPeaksPerSecondPerChannel": 10,
- "playableDuration": {
- "n": 6001,
- "d": 1000
}
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
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. |
{- "languageCode": "string",
- "timedTranscript": [
- {
- "content": "string",
- "startTime": 0,
- "endTime": 0
}
], - "isTranslation": true,
- "translationTargetLanguage": "en"
}{- "languageCode": "string",
- "timedTranscriptUrl": "string",
- "timedTranslatedTranscriptUrl": "string"
}Get the ancestries of the item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "ancestry": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "string"
}
]
}Delete label(s) from the Item
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| labels | Array of strings non-empty |
{- "labels": [
- "string"
]
}{- "data": {
- "message": "string"
}
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
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'. |
{- "type": "archive",
- "archivePath": "My Archive/2020/",
- "mediaOnly": true
}{- "type": "archive",
- "payload": {
- "folderId": "f56667b5-f2d3-f17c-aacd-c1dd5b788d9b",
- "folderName": "January"
}
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "isUploadLocked": true
}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:
Authentication is performed using the provided signed URL.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "lockOwnerInstanceId": "23e4567-e89b-12d3-a456-426614174000.",
- "uploadLocationId": "string",
- "fileName": "image.jpg / example-video.mp4",
- "isMultiPartUpload": true,
- "fileSize": 0,
- "contentType": "string",
- "chunkSize": 0
}{- "bucket": "upload-bucket-name",
- "type": "s3Bucket",
- "enableS3Acceleration": true,
- "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 for an item by resetting the uploadRequestedAt field on the item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
| 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. |
{- "uploadId": "pxAPdnBCXiHdH0DIBDhH3wzWL8N22Bu26N02eIOx2u88uOxmz4eLOIEofPLaYKXD0agA",
- "uploadLocationId": "DEFAULT_UPLOAD_LOCATION",
- "targetKey": "28918036-feae-495c-b54f-83827d2eef76",
- "firstPartNumber": 1,
- "partCount": 0
}{- "uploadPartsSignedUrls": [
- "string"
]
}Complete multipart upload for an item after uploading al the parts
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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
|
| 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 |
{- "uploadId": "pxAPdnBCXiHdH0DIBDhH3wzWL8N22Bu26N02eIOx2u88uOxmz4eLOIEofPLaYKXD0agA",
- "uploadLocationId": "DEFAULT_UPLOAD_LOCATION",
- "targetKey": "28918036-feae-495c-b54f-83827d2eef76",
- "isCanceled": 1,
- "uploadParts": [
- {
- "PartNumber": 2,
- "ETag": "702242d3703818ddefe6bf7da2bed757"
}
]
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Performs part signing based on the algorithm defined here: https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
"string"Returns the list of attachments available for the item, or a specific one if 'attachment' query parameter is passed.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| attachment | string The file name of a specific attachment |
[- {
- "fileName": "item-attachment.txt",
- "type": "file"
}
]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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| isPrecheck | boolean If set to true, performs a check on whether a given filename already exists and returns a list of already existing files |
| 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 |
{- "fileName": "item-attachment.txt",
- "type": "poster",
- "role": "thumbnail",
- "language": "English",
- "description": "New attachment"
}"string"This API is used to update an attachment for a specific item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
{- "fileName": "item-attachment.txt",
- "type": "poster",
- "role": "thumbnail",
- "language": "English",
- "description": "New attachment"
}{- "fileName": "item-attachment.txt",
- "type": "poster",
- "role": "thumbnail",
- "language": "English",
- "description": "New attachment"
}This API is used to delete an attachment from a specific item.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| fileName required | string Name of the attachment file |
| type required | string Enum: "poster" "prproj" "image" "subtitle" "file" Type of the attachment file |
{- "fileName": "item-attachment.txt",
- "type": "poster"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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. |
{- "lastUsedWorkflow": "import"
}{- "itemId": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "mediaUsage": {
- "lastUsedOn": "2023-02-16T05:39:15.557Z",
- "lastUsedWorkflow": "import"
}
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
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). |
{- "type": "render-sequence-kelda",
- "pendingOperationId": "string",
- "keldaRequestId": "string"
}{- "success": true
}Get the timed metadata collection associated to the given item
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| readableMetadataFields | boolean Recommended: always set to |
{- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}Update the timed metadata collection associated to the given item
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
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 |
{- "items": {
- "property1": {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}, - "property2": {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
}
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| readableMetadataFields | boolean Recommended: always set to |
| 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. |
[- {
- "type": "parents",
- "item": {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "mediaDuration": 37547,
- "metadata": {
- "formData": {
- "default_title": "President Foo is Fighting for You"
}
}, - "itemType": "video",
- "itemState": "new"
}
}
]| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| relationType required | string The type of the relation |
| readableMetadataFields | boolean Recommended: always set to |
[- "string"
][- {
- "type": "parents",
- "item": {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "mediaDuration": 37547,
- "metadata": {
- "formData": {
- "default_title": "President Foo is Fighting for You"
}
}, - "itemType": "video",
- "itemState": "new"
}
}
]| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| relationType required | string The type of the relation |
| readableMetadataFields | boolean Recommended: always set to |
| relatedItemId required | string The ID of the related item |
{- "relatedItemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}{- "type": "parents",
- "item": {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "mediaDuration": 37547,
- "metadata": {
- "formData": {
- "default_title": "President Foo is Fighting for You"
}
}, - "itemType": "video",
- "itemState": "new"
}
}| 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 |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
For live recordings, use this endpoint in combination with getPlayableItem:
getPlayableItem to get the current segmentCount from mediafirstSegmentIndex=0 to get initial segment URLsgetPlayableItem when approaching the end of buffered segments to check for new segmentssegmentCount increases, call this endpoint again to get new segment URLsmedia.streaming becomes falseThe returned URLs are pre-signed and expire after 4 days.
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.
| 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):
Transcoded Proxy Streams (for completed/processed items):
|
| signedForMethod required | string Enum: "get" "put" Example: get HTTP method to sign the URLs for. Use |
| 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. |
{
}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.
For live recordings, use this endpoint in combination with getPlayableItem:
getPlayableItem to get the current segmentCount from mediafirstSegmentIndex=0 to get initial segment URLsgetPlayableItem when approaching the end of buffered segments to check for new segmentssegmentCount increases, call this endpoint again to get new segment URLsmedia.streaming becomes falseThe returned URLs are pre-signed and expire after 4 days.
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.
| 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):
Transcoded Proxy Streams (for completed/processed items):
|
| signedForMethod required | string Enum: "get" "put" Example: get HTTP method to sign the URLs for. Use |
| 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. |
{
}Retrieve information needed to play an item's media. This endpoint is essential for:
media.streaming is true to get updated segment counts as new media arrives.playableArtifact to see what format is available
(segmented streams, flat proxy files, or TAMS references).For live recordings, follow this workflow:
media informationmedia.streaming is true (item is still receiving media)media.segmentCount to know how many segments are availablegetMediaSegments to get pre-signed URLs for the segmentssegmentCountmedia.streaming becomes false or itemState is COMPLETEThe 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 Downmixepf - Edit Proxy FullExample preference: [["lrwt"], ["bpv", "bpad"]] means "prefer live web proxy,
fall back to browse preview video + audio".
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item to retrieve playback information for. |
| options required | string Example: options={"useEditProxy":false,"streamSetPreference":[["lrwt"],["bpv","bpad"]]} JSON-encoded options for selecting the playable artifact. Example:
|
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "media": {
- "segmentDuration": {
- "n": 6001,
- "d": 1000
}, - "codecsByStreamId": {
- "lrwt": "video/mp2t; codecs=\"avc1.42c020,mp4a.40.2\"",
- "bpv": "video/mp4; codecs=\"avc1.42c020\""
}, - "sizeByStreamId": {
- "lrwt": 750000,
- "bpv": 500000
}, - "expectedStreams": [
- "lrwt",
- "lrht"
], - "segmentCount": 42,
- "streamStartTimestamp": "2024-01-16T14:30:00.000Z",
- "streaming": true
}, - "liveRecordingInfo": {
- "state": "resources_started",
- "scheduledStartTime": 1705420800000,
- "highresData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "webproxyData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "audioHighresData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}, - "audioProxyData": {
- "firstSegmentFirstFramePts": 0,
- "firstSegmentFirstFrameDts": 0,
- "segmentCount": 42,
- "lastSegmentFirstFramePts": 246000,
- "lastSegmentLastFramePts": 252000
}
}, - "hasUploadProgress": false,
- "itemType": "video",
- "itemState": "COMPLETE",
- "proxyAudioTrackUrls": [ ],
- "webProxyAudioDownMixInfo": { },
- "languageCode": "en",
- "virtualClipInfo": {
- "masterClipId": "string",
- "inPoint": 0,
- "outPoint": 0,
- "state": "string"
}, - "frameDuration": {
- "value": 0.04,
- "fuzzy": false
}, - "playableArtifact": {
- "type": "stream",
- "streamSet": [
- "lrwt",
- "bpv"
]
}, - "durationFromTechnicalMetadata": 125.5,
- "peaksDelta": null,
- "peaksUrls": null,
- "nPeaksPerSecondPerChannel": 10,
- "playableDuration": {
- "n": 6001,
- "d": 1000
}
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
{- "comments": [
- {
- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}
], - "mScrollId": null
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| 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 |
{- "type": "top",
- "text": "Processing failed due to HDR10 conversion error",
- "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 123.5
}, - "endSecond": {
- "approximate": 145.2
}
}, - "assignee": {
- "type": "user",
- "id": "user-123"
}
}{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}Retrieve a single comment by its ID.
| 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 |
{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}Soft-delete a comment. The comment is not permanently removed but marked as deleted.
Permissions:
item/commentDeleteOwn can delete their own commentsitem/commentDeleteOthers can delete any commentNote: This is a soft delete - the comment remains in the database with:
deletedOn timestamp settext field cleared| 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 |
{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}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.
| 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 |
object (InternalCommentAuthorDto) | |
| resolved | boolean Whether the comment is marked as resolved |
{- "assignee": {
- "type": "user",
- "id": "user-123"
}
}{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}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.
| 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 |
| text required | string non-empty Updated comment text |
{- "text": "Updated comment text with more details"
}{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}Add or remove a reaction emoji to/from a comment.
Reactions are idempotent:
Available reactions: smile 🙂, thumb_up 👍, thumb_down 👎, heart ❤️, tada 🎉, green_check ✅, red_x ❌
| 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 |
| 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 |
{- "action": "add",
- "reaction": "thumb_up"
}{- "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": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "reactions": [
- {
- "reaction": "thumb_up",
- "author": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}
}
], - "resolved": false,
- "assignedOn": null,
- "assignee": {
- "type": "user",
- "id": "b0d8d5be-07b8-4119-b204-19faae64704e"
}, - "context": {
- "type": "timeline",
- "startSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "endSecond": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}
}
}| itemId required | string The ID of the item to retrieve custom icons for |
{- "customIcons": {
- "pos1": {
- "icon": "icon1",
- "tooltip": "First icon tooltip"
}, - "pos2": {
- "icon": "icon2",
- "tooltip": "Tooltip for icon 2"
}, - "pos3": null,
- "pos4": {
- "icon": "icon4",
- "tooltip": "Fourth icon tooltip"
}, - "pos5": {
- "icon": "icon5",
- "tooltip": "Tooltip for icon 5"
}, - "pos6": null
}
}| itemId required | string The ID of the item to save custom icons for |
required | object Collection of custom icons keyed by predefined position slots. (supports a maximum of 8 positions) |
{- "customIcons": {
- "pos1": {
- "icon": "icon1",
- "tooltip": "First icon tooltip"
}, - "pos2": {
- "icon": "icon2",
- "tooltip": "Tooltip for icon 2"
}, - "pos3": null,
- "pos4": {
- "icon": "icon4",
- "tooltip": "Fourth icon tooltip"
}, - "pos5": {
- "icon": "icon5",
- "tooltip": "Tooltip for icon 5"
}, - "pos6": null
}
}""| itemId required | string The ID of the item to update custom icons for |
required | object Collection of custom icons keyed by predefined position slots. (supports a maximum of 8 positions) |
{- "customIcons": {
- "pos1": {
- "icon": "updatedicon1",
- "tooltip": "Updated tooltip"
}, - "pos3": {
- "icon": "newicon3",
- "tooltip": "Newly added icon"
}
}
}""Generate an AAF subclip file with transcript as markers for given item ingested from Avid Mediafiles
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item ingested from Avid Mediafiles folder |
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 |
{- "inPoint": 1000,
- "outPoint": 4000,
- "markers": [
- {
- "position": 1000,
- "text": "This is a sentence from generated transcript"
}
]
}{- "base64Aaf": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item whose media is being migrated. |
Array of MigratedHighres (object) or MigratedProxy (object) or MigratedThumbnailStream (object) List of media to be migrated |
{- "migrated": [
- {
- "type": "highres",
- "uploadLocationId": "string",
- "expectedFilePath": "/path/to/file.mp4",
- "keepSource": true
}
]
}{- "message": "Media migration successful"
}Copy source media, analytics and log events from an item into a placeholder
| 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' |
{- "sourceItemId": "string",
- "targetItemId": "string",
- "mediaToCopy": "highRes"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Returns item id by storage name (bucket name) and storage object key. Virtual clips are ignored.
| 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
|
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460"
}Create a restore request in Glacier for a media
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
| tier required | string Among 3 different AWS restore tiers which should be used. Value can be Expedited, Standard or Bulk:
|
| retentionDays required | number Number of days to keep the media online after restore. |
{- "tier": {
- "enum": [
- "Expedited",
- "Standard",
- "Bulk"
]
}, - "retentionDays": 5
}{- "itemId": "4191dc5a-f632-a070-6a9a-2e3499449a31",
}Create a person
Person resource
| name required | string Name of the person. |
| description | string Description of the person. |
{- "name": "string",
- "description": "string"
}{- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "string",
- "description": "string",
- "imageIds": [
- "string"
], - "itemType": "string",
- "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "createdOn": "2019-08-24T14:15:22Z"
}update a person
| personId required | string The identifier string for person. |
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. |
{- "name": "string",
- "description": "string",
- "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13"
}{- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "string",
- "description": "string",
- "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "imageIds": [
- "string"
], - "itemType": "string",
- "createdOn": "2019-08-24T14:15:22Z",
- "itemState": "new"
}Get person information
| personId required | string The identifier string for person. |
| 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. |
{- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "name": "string",
- "description": "string",
- "primaryImageId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "imageIds": [
- "string"
], - "itemType": "string",
- "createdOn": "2019-08-24T14:15:22Z"
}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).
| personId required | string The identifier string for person. |
{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "id": "string",
- "title": "string",
- "itemType": "image",
- "itemState": "complete",
- "personId": "string",
- "thumbnail": "string"
}
]
}
}Create a person image
| personId required | string The identifier string for person. |
Person image resource
| fileName required | string Name of the image file. |
{- "fileName": "string"
}{- "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"
}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.
| personId required | string The identifier string for person. |
| imageId required | string Example: aa8d5e51-88f4-4988-b5d3-6f47e4644631 The ID of the image |
{- "id": "string",
- "title": "string",
- "itemType": "image",
- "itemState": "string",
- "personId": "string",
- "thumbnail": "string"
}Create a storage under the tenant
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. |
{- "id": "string",
- "name": "string",
- "description": "string"
}{- "id": "string",
- "name": "string",
- "description": "string",
- "tenantId": "string",
- "createdOn": "2019-08-24T14:15:22Z"
}Get all storages under the tenant
{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "createdOn": "2019-08-24T14:15:22Z",
- "tenantId": "string",
- "name": "string",
- "description": "string"
}
]
}
}Update a storage under the tenant
| storageId required | string The identifier string for storage. |
{- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "createdOn": "2019-08-24T14:15:22Z",
- "tenantId": "string",
- "name": "string",
- "description": "string"
}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.'
| storageId required | string Id of storage to create the request for |
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 |
any (ArtifactReference) A reference to a media artifact. The | |
| version | string This is needed to be "v2" if "artifactReference" is used. Leave empty if "artifactReference" is not used. |
{- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "artefact": "proxy",
- "targetFileName": "downloaded_to_storage1.mp4",
- "createLinkForTargetFileName": true,
- "artifactReference": {
- "type": "ImplicitReference"
}, - "version": "string"
}{- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "artefact": "proxy",
- "targetFileName": "downloaded_to_storage1.mp4",
- "createLinkForTargetFileName": true,
- "artifactReference": {
- "type": "ImplicitReference"
}, - "version": "string"
}Get all transfer requests for a particular storage.
| storageId required | string The identifier string for storage. |
{- "total": 0,
- "_embedded": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "createdOn": "2019-08-24T14:15:22Z",
- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "modifiedOn": "2019-08-24T14:15:22Z",
- "originalFileName": "string",
- "storageId": "string",
- "storageManagerInstanceId": "string",
- "transferState": "string",
- "targetFileName": "downloaded_to_storage1",
- "createLinkForTargetFileName": true,
- "artefact": "proxy",
- "errorCount": 0,
- "title": "string",
- "highresIsOffline": true,
- "downloadProgress": {
- "elapsedTime": 0,
- "estimatedRemainingTime": 0,
- "speed": 0,
- "totalSize": 0,
- "transferred": 0,
- "progressUnit": "byte",
- "transientError": "string"
}
}
]
}Getting an exclusive lock on a transfer request from storage.
| storageId required | string The identifier string for storage. |
| transferRequestId required | string The identifier string for transfer request. |
Transfer request resource.
| storageManagerInstanceId required | string Id of the corresponding storage manager. |
| transferState required | string state of the transfer request. |
{- "storageManagerInstanceId": "string",
- "transferState": "string"
}{- "cutoffTime": 0
}Get a transfer request for the particular storage by it's id.
| storageId required | string The identifier string for storage. |
| transferRequestId required | string The identifier string for transfer request. |
{- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "storageManagerInstanceId": "string",
- "transferState": "string"
}Delete a transfer request.
| storageId required | string The identifier string for storage. |
| transferRequestId required | string The identifier string for transfer request. |
Storage transfer request delete from client
| transferState | string Transfer request state |
{- "transferState": "string"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Get all transfer request of that organization that are active.
[- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "createdOn": "2019-08-24T14:15:22Z",
- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "modifiedOn": "2019-08-24T14:15:22Z",
- "originalFileName": "string",
- "storageId": "string",
- "storageManagerInstanceId": "string",
- "transferState": "string",
- "targetFileName": "downloaded_to_storage1",
- "createLinkForTargetFileName": true,
- "artefact": "proxy",
- "errorCount": 0,
- "title": "string",
- "highresIsOffline": true,
- "downloadProgress": {
- "elapsedTime": 0,
- "estimatedRemainingTime": 0,
- "speed": 0,
- "totalSize": 0,
- "transferred": 0,
- "progressUnit": "byte",
- "transientError": "string"
}
}
]Get current storage transfers based on different 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' |
{- "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "artefact": "highres",
- "source": {
- "storageId": "my-storage-id",
- "name": "my-bucket",
- "path": "folder path/to/file",
- "type": "aws-s3"
}, - "destination": {
- "storageId": "my-storage-id",
- "name": "my-bucket",
- "path": "folder path/to/file",
- "type": "aws-s3"
}, - "state": "error",
- "progressInfo": {
- "totalSizeInBytes": 0,
- "transferredBytes": 0
}, - "statusMessage": "string",
- "requestByUserId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "createdOn": "2022-08-18T10:36:37.362Z",
- "modifiedOn": "2022-08-18T10:36:37.362Z"
}Create a storage transfer request for an item
| itemId required | string The ID of the Mimir item to be transferred. |
| 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. |
{- "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "artefact": "highres",
- "destinationStorageId": "destination-bucket#aws-s3#destination-path/",
- "targetFileName": "target-file-name"
}{- "itemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "artefact": "highres",
- "source": {
- "storageId": "my-storage-id",
- "name": "my-bucket",
- "path": "folder path/to/file",
- "type": "aws-s3"
}, - "destination": {
- "storageId": "my-storage-id",
- "name": "my-bucket",
- "path": "folder path/to/file",
- "type": "aws-s3"
}, - "state": "error",
- "progressInfo": {
- "totalSizeInBytes": 0,
- "transferredBytes": 0
}, - "statusMessage": "string",
- "requestByUserId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "createdOn": "2022-08-18T10:36:37.362Z",
- "modifiedOn": "2022-08-18T10:36:37.362Z"
}[- {
- "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": {
- "accessKey": "AKIA57FV527ULUWR6JNV"
}, - "associatedArtifactsToTransfer": [
- "transcript-srt"
]
}
]Create a new storage location
| 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 |
{- "id": "my-s3-storage",
- "name": "my_storage_name",
- "folderPath": "path/inside/storage",
- "storageType": "aws-s3",
- "associatedArtifactsToTransfer": [
- "transcript-srt"
], - "keys": {
- "accessKey": "AKIA57FV527ULUWR6JNV",
- "secretKey": "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"
}
}{- "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": {
- "accessKey": "AKIA57FV527ULUWR6JNV"
}, - "associatedArtifactsToTransfer": [
- "transcript-srt"
]
}Update an existing storage location
| 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 |
{- "id": "my_storage_name#aws-s3#path/inside/storage",
- "associatedArtifactsToTransfer": [
- "transcript-srt"
], - "keys": {
- "accessKey": "AKIA57FV527ULUWR6JNV",
- "secretKey": "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"
}
}{- "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": {
- "accessKey": "AKIA57FV527ULUWR6JNV"
}, - "associatedArtifactsToTransfer": [
- "transcript-srt"
]
}Delete a storage location
| id required | string The ID that uniquely identifies the storage. |
{- "id": "my_storage_name#aws-s3#path/inside/storage"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}[- {
- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}
]| 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. |
{- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "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": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "group1",
- "group2"
]
}
}{- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}| itemId required | string Example: 803081ea-e797-41ea-bc28-cb26a3f908ce Unique identifier of the ingest storage configuration to retrieve |
{- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}| itemId required | string Example: 084c06bf-cc0d-404d-a409-947935983f79 Unique identifier of the ingest storage configuration to update |
| 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 |
{- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}{- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}| itemId required | string Example: 803081ea-e797-41ea-bc28-cb26a3f908ce Unique identifier of the ingest storage configuration to delete |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}{- "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",
- "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": {
- "transcriptionEnabled": true,
- "transcriptionConfig": {
- "transcriptionSourceLanguage": "en-UK",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0
]
}, - "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "textDetectionSettings": {
- "minWords": 3,
- "minHeight": 0.3
}, - "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}, - "enableS3Acceleration": false,
- "deleteEnabled": true,
- "isProxyOnlyIngestConfig": true,
- "defaultMetadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "defaultTimedMetadata": {
- "items": [
- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62-2500-7000",
- "startMs": 2500,
- "endMs": 7000,
- "data": {
- "formId": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "formData": {
- "title": "Funny cat",
- "copyrightOwner": "Cat Videos Inc."
}
}
}
]
}, - "scanStorageState": {
- "state": "in_progress",
- "message": "string",
- "modifiedOn": "2019-08-24T14:15:22Z"
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "string"
]
}, - "visibleToGroupList": null,
- "tenantId": "mimir-tenant",
- "awsAccountId": null
}| id | string Unique identifier of the upload location to be set as default |
{- "id": "e35bd40d-56e1-4515-ae04-5a38d9614136"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
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. |
{- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "operationType": "transcription",
- "operationParams": {
- "transcriptionSourceLanguage": "en-US",
- "transcriptionService": "awsTranscribe",
- "transcriptionChannels": [
- 0,
- 1
], - "transcriptionChannelIdentification": false
}, - "forced": false
}{- "message": "Operation completed successfully"
}Update the tenant configuration information
Tenant User Config Resource
{ }{ }Get transcription language settings for the tenant
{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "languageCode": "string",
- "transcriptionService": "string",
- "label": "string"
}
]
}
}Create transcription language settings for the tenant
{ }{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "languageCode": "string",
- "transcriptionService": "string",
- "label": "string"
}
]
}
}Get tenant generated media locations
[- {
- "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"
}
]| 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. |
{- "bucketName": "string",
- "pathPrefix": "string",
- "accessKey": "string",
- "secretKey": "string",
- "backup": true,
- "deleteEnabled": true,
- "autoCreateItems": true,
- "uploadGeneratedMedia": true,
- "storageProvider": "s3_native",
- "sourceEndpoint": "string"
}{- "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
| id required | string ID of the generated media location |
{- "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
| id required | string ID of the generated media location |
| 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. |
{- "bucketName": "string",
- "accessKey": "FGHFRHGTHYJYrDFDF",
- "secretKey": "FGHFRHfgkjfdgkjfsmjbmlkfjgdslkjfGTHYJYrDFDF",
- "uploadGeneratedMedia": true,
- "deleteEnabled": true,
- "storageProvider": "s3_native",
- "sourceEndpoint": "string"
}{- "id": "7c964cb5-0b9f-9e48-1669-0af85a036487",
- "bucketName": "my-bucket",
- "pathPrefix": "generated/media/",
- "accessKey": "FGHFRHGTHYJYrDFDF",
- "secretKey": "FGHFRHfgkjfdgkjfsmjbmlkfjgdslkjfGTHYJYrDFDF",
- "uploadGeneratedMedia": true
}[- {
- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "protected": false,
- "type": "itemChange",
- "condition": {
- "criteria": "always"
}, - "label": "My Webhook",
- "headers": {
- "Foo": "Bar"
}
}
]Create a new webhook
| 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. |
{- "protected": false,
- "type": "itemChange",
- "label": "Example Webhook",
- "condition": {
- "criteria": "always"
}, - "headers": {
- "Authorization": "Bearer token"
}
}{- "id": "2766d6d3-fee6-7c35-3310-0d31b6ab1a62",
- "protected": true,
- "type": "itemChange",
- "label": "My Protected Webhook"
}Updates an existing webhook to the provided state
| webhookId required | string The unique identifier of the webhook to update. |
| 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. |
{- "protected": false,
- "type": "itemChange",
- "label": "Example Webhook",
- "condition": {
- "criteria": "always"
}, - "headers": {
- "Authorization": "Bearer token"
}
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
| version | integer >= 1 Example: version=2 API version number. If not provided, defaults to version 1. |
[- {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}
]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.
| version | integer >= 1 Example: version=2 API version number. If not provided, defaults to version 1. |
| 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. |
{- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "folderTreePath": "root/folder1/folder2"
}{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}| 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. |
[- {
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
]
}
][- {
- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}
]| bookmarkId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the bookmark |
{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}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.
| bookmarkId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the bookmark |
| version | integer >= 1 Example: version=2 API version number. If not provided, defaults to version 1. |
| 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. |
{- "title": "My bookmark",
- "icon": "local_offer",
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470",
- "folderTreePath": "root/folder1/folder2"
}{- "id": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "path": "/search-item",
- "title": "My bookmark",
- "icon": "local_offer",
- "isFilterBookmark": true,
- "visibleToGroups": [
- "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
], - "parentFolder": "b60d57d2-4b12-a80c-6f14-c5eefaa91470"
}Delete a system bookmark
| bookmarkId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the bookmark |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}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.
{- "folders": [
- {
- "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "name": "sport-clips",
- "parentFolder": "2511207c-0370-411f-80d5-1055c76f47ae",
- "createdBy": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
- "createdAt": "2025-03-03T06:26:41.392Z",
- "updatedAt": "2025-03-03T08:17:06.303Z"
}
]
}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.
| If-Match required | string The ETag value from the last |
required | object |
| recursiveUpdate required | boolean If |
{- "bookmarkFolders": {
- "folders": [
- {
- "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "name": "sport-clips",
- "parentFolder": "2511207c-0370-411f-80d5-1055c76f47ae",
- "createdBy": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
- "createdAt": "2025-03-03T06:26:41.392Z",
- "updatedAt": "2025-03-03T08:17:06.303Z"
}
]
}, - "recursiveUpdate": true
}{- "folders": [
- {
- "id": "1e2a9953-af54-71b8-aadd-9a5e1b16b8cf",
- "name": "sport-clips",
- "parentFolder": "2511207c-0370-411f-80d5-1055c76f47ae",
- "createdBy": "a1e0b6bd-d3be-4d1b-a529-41dd8927325e",
- "createdAt": "2025-03-03T06:26:41.392Z",
- "updatedAt": "2025-03-03T08:17:06.303Z"
}
]
}Ingest file in an external storage into Mimir.
| 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. |
{- "configId": "410021cc-5086-4a9a-9e81-7d04b29be6ea",
- "srcKey": "upload/folder1/folder1/1.mp4",
- "placeholderId": "cfa094c7-a031-46f3-a4b7-18375411afff"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Perform search operation on items
{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "awsTranscribeCode": "string",
- "defaultList": true,
- "ibmNluCode": "string",
- "ibmSpeechToTextCode": "string",
- "label": "string",
- "languageCode": "string",
- "textrazorCode": "string"
}
]
}
}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".
| 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:
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 For a sibling type-breakdown alongside the regular hits, use
|
| includeTypeCounts | boolean When set to The breakdown is over every |
| includeDateCounts | boolean When set to |
| defaultDateRangeField | string Example: defaultDateRangeField=createdOn Item field to bucket on for the |
| defaultDateRangeFormId | string Identifies the MDF (Metadata Form) that defines the field
named in |
| 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 Scroll mode changes the response shape: hits are returned at the
top level under |
| mScrollId | string Scroll cursor returned by a previous |
| 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 |
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>'
{- "total": 0,
- "count": 0,
- "items": [
- { }
], - "mScrollId": "string",
- "dateHits": {
- "property1": {
- "doc_count": 0,
- "key": 0,
- "key_as_string": "string"
}, - "property2": {
- "doc_count": 0,
- "key": 0,
- "key_as_string": "string"
}
}, - "typeCount": [
- {
- "key": "string",
- "doc_count": 0
}
], - "from": 0,
- "incompleteFolderCount": 100,
- "_embedded": {
- "collection": [
- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "itemType": "string",
- "name": "string",
- "mediaSize": 0,
- "proxySize": 0,
- "thumbnailStrip": "string",
- "vttUrl": "string",
- "transcodingState": "string",
- "transcriptionState": "string",
- "transcriptionEnabled": true,
- "languageCode": "string",
- "editProxyAvailable": true,
- "hasEditProxy": true,
- "editProxyFormat": "string",
- "technicalMetadata": {
- "formId": "string",
- "formData": { }
}, - "modifiedOn": "2019-08-24T14:15:22Z",
- "frameCaptureFrequency": {
- "denominator": 0,
- "numerator": 0
}, - "mediaCreatedOn": "2019-08-24T14:15:22Z",
- "mediaType": "string",
- "mediaDuration": 0,
- "metadata": {
- "formId": "string",
- "formData": {
- "title": "string",
- "description": "string",
- "createdOn": "2019-08-24T14:15:22Z",
- "mediaCreatedOn": "2019-08-24T14:15:22Z"
}, - "highlights": {
- "property1": "string",
- "property2": "string"
}
}, - "originalFileName": "string",
- "proxy": "string",
- "searchHits": [
- {
- "content": "string",
- "hit": "string",
- "field": "string",
- "id": "string",
- "segments": [
- {
- "start": 0,
- "end": 0,
- "thumbnail": "string",
- "imageId": "string",
- "maxConfidence": 100
}
], - "score": 0
}
], - "thumbnail": "string"
}
]
}
}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.
| keldaId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the corresponding kelda |
| type | string Value: "single_file_new" new file ingest type |
| filepath | string filepath from root inside kelda container |
{- "type": "single_file_new",
- "filepath": "/kelda/kelda-root/indexedfolders/indexed1/hello.mp4"
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}| 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 required | string <date-time> Example: to=2025-06-30T23:59:59Z To time in ISO format. Must be in the same UTC month as |
| 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 |
{- "events": [
- {
- "type": "item_activity",
- "itemId": "string",
- "id": "string",
- "actionType": "string",
- "executedBy": "string",
- "email": "string",
- "executedOn": "2019-08-24T14:15:22Z",
- "provider": "string",
- "relatedParameters": { },
- "itemTitle": "string",
- "bulkOperationId": "string",
- "mdfDiff": {
- "oldMdfId": "string",
- "newMdfId": "string",
- "startTime": {
- "oldValue": 0,
- "newValue": 0
}, - "duration": {
- "oldValue": 0,
- "newValue": 0
}, - "metadataFields": [
- {
- "fieldId": "string",
- "oldValue": "string",
- "newValue": "string"
}
]
}, - "storageId": "string",
- "metadataCopiedFromItemId": "string"
}
], - "nextPageStartKey": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item to retrieve activity for |
| 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 |
| pageStartKey | string The nextPageStartKey retrieved from previous query response |
{- "events": [
- {
- "type": "item_activity",
- "itemId": "string",
- "id": "string",
- "actionType": "string",
- "executedBy": "string",
- "email": "string",
- "executedOn": "2019-08-24T14:15:22Z",
- "provider": "string",
- "relatedParameters": { },
- "itemTitle": "string",
- "bulkOperationId": "string",
- "mdfDiff": {
- "oldMdfId": "string",
- "newMdfId": "string",
- "startTime": {
- "oldValue": 0,
- "newValue": 0
}, - "duration": {
- "oldValue": 0,
- "newValue": 0
}, - "metadataFields": [
- {
- "fieldId": "string",
- "oldValue": "string",
- "newValue": "string"
}
]
}, - "storageId": "string",
- "metadataCopiedFromItemId": "string"
}
], - "nextPageStartKey": "string"
}Retrieve settings of the user associated with the credentials used to perform the HTTP request.
{- "bookmarks": [
- {
- "icon": "string",
- "title": "string",
- "path": "string",
- "folderId": "string",
- "isFilterBookmark": true,
- "itemId": "string"
}
], - "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
- "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
- "defaultFilters": [
- {
- "isExactSearch": true,
- "token": "string",
- "value": "string",
- "isRecognized": true,
- "isSticky": true,
- "filterKey": "string"
}
], - "dismissedNotifications": {
- "property1": {
- "code": "string",
- "text": true
}, - "property2": {
- "code": "string",
- "text": true
}
}, - "showRenameSubclipDialog": true
}Update settings of a user.
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 |
{- "bookmarks": [
- {
- "icon": "string",
- "title": "string",
- "path": "string",
- "folderId": "string",
- "isFilterBookmark": true,
- "itemId": "string"
}
], - "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
- "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
- "defaultFilters": [
- {
- "isExactSearch": true,
- "token": "string",
- "value": "string",
- "isRecognized": true,
- "isSticky": true,
- "filterKey": "string"
}
], - "dismissedNotifications": {
- "property1": {
- "code": "string",
- "text": true
}, - "property2": {
- "code": "string",
- "text": true
}
}, - "showRenameSubclipDialog": true
}{- "bookmarks": [
- {
- "icon": "string",
- "title": "string",
- "path": "string",
- "folderId": "string",
- "isFilterBookmark": true,
- "itemId": "string"
}
], - "workFolderId": "87b850f6-6184-491a-a4e6-304595b0be35",
- "lastSeenChangelogId": "d9acf481-742c-485d-8338-b16dc0c1050e",
- "defaultFilters": [
- {
- "isExactSearch": true,
- "token": "string",
- "value": "string",
- "isRecognized": true,
- "isSticky": true,
- "filterKey": "string"
}
], - "dismissedNotifications": {
- "property1": {
- "code": "string",
- "text": true
}, - "property2": {
- "code": "string",
- "text": true
}
}, - "showRenameSubclipDialog": true
}Retrieve information about a specific user, or all users if no query parameter is provided.
| id | string Example: id=b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the user |
string Example: email=john.doe@company.com The email of the user |
[- {
- "id": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "givenName": "string",
- "familyName": "string",
- "email": "string"
}
]Store a JSON object describing how to verify external authentication tokens that a tenant can use to access their resources in the Mimir API.
Tenant security to store
| jwksUrl | string or null The URL of a JSON Token Key Set. Security considerationsMimir 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 formatOnce a JSON Token Key Set URL has been set, then the Mimir API
endpoints will start accepting an HTTP request header named
The JWT token is required to contain the claims The JWT token may optionally provide a Each unique 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 |
| 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. |
{
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Update an user with specified identifier string.
| userId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The user identifier. |
| 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. |
{- "givenName": "John",
- "familyName": "Doe",
- "accountStatus": "VERIFIED",
- "groups": [
- "group1",
- "group2"
], - "notListable": true,
- "isDeactivated": true
}{- "id": "string",
- "givenName": "string",
- "familyName": "string",
- "email": "string",
- "accountStatus": "VERIFIED",
- "groups": [
- "string"
], - "permissions": [
- "string"
], - "createdOn": "2019-11-20T11:27:41.107Z",
- "modifiedOn": "2019-11-20T11:27:41.107Z",
- "isExternal": true,
- "notListable": true,
- "avatar": "string",
- "highResAvatar": "string",
- "groupLabels": [
- "string"
], - "extGroupsHint": [
- "string"
], - "primaryGroupDefaultUploadLocationId": "string",
- "primaryGroupKeldaIdForConformLocation": "string",
- "isDeactivated": true
}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.
[- {
- "keyId": "string",
- "isActive": true,
- "expiryDate": "string",
- "modifiedOnIsoDateString": "string",
- "label": "string",
- "lastUsedOnIsoDate": "string",
- "maxUnusedDays": 0
}
]Keys created using this endpoint are exclusively owned by the user making the request and can not be viewed or modified by other users.
| 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). |
{- "isActive": true,
- "expiryDate": "2023-12-31T20:59:59.999Z",
- "label": "string",
- "maxUnusedDays": 0
}{- "keyId": "string",
- "isActive": true,
- "expiryDate": "string",
- "modifiedOnIsoDateString": "string",
- "label": "string",
- "lastUsedOnIsoDate": "string",
- "maxUnusedDays": 0,
- "apiKeyHeaderValue": "string"
}| keyId required | string Example: test-key The unique identifier of the key to update |
| 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). |
{- "isActive": true,
- "expiryDate": "2023-12-31T20:59:59.999Z",
- "label": "string",
- "maxUnusedDays": 0
}{- "keyId": "string",
- "isActive": true,
- "expiryDate": "string",
- "modifiedOnIsoDateString": "string",
- "label": "string",
- "lastUsedOnIsoDate": "string",
- "maxUnusedDays": 0
}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).
| 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) |
{- "b60d57d2-4b12-a80c-6f14-c5eefaa91460": [
- {
- "keyId": "key-1",
- "isActive": true,
- "expiryDate": "2027-01-01T00:00:00.000Z",
- "modifiedOnIsoDateString": "2026-05-11T12:00:00.000Z",
- "label": "Production key",
- "lastUsedOnIsoDate": "2026-05-10T08:30:00.000Z",
- "maxUnusedDays": 90
}
], - "1a2b3c4d-5e6f-7a8b-9c0d-e1f2a3b4c5d6": [
- {
- "keyId": "key-2",
- "isActive": false,
- "expiryDate": "indefinite",
- "modifiedOnIsoDateString": "2026-04-01T10:00:00.000Z",
- "label": "Integration key",
- "lastUsedOnIsoDate": null,
- "maxUnusedDays": null
}
]
}Allows a super admin or tenant admin to enable or disable an API key for a specific user.
| 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 |
{- "keyId": "string",
- "userId": "string",
- "isActive": true
}{- "keyId": "string",
- "isActive": true,
- "expiryDate": "string",
- "modifiedOnIsoDateString": "string",
- "label": "string",
- "lastUsedOnIsoDate": "string",
- "maxUnusedDays": 0
}Allows a super admin or tenant admin to delete an API key belonging to a specific user.
| keyId required | string The unique identifier of the API key to delete |
| userId required | string The user ID that owns the API key |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Get metering information for one or several tenants.
| 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. |
{- "meteringDataGroupByTenant": [
- {
- "tenantId": {
- "cost": 0,
- "Transcoding": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "audioExtraction": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "transcription": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "translation": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "celebrityDetection": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "personDetection": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "labelDetection": {
- "cost": 0,
- "duration": 0,
- "unit": 0,
- "count": 0
}, - "storage": {
- "cost": 0,
- "unit": 0,
- "count": 0
}
}
}
], - "startDay": 0,
- "endDay": 0,
- "cost": 0
}Get Status of all the Storage Managers.
{- "total": 0,
- "_embedded": {
- "collection": [
- {
- "userName": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "ip": "string",
- "version": "string",
- "updatedOn": "2019-08-24T14:15:22Z",
- "id": "string",
- "tenantId": "string"
}
]
}
}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.
[- {
- "id": "0671ea5b-c368-4209-a74b-dabb66eb53c6",
- "name": "TPBS-CH01",
- "version": "v2",
- "locationId": "2d1fcc4b-1ea0-40c2-9969-9f52c94d0bb1",
- "defaultTargetFolderId": "string",
- "description": {
- "type": "ndi",
- "keldaConfigurationId": "string",
- "target": { }
}, - "expectedPipelines": [
- { }
]
}
]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 id ↔ source.locationId to render a feed list with
geography and timezone alongside the source name.
The response is a plain JSON array, not an envelope.
[- {
- "id": "2d1fcc4b-1ea0-40c2-9969-9f52c94d0bb1",
- "label": "Bangkok",
- "timezone": "Asia/Bangkok",
- "visibleTo": [
- "string"
], - "updatableBy": [
- "string"
]
}
]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.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.text column on each task often carries @<name>
mention markers extracted from the source comment; treat
them as opaque text.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.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).| assignee required | string Example: all User UUID, or the literal |
| status | string Enum: "resolved" "unresolved" Filter to tasks in a specific resolution state. Omitting
this defaults to |
| 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
|
{- "tasks": [
- {
- "id": "string",
- "text": "string",
- "assignee": "string",
- "createdBy": "string",
- "assignedOn": "2019-08-24T14:15:22Z",
- "resolved": true,
- "thumbnail": "string",
- "context": {
- "type": "string",
- "item": {
- "id": "string",
- "title": "string",
- "type": "string"
}, - "startSecond": 0
}
}
], - "nextPageStartKey": "string"
}| 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
|
| to required | integer <int64> Example: to=1745150400000 Recording start time upper bound, as epoch milliseconds
(UTC). Same encoding requirement as |
{- "recordings": [
- {
- "id": "string",
- "title": { },
- "startTimeMs": "string",
- "durationMs": "string",
- "ingestFrom": { },
- "liveRecording": {
- "state": "string"
}, - "seriesId": "string"
}
], - "series": [
- {
- "id": "string",
- "title": { },
- "recurrenceSchedule": {
- "type": "daily",
- "timeOfDayStartTime": "14:15:22Z",
- "dayOfWeek": 0,
- "days": 0
}, - "recordingParams": {
- "durationMs": 0,
- "ingestFrom": {
- "liveSourceId": "string",
- "pipelineId": "string",
- "liveSourceType": "string",
- "s3Output": true
}, - "routerSource": 0,
- "ndiSource": "string",
- "dynamicSource": "string"
}, - "activeFrom": "2019-08-24T14:15:22Z",
- "activeTo": "2019-08-24T14:15:22Z",
- "recordingItems": {
- "property1": "string",
- "property2": "string"
}, - "targetFolderId": "string"
}
]
}| id required | string Example: 238cfd24-3c16-4325-85d4-496d0cf74e5c Recording item id |
{- "id": "string",
- "title": { },
- "startTimeMs": "string",
- "durationMs": "string",
- "ingestFrom": { },
- "liveRecording": {
- "state": "string"
}, - "seriesId": "string"
}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.
| id required | string or null The id of the recording series |
{- "id": "string",
- "createdOn": "string",
- "createdBy": "string",
- "recurrenceSchedule": { },
- "metadataTemplate": { },
- "activeFrom": "string",
- "activeTo": "string",
- "recordingItems": { },
- "recordingParams": {
- "durationMs": 0,
- "ingestFrom": { },
- "outputSettings": { }
}
}| id required | string or null The id of the recording series |
| 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. |
{- "recurrenceSchedule": { },
- "metadataTemplate": { },
- "activeFrom": "string",
- "activeTo": "string",
- "recordingParams": {
- "durationMs": 0,
- "ingestFrom": { },
- "outputSettings": { }
}
}{- "id": "string",
- "createdOn": "string",
- "createdBy": "string",
- "recurrenceSchedule": { },
- "metadataTemplate": { },
- "activeFrom": "string",
- "activeTo": "string",
- "recordingItems": { },
- "recordingParams": {
- "durationMs": 0,
- "ingestFrom": { },
- "outputSettings": { }
}
}| id required | string or null The id of the recording series |
| 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. |
{- "recurrenceSchedule": { },
- "source": {
- "itemId": "string"
}, - "activeTo": "string"
}{- "id": "string",
- "createdOn": "string",
- "createdBy": "string",
- "recurrenceSchedule": { },
- "metadataTemplate": { },
- "activeFrom": "string",
- "activeTo": "string",
- "recordingItems": { },
- "recordingParams": {
- "durationMs": 0,
- "ingestFrom": { },
- "outputSettings": { }
}
}The created recording item may then be edited independently of the series.
| id required | string or null The id of the recording series |
| 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 |
{- "scheduledStartTimeMs": 0,
- "overrides": {
- "startTimeMs": 0,
- "durationMs": 0,
- "ingestFrom": { },
- "metadata": { }
}
}{- "id": "string",
- "title": { },
- "startTimeMs": "string",
- "durationMs": "string",
- "ingestFrom": { },
- "liveRecording": {
- "state": "string"
}, - "seriesId": "string"
}Retrieve various statistics for the tenant. Each returned statistic is given as a single count value for the queried time span.
| 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 |
{- "dateRange": {
- "from": "2021-07-07",
- "to": "2021-07-08"
}, - "counts": {
- "unique_users": {
- "sum": 2,
- "maxHourly": {
- "value": 1,
- "hour": "2021-11-26-03"
}
}, - "searches_performed": {
- "sum": 4,
- "maxHourly": {
- "value": 2,
- "hour": "2021-11-26-07"
}
}
}
}Retrieve a list of items that have been modified in a replication significant way since a given date.
| since required | string <date-time> Example: 2024-04-18T00:00:00.000Z The date to retrieve feed items since. |
| next | string The opaque cursor for the next page of results if there are more to fetch. |
{- "tenant": {
- "stage": "string",
- "tenantId": "string"
}, - "modifications": [
- {
- "id": "string",
- "modifiedOn": "string"
}
], - "next": "string"
}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.
| itemId required | string Example: b60d57d2-4b12-a80c-6f14-c5eefaa91460 The ID of the item |
object The replica request object. This object contains the information needed to replicate the item. |
{- "replica": {
- "want": {
- "unnamed": {
- "property1": false,
- "property2": false
}, - "streamFrom": {
- "property1": 0,
- "property2": 0
}
}, - "have": {
- "schemas": { },
- "optionLists": { }
}
}
}{- "strippedItemEntity": { },
- "normalizedFolderPath": "",
- "resources": [
- { }
], - "modifiedOn": "2024-05-15T11:12:09.235Z",
- "truncated": false,
- "schemas": [
- { }
], - "optionLists": [
- { }
]
}Retrieve configuration controlling automated replication of content from other Mimir systems.
{- "modified": {
- "on": "2024-05-15T11:12:09.235Z",
- "by": "8a5f79fd-0817-4829-b3ce-a3ce5c15c733"
}, - "sources": [
- {
- "stage": "prod",
- "after": "2024-05-15T11:12:09.235Z",
- "externallyReplicatedStorages": [
- {
- "source": "Generated:mimir-main-live/recordings",
- "target": "Generated:mimir-replica-live/recordings"
}
], - "shardCount": 1
}
]
}Put the configuration controlling automated replication of content from other Mimir systems, replacing any existing configuration.
required | Array of objects What Mimir systems to replicate content from |
{- "sources": [
- {
- "stage": "prod",
- "after": "2024-05-15T11:12:09.235Z",
- "externallyReplicatedStorages": [
- {
- "source": "Generated:mimir-main-live/recordings",
- "target": "Generated:mimir-replica-live/recordings"
}
], - "secretMimirApiToken": "sakm.[REDACTED].[REDACTED]",
- "shardCount": 1
}
]
}{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Get all notifications for given recipient type and status for the current user.
| 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. |
{- "notifications": [
- {
- "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",
- "validUntilDate": "2024-12-31"
}
], - "nextToken": "string"
}Create and send a custom notification to user(s) based on the provided parameters.
| 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. |
{- "recipientType": "user-email",
- "email": "user1@example.com",
- "title": "Test notification",
- "description": "This is a test notification",
- "validUntilDate": "2024-12-31"
}{- "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",
- "validUntilDate": "2024-12-31"
}| id required | string The ID of the notification to retrieve |
{- "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",
- "validUntilDate": "2024-12-31"
}Creates a new cropped image item for the given crop area of an existing image.
| 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 |
{- "sourceItemId": "b60d57d2-4b12-a80c-6f14-c5eefaa91460",
- "outputFileBaseName": "cropped-image",
- "cropArea": {
- "x": 10,
- "y": 10,
- "width": 200,
- "height": 200
}, - "type": "create-item",
- "itemCreationRequest": {
- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "New title",
- "default_description": "New description",
- "default_mediaCreatedOn": "2019-12-31T12:15:13.000Z"
}
}, - "visibleTo": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "updatableBy": {
- "level": "tenant",
- "groups": [
- "test_tenant:organization"
]
}, - "folderParents": [
- "string"
], - "analyticConfig": {
- "labelDetectionEnabled": true,
- "textDetectionEnabled": true,
- "personDetectionEnabled": true,
- "personDetectionConfig": {
- "createUnknownPersons": true
}, - "celebrityDetectionEnabled": true
}
}
}{- "createdItem": {
- "id": "4191dc5a-f632-a070-6a9a-2e3499449a31",
- "mediaType": "video/mp4",
- "celebrityDetectionEnabled": true,
- "labelDetectionEnabled": true,
- "personDetectionEnabled": true,
- "transcriptionEnabled": true,
- "itemType": "video"
}, - "cropResult": {
- "status": "completed"
}
}Get list of clip entries of a clipList item (i.e. a sequence)
| itemId required | string The ID of the item whose clip list is being retrieved. |
{- "version": 1,
- "clips": [
- {
- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "title": "Sample Clip",
- "in": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "out": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "audioMapping": [
- [
- 0,
- 1
], - [
- 1,
- 1
]
]
}
]
}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.
| 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 |
| If-Match required | number The required clip list version. If missing, the server will respond with a 428 status. |
| 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:
|
[- {
- "itemId": "04509a7f-3b4z-459f-a1a9-d0c43b7e5d13",
- "title": "Sample Clip",
- "in": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "out": {
- "approximate": 10.5,
- "precise": {
- "numerator": 21,
- "denominator": 2
}
}, - "audioMapping": [
- [
- 0,
- 1
], - [
- 1,
- 1
]
]
}
]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.
| 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) |
{- "type": "preset_ref",
- "presetId": "default-h264-preset",
- "clips": [
- {
- "itemId": "123e4567-e89b-12d3-a456-426614174000",
- "title": "Clip 1",
- "in": {
- "approximate": 10.5
}, - "out": {
- "approximate": 25
}
}, - {
- "itemId": "223e4567-e89b-12d3-a456-426614174001",
- "title": "Clip 2",
- "in": {
- "approximate": 0
}, - "out": {
- "approximate": 15.5
}
}
], - "target": {
- "type": "new_item",
- "targetFolderId": "folder-123",
- "metadata": {
- "formId": "default",
- "formData": {
- "default_title": "My Rendered Sequence",
- "default_description": "A sequence rendered from multiple clips",
- "default_createdOn": "2023-12-01T10:30:00.000Z",
- "default_mediaCreatedOn": "2023-12-01T10:30:00.000Z"
}
}, - "visibleTo": {
- "level": "selected_groups",
- "groups": [
- "test_tenant:editors"
]
}, - "analyticConfig": {
- "transcriptionEnabled": true,
- "labelDetectionEnabled": false
}
}, - "delegate": {
- "type": "cloud"
}
}{- "keldaRequestId": null,
- "itemId": "423e4567-e89b-12d3-a456-426614174099"
}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.
Before calling this endpoint, the caller must:
{itemId} path parameterPOST /api/v1/items/{itemId}/attachments with type: "timeline" and role: "render_source", then PUT the timeline JSON to the returned presigned URLThe 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.
| itemId required | string <uuid> ID of the target placeholder item that has the timeline attachment |
required | any (RenderDelegate) |
| presetId required | string ID of the encoding preset to use for the render |
{- "delegate": {
- "type": "cloud"
}, - "presetId": "default-h264-preset"
}{- "keldaRequestId": null,
- "itemId": "423e4567-e89b-12d3-a456-426614174099"
}Creates a new preset configuration for media processing workflows.
| id required | string Unique identifier for the preset. You have to provide a custom ID. For example, you can use a pattern like |
| 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. |
{- "id": "preset-1753776375793",
- "type": "unresolved",
- "filters": {
- "type": "broadcast",
- "choices": [
- {
- "label": "Brand",
- "value": "XDCAM"
}, - {
- "label": "Mode",
- "value": "1080i59"
}, - {
- "label": "Variant",
- "value": "HD422"
}, - {
- "label": "Audio channels",
- "value": "4"
}
]
}, - "audioMapping": [
- [
- 1,
- 0,
- 0,
- 0
], - [
- 0,
- 1,
- 0,
- 0
], - [
- 0,
- 0,
- 1,
- 0
], - [
- 0,
- 0,
- 0,
- 1
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
]
], - "name": "XDCAM HD422 1080i59",
- "capabilities": [
- "rendering"
], - "outputProfile": {
- "container": {
- "type": "single_file",
- "format": {
- "name": "mp4",
- "faststart": true
}
}, - "video": {
- "codec": {
- "codec": "h264",
- "rateControl": {
- "type": "crf",
- "crf": 25
}, - "gopSize": 12,
- "fixedGop": true,
- "bFrames": 0,
- "profile": "main",
- "preset": "veryfast"
}, - "frameRate": {
- "numerator": 25,
- "denominator": 1
}, - "resolution": {
- "width": 1920,
- "height": 1080,
- "sar": {
- "numerator": 1,
- "denominator": 1
}
}, - "pixelFormat": "yuv420p",
- "fieldOrder": "progressive"
}, - "audio": {
- "codec": {
- "codec": "aac",
- "bitrate": 192000
}, - "sampleRate": 48000,
- "audioChannelsPerStream": 2,
- "channelLimits": {
- "min": 2,
- "max": 2
}
}
}
}{- "id": "preset-1753776375793",
- "type": "unresolved",
- "name": "XDCAM HD422 1080i59",
- "filters": {
- "type": "broadcast",
- "choices": [
- {
- "label": "Brand",
- "value": "XDCAM"
}, - {
- "label": "Mode",
- "value": "1080i59"
}, - {
- "label": "Variant",
- "value": "HD422"
}, - {
- "label": "Audio channels",
- "value": "4"
}
]
}, - "audioMapping": [
- [
- 1,
- 0,
- 0,
- 0
], - [
- 0,
- 1,
- 0,
- 0
], - [
- 0,
- 0,
- 1,
- 0
], - [
- 0,
- 0,
- 0,
- 1
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
]
], - "capabilities": [
- "rendering"
], - "outputProfile": {
- "container": {
- "type": "single_file",
- "format": {
- "name": "mp4",
- "faststart": true
}
}, - "video": {
- "codec": {
- "codec": "h264",
- "rateControl": {
- "type": "crf",
- "crf": 25
}, - "gopSize": 12,
- "fixedGop": true,
- "bFrames": 0,
- "profile": "main",
- "preset": "veryfast"
}, - "frameRate": {
- "numerator": 25,
- "denominator": 1
}, - "resolution": {
- "width": 1920,
- "height": 1080,
- "sar": {
- "numerator": 1,
- "denominator": 1
}
}, - "pixelFormat": "yuv420p",
- "fieldOrder": "progressive"
}, - "audio": {
- "codec": {
- "codec": "aac",
- "bitrate": 192000
}, - "sampleRate": 48000,
- "audioChannelsPerStream": 2,
- "channelLimits": {
- "min": 2,
- "max": 2
}
}
}
}Updates an existing preset configuration for media processing workflows. The preset ID cannot be modified and is taken from the URL path.
| presetId required | string Example: preset-1753780305030 Unique identifier of the preset |
| 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. |
{- "type": "unresolved",
- "name": "XDCAM HD422 1080i59 - Updated",
- "filters": {
- "type": "broadcast",
- "choices": [
- {
- "label": "Brand",
- "value": "XDCAM"
}, - {
- "label": "Mode",
- "value": "1080i59"
}, - {
- "label": "Variant",
- "value": "HD422"
}, - {
- "label": "Audio channels",
- "value": "8"
}
]
}, - "audioMapping": [
- [
- 1,
- 0,
- 0,
- 0
], - [
- 0,
- 1,
- 0,
- 0
], - [
- 0,
- 0,
- 1,
- 0
], - [
- 0,
- 0,
- 0,
- 1
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
]
], - "capabilities": [
- "rendering",
- "web_proxy"
], - "outputProfile": {
- "container": {
- "type": "single_file",
- "format": {
- "name": "mp4",
- "faststart": true
}
}, - "video": {
- "codec": {
- "codec": "h264",
- "rateControl": {
- "type": "crf",
- "crf": 23
}, - "gopSize": 15,
- "fixedGop": true,
- "bFrames": 2,
- "profile": "high",
- "preset": "medium"
}, - "frameRate": {
- "numerator": 30,
- "denominator": 1
}, - "resolution": {
- "width": 1920,
- "height": 1080,
- "sar": {
- "numerator": 1,
- "denominator": 1
}
}, - "pixelFormat": "yuv420p",
- "fieldOrder": "progressive"
}, - "audio": {
- "codec": {
- "codec": "aac",
- "bitrate": 256000
}, - "sampleRate": 48000,
- "audioChannelsPerStream": 2,
- "channelLimits": {
- "min": 2,
- "max": 8
}
}
}
}{- "id": "preset-1753779927809",
- "type": "unresolved",
- "name": "XDCAM HD422 1080i59 - Updated",
- "filters": {
- "type": "broadcast",
- "choices": [
- {
- "label": "Brand",
- "value": "XDCAM"
}, - {
- "label": "Mode",
- "value": "1080i59"
}, - {
- "label": "Variant",
- "value": "HD422"
}, - {
- "label": "Audio channels",
- "value": "8"
}
]
}, - "audioMapping": [
- [
- 1,
- 0,
- 0,
- 0
], - [
- 0,
- 1,
- 0,
- 0
], - [
- 0,
- 0,
- 1,
- 0
], - [
- 0,
- 0,
- 0,
- 1
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
], - [
- 0,
- 0,
- 0,
- 0
]
], - "capabilities": [
- "rendering",
- "web_proxy"
], - "outputProfile": {
- "container": {
- "type": "single_file",
- "format": {
- "name": "mp4",
- "faststart": true
}
}, - "video": {
- "codec": {
- "codec": "h264",
- "rateControl": {
- "type": "crf",
- "crf": 23
}, - "gopSize": 15,
- "fixedGop": true,
- "bFrames": 2,
- "profile": "high",
- "preset": "medium"
}, - "frameRate": {
- "numerator": 30,
- "denominator": 1
}, - "resolution": {
- "width": 1920,
- "height": 1080,
- "sar": {
- "numerator": 1,
- "denominator": 1
}
}, - "pixelFormat": "yuv420p",
- "fieldOrder": "progressive"
}, - "audio": {
- "codec": {
- "codec": "aac",
- "bitrate": 256000
}, - "sampleRate": 48000,
- "audioChannelsPerStream": 2,
- "channelLimits": {
- "min": 2,
- "max": 8
}
}
}
}Deletes an existing preset configuration. Once deleted, the preset cannot be recovered. This action will permanently remove the preset and all its associated configuration.
| presetId required | string Example: preset-1753780305030 Unique identifier of the preset |
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.
{- "luts": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "title": "Rec.709 to sRGB",
- "input": {
- "matrix": {
- "type": "RGB"
}, - "primaries": "BT.709",
- "transfer": "BT.709"
}, - "output": {
- "matrix": {
- "type": "RGB"
}, - "primaries": "BT.709",
- "transfer": "BT.709"
},
}
]
}Creates a LUT entry and returns a pre-signed URL for uploading the .cube file
to object storage.
POST /prime/api/v1/luts (this endpoint) — creates the LUT entry.
The response contains id and uploadUrl.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.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.| 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). |
{- "title": "Rec.709 to sRGB",
- "input": {
- "matrix": {
- "type": "RGB"
}, - "primaries": "BT.709",
- "transfer": "BT.709"
}, - "output": {
- "matrix": {
- "type": "RGB"
}, - "primaries": "BT.709",
- "transfer": "sRGB"
}
}{- "id": "550e8400-e29b-41d4-a716-446655440000",
}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:
.cube file has not been uploaded yet..cube format validation.| id required | string The LUT identifier. |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}Permanently deletes a LUT entry and its associated .cube file from object storage.
This operation cannot be undone.
| id required | string The LUT identifier. |
{- "statusCode": 100,
- "message": "string",
- "developerMessage": "string"
}