GET /api/v1/video-resources/{videoResourceId}
Reads one resource and its videos, in order. An unpublished resource is
404 for a member; the school team reads it.
| Role in the organization | This endpoint |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Allowed when published; an assigned coach also reads unpublished |
| Requirement | Rule for this endpoint |
|---|---|
| Business role | coach (any scope) reads unpublished resources |
| Resource scope | Resource of the key's organization |
| Participation | None |
| Resource state | published for members |
| Parameter | Type | Required | Description |
|---|---|---|---|
videoResourceId | UUID | yes | Resource of the key's organization |
curl "$COHORTE_API_BASE_URL/api/v1/video-resources/$VIDEO_RESOURCE_ID" \
-H "x-api-key: $COHORTE_API_KEY"200 OK — the resource and its videos.400 Bad Request — the identifier is not a UUID.401 Unauthorized — missing, unknown or expired key.403 Forbidden — the bearer is not a member of the school.404 Not Found — no such resource in this school, or unpublished for a member.The fields of one item of List video resources, plus:
| Field | Type | Nullable | Description |
|---|---|---|---|
data.videos[].id | UUID | no | Video line identifier |
data.videos[].mediaId | UUID | no | Media of the school |
data.videos[].title | string | no | Line title, otherwise the media title |
data.videos[].position | integer | no | Order, from 0 |
data.videos[].provider | string | no | bunny, vimeo or youtube |
data.videos[].url | string | no | Canonical video address; a Bunny video needs a signed player address, given by the web page only |
data.videos[].status | string | no | processing, ready or failed |
data.videos[].thumbnailUrl | string | yes | Image of the video once encoded |
data.videos[].durationSeconds | integer | yes | Duration once encoded |
videoCount is not repeated on this read: count videos.
{
"success": true,
"data": {
"id": "6f2b1c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"programId": "3a1f7c2e-5b6d-4e8f-9a0b-1c2d3e4f5a6b",
"programName": "Agentic AI Developer",
"kind": "video_answer",
"category": null,
"title": "How to structure a service layer",
"description": "The three layers, and where a rule lives.",
"tags": ["Architecture"],
"status": "published",
"thumbnailMediaId": null,
"thumbnailUrl": null,
"authorName": "Mike",
"createdBy": "0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"publishedAt": "2026-10-18T10:00:00.000Z",
"unpublishedAt": null,
"createdAt": "2026-10-18T10:00:00.000Z",
"updatedAt": "2026-10-18T10:00:00.000Z",
"videos": [
{
"id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"mediaId": "9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
"title": "Part 1",
"position": 0,
"provider": "youtube",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"status": "ready",
"thumbnailUrl": null,
"durationSeconds": null
}
]
},
"correlationId": "c0ffee00-1111-4222-8333-444455556666"
}