Content Provenance API を使用すると、画像や音声ファイルに、
対応する OpenAI の来歴シグナルが含まれているかを確認できます。
POST /v1/content_provenance_checks にファイルを送信すると、
検証が完了した結果をそのレスポンスで受け取れます。これらのシグナルは、コンテンツレビュー、
ファクトチェック、ラベル付け、信頼性と安全性に関するワークフローで活用できます。
ブラウザでファイルを確認するには、 openai.com/verify のウェブツールを使用します。
リクエストパラメーターとレスポンススキーマについては、 コンテンツの来歴 API リファレンスを参照してください。
結果が not_detected の場合、アップロードされたファイルから、
対応するシグナルが見つからなかったことを意味します。メタデータが削除されていたり、
改ざんの形跡があったり、透かしが劣化していたりする場合でも、
そのコンテンツは OpenAI で生成された可能性があります。旧世代の生成モデルを使用した場合や、
来歴シグナルが利用可能になる前に作成された場合も同様です。このツールは現在、
他社の AI モデルが生成したコンテンツを検出しないため、結果が not_detected でも、
その可能性は否定できません。
コンテンツの来歴の確認対象
コンテンツの来歴チェックでは、対応するファイルに次のシグナルが含まれているかを確認します。
| シグナル | 適用対象 | 確認内容 |
|---|---|---|
| C2PA コンテンツ認証情報 | 画像 | 発行者と AI 利用の詳細を含む署名付きメタデータ |
| SynthID | 画像と音声 | 対応するメディアに直接埋め込まれた透かし |
C2PA メタデータは、ファイルの出所についてより詳しい情報を提供します。ファイルの編集、変換、共有によって、メタデータが削除されることがあります。SynthID の透かしは画像や音声そのものに組み込まれており、一部の加工後も残る場合があります。
この API は、対応する OpenAI のシグナルを確認します。汎用的な AI 検出ツールではなく、あらゆる AI システムが生成したコンテンツを識別できるわけではありません。目に見える透かしやラベルは、この API が確認する来歴シグナルとは別のものです。
ファイルの検証
OpenAI SDK を使用して、画像や音声ファイルを file フィールドで送信します。
SDK はマルチパートリクエストを構築し、
環境変数 OPENAI_API_KEY から API キーを読み取ります。
import { createReadStream } from "node:fs";
import OpenAI, { toStreamingFile } from "openai";
const client = new OpenAI();
const result = await client.contentProvenanceChecks.create({
file: toStreamingFile(createReadStream("myimage.png"), "myimage.png", {
type: "image/png",
}),
});
console.log(result);OpenAI SDK は、Python 2.52.0、Go 3.49.0、Ruby 0.75.0 以降を使用してください。
Opus 音声を検証するには、同じエンドポイントを使用し、
アップロードするファイルのメディアタイプを audio/ogg に設定します。
curl https://api.openai.com/v1/content_provenance_checks \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "file=@./example.opus;type=audio/ogg"
レスポンスには検証が完了した結果が含まれます。たとえば、画像の場合は次の結果が返されます。
{
"object": "content_provenance_check",
"created_at": 1778000000,
"results": [
{
"type": "c2pa",
"outcome": "detected",
"validation_state": "trusted",
"issuer": "OpenAI OpCo, LLC",
"model": "gpt-image",
"generated_at": "2026-07-27T18:34:12Z"
},
{
"type": "synthid",
"outcome": "not_detected",
"model": null,
"generated_at": null
}
]
}
object フィールドはレスポンスを識別し、created_at はチェックの作成時刻を
秒単位の Unix タイムスタンプで示します。results に含まれるエントリは、
アップロードされたファイルによって異なります。画像には C2PA と SynthID の結果が、
音声には SynthID の結果が含まれます。適用対象外のチェックは、
not_detected を返すのではなく、レスポンスから省略されます。
API は検証を完了してからレスポンスを返します。バックグラウンドジョブの作成、別のエンドポイントへのポーリング、Files API へのファイルのアップロードは不要です。
リクエストが失敗した場合は、HTTP ステータスと、取得できる場合は error.code を確認してください。
不正な形式、未対応、またはブロックされたファイルには 400 が返されます。
アクセス権のない組織には 404、レート制限を超えたリクエストには 429 が返されます。
再試行は、レート制限やサーバーエラーなどの一時的な失敗の場合に限ってください。
一般的なガイダンスについては、API エラーコードを参照してください。
検証結果の見方
results 内の適用対象となる各エントリは、個別に解釈してください。
画像の結果には C2PA と SynthID のエントリが、音声の結果には SynthID のエントリが含まれます。
レスポンスの最上位には outcome は含まれません。
C2PA の結果
C2PA の結果は、画像のコンテンツ認証情報の状態を示します。
{
"type": "c2pa",
"outcome": "detected",
"validation_state": "trusted",
"issuer": "OpenAI OpCo, LLC",
"model": "gpt-image",
"generated_at": "2026-07-27T18:34:12Z"
}
各フィールドの見方は次のとおりです。
outcomeは、OpenAI が発行した AI 生成の認証情報が検出されたかどうかを、detectedまたはnot_detectedで示します。validation_stateは、マニフェストの状態がtrusted、valid、invalid、not_presentのいずれであるかを示します。issuerは、情報がある場合にマニフェストの発行者を示します。modelは、情報がある場合に生成に使用されたモデルを示します。generated_atは、情報がある場合に コンテンツの生成時刻を示します。
結果が detected になるのは、trusted または valid のマニフェストが、
発行者を OpenAI と明示し、AI 生成アクションを含んでいる場合に限られます。
サードパーティのマニフェスト、AI 生成アクションを含まないマニフェスト、invalid のマニフェスト、
または not_present のマニフェストでは、結果は not_detected になります。issuer と
validation_state は、結果が not_detected であっても、
マニフェストに関する情報を示す場合があります。
invalid のマニフェストを、来歴を示す信頼できる証拠として扱わないでください。
結果が not_present の場合、その画像には利用可能な C2PA マニフェストがないことを意味します。
SynthID の結果
SynthID の結果は、検証ツールが画像や音声ファイルから対応する透かしを検出したかどうかを示します。
{
"type": "synthid",
"outcome": "detected",
"model": null,
"generated_at": null
}
結果が detected の場合、そのファイルには認識可能な透かしが含まれています。
結果が not_detected の場合、検証ツールはその透かしを検出しなかったことを意味します。
AI が生成または変更したコンテンツである可能性は否定できません。model と
generated_at は、情報がある場合に生成に使用されたモデルと生成時刻を示します。
どちらのフィールドも null になる場合があります。
対応形式と利用条件
API は次のファイル形式に対応しています。
- 画像: PNG、JPEG、WebP
- 音声: MP3、Opus、AAC、FLAC、WAV、PCM
アップロードするファイルは、それぞれ 50 MiB 以下にしてください。音声はデコード後の長さが 60 秒以下である必要があります。
アップロードする file パートのメディアタイプを設定します。たとえば、PNG 画像には image/png、
Opus 音声には audio/ogg を使用します。別途 type フィールドを追加したり、
multipart/form-data リクエストヘッダーを手動で設定したりしないでください。curl の -F オプションが、
リクエストのコンテンツタイプとマルチパート境界を設定します。リクエストごとにファイルを 1 つ送信してください。
コンテンツの来歴チェックは、 ゼロデータ保持の対象外です。
厳格なレート制限により、API の不正利用を防ぎます。 組織は上限の引き上げを申請でき、 OpenAI が申請ごとに個別に審査します。
API が 429 rate_limit_exceeded を返した場合は、リクエストの送信頻度を下げ、
Retry-After ヘッダーがある場合はその指定に従ってください。再試行に関する一般的なガイダンスは、
レート制限を参照してください。
検証結果の責任ある活用
検証結果は、より広範なレビュープロセスにおける証拠の一つとして活用してください。
detectedは、対応する特定のシグナルが存在する証拠として扱い、 ファイルの履歴全体を示すものとはみなさないでください。not_detectedは、証拠が検出されなかったことを意味するものとして扱ってください。 コンテンツを人間が作成したことや、OpenAI を使用して生成していないことの証明にはなりません。- 画像が特定のプロバイダーに由来すると判断する前に、C2PA の発行者を確認してください。
- 可能であれば、元のファイルを検証してください。圧縮、切り抜き、スクリーンショット、メタデータの削除、形式の変換によって、シグナルが消失したり弱まったりすることがあります。
- 作成元のプロダクト、モデル、ファイル形式、作成日を考慮してください。OpenAI で生成されたすべてのコンテンツに、対応するシグナルが含まれているわけではありません。
- 重大な影響を伴うワークフローでは、自動判定と人間によるレビューを組み合わせてください。
- クエリを繰り返して透かしのリバースエンジニアリング、除去、回避を試みないでください。
- 検証結果からプロンプト、アカウント、または個人の作成者を推測しないでください。
Content Provenance API の利用には、 OpenAI サービス契約が適用されます。
プラットフォーム全体のモニタリングとデータ保持の設定については、 データコントロールをご覧ください。