# 動画ノート API

> カスタムプロンプト、タイムスタンプ、長さの指定、動画フレームの追加に対応した、構造化 AI ノートを動画から生成します。

## 動画ノート API

動画 URL またはアップロード済みファイルを送信して、要約情報と、必要に応じて構造化された AI ノートを生成します。ノートの指示、出力言語、希望する長さ、タイムスタンプ、元動画の関連フレームを含めるかどうかをカスタマイズできます。

各レスポンスには、構造化された概要、ハッシュタグ、タイムラインハイライトが含まれます。AI ノート生成を有効にした場合は、Markdown 形式とプレーンテキスト形式のノートも含まれます。有効にしなかった場合、レスポンスには要約関連の情報のみが含まれます。

## 対応動画ソース

YouTube、Vimeo、Dailymotion、Kick、Twitch、TikTok、Facebook、Zoom、Rumble などの動画 URL に対応しています。

[アップロードしたローカル動画ファイル](https://wayin.ai/ja/api-docs/upload/)も処理できます。ローカルアップロードには **Starter** プラン以上が必要です。

### ワークフロー

1. 動画 URL またはアップロード済みファイルの識別子を使って、動画ノートタスクを**送信**します
2. `status` が `SUCCEEDED` になるまで結果エンドポイントを**ポーリング**します

---

## 動画ノートタスクの送信

AI ノート生成の有無を指定してタスクを作成します。AI ノートを生成する場合は `note_params` を含め、要約、ハッシュタグ、タイムラインハイライトのみが必要な場合は省略します。

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

### リクエストボディ

| パラメータ    | 型     | 必須   | デフォルト | 説明                                                                                                                                                |
| ------------- | ------ | ------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `video_url`   | string | はい   | —          | ソース動画の URL またはアップロード済みファイルの識別子                                                                                             |
| `source_lang` | string | いいえ | `null`     | 動画のソース言語（[対応言語](https://wayin.ai/ja/api-docs/supported-languages/)を参照）。`null` の場合、元の言語を自動検出します。                                     |
| `target_lang` | string | いいえ | `null`     | 生成される要約とハイライトの対象言語（[対応言語](https://wayin.ai/ja/api-docs/supported-languages/)を参照）。`null` の場合、出力言語は検出されたソース言語に従います。 |
| `note_params` | object | いいえ | `null`     | AI ノート生成の設定。このオブジェクトを省略すると、AI ノートは生成されません。                                                                      |

### ノートパラメータ

| パラメータ        | 型      | 必須                               | デフォルト | 説明                                        |
| ----------------- | ------- | ---------------------------------- | ---------- | ------------------------------------------- |
| `enable_note`     | boolean | `note_params` を指定する場合は必須 | —          | AI ノートを生成するには `true` に設定します |
| `generate_params` | object  | `note_params` を指定する場合は必須 | —          | AI ノート生成の設定                         |

### ノート生成パラメータ

| パラメータ          | 型      | 必須   | デフォルト | 説明                                                                                                                    |
| ------------------- | ------- | ------ | ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| `prompt`            | string  | はい   | —          | 希望するノートの構成、内容、重点項目を指定する指示                                                                      |
| `language`          | string  | いいえ | `null`     | AI ノートのみに適用される出力言語。要約やハイライトには影響しません（[対応言語](https://wayin.ai/ja/api-docs/supported-languages/)を参照） |
| `length_option`     | string  | はい   | —          | 希望するノートの長さ：`short`、`medium`、`long`                                                                         |
| `include_timestamp` | boolean | はい   | —          | 関連するセクションや要点に元動画のタイムスタンプを追加し、動画内の該当箇所を見つけやすくするかどうか                    |
| `image_visual`      | boolean | いいえ | `false`    | 元動画から抽出した関連フレームを含めるかどうか                                                                          |

### リクエスト例

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/notes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -d '{
    "video_url": "https://www.youtube.com/watch?v=EXAMPLE",
    "source_lang": "en",
    "target_lang": "en",
    "note_params": {
      "enable_note": true,
      "generate_params": {
        "prompt": "Organize the main ideas and action items",
        "language": "en",
        "length_option": "medium",
        "include_timestamp": true,
        "image_visual": false
      }
    }
  }'
```

```python
import requests

requests.post(
    "https://wayinvideo-api.wayin.ai/api/v2/notes",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "x-wayinvideo-api-version": "v2",
    },
    json={
        "video_url": "https://www.youtube.com/watch?v=EXAMPLE",
        "target_lang": "en",
        "note_params": {
            "enable_note": True,
            "generate_params": {
                "prompt": "Organize the main ideas and action items",
                "language": "en",
                "length_option": "medium",
                "include_timestamp": True,
            },
        },
    },
)
```

```javascript
await fetch('https://wayinvideo-api.wayin.ai/api/v2/notes', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'x-wayinvideo-api-version': 'v2',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    video_url: 'https://www.youtube.com/watch?v=EXAMPLE',
    target_lang: 'en',
    note_params: {
      enable_note: true,
      generate_params: {
        prompt: 'Organize the main ideas and action items',
        language: 'en',
        length_option: 'medium',
        include_timestamp: true,
      },
    },
  }),
});
```

### 送信レスポンス

```json
{
  "data": {
    "id": "note_proj_001",
    "name": "sample project name",
    "status": "CREATED"
  }
}
```

| フィールド | 型     | 説明                                                                |
| ---------- | ------ | ------------------------------------------------------------------- |
| `id`       | string | 結果の取得に使用するタスク識別子                                    |
| `name`     | string | ソース動画から生成されたタスク名                                    |
| `status`   | string | タスクの初期ステータス。受理されたタスクでは `CREATED` が返されます |

---

## 使用例

以下は、動画ノートの一般的なユースケースです。`YOUR_API_KEY` は [API ダッシュボード](https://wayin.ai/wayinvideo/api-dashboard)で取得したキーに置き換えてください。

### タイムスタンプ付きの簡潔なノートを生成する

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/notes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://www.youtube.com/watch?v=EXAMPLE",
    "note_params": {
      "enable_note": true,
      "generate_params": {
        "prompt": "Create concise notes covering the main ideas",
        "length_option": "short",
        "include_timestamp": true
      }
    }
  }'
```

### アクション重視の会議ノートを生成する

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/notes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "UPLOADED_FILE_ID",
    "note_params": {
      "enable_note": true,
      "generate_params": {
        "prompt": "Create meeting notes with decisions, owners, and action items",
        "length_option": "medium",
        "include_timestamp": true
      }
    }
  }'
```

### AI ノートを生成せずに動画を処理する

`note_params` を省略すると、ノートデータを含めずに要約、ハッシュタグ、タイムラインハイライトが返されます。

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/notes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://www.youtube.com/watch?v=EXAMPLE",
    "target_lang": "en"
  }'
```

---

## 動画ノート結果の取得

タスクを送信した後、`status` が `SUCCEEDED` になるまでこのエンドポイントをポーリングします。成功時のレスポンスには要約情報が含まれ、リクエストした場合は生成された AI ノートも含まれます。

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

### パスパラメータ

| パラメータ | 型     | 必須 | 説明                                    |
| ---------- | ------ | ---- | --------------------------------------- |
| `id`       | string | はい | 送信エンドポイントから返されたタスク ID |

### 結果リクエスト

```bash
curl -X GET https://wayinvideo-api.wayin.ai/api/v2/notes/results/note_proj_001 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2"
```

```python
import requests

requests.get(
    "https://wayinvideo-api.wayin.ai/api/v2/notes/results/note_proj_001",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "x-wayinvideo-api-version": "v2",
    },
)
```

```javascript
await fetch(
  'https://wayinvideo-api.wayin.ai/api/v2/notes/results/note_proj_001',
  {
    method: 'GET',
    headers: {
      Authorization: 'Bearer YOUR_API_KEY',
      'x-wayinvideo-api-version': 'v2',
    },
  }
);
```

### 成功レスポンス例

```json
{
  "data": {
    "summary_id": "vdsmr_001",
    "status": "SUCCEEDED",
    "title": "sample title",
    "video_thumbnail": "https://cdn.example.com/thumb/video_001.jpg",
    "summary": "sample summary text",
    "note_data": "# Main Ideas\n\n- **00:45** First key point\n- **03:20** Second key point",
    "note_text": "Main Ideas\n\n00:45 First key point\n03:20 Second key point",
    "tags": ["#topic1", "#topic2"],
    "highlights": [
      {
        "start": 0,
        "end": 196000,
        "desc": "sample section title",
        "events": [
          {
            "timestamp": 45000,
            "desc": "sample event description"
          }
        ]
      }
    ],
    "cost_usage": 54.0
  }
}
```

### レスポンスフィールド

| フィールド        | 型       | 説明                                                                                                             |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
| `summary_id`      | string   | 生成された要約の識別子                                                                                           |
| `status`          | string   | タスクのステータス：`CREATED`、`QUEUED`、`ONGOING`、`SUCCEEDED`、`FAILED`                                        |
| `error_message`   | string   | エラーの理由。`status` が `FAILED` の場合のみ含まれます                                                          |
| `title`           | string   | AI が生成したタイトル                                                                                            |
| `video_thumbnail` | string   | ソース動画のサムネイル URL                                                                                       |
| `summary`         | string   | 動画の構造化された概要                                                                                           |
| `note_data`       | string   | Markdown 構造を保持した AI ノート。Markdown のレンダリングに適しています。リクエストしていない場合は省略されます |
| `note_text`       | string   | Markdown 構文を除去した AI ノートのプレーンテキスト版。リクエストしていない場合は省略されます                    |
| `tags`            | string[] | AI が生成したハッシュタグ                                                                                        |
| `highlights`      | array    | タイムスタンプと主要イベントを含むタイムラインセクション                                                         |
| `cost_usage`      | number   | タスクで消費した API ユニット数                                                                                  |

### ハイライトオブジェクト

| フィールド | 型     | 説明                           |
| ---------- | ------ | ------------------------------ |
| `start`    | number | 開始時刻（ミリ秒）             |
| `end`      | number | 終了時刻（ミリ秒）             |
| `desc`     | string | セクションのタイトルまたは説明 |
| `events`   | array  | ハイライト内の主要イベント     |

### イベントオブジェクト

| フィールド  | 型     | 説明                   |
| ----------- | ------ | ---------------------- |
| `timestamp` | number | イベント時刻（ミリ秒） |
| `desc`      | string | イベントの説明         |

---

## FAQ

### 動画ノートと動画要約の違いは何ですか？

[動画要約 API](https://wayin.ai/ja/api-docs/video-summarization/) は、概要、ハッシュタグ、タイムラインハイライトを生成します。動画ノート API は同じ要約情報を返すほか、Markdown とプレーンテキスト形式でカスタマイズ可能なノートを追加生成できます。

### AI ノートの生成は必須ですか？

いいえ。AI ノートなしで要約情報を返すには `note_params` を省略します。ノートを生成するには `note_params` を指定し、`enable_note` を `true` に設定して、`generate_params.prompt` を含めます。

### `note_data` と `note_text` の違いは何ですか？

`note_data` は、見出し、リスト、強調などをレンダリングできるよう、生成された Markdown 構造を保持します。`note_text` は同じノートから Markdown 構文を除去したもので、検索インデックス、埋め込み、プレビュー、プレーンテキスト保存に適しています。

### ノートの形式を指定できますか？

はい。`generate_params.prompt` で指示を指定し、`language` でノートの言語、`length_option` で希望する長さ、`include_timestamp` でタイムスタンプ、`image_visual` で関連動画フレームを含めるかどうかを設定できます。

### どの動画ソースに対応していますか？

YouTube、Vimeo、Dailymotion、Kick、Twitch、TikTok、Facebook、Zoom、Rumble などの URL に加え、[アップロード API](https://wayin.ai/ja/api-docs/upload/)によるローカルファイルのアップロードに対応しています。
