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.
Verify by manifest first
Licensed outputs carry a receipt in their C2PA manifest, as theai.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.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, inpermitted_use. Content licensed for social media is not licensed
for a billboard. Before you place it, check that:
permitted_use.channelsincludes where you will show it, such associal,streamingorout_of_home;permitted_use.territoriesincludes where it will be shown, or isWW;permitted_use.ends_athas not passed;use_statusispermitted.
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 isuse_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 withtyp 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
Related
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.