# Tải file cuối của một creative

Chuyển hướng tới link tải video cuối của một creative đã duyệt thuộc tổ chức của bạn. Dùng endpoint này để tự động lấy file khi bản ghi của creative báo `final.ready` là `true`.

```
GET /api/delivery/v1/creatives/{id}/file
```

**Scope:** `creatives:export`

## Mô tả
Tải cùng file với `final.file_url` của bản ghi, nhưng bằng API key thay cho link chia sẻ công khai: dùng khi bạn không muốn dựa vào link chia sẻ. URL `https://www.wandura.ai/api/delivery/v1/creatives/{id}/file` không hết hạn. Gọi bằng API key của bạn; nó trả `302` kèm link tải trong `Location`, dùng được 15 phút. File là bản cuối sạch, có brand mark của công ty bạn nếu tổ chức bạn có: MP4, 1080 × 1920.

- Link tải không cần key và không được cache. Đừng lưu link này: gọi lại endpoint để lấy link mới.
- Phần lớn HTTP client tự đi theo chuyển hướng và bỏ header `Authorization` trên đường đi, không sao.
- Thêm `redirect=0` để nhận link và hạn dùng dạng JSON thay vì chuyển hướng.
- Creative không tồn tại, thuộc tổ chức khác, hoặc không ở status `approved` hay `pushed` đều trả cùng một `404`. Creative đã duyệt mà bản cuối chưa sẵn sàng trả `409`. Khi quyền xuất của bạn với phim đã hết, endpoint trả `403` với `code` `4032`.
- Mỗi lần gọi đều được ghi nhật ký theo API key của bạn và dùng chung bộ đếm rate limit với các endpoint creatives khác.

## 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 `creatives:export`. |
| `id` | path | string | Có | `creative_id` của creative. Giá trị không phải UUID sẽ trả 404. |
| `redirect` | query | string | Không | `0` trả link tải dạng JSON (200) thay vì chuyển hướng. |
| `Wandura-Version` | header | string | Không | Tuỳ chọn. Một phiên bản API theo ngày (YYYY-MM-DD) dùng cho request này thay cho bản ghim vào API key của bạn. Giá trị lạ hoặc đã ngừng trả 400 với `error_code` `unsupported_version`. |

## Ví dụ request
```bash
curl -sL -o final.mp4 https://www.wandura.ai/api/delivery/v1/creatives/5e1b7c3a-2d4f-4a6b-9c8d-0e1f2a3b4c5d/file \
  -H "Authorization: Bearer $WANDURA_API_KEY"
```

## Response
`302 Found`: link tải nằm trong header `Location`. Body rỗng.

`200 OK` (chỉ khi có `redirect=0`):

| Trường | Kiểu | Mô tả |
|---|---|---|
| `code` | integer | `0`. |
| `message` | string | `"ok"`. |
| `data.url` | string | Link tải file MP4 cuối. Không cần key. Đừng lưu link này. |
| `data.expires_at` | integer | Lúc `url` hết hiệu lực, tính bằng giây Unix epoch (15 phút sau lần gọi). |
| `server_time` | integer | Giờ server tính bằng giây Unix epoch. |

## Ví dụ response
```json
{
  "code": 0,
  "message": "ok",
  "data": { "url": "https://media.example.com/final.mp4?signature=7f3a9c", "expires_at": 1790679932 },
  "server_time": 1790679032
}
```

## 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-Version` | mọi response | 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`. |
| `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. |
| `Location` | 302 | Link tải file MP4 cuối. Không cần key. Đừng lưu link này. |
| `Retry-After` | 429 | 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 | `code` | Khi nào |
|---|---|---|
| 400 | không có | 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 | 4010 | Thiếu header `Authorization: Bearer`. |
| 401 | 4011 | Key không tồn tại hoặc đã bị thu hồi. |
| 403 | 4030 | Key thiếu scope `creatives:export`. |
| 403 | 4031 | Quyền truy cập của tổ chức bạn đang bị tạm ngưng. |
| 403 | 4032 | `rights_ended`: tổ chức của bạn không còn quyền xuất với phim của creative này (`rights.ends_at` đã qua, hoặc giấy phép bị tạm ngưng). |
| 404 | 4040 | Không có creative đã duyệt nào với ID này cho tổ chức của bạn, hoặc ID không phải UUID. |
| 409 | 4090 | `final_not_ready`: file cuối đang được tạo. Thử lại khi `final.ready` của bản ghi là `true`. |
| 429 | không có | Đã chạm rate limit. Body phẳng với `error_code` `rate_limited`, không phải envelope. |
| 503 | 5030 | Dữ liệu creative tạm thời không khả dụng. Retry với backoff. |
| 503 | 5031 | Wandura chưa kiểm được API key kịp thời. Key không sai: retry với backoff. |
| 503 | 5032 | Chưa chuẩn bị được link tải lúc này. Retry với backoff. |

Xem [Lỗi](https://docs.wandura.ai/vi/developers/concepts/errors#creative-file-errors) để biết cách xử lý từng trường hợp.
