Skip to main content
Planned integration guide. The current sandbox verifies test receipt IDs, signed test receipts and exact SHA-256 digests. Manifest, file, URL, fingerprint and watermark verification are not available. Start with the runnable quickstart and sandbox support matrix.
A distribution platform hosts content that others made: a social network, an ad network, a stock library, a streaming service. When an upload shows or sounds like a real person, verification tells you whether a license covers it, for which channels and territories, and whether that use is still permitted today in the target protocol. Current sandbox verification requires a test key and supports only test receipts or exact digests; it does not establish rights over real content.

Verify by manifest first

Licensed outputs carry a receipt in their C2PA manifest, as the ai.reflections.license assertion. Extract the manifest store with your C2PA library and send it as base64 in manifest. The file stays on your side.
manifest.signer is the platform that signed the C2PA claim. The receipt inside is signed by Reflections, so it verifies whoever signed the manifest.

Then by file

Editors and social apps often strip metadata, so an upload with no manifest may still have a receipt. Verify the file itself. Reflections matches its exact digest first and then its fingerprint, so a re-encoded or resized copy still matches.
A fingerprint match returns method: "fingerprint" with match.exact: false and a match.confidence of high or medium. Treat medium as a lead to review, not as proof.

Read the result

Check that your use is covered

A receipt covers one use, in permitted_use. Content licensed for social media is not licensed for a billboard. Before you place it, check that:
  • permitted_use.channels includes where you will show it, such as social, streaming or out_of_home;
  • permitted_use.territories includes where it will be shown, or is WW;
  • permitted_use.ends_at has not passed;
  • use_status is permitted.
Show the disclosure obligation’s text with the content when the receipt carries one. assurance says what the receipt rests on: observed means Reflections checked the bytes, attested means it recorded what the platform stated, such as text sent withheld.

Act on the live status

A receipt stays valid evidence that the output was licensed when it was made. Whether it may be used now is use_status, which changes when a talent revokes or a license window ends. Read it again with GET /v1/receipts/{receipt_id} on a schedule for content you keep up, such as daily, and always before a new placement.
use_status_changed_at says when it changed. A file uploaded again after ceased is a new placement.

Verify offline

The receipt is a compact JWS with typ tlp-receipt+jwt, signed with keys published at https://app.reflections.ai/.well-known/jwks.json. It has no exp. You can verify receipt.jws, or the receipt inside the C2PA assertion, without calling Reflections, and compare tlp.artifact_sha256 with the file’s SHA-256. Offline verification proves the receipt is genuine. Only the live receipt says what use is permitted today. See Receipt.

Keys and limits

Verification works without a key at 10 requests per minute per IP, which suits a person checking a file. To verify uploads at volume, create an account and send your key; your account’s rate limits then apply. Receipts from test mode verify only with a test key.

What can go wrong

Verifying content

Verification by receipt, manifest or file.

Provenance

Receipts, C2PA manifests and fingerprints.

Revocation

What revocation stops, what it leaves, and how fast.

C2PA assertion

The ai.reflections.license assertion.