Bold VideoDocs

Progress

List viewer progress

GET
/api/v1/viewers/{viewer_id}/progress

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

viewer_id*string

Viewer UUID

Query Parameters

completed?boolean

Filter by completion status

collection_id?string

Filter by collection UUID

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/viewers/string/progress"
{
  "data": [
    {
      "completed": false,
      "completed_at": null,
      "created_at": "2026-01-07T12:00:00Z",
      "current_time": 300,
      "duration": 1000,
      "id": "98936fa0-6826-48cc-aac1-89f42235dc8e",
      "percentage": 30,
      "updated_at": "2026-01-07T12:05:00Z",
      "video_id": "87654321-4321-4321-4321-987654321cba",
      "viewer_id": "12345678-1234-1234-1234-123456789abc"
    }
  ],
  "meta": {
    "completed": 3,
    "in_progress": 7,
    "total": 10
  }
}
{
  "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 progress for a video

GET
/api/v1/viewers/{viewer_id}/progress/{video_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

viewer_id*string

Viewer UUID

video_id*string

Video UUID

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://app.boldvideo.io/api/v1/viewers/string/progress/string"
{
  "data": {
    "completed": false,
    "completed_at": null,
    "created_at": "2026-01-07T12:00:00Z",
    "current_time": 300,
    "duration": 1000,
    "id": "98936fa0-6826-48cc-aac1-89f42235dc8e",
    "percentage": 30,
    "updated_at": "2026-01-07T12:05:00Z",
    "video_id": "87654321-4321-4321-4321-987654321cba",
    "viewer_id": "12345678-1234-1234-1234-123456789abc"
  }
}
{
  "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"
}

Create or update progress

POST
/api/v1/viewers/{viewer_id}/progress/{video_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

viewer_id*string

Viewer UUID

video_id*string

Video UUID

Request Body

application/json

Progress parameters

progress*

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/viewers/string/progress/string" \  -H "Content-Type: application/json" \  -d '{    "progress": {      "completed": false,      "current_time": 500,      "duration": 1000    }  }'
{
  "data": {
    "completed": false,
    "completed_at": null,
    "created_at": "2026-01-07T12:00:00Z",
    "current_time": 300,
    "duration": 1000,
    "id": "98936fa0-6826-48cc-aac1-89f42235dc8e",
    "percentage": 30,
    "updated_at": "2026-01-07T12:05:00Z",
    "video_id": "87654321-4321-4321-4321-987654321cba",
    "viewer_id": "12345678-1234-1234-1234-123456789abc"
  }
}
{
  "data": {
    "completed": false,
    "completed_at": null,
    "created_at": "2026-01-07T12:00:00Z",
    "current_time": 300,
    "duration": 1000,
    "id": "98936fa0-6826-48cc-aac1-89f42235dc8e",
    "percentage": 30,
    "updated_at": "2026-01-07T12:05:00Z",
    "video_id": "87654321-4321-4321-4321-987654321cba",
    "viewer_id": "12345678-1234-1234-1234-123456789abc"
  }
}
{
  "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"
}
{
  "code": "not_found",
  "message": "Video not found",
  "retryable": false,
  "type": "error"
}

Reset progress

DELETE
/api/v1/viewers/{viewer_id}/progress/{video_id}

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

viewer_id*string

Viewer UUID

video_id*string

Video UUID

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://app.boldvideo.io/api/v1/viewers/string/progress/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"
}

Mark video as complete

POST
/api/v1/viewers/{viewer_id}/progress/{video_id}/complete

Authorization

api_token
AuthorizationBearer <token>

API token provided by BOLD Admin

In: header

Path Parameters

viewer_id*string

Viewer UUID

video_id*string

Video UUID

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.boldvideo.io/api/v1/viewers/string/progress/string/complete"
{
  "data": {
    "completed": false,
    "completed_at": null,
    "created_at": "2026-01-07T12:00:00Z",
    "current_time": 300,
    "duration": 1000,
    "id": "98936fa0-6826-48cc-aac1-89f42235dc8e",
    "percentage": 30,
    "updated_at": "2026-01-07T12:05:00Z",
    "video_id": "87654321-4321-4321-4321-987654321cba",
    "viewer_id": "12345678-1234-1234-1234-123456789abc"
  }
}
{
  "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"
}