# コンテンツ権利

> Nodaro が動画リンクをインポートする前に、本人がコンテンツ権利の宣言を確認します。宣言を読み取り、リンクごとに確認するか、キーとエージェントを一度だけ承認します。

Source: https://nodaro.ai/ja/docs/developers/api/content-rights

**コンテンツ権利**とは、Nodaro が誰かの動画、画像、録音へのリンクをインポートする前に、本人が確認する宣言です。本人は、コンテンツの権利を持っているか権利者の許可を得ていること、そしてその使い方に責任を負うことを確認します。Nodaro は、すべての確認を記録します。誰が、どのリンクについて、どの文面を、いつ、どこから確認したか、そしてその確認のもとで行われたダウンロードです。

## 確認が必要なインポート
リンクを取得するすべてのルートが、同じチェックを行います。

- 動画のインポート、`POST /v1/download-video`。
- オーディオのインポート、`POST /v1/youtube-audio` と `POST /v1/extract-youtube-audio`。
- 画像と録音のインポート、`POST /v1/media/import-url` と `POST /v1/media/import-recording`。
- 動画のページへのリンクが渡されたときの `POST /v1/trim-audio`。
- 実行自身による[**動画 URL**](https://nodaro.ai/docs/nodes/automate/video-url)ノードの取得。動画とその音声の両方です。
- 動画のページへのリンクが渡された文字起こしと Suno カバー。`POST /v1/transcribe`（その `audioUrl`）、`POST /v1/suno/cover` と `POST /v1/suno/upload-extend`（その `uploadUrl`）、および MCP のオーディオツールです。
- リンクが渡された吹き替え。`sourceUrl` を指定した `POST /v1/dubbing` と、リンクが渡された実行の吹き替えノードです。

これらのルートは、確認を `confirmationId` として受け取ります。自分のデバイスからアップロードしたファイルはリンクのインポートではないため、確認は不要です。

**文字起こしと Suno。** 動画のページへのリンクは先に音声が取得されるため、ルートは同じ方法で確認を受け取ります。確認はジョブが作成される前にチェックされます。拒否は、理由を示すコードとともに `403` になり、何も課金されません。ジョブは、音声を取得する直前に確認を使います。ファイルへの直接リンクには確認は不要です。リンクのホストがプラットフォーム自身のホストのいずれかである場合、そのリンクは動画のページです。プラットフォームの名前を含むだけのホストは、通常のファイルとして扱われます。

**吹き替え。** `POST /v1/dubbing` は `sourceUrl` を吹き替えサービスに渡し、サービスがそれを自分で取得します。これは、動画のページでもファイルへの直接リンクでも、リンクのインポートです。デプロイ環境自身のストレージのファイルではないすべての `sourceUrl` は、`confirmationId` を受け取ります。確認は、長さのチェックも含め、リンクに何かが触れる前に読み取られます。拒否は、ジョブが作成される前の `403` になります。`audioUrl` や `videoUrl` は、ほかのノードと同じメディアの入力なので、確認は不要です。

**そのまま拒否されるリンク。** これらのルートは、バックスラッシュ、またはタブや改行などの制御文字を含むリンクを、何かが読み取る前に `400 validation_error` で拒否します。実際のリンクに、これらが含まれることはありません。

確認のないインポートを拒否するかどうかは、デプロイ環境の設定です。設定がオフの間は、インポートは受け付けられます。オンになると、インポートは `403 rights_confirmation_required` を返します。設定が変わってもクライアントが動き続けるように、毎回確認を送ってください。

## ルート
| メソッド | パス | 動作 |
| --- | --- | --- |
| `GET` | `/v1/content-rights/declaration` | 現在の宣言を返します：`{ data: { version, text } }`。公開されているため、クライアントは誰もサインインしていないうちに表示できます。 |
| `POST` | `/v1/content-rights/confirm` | サインインしているアカウントが、1 件のリンクについて宣言を確認したことを記録します。ボディ：`{ url, declarationVersion }`。`201 { data: { id, declarationVersion, expiresAt } }` を返します。インポートが受け取る `http(s)` のリンクであれば、どれでも確認できます。動画のページ、ファイル、画像、または吹き替えサービスが読み取るページです。バックスラッシュや制御文字を含むリンクは `400` になります。 |
| `GET` | `/v1/content-rights/authorization` | アカウントの継続的な承認を返します：`{ data: { id, declarationVersion, createdAt } }`。承認がない場合は `{ data: null }` です。 |
| `POST` | `/v1/content-rights/authorization` | 現在の宣言について、継続的な承認を記録します。ボディ：`{ declarationVersion }`。`201 { data: { id, declarationVersion, createdAt } }` を返します。本人がサインインしている自分のセッションからのみ呼び出せます。 |
| `DELETE` | `/v1/content-rights/authorization` | 継続的な承認を取り消します。記録は残ります。`{ data: { revoked } }` を返します。本人がサインインしている自分のセッションからのみ呼び出せます。 |

`POST /v1/content-rights/confirm` と `POST /v1/content-rights/authorization` は、クライアントが宣言を読み取った後に宣言が変わった場合、`409 rights_confirmation_stale` を返します。宣言をもう一度読み取り、本人にもう一度確認を求めてください。

## リンクを確認してからインポートする
### 宣言を読み取る
`GET /v1/content-rights/declaration` を呼び出します。その `text` をそのまま、最初はチェックの入っていないチェックボックスとともに表示します。

### リンクを確認する
本人がチェックを入れたら、リンクと宣言の `version` を指定して `POST /v1/content-rights/confirm` を呼び出します。

### リンクをインポートする
返された `id` を、インポートの `confirmationId` として送ります。たとえば `POST /v1/download-video` に送ります。

**curl**

```bash
VERSION=$(curl -s https://app.nodaro.ai/v1/content-rights/declaration | jq -r .data.version)

CONFIRMATION=$(curl -s -X POST https://app.nodaro.ai/v1/content-rights/confirm \
  -H "Authorization: Bearer $NODARO_API_KEY" -H 'Content-Type: application/json' \
  -d "{ \"url\": \"https://example.com/watch/VIDEO_ID\", \"declarationVersion\": $VERSION }" | jq -r .data.id)

curl -s -X POST https://app.nodaro.ai/v1/download-video \
  -H "Authorization: Bearer $NODARO_API_KEY" -H 'Content-Type: application/json' \
  -d "{ \"url\": \"https://example.com/watch/VIDEO_ID\", \"confirmationId\": \"$CONFIRMATION\" }"
```

**TypeScript SDK**

```ts
const { version, text } = await client.contentRights.declaration()
// Show `text` with a checkbox. Once it is ticked:
const { id } = await client.contentRights.confirm({ url, declarationVersion: version })
const { downloadId } = await client.media.downloadVideo({ url, maxHeight: 1080, confirmationId: id })
```

1 件の確認で開けるのは、そのリンクのダウンロード 1 回です。ダウンロードは、同じアカウントが、現在の宣言のもとで、1 時間以内に行う必要があります。リンクは正規化した後で比較されます。クエリパラメーターだけが違う同じ動画は一致し、別の動画が一致することはありません。その後、ダウンロードは保存されたファイルに確認を付けて持ち運びます。

確認は、ほかの理由でインポートが拒否されるより前にチェックされ、ダウンロードが始まる直前にだけ使用済みになります。`429 too_many_downloads` や拒否されたアドレスで、確認が使われてしまうことはありません。拒否されたインポートが取得を始めることはありません。

## API キー、接続済みアプリ、AI エージェントによるインポート
個人の API キー、接続済みアプリ、または MCP 経由の AI エージェントが行うインポートには、リンクごとにチェックを入れる人がいません。本人は、サインインしている自分のセッションで、それらのインポートを一度だけ承認します。

- アプリでは、**設定**の**API キー、接続済みアプリ、AI エージェントによる取り込み**で、チェックを入れて**承認する**をクリックします。**取り消す**で承認が終わります。
- コードからは、本人の自分のセッションから `POST /v1/content-rights/authorization` を呼び出します。キー、アプリ、エージェントがこのルートを呼び出すと、`403 forbidden` で拒否されます。

継続的な承認があると、アカウントのキー、アプリ、エージェントによるインポートのすべてが、その承認から作られた確認として、ダウンロードごとに 1 件ずつ記録されます。インポートは `confirmationId` なしで通ります。送った `confirmationId` がある場合は、それが先に使われます。キー、アプリ、エージェントが開始した実行は、その実行が行うすべてのインポートに、同じ承認を適用します。

承認には、それが与えられた宣言のバージョンが記録されます。新しい宣言には、新しいチェックが必要なのと同じく、新しい承認が必要です。それまでは、アカウントは未承認として扱われます。

接続済みアプリがインポートと確認を行えるのは、アカウントのために書き込めるスコープ、つまり `:write` または `:execute` のいずれかのスコープがある場合だけです。読み取りのスコープしかないアプリは、コンテンツ権利のチェックより前に `403 insufficient_scope` で拒否されます。

デプロイ環境が確認を必須としている間、確認も継続的な承認もないキー、アプリ、エージェントによるインポートは、`403 rights_authorization_required` で拒否されます。解決するには、本人が設定で承認します。スケジュール実行や Webhook による実行のように、入り口がまったくない実行は、どの承認の対象にもならず、チェックを入れなかった人と同じように拒否されます。

## 実行の中の動画 URL ノード
実行自身による[**動画 URL**](https://nodaro.ai/docs/nodes/automate/video-url)ノードの取得は、確認を実行のリクエストから受け取ります。`POST /v1/workflows/:id/run` または `POST /v1/app/:slug/run` で、`inputOverrides` のノードに `rightsConfirmationId` を設定します。

```json
{
"inputOverrides": {
"<video url node id>": { "youtubeUrl": "https://example.com/watch/VIDEO_ID", "rightsConfirmationId": "<confirmation id>" }
}
}
```

リンクが渡された実行の吹き替えノードも、ジョブが作成される前に同じように確認されます。確認は、実行のリクエストの `inputOverrides` で吹き替えノードに設定した `rightsConfirmationId` から、またはキーやエージェントを通じて開始した実行では、アカウントの継続的な承認から得られます。繰り返されるノードは、反復のたびに同じ 1 件のリンクを吹き替えます。そのすべてが、その実行のための 1 件の確認のもとで行われます。

確認は、その同じリンクについて、その実行のために行ったものでなければなりません。これは実行だけのフィールドです。確認は 1 時間以内の 1 回のダウンロードにしか使えないため、ノードに保存された確認は、実行がワークフローを読み取る前に取り除かれます。`inputOverrides` で別のリンクを設定すると、古いリンクの確認は、そのリンクのほかのフィールドと一緒に取り除かれます。

## エディターで
エディターでリンクを取得するノードには、どれもリンクの下にコンテンツ権利のチェックボックスが表示され、そのリンクについてチェックが入るのを待ちます。

- **吹き替え。** **ソースのリンク**の下のチェックボックスにチェックが入るまで、実行は止まります。実行のたびに、リンクをもう一度確認します。リクエストが、チェックを入れたリンクの代わりに別のリンクを設定する実行は始まりません。フリーズした吹き替えノードは実行されないため、確認を求めません。公開したアプリの実行には、吹き替えノード自身のリンクのチェックボックスがありません。サブワークフローの中の吹き替えノードにもありません。そのため、設定がオンの場合は、どちらも拒否されます。[吹き替え](https://nodaro.ai/docs/nodes/audio/dubbing#content-rights)を参照してください。
- **文字起こしと Suno カバー。** どちらも、動画がある場所へのリンクを[**動画 URL**](https://nodaro.ai/docs/nodes/automate/video-url)ノード経由で受け取ります。そのノードが宣言の確認を求めて音声を取得し、実行はそのトラックを読み取ります。これらのノードにそのようなリンクが直接渡された場合、つまり自身のリンクのフィールドに入力された場合や、**テキスト**ノードから Suno カバーのリンクにマッピングされた場合、エディターでの実行は何かが始まる前に止まります。メッセージはノードの名前を示し、代わりに動画 URL ノードを接続するよう案内します。実行中に作られた値、**Suno アップロードして延長**に書き込まれたリンク、API やエージェントからのリクエストについては、サーバーが判断します。
- **音楽生成とリファレンスオーディオ。** どちらも、エディターでリンクの音声を取得します。音楽生成は**取得**をクリックしたときに、[**リファレンスオーディオ**](https://nodaro.ai/docs/nodes/audio/reference-audio)はチェックボックスにチェックを入れた時点で、そして**オーディオを抽出**をクリックしたときに再び取得します。取得のたびに、`POST /v1/youtube-audio` または `POST /v1/extract-youtube-audio` の `confirmationId` で、その 1 回の取得について宣言を確認します。実行や公開したアプリは保存されたファイルを読み取り、これらのリンクを取得することはありません。
- **リンクから追加する画像。** [**画像アップロード**](https://nodaro.ai/docs/nodes/image/upload-image)と、公開したアプリの画像の入力は、貼り付けた画像のリンクを `POST /v1/media/import-url` でストレージにコピーします。コピーは、そのリンクについてチェックが入るのを待ちます。エディターでは、チェックを入れるとコピーが始まります。アプリのページでは、**設定**がチェックを待ちます。1 回のチェックで 1 回のコピーができるので、次のリンクでは再び確認を求められます。コピーが `403` で拒否したリンクは追加されません。到達できない、大きすぎるなど、ほかの理由でコピーできないリンクは、通知とともにそのまま追加されます。

宣言が変わったことをページが検出すると、1 つのノードのチェックボックスだけでなく、ページ上のすべてのチェックボックスのチェックが外れます。どのチェックボックスも、古い文面のもとでチェックされたものだからです。アップロードしたファイルには、チェックボックスは不要です。

## エラー
確認が当てはまらない場合、インポートは次のいずれかのコードとともに `403` を返します。何も取得されていません。

| コード | 意味 |
| --- | --- |
| `rights_confirmation_required` | デプロイ環境が確認を必須としていますが、確認が送られていません。 |
| `rights_authorization_required` | デプロイ環境が確認を必須としており、インポートが API キー、接続済みアプリ、または AI エージェントを通じて行われましたが、アカウントに継続的な承認がありません。 |
| `rights_confirmation_not_found` | その ID の確認はありません。 |
| `rights_confirmation_mismatch` | 確認が、別のリンクまたは別のアカウントのものです。 |
| `rights_confirmation_stale` | 確認の後に宣言が変わりました。もう一度読み、もう一度確認してください。 |
| `rights_confirmation_expired` | 確認から 1 時間を超えています。 |
| `rights_confirmation_used` | その確認で、すでにインポートが行われました。取得が始まった後に失敗したインポートも数えられます。 |
| `imports_blocked` | デプロイ環境の繰り返し侵害者ポリシーにより、アカウントでリンクのインポートがブロックされているか、アカウントが閉鎖されています。メッセージには、いつまでかが示されます。UTC の日付、または管理者がブロックを解除するまでです。[繰り返し侵害者](#repeat-infringers)を参照してください。 |
| `import_source_disabled` | デプロイ環境が、リンク先のサイトからのインポートを許可していません。メッセージはサイトの名前を示しません。 |

`rights_confirmation_*` コードの場合は、どれもリンクをもう一度確認し、新しい ID を送ってください。TypeScript SDK では、これらの拒否は [`ImportRefusedError`](https://nodaro.ai/docs/developers/sdk/errors#importrefusederror) として届きます。

## 制限されたコンテンツ
申し立てを受けて、Nodaro は保存されたファイルやジョブの結果を制限することがあります。制限されたファイルは、所有者を含むすべての呼び出し元にとって、存在しないものとして扱われます。ライブラリ、すべての一覧、ギャラリー、すべての共有から外れます。

- `GET /v1/download?url=` と `GET /v1/image-proxy?url=` は、制限されたファイルのアドレスに対して、コード `content_restricted` とともに `451` を返します。
- 制限されたファイルを入力に指定したリクエストは、`422 job_blocked` で拒否されます。それを読み取るワークフローのノードは、`content_restricted` で失敗します。
- 申し立ての証拠として保全されているファイルは、削除できません。`DELETE /v1/library/:id` は、「This file cannot be deleted right now.」（このファイルは現在削除できません）というメッセージとともに `409 content_held` を返します。複数のファイルを削除するリクエストでは、そのファイルは飛ばされます。

著作権の申し立てによる制限があなたのコンテンツに課された場合、Nodaro はそのことをメールでお知らせすることがあります。メールには、制限されたファイル、そのインポート元のリンク、理由、申し立ての参照番号、異議申し立て通知を送れるページが記載されます。申し立てを送り、メールアドレスを確認した人は、申し立ての状況と決定についての最新情報を受け取ることがあります。これらのメールは、すべて Nodaro の担当者が送ります。自動的に送られるものはありません。

あなたの権利を侵害していると思われるコンテンツを報告するには、`app.nodaro.ai/copyright-complaints` の申し立てフォームを使ってください。アプリでは、サインインページ、サイドバー、アカウントメニューからこのフォームにリンクしています。すべての申し立ては、担当者が対応します。

## 異議申し立て通知
著作権侵害の通知を受けてコンテンツが制限された場合は、17 U.S.C. § 512(g)(3) に基づく**異議申し立て通知**で対応できます。アプリで**設定 › コンテンツの制限**を開いてください。このページには、申し立てによってあなた自身のコンテンツに課された制限が一覧表示されます。制限された内容とその日時、申し立ての参照番号、申し立ての種類です。申し立てた人が誰かは表示されません。設定ページには、そのような制限がある場合にだけ、このページへの入口が表示されます。

異議申し立て通知は、1 件の制限に対するものです。送れるのは、著作権の申し立てによって課され、まだ有効で、その申し立てが未解決の制限に対してだけです。通知には次の内容を含めます。

- あなたの氏名、住所、電話番号、メールアドレス。
- 制限された内容と、それが以前あった場所。これらはアプリが英語で自動的に入力します。
- 署名。氏名を入力したものが署名になります。
- 宣言。一字一句そのまま表示され、各文をそれぞれ確認します。あなたは偽証罪の制裁のもとで、その素材が誤りまたは誤認によって削除または無効化されたと誠実に信じていることを表明します。また、該当する米国連邦地方裁判所の管轄に同意し、申し立てた人からの訴状の送達を受け入れることにも同意します。

送信する前に、法律で求められているとおり、あなたの氏名、住所、電話番号、メールアドレスが申し立てた人に送られることがページに表示されます。通知は、アプリにサインインしたあなた自身が送ります。API キー、接続済みアプリ、AI エージェントからの送信は `403 in_app_only` で拒否されます。あなたの情報は暗号化して保存され、送信した内容が後から変わることはありません。

**コンテンツを復元できる時期。** 法律では、異議申し立て通知の受領から 10 営業日以上 14 営業日以内に復元できるとされています。Nodaro は、この規定のどの解釈でも一致する日を使います。期間は、米国の連邦祝日を数えずに、受領から 11 営業日目に始まります。最終日は、すべての平日を数えて 14 営業日目です。日付はニューヨークの暦日で、受領日の翌営業日が 1 日目です。たとえば、2026 年 11 月 23 日（月）に受領した異議申し立て通知は、2026 年 12 月 9 日（水）から 2026 年 12 月 11 日（金）までに復元できます。開始日の計算では、11 月 26 日の感謝祭が数えられないためです。

**その後の流れ。** すべての異議申し立て通知は、Nodaro の担当者が対応します。

- 通知は申し立てた人に送られます。自動的に送られるものはありません。
- 申し立てた人が訴訟の提起を報告した場合、その訴訟が終わるまでコンテンツは制限されたままです。
- 有効でない異議申し立て通知（たとえば、法律が求める要素が欠けているもの）は、理由を示したうえで却下されます。理由はあなたに表示されます。コンテンツは制限されたままです。
- それ以外の場合、期間が始まるとコンテンツは復元されます。ただし、同じコンテンツに別の制限や別の未解決の申し立てがある場合は除きます。

## 繰り返し侵害者
申し立てがあっただけでは、侵害にはなりません。Nodaro が申し立てを正当と判断すると、アカウントに**侵害**を記録します。侵害は取り下げられることがあります。たとえば、異議が認められた場合や、異議申し立て通知の後にコンテンツが復元された場合です。取り下げられた侵害は、もう数えられません。

繰り返し侵害者ポリシーは、一定の期間内にアカウントに残っている侵害の件数ごとに、**措置**を定めます。デフォルトのポリシーは次のとおりです。

| 直近 24 か月以内に残っている侵害 | 措置 |
| --- | --- |
| 1 | 警告 |
| 2 | リンクのインポートを 30 日間ブロック |
| 3 | アカウントの閉鎖 |

デプロイ環境は、期間と段階を変更できます。段階として、アカウントを一定の日数停止することもできます。措置が自動的に取られることはありません。一つひとつ、担当者が決定します。

- **警告**は記録であり、制限ではありません。ポリシーの期間内にある間、あなたに表示されます。
- **リンクのインポートのブロック**は、その段階の日数の間、または解除されるまで、アカウントによるリンクのインポートをすべて `403 imports_blocked` で拒否します。自分のデバイスからアップロードしたファイルはインポートではないため、拒否されません。
- **アカウントの停止**は、終了するまでサインインとすべてのリクエストを `403 access_blocked` で拒否します。その間、スケジュールされた実行と公開されたアプリも止まります。停止には必ず終了日があります。
- **アカウントの閉鎖**は、サインインと、インポートを含むすべてのリクエストをブロックします。

ダウンロードが始まる直前に、アカウントはもう一度確認されます。ダウンロードが順番を待っている間に課されたブロックでも、そのダウンロードは拒否されます。また、ブロックが解除されると、すぐに反映されます。

**表示される内容。** **設定 › コンテンツの制限**には、アカウントに課されている措置、あなたに伝えられた内容、その期限が表示されます。また、ポリシーの期間内に記録された警告と侵害が、それぞれの案件の参照番号とともに、期間の長さと一緒に表示されます。アカウントが停止されている間、所有者はサインインできないため、アプリはブロックされたアカウントの場合と同じように応答します。

## よくある質問

### コンテンツ権利の宣言とは何ですか？

リンクをインポートする人が確認する短い文章です。その人がコンテンツの権利を持っているか権利者の許可を得ていること、そしてその使い方に責任を負うことを示します。GET /v1/content-rights/declaration が、現在の文面とそのバージョンを返します。

### 確認付きで動画リンクをインポートするには、どうすればよいですか？

宣言を読み取り、その文面を、最初はチェックの入っていないチェックボックスとともに表示します。チェックが入ったら、そのリンクで POST /v1/content-rights/confirm を呼び出します。返された id を、POST /v1/download-video の confirmationId として送ってください。

### 確認はどのくらいの間有効ですか？

1 件の確認で開けるのは、同じアカウントによる、現在の宣言のもとでの、1 時間以内のそのリンクのダウンロード 1 回です。新しいインポートのたびに、もう一度確認してください。

### API キーや AI エージェントは、どのようにリンクをインポートしますか？

本人が、サインインしている自分のセッションで、設定から、または POST /v1/content-rights/authorization で、それらのインポートを一度だけ承認します。その後は、本人の API キー、接続済みアプリ、AI エージェントによるインポートのすべてが、その承認から作られた確認として記録されます。

### 現在、すべてのインポートで確認が必要ですか？

デプロイ環境が決めます。その設定がオフの間は、確認のないインポートも受け付けられます。オンになると、インポートは 403 rights_confirmation_required で拒否されます。設定が変わってもクライアントが動き続けるように、毎回確認を送ってください。

### 著作権侵害の通知を受けてコンテンツが制限された場合、どうすればよいですか？

アプリで「設定 › コンテンツの制限」を開き、その制限に対する異議申し立て通知を送ってください。有効な通知を送り、申し立てた人が訴訟の提起を報告しなかった場合、Nodaro が通知を受け取ってから 10〜14 営業日後に、コンテンツを復元できます。
