使用内容溯源 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 结果。API 会省略不适用的检查,而不是返回
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在相关信息可用时 标识内容的生成时间。
只有当状态为 trusted 或 valid 的清单将
OpenAI 标识为签发者,并包含 AI 生成操作时,结果才会是 detected。第三方
清单、不包含 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 选项
会设置请求的内容类型和多部分边界。每个请求发送一个文件。
内容溯源检查不适用 零数据保留。
严格的速率限制有助于防止 API 被滥用。组织可以 申请提高限制, OpenAI 会根据具体情况逐一审查申请。
如果 API 返回 429 rate_limit_exceeded,请降低请求速率,
并在响应包含 Retry-After 头时遵循其指示。有关通用的重试指导,请参阅
速率限制。
负责任地使用验证结果
将验证结果作为更全面审查流程中的证据:
- 将
detected视为存在某种受支持信号的证据,而不是文件的完整 历史记录。 - 将
not_detected理解为未检测到证据,而不是证明 内容由人类创作或并非使用 OpenAI 生成。 - 在认定图像来自某个特定提供商之前,请检查 C2PA 签发者。
- 尽可能验证原始文件。压缩、裁剪、截屏、移除元数据和转换格式都可能消除或削弱信号。
- 请考虑内容的来源产品、模型、文件格式和创建日期。并非所有由 OpenAI 生成的内容都包含受支持的信号。
- 在涉及重大影响的工作流中,应将自动化决策与人工审查相结合。
- 不要通过反复查询来对水印进行逆向工程、移除水印或规避水印。
- 请勿根据验证结果推断提示、账户或具体创作者。
使用内容溯源 API 须遵守 OpenAI 服务协议。
有关平台范围内的监控和保留设置的信息,请参阅 数据控制。