# Lấy một video mở

Trả về một video mở bạn đã biết, kèm link đã ký mới. `row` có cùng hình dạng với một phần tử của [Liệt kê video mở](https://docs.wandura.ai/vi/developers/reference/videos-list), nên một bộ parse dùng được cho cả hai. Endpoint này có bộ đếm rate limit riêng, tách khỏi danh sách.

```
GET /api/delivery/v1/videos/{id}
```

**Scope:** `videos:read`, trên một key gắn với một app

## Tham số request
| Tên | Vị trí | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|---|
| `Authorization` | header | string | Có | `Bearer <API key>` của một key có scope `videos:read`. |
| `id` | path | string (UUID) | Có | `id` của video lấy từ cửa danh sách. Không phải slug, cũng không phải `order_code`. |

## Ví dụ request
```bash
curl -s https://www.wandura.ai/api/delivery/v1/videos/c7d9e1f3-5a6b-4c8d-9e0f-1a2b3c4d5e6f \
  -H "Authorization: Bearer $WANDURA_API_KEY"
```

`id` là `id` lấy từ danh sách: không phải `slug`, không phải `order_code`.

## Response
`200 OK`. Trường mới có thể được thêm bất cứ lúc nào: hãy bỏ qua những trường bạn không nhận ra.

| Trường | Kiểu | Mô tả |
|---|---|---|
| `row` | object | Cùng hình dạng với một phần tử của `rows[]` ở cửa danh sách. |
| `collections` | mảng string | Mọi bộ sưu tập đã cấp có chứa video này. `row.collection` là cái đầu tiên. |
| `expires_at` | string (ISO 8601, UTC) |  |
| `refresh_before` | string (ISO 8601, UTC) |  |

## Ví dụ response
```json
{
  "row": {
    "id": "3f6c1a52-8d0e-4b7a-9c21-5e4f2a7b9d10",
    "slug": "dead-bug",
    "title": "Dead bug",
    "order_code": null,
    "collection": "abs-program",
    "position": 4,
    "duration_ms": 42000,
    "muscle_groups": ["core"],
    "equipment": [],
    "difficulty": "beginner",
    "kcal_est": null,
    "mp4": { "p480": "https://fit-playback.wandura.ai/…/480.mp4?auth_key=…", "p720": null }
  },
  "collections": ["abs-program"],
  "expires_at": "2026-10-02T13:00:00.000Z",
  "refresh_before": "2026-10-02T12:45:00.000Z"
}
```

## Header của response
| Header | Response | Mô tả |
|---|---|---|
| `Wandura-API-Status` | mọi response | Trạng thái API. Hiện là `beta`, ở mọi response, thành công hay lỗi. |
| `Wandura-Request-Id` | mọi response | Mã định danh mờ của request này (`req_` và 26 ký tự). Mọi response đều có, kể cả lỗi, và body lỗi lặp lại nó ở `request_id`. Hãy ghi log nó, và gửi kèm khi liên hệ Wandura về một request: nó tìm đúng request đó trong log của chúng tôi. Đừng phân tích chuỗi này. |
| `Cache-Control` | mọi response | Luôn là `no-store`. Đừng lưu các response này trong cache dùng chung. |
| `Wandura-Version` | 400, 401, 403, 404, 429, 500, 503 | Phiên bản API theo ngày (YYYY-MM-DD) mà response này dùng: bản ghim vào API key của bạn, hoặc bản bạn gửi trong header request `Wandura-Version`. Key tạo trước khi có phiên bản ngày dùng `2026-10-02`. |
| `Retry-After` | 429, 503 | Số giây cần chờ trước khi thử lại. Có ở response 429 và các response 503 nên thử lại. |
| `X-RateLimit-Limit` | 429 | Số request (với playback là số vé) được phép trong một cửa sổ cho nhóm endpoint này và tổ chức của bạn. |
| `X-RateLimit-Window` | 429 | Độ dài cửa sổ tính bằng giây. |

## Lỗi
| Status | `error_code` | Khi nào |
|---|---|---|
| 400 | không có | `id` trên đường dẫn không phải uuid. |
| 400 | `unsupported_version` | Header `Wandura-Version`, hoặc bản ghim của key, là bản lạ hay đã ngừng. Body có thêm `supported_versions` và `latest_version` (và `upgrade_to` khi bản ghim đã ngừng). |
| 401 | không có | Thiếu header `Authorization: Bearer`, hoặc key không tồn tại hay đã bị thu hồi. |
| 403 | không có | Key thiếu scope `videos:read`. |
| 403 | không có (`error` là `app_not_registered`) | Key chưa gắn với app nào. Đăng ký app ở trang Developers rồi dùng key của app đó. |
| 403 | không có (`error` là `org_suspended`) | Quyền truy cập của tổ chức bạn đang bị tạm ngưng. |
| 404 | không có (`error` là `video_not_found`) | Không tồn tại, chưa cấp, chưa publish, đã cất, hoặc chưa phát được. |
| 429 | `rate_limited` | Đã chạm rate limit của endpoint này. Trần này đếm riêng với cửa danh sách. |
| 500 | không có | Không đọc được video. Retry với backoff. |
| 503 | `service_unavailable` | Wandura chưa kiểm được API key kịp thời. Key không sai: thử lại sau số giây trong `Retry-After`, có backoff. |

Cách xử lý từng lỗi: [Lỗi](https://docs.wandura.ai/vi/developers/concepts/errors).
