콘텐츠 출처 확인

콘텐츠 출처 확인 (Content provenance)

Content Provenance API를 사용하면 이미지나 오디오 파일에 지원되는 OpenAI 출처 신호가 있는지 확인할 수 있어요. 파일을 POST /v1/content_provenance_checks로 보내면 같은 응답에서 완료된 검증 결과를 받아요. 콘텐츠 리뷰, 사실 확인, 라벨링, 신뢰·안전 워크플로우에서 이런 신호를 사용해요.

브라우저에서 파일을 확인하려면 openai.com/verify 웹 툴을 사용하세요.

요청 파라미터와 응답 스키마는 Content provenance API reference를 참고하세요.

not_detected 결과는 툴이 업로드된 파일에서 지원되는 신호를 찾지 못했음을 뜻해요. 하지만 메타데이터가 제거됐거나 변조 흔적이 있거나, 워터마크가 손상됐거나, 레거시 생성 모델에서 왔거나, 출처 신호가 제공되기 전에 생성된 경우 콘텐츠가 여전히 OpenAI로 생성됐을 수 있어요. 이 툴은 다른 회사 AI 모델이 생성한 콘텐츠는 현재 감지하지 않으므로, not_detected 결과가 그것도 배제하지는 않아요.

출처: 문서

본문

콘텐츠 출처 확인이 무엇을 검사하는지

콘텐츠 출처 확인은 지원되는 파일에서 다음 신호를 검사해요.

신호 적용 대상 검사 내용
C2PA Content Credentials 이미지 발급자와 AI 사용 세부 정보가 있는 서명된 메타데이터
SynthID 이미지와 오디오 지원되는 미디어에 직접 임베딩된 워터마크

C2PA 메타데이터는 파일의 출처에 대한 더 많은 컨텍스트를 제공해요. 파일을 편집, 변환, 공유하면 메타데이터가 제거될 수 있어요. SynthID 워터마크는 이미지나 오디오 자체의 일부이므로 일부 변환을 견딜 수 있어요.

API는 지원되는 OpenAI 신호를 검사해요. 범용 AI 감지기(detector)가 아니며 모든 AI 시스템이 생성한 콘텐츠를 식별하지는 않아요. 가시적인 워터마크와 라벨은 API가 검사하는 출처 신호와는 별개예요.

파일 검증하기

이미지 또는 오디오 파일을 file 필드로 OpenAI SDK와 함께 보내요. SDK가 multipart 요청을 구성하고 OPENAI_API_KEY 환경 변수에서 API 키를 읽어요.

from openai import OpenAI

client = OpenAI()

with open("./example.png", "rb") as image:
    result = client.content_provenance_checks.create(
        file=("example.png", image, "image/png"),
    )

print(result)
curl https://api.openai.com/v1/content_provenance_checks \
  -H "Authorization: Bearer ***" \
  -F "file=@./example.png;type=image/png"

JavaScript(client.contentProvenanceChecks.create), Go(client.ContentProvenanceChecks.New), Ruby(client.content_provenance_checks.create)에서도 각자 파일을 image/png 타입으로 넘겨요.

이 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 ***" \
  -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, rate limit 초과 요청은 429를 돌려줘요. rate limit이나 서버 오류 같은 일시적 실패만 재시도하세요. 일반 지침은 API error codes를 참고하세요.

검증 결과 이해하기

results의 각 적용 항목을 독립적으로 읽어요. 이미지 결과는 C2PA와 SynthID 항목을, 오디오 결과는 SynthID 항목을 포함해요. 응답에는 최상위 outcome이 없어요.

C2PA 결과

C2PA 결과는 이미지의 Content Credentials 상태를 설명해요.

{
  "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은 정보가 있을 때 콘텐츠 생성 시간을 식별해요.

outcome은 trusted 또는 valid 매니페스트가 OpenAI를 발급자로 식별하고 AI 생성 액션을 포함할 때만 detected예요. 타사 매니페스트, AI 생성 액션이 없는 매니페스트, invalid 매니페스트, not_present 매니페스트는 not_detected를 만들어요. outcome이 not_detected일 때도 issuer와 validation_state가 매니페스트를 설명할 수 있어요.

invalid 매니페스트를 신뢰할 수 있는 출처 증거로 취급하지 마세요. not_present 결과는 이미지에 사용 가능한 C2PA 매니페스트가 없다는 뜻이에요.

SynthID 결과

SynthID 결과는 검증기가 이미지나 오디오 파일에서 지원되는 워터마크를 감지했는지 설명해요.

{
  "type": "synthid",
  "outcome": "detected",
  "model": null,
  "generated_at": null
}

detected라는 결과는 파일에 인식된 워터마크가 있다는 뜻이에요. not_detected는 검증기가 그 워터마크를 감지하지 못했다는 뜻이에요. AI 생성 또는 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 옵션이 요청 콘텐츠 타입과 multipart 경계를 설정해요. 요청마다 파일 하나를 보내세요.

콘텐츠 출처 확인은 Zero Data Retention에 적합하지 않아요.

엄격한 rate limit이 API를 오용으로부터 보호해요. 조직은 더 높은 한도를 신청할 수 있고, OpenAI가 각 신청을 건별로 검토해요.

API가 429 rate_limit_exceeded를 반환하면 요청 속도를 낮추고 Retry-After 헤더가 있을 때 이를 따르세요. 일반 재시도 지침은 rate limits를 참고하세요.

검증 결과를 책임 있게 사용하기

검증 결과를 더 넓은 리뷰 과정의 증거로 사용해요.

  • detected를 특정 지원 신호의 증거로 취급하고, 파일의 완전한 이력으로 취급하지 마세요.
  • not_detected를 감지된 증거의 부재로 취급하고, 콘텐츠가 사람이 만들었거나 OpenAI로 생성되지 않았다는 증명으로 취급하지 마세요.
  • 이미지를 특정 제공자에 귀속시키기 전에 C2PA 발급자를 확인하세요.
  • 가능하면 원본 파일을 검증하세요. 압축, 크롭, 스크린샷, 메타데이터 제거, 형식 변환이 신호를 지우거나 약화시킬 수 있어요.
  • 출처 제품, 모델, 파일 형식, 생성 날짜를 고려하세요. 모든 OpenAI 생성 콘텐츠에 지원 신호가 들어 있는 건 아니에요.
  • 고위험 워크플로우에서는 자동 결정을 사람의 리뷰와 함께 사용하세요.
  • 반복 쿼리로 워터마크를 역염지니어링하거나, 제거하거나, 회피하지 마세요.
  • 검증 결과에서 프롬프트, 계정, 개별 창작자를 추론하지 마세요.

Content Provenance API 사용은 OpenAI 서비스 계약의 적용을 받아요.

플랫폼 차원의 모니터링과 보존 설정은 data controls를 참고하세요.

더 알아보기 (Learn more)