Skip to content

Enrichment API

Base URL: https://YOUR-SERVER/api. Send your API key in x-api-key where authentication is required. A key also needs the listed permission; your account's access rules still apply.

API guide · All endpoints · OpenAPI JSON

Get a video moment frame

GET /api/enrichment/frames/{id}

The image of one reusable video frame, under the same access as its video.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

Find moments like a video frame

GET /api/enrichment/frames/{id}/similar

Finds the moments nearest one frame's stored search embedding across your videos, including other times in the same video, never the frame itself. Nothing is sent to a model and nothing is written.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
idpathYesstring
limitqueryNoMost moments to return
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "limit",
    "required": false,
    "in": "query",
    "description": "Most moments to return",
    "schema": {
      "minimum": 1,
      "maximum": 100,
      "default": 24,
      "type": "integer"
    }
  }
]

Responses

Field definitions: VideoMomentSearchResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentSearchResponseDto"
        }
      }
    },
    "description": ""
  }
}

Search video moments

POST /api/enrichment/moments/search

Finds timestamped moments inside your videos by meaning, against the frame index, and by words in captions and typed transcripts.

Authentication: API key. Permission: asset.read.

Request body

Required.

Field definitions: VideoMomentSearchDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/VideoMomentSearchDto"
    }
  }
}

Responses

Field definitions: VideoMomentSearchResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentSearchResponseDto"
        }
      }
    },
    "description": ""
  }
}

Choose a video cover frame

PUT /api/enrichment/videos/{id}/cover

Keeps the chosen frame as a time in the video, so it survives the frames being cut again. Null returns to the best-ranked frame.

Authentication: API key. Permission: asset.update.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: VideoMomentCoverDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/VideoMomentCoverDto"
    }
  }
}

Responses

Field definitions: VideoMomentsResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentsResponseDto"
        }
      }
    },
    "description": ""
  }
}

Get video moments

GET /api/enrichment/videos/{id}/moments

The reusable frames of a video ranked best first, its cover, its generated and manual moments, and what they were made from, with any that are out of date marked.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: VideoMomentsResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentsResponseDto"
        }
      }
    },
    "description": ""
  }
}

Add a video moment

POST /api/enrichment/videos/{id}/moments

Adds your own moment, with an optional title and typed transcript. Refreshing never removes it.

Authentication: API key. Permission: asset.update.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: VideoMomentCreateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/VideoMomentCreateDto"
    }
  }
}

Responses

Field definitions: VideoMomentDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentDto"
        }
      }
    },
    "description": ""
  }
}

Delete a video moment

DELETE /api/enrichment/videos/{id}/moments/{momentId}

Removes one of your own moments. Generated moments are refreshed, not deleted.

Authentication: API key. Permission: asset.update.

Parameters

NameWhereRequiredDescription
idpathYesAsset ID
momentIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "description": "Asset ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "momentId",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "204": {
    "description": ""
  }
}

Update a video moment

PUT /api/enrichment/videos/{id}/moments/{momentId}

Edits one of your own moments. Generated moments are refreshed, not edited.

Authentication: API key. Permission: asset.update.

Parameters

NameWhereRequiredDescription
idpathYesAsset ID
momentIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "description": "Asset ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "momentId",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: VideoMomentUpdateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/VideoMomentUpdateDto"
    }
  }
}

Responses

Field definitions: VideoMomentDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoMomentDto"
        }
      }
    },
    "description": ""
  }
}