# 動画高画質化 API

> プラットフォーム上の動画ファイル、またはアップロード済みファイルを 1080p、2K、4K に高画質化します。画面内テキストの強調と、最長 10 分の区間指定ができます。

## 動画高画質化 API

プラットフォームに保存済みの動画、またはアップロードしたファイルを送信し、1080p、2K、4K の高画質化結果を受け取ります。画面内テキストの強調はオンとオフを切り替えられます。動画全体、または最長 10 分の区間を処理できます。

## 対応する動画ソース

プラットフォームのファイル URL、または [アップロード API](https://wayin.ai/ja/api-docs/upload/) が返す `identity` を渡します。ローカルアップロードには **Starter** プラン以上が必要です。

### ワークフロー

1. 元動画と目標解像度を指定して高画質化タスクを**送信**する
2. `status` が `DONE` または `ERROR` になるまで結果を**ポーリング**する
3. `status` が `DONE` のとき `output_url` を読み取る

---

## エンドポイント

| メソッド | パス                                  | 説明                     |
| -------- | ------------------------------------- | ------------------------ |
| `POST`   | `/api/v2/video-enhancer`              | 高画質化タスクを送信する |
| `GET`    | `/api/v2/video-enhancer/results/{id}` | タスク結果を取得する     |

すべてのリクエストに次のヘッダーが必要です。

```http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
x-wayinvideo-api-version: v2
```

---

## 高画質化タスクを送信する

```http
POST https://wayinvideo-api.wayin.ai/api/v2/video-enhancer
```

### リクエストボディ

| パラメータ       | 型      | 必須 | デフォルト | 説明                                                                                                                          |
| ---------------- | ------- | ---- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `video_url`      | string  | はい | —          | プラットフォームのファイル URL、または [アップロード API](https://wayin.ai/ja/api-docs/upload/) が返す `identity`。                             |
| `target_res`     | string  | はい | —          | 出力解像度。指定できる値は `1080p`、`2k`、`4k`。                                                                              |
| `enable_text_hd` | boolean | いいえ | `true`   | 画面内テキストを強調するかどうか。省略した場合のデフォルトは `true`。                                                         |
| `start_ms`       | integer | いいえ | —        | 区間の開始位置（ミリ秒）。`start_ms` と `end_ms` をどちらも省略すると動画全体を処理します。10 分の上限は引き続き適用されます。どちらか一方だけを送ると拒否されます。 |
| `end_ms`         | integer | いいえ | —        | 区間の終了位置（ミリ秒）。`start_ms` より大きく、元動画の長さを超えてはいけません。                                         |

処理区間は 10 分以内です。課金はこの区間を秒単位で切り上げて計算します。料金は [料金・請求](https://wayin.ai/ja/api-docs/pricing/) を参照してください。

### リクエスト例

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/video-enhancer \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -d '{
    "video_url": "EF_up_06wguq1afbwg1",
    "target_res": "1080p",
    "enable_text_hd": true,
    "start_ms": 0,
    "end_ms": 8000
  }'
```

```python
import requests

requests.post(
    "https://wayinvideo-api.wayin.ai/api/v2/video-enhancer",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "x-wayinvideo-api-version": "v2",
    },
    json={
        "video_url": "EF_up_06wguq1afbwg1",
        "target_res": "1080p",
        "enable_text_hd": True,
        "start_ms": 0,
        "end_ms": 8000,
    },
)
```

```javascript
await fetch('https://wayinvideo-api.wayin.ai/api/v2/video-enhancer', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'x-wayinvideo-api-version': 'v2',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    video_url: 'EF_up_06wguq1afbwg1',
    target_res: '1080p',
    enable_text_hd: true,
    start_ms: 0,
    end_ms: 8000,
  }),
});
```

### レスポンス

送信直後のタスクは、通常 `PENDING`（待機中）または `IN_PROGRESS`（実行中）です。

```json
{
  "data": {
    "id": "proj_01HQ2X8J3K4L5M6N7O8P9Q0R",
    "status": "IN_PROGRESS"
  }
}
```

| フィールド   | 型     | 説明                                                                                  |
| ------------ | ------ | ------------------------------------------------------------------------------------- |
| `id`         | string | Project id。結果取得時にパスへ渡します。                                             |
| `status`     | string | `PENDING`（待機）、`IN_PROGRESS`（実行中）、`DONE`（完了）、`ERROR`（失敗）。        |
| `output_url` | string | 高画質化後の動画 URL。`status` が `DONE` のときだけ含まれます。                      |

---

## 高画質化結果を取得する

送信レスポンスの `id` で、`status` が `DONE` または `ERROR` になるまでポーリングします。`status` が `DONE` のとき `output_url` を読み取ります。

```http
GET https://wayinvideo-api.wayin.ai/api/v2/video-enhancer/results/{id}
```

### リクエスト例

```bash
curl -X GET https://wayinvideo-api.wayin.ai/api/v2/video-enhancer/results/proj_01HQ2X8J3K4L5M6N7O8P9Q0R \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2"
```

### レスポンス

```json
{
  "data": {
    "id": "proj_01HQ2X8J3K4L5M6N7O8P9Q0R",
    "status": "DONE",
    "output_url": "https://cdn.viralhub.ai/user/video_0_8000_1080p.mp4"
  }
}
```

フィールドは送信レスポンスと同じです。タスク完了時に `output_url` が含まれます。

---

## 料金

動画高画質化は、処理した区間の長さに対して **API ユニット**を消費します。秒単位で切り上げ、1 秒未満は 1 秒として計算します。

| 目標解像度 | API ユニット |
| ---------- | ------------ |
| 1080p      | 1 秒あたり 1 |
| 2K（`2k`） | 1 秒あたり 2 |
| 4K（`4k`） | 1 秒あたり 4 |

API ユニットが不足している場合、タスクは作成されず、ユニットも消費されません。詳しくは [料金・請求](https://wayin.ai/ja/api-docs/pricing/) と [ステータスコード](https://wayin.ai/ja/api-docs/status-codes/) を参照してください。

---

## エラー

失敗したリクエストは標準のステータスコードとレスポンス形式を使います。詳しくは [ステータスコード](https://wayin.ai/ja/api-docs/status-codes/) を参照してください。
