Content Provenance API を使うと、画像や音声ファイルに、この API が対応する OpenAI の来歴シグナルが含まれているかを確認できます。ファイルを POST /v1/content_provenance_checks に送信すると、そのリクエストへのレスポンスで検証結果を受け取れます。これらのシグナルは、コンテンツの審査、ファクトチェック、ラベル付け、信頼性と安全性を確保するための業務に活用できます。
ブラウザでファイルを確認するには、openai.com/verify の Web ツールを使用してください。
リクエストパラメータとレスポンスのスキーマについては、Content Provenance API リファレンスを参照してください。
テキストを検証するには、アクセスを申請してください。現在、テキストの検証を利用できるのは、AI 研究機関や学術機関など、承認を受けた組織に限られます。OpenAI が申請ごとに審査します。
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は、AI による生成を示す OpenAI 発行のクレデンシャルが検出されたかどうかを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、GIF
- 音声: MP3、Opus、AAC、FLAC、WAV、PCM
アップロードするファイルのサイズは 1 ファイルあたり 50 MiB 以下にしてください。音声の長さはデコード後に 60 秒以内である必要があります。
アップロードする file パートのメディアタイプを設定してください。GIF には image/gif、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 サービス契約が適用されます。
プラットフォーム全体のモニタリングとデータ保持の設定については、データ管理を参照してください。