Tài liệu tham chiếu API
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ở, 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
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
{
"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.
Cập nhật 02/10/2026 · Lịch sử thay đổi (2)