Bold VideoDocs

AI Chat

Get a video chat conversation

GET
/api/v1/ai/videos/{id}/chat/{conversation_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Video ID or slug

conversation_id*string

Conversation ID

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/ai/videos/string/chat/string"
{
  "conversation_id": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "messages": [
    {
      "content": "string",
      "id": "string",
      "inserted_at": "2019-08-24T14:15:22Z",
      "role": "user",
      "sources": [
        {}
      ]
    }
  ],
  "metadata": {},
  "updated_at": "2019-08-24T14:15:22Z",
  "video_id": "string"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Continue a video chat conversation

POST
/api/v1/ai/videos/{id}/chat/{conversation_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Video ID or slug

conversation_id*string

Existing conversation ID

Request Body

application/json

Chat request

conversation_id?string|null

Existing conversation ID to continue

current_time?integer|null

Current video playback position in seconds for contextual answers

images?|null

Optional array of images (max 5). Requires the Vision feature flag. Each image can be base64-encoded or a URL.

Itemsitems <= 5
max_tokens?integer|null

Maximum tokens in response

model?string|null

AI model to use (optional, uses account default)

prompt*string

The user's question or prompt

stream?boolean

Whether to stream the response via SSE (default: true)

Defaulttrue
temperature?number|null

Temperature for response generation (0.0-2.0)

Formatfloat
viewer?string|null

Viewer identifier (UUID or your external ID) to associate with the conversation. When the viewers feature is enabled, the viewer's traits also personalize AI responses.

viewer_profile?string|

Tell the AI about the person asking, for this request only (never persisted). Pass free text/markdown, or a key-value object. Requires the viewers feature.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/ai/videos/string/chat/string" \  -H "Content-Type: application/json" \  -d '{    "prompt": "What are the key takeaways from this video?",    "stream": false  }'
{
  "content": "string",
  "conversation_id": "string",
  "id": "string",
  "model": "claude-3-5-sonnet-20241022",
  "usage": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "video_id": "string"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Delete a video chat conversation

DELETE
/api/v1/ai/videos/{id}/chat/{conversation_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Video ID or slug

conversation_id*string

Conversation ID

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://app.boldvideo.io/api/v1/ai/videos/string/chat/string"
Empty
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

List video chat conversations

GET
/api/v1/ai/videos/{id}/chat

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Video ID or slug

Query Parameters

limit?integer

Max results (default 20, max 100)

offset?integer

Pagination offset (default 0)

viewer*string

Viewer UUID or external ID

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/ai/videos/string/chat?viewer=string"
{
  "conversations": [
    {
      "conversation_id": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "message_count": 0,
      "preview": "string",
      "scope": "video",
      "status": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "limit": 0,
    "offset": 0
  },
  "video_id": "string"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Chat about a video

POST
/api/v1/ai/videos/{id}/chat

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Video ID or slug

Request Body

application/json

Chat request

conversation_id?string|null

Existing conversation ID to continue

current_time?integer|null

Current video playback position in seconds for contextual answers

images?|null

Optional array of images (max 5). Requires the Vision feature flag. Each image can be base64-encoded or a URL.

Itemsitems <= 5
max_tokens?integer|null

Maximum tokens in response

model?string|null

AI model to use (optional, uses account default)

prompt*string

The user's question or prompt

stream?boolean

Whether to stream the response via SSE (default: true)

Defaulttrue
temperature?number|null

Temperature for response generation (0.0-2.0)

Formatfloat
viewer?string|null

Viewer identifier (UUID or your external ID) to associate with the conversation. When the viewers feature is enabled, the viewer's traits also personalize AI responses.

viewer_profile?string|

Tell the AI about the person asking, for this request only (never persisted). Pass free text/markdown, or a key-value object. Requires the viewers feature.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/ai/videos/string/chat" \  -H "Content-Type: application/json" \  -d '{    "prompt": "What are the key takeaways from this video?",    "stream": false  }'
{
  "content": "string",
  "conversation_id": "string",
  "id": "string",
  "model": "claude-3-5-sonnet-20241022",
  "usage": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "video_id": "string"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Get conversation history

GET
/api/v1/ai/chat/{id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Conversation ID

Response Body

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/ai/chat/string"
{
  "conversation_id": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "messages": [
    {
      "content": "string",
      "role": "user"
    }
  ],
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Continue a library chat

POST
/api/v1/ai/chat/{id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Conversation ID

Request Body

application/json

Chat request

collection_id?string|null

Limit search to a specific collection (legacy single-value filter)

collection_ids?|null

Limit search to multiple collections (OR semantics)

conversation_id?string|null

Continue an existing conversation

images?|null

Optional array of images (max 5). Requires the Vision feature flag. Each image can be base64-encoded or a URL.

Itemsitems <= 5
prompt*string

Your question

stream?boolean

Stream response via SSE (default: true)

Defaulttrue
tags?|null

Filter by video tags

viewer?string|null

Viewer identifier (UUID or your external ID) to associate with the conversation. When the viewers feature is enabled, the viewer's traits also personalize AI responses.

viewer_profile?string|

Tell the AI about the person asking, for this request only (never persisted). Pass free text/markdown, or a key-value object. Requires the viewers feature.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/ai/chat/string" \  -H "Content-Type: application/json" \  -d '{    "prompt": "What are the best practices for user authentication?",    "stream": false  }'
{
  "citations": [
    {
      "canonical_url": "string",
      "cited": true,
      "document_type": "string",
      "id": "string",
      "kind": "chunk",
      "matched_sentence": {
        "end_ms": 0,
        "speaker_label": "string",
        "speaker_name": "string",
        "start_ms": 0,
        "text": "string",
        "timestamp": 0,
        "timestamp_end": 0,
        "timestamp_end_seconds": 0,
        "timestamp_seconds": 0
      },
      "moment_id": "string",
      "mux_playback_id": "string",
      "playback_id": "string",
      "published_at": 0,
      "slug": "string",
      "speaker": "string",
      "speaker_label": "string",
      "speaker_name": "string",
      "summary": "string",
      "text": "string",
      "timestamp": 0,
      "timestamp_end": 0,
      "timestamp_end_seconds": 0,
      "timestamp_seconds": 0,
      "timestamp_url": "string",
      "title": "string",
      "transcript_excerpt": "string",
      "type": "insight",
      "video_id": "string",
      "video_title": "string"
    }
  ],
  "content": "string",
  "conversation_id": "string",
  "metadata": {
    "degraded": true,
    "degraded_reason": "stage1_exhausted",
    "retrieval_mode": "normal"
  },
  "response_type": "answer",
  "sources": [
    {
      "canonical_url": "string",
      "cited": true,
      "document_type": "string",
      "id": "string",
      "kind": "chunk",
      "matched_sentence": {
        "end_ms": 0,
        "speaker_label": "string",
        "speaker_name": "string",
        "start_ms": 0,
        "text": "string",
        "timestamp": 0,
        "timestamp_end": 0,
        "timestamp_end_seconds": 0,
        "timestamp_seconds": 0
      },
      "moment_id": "string",
      "mux_playback_id": "string",
      "playback_id": "string",
      "published_at": 0,
      "slug": "string",
      "speaker": "string",
      "speaker_label": "string",
      "speaker_name": "string",
      "summary": "string",
      "text": "string",
      "timestamp": 0,
      "timestamp_end": 0,
      "timestamp_end_seconds": 0,
      "timestamp_seconds": 0,
      "timestamp_url": "string",
      "title": "string",
      "transcript_excerpt": "string",
      "type": "insight",
      "video_id": "string",
      "video_title": "string"
    }
  ]
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Delete a library chat conversation

DELETE
/api/v1/ai/chat/{id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

id*string

Conversation ID

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://app.boldvideo.io/api/v1/ai/chat/string"
Empty
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

List library chat conversations

GET
/api/v1/ai/chat

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Query Parameters

limit?integer

Max results (default 20, max 100)

offset?integer

Pagination offset (default 0)

viewer*string

Viewer UUID or external ID

Response Body

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/ai/chat?viewer=string"
{
  "conversations": [
    {
      "conversation_id": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "message_count": 0,
      "preview": "string",
      "scope": "video",
      "status": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "limit": 0,
    "offset": 0
  }
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Chat with your video library

POST
/api/v1/ai/chat

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Header Parameters

X-Bold-Cache-Bypass?string

Set to "true" to bypass caching for this request. Requires allow_per_request_model to be enabled on the account.

Request Body

application/json

Chat request

collection_id?string|null

Limit search to a specific collection (legacy single-value filter)

collection_ids?|null

Limit search to multiple collections (OR semantics)

conversation_id?string|null

Continue an existing conversation

images?|null

Optional array of images (max 5). Requires the Vision feature flag. Each image can be base64-encoded or a URL.

Itemsitems <= 5
prompt*string

Your question

stream?boolean

Stream response via SSE (default: true)

Defaulttrue
tags?|null

Filter by video tags

viewer?string|null

Viewer identifier (UUID or your external ID) to associate with the conversation. When the viewers feature is enabled, the viewer's traits also personalize AI responses.

viewer_profile?string|

Tell the AI about the person asking, for this request only (never persisted). Pass free text/markdown, or a key-value object. Requires the viewers feature.

Response Body

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/ai/chat" \  -H "Content-Type: application/json" \  -d '{    "prompt": "What are the best practices for user authentication?",    "stream": false  }'
{
  "citations": [
    {
      "canonical_url": "string",
      "cited": true,
      "document_type": "string",
      "id": "string",
      "kind": "chunk",
      "matched_sentence": {
        "end_ms": 0,
        "speaker_label": "string",
        "speaker_name": "string",
        "start_ms": 0,
        "text": "string",
        "timestamp": 0,
        "timestamp_end": 0,
        "timestamp_end_seconds": 0,
        "timestamp_seconds": 0
      },
      "moment_id": "string",
      "mux_playback_id": "string",
      "playback_id": "string",
      "published_at": 0,
      "slug": "string",
      "speaker": "string",
      "speaker_label": "string",
      "speaker_name": "string",
      "summary": "string",
      "text": "string",
      "timestamp": 0,
      "timestamp_end": 0,
      "timestamp_end_seconds": 0,
      "timestamp_seconds": 0,
      "timestamp_url": "string",
      "title": "string",
      "transcript_excerpt": "string",
      "type": "insight",
      "video_id": "string",
      "video_title": "string"
    }
  ],
  "content": "string",
  "conversation_id": "string",
  "metadata": {
    "degraded": true,
    "degraded_reason": "stage1_exhausted",
    "retrieval_mode": "normal"
  },
  "response_type": "answer",
  "sources": [
    {
      "canonical_url": "string",
      "cited": true,
      "document_type": "string",
      "id": "string",
      "kind": "chunk",
      "matched_sentence": {
        "end_ms": 0,
        "speaker_label": "string",
        "speaker_name": "string",
        "start_ms": 0,
        "text": "string",
        "timestamp": 0,
        "timestamp_end": 0,
        "timestamp_end_seconds": 0,
        "timestamp_seconds": 0
      },
      "moment_id": "string",
      "mux_playback_id": "string",
      "playback_id": "string",
      "published_at": 0,
      "slug": "string",
      "speaker": "string",
      "speaker_label": "string",
      "speaker_name": "string",
      "summary": "string",
      "text": "string",
      "timestamp": 0,
      "timestamp_end": 0,
      "timestamp_end_seconds": 0,
      "timestamp_seconds": 0,
      "timestamp_url": "string",
      "title": "string",
      "transcript_excerpt": "string",
      "type": "insight",
      "video_id": "string",
      "video_title": "string"
    }
  ]
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}