Verify an OpenAI-Generated Image
This is the one provider whose watermark can be verified from a browser today. Google’s portal is waitlist-only. Anthropic’s is not shipped. Here is what the OpenAI check does and does not prove.
- Watermark type
- Pixel watermark + C2PA metadata
- Hidden characters
- No
- Official detector
- Available: Available Verifiable via OpenAI’s Verify tool and API
- DetectMark support
- DetectMark support: Available Reads C2PA locally; OpenAI check on consent
- Removal
- Partial: Partial Metadata only; pixel mark stays
What OpenAI checks
Every image from ChatGPT, the API and Codex has carried two marks since May 19, 2026: Google’s SynthID watermark in the pixels, and a C2PA Content Credentials manifest signed by OpenAI in the file. OpenAI’s Verify tool and Content Provenance API look for exactly those two things, using OpenAI’s own keys.
This page sends the file to that API on your say-so and shows the two answers as they come back, one row for SynthID and one for Content Credentials. It is the same check OpenAI runs for its own users, reached through DetectMark so you do not need an OpenAI account.
What happens when you click Verify
- The image is read in your browser. The offer names the file and states its size in exact bytes.
- Verify with OpenAI opens a dialog that repeats the file name, the byte count and the destination, api.openai.com. Cancel sends nothing.
- Confirm, and the original file goes to OpenAI through DetectMark’s relay. The relay adds the API key and forwards the bytes without storing them. The upload counter in the scanner header shows what was sent.
- Two rows come back with a Clean or Found badge and a note each, plus the time OpenAI ran the check.
Two rules do not bend. Nothing is ever sent automatically, and a cleaned copy is never sent. OpenAI’s terms forbid using the verifier to test a removal, and a verdict on a stripped file would be worthless anyway.
What a result proves
Found on the SynthID row means OpenAI’s pixel watermark is present, so the image came out of an OpenAI image model, edited since or not. Found on the Content Credentials row means an OpenAI-signed manifest is present and intact. A manifest issued by someone else is reported as not OpenAI-issued, and a broken one is reported as Unknown rather than dressed up as either answer.
What it does not prove
The check covers OpenAI-supported signals only: a not-detected result says nothing about other providers or about a file whose marks were stripped. A Gemini render, a Firefly export, a photograph and a heavily reworked OpenAI image all come back Clean on this page, for four different reasons that the check cannot tell apart. Clean here is the absence of one provider’s marks, not the presence of a human.
Formats follow the API: PNG, JPEG and WebP up to 50 MiB. Other formats are inspected locally where the browser can decode them and are never offered for verification.
The local scan, second on purpose
The browser-side scan still runs on every file: Content Credentials, EXIF, XMP, GPS and PNG text chunks, read in this tab and listed under the verification panel. On this page it is collapsed by default because the question this page answers is “did OpenAI make this”, and only OpenAI can answer it. For the file-level view first, use the AI image watermark detector; for what stays in a file no matter what you strip, read what DetectMark cannot remove.
FAQ
No. DetectMark holds the API key server-side and forwards only the file you confirmed. There is no login here and no account at OpenAI required.
The original image file, and nothing else, sent to api.openai.com only after you confirm a dialog that states the file name and the exact byte count. No text, no other files, no cleaned copies. The upload counter shows the bytes afterwards.
No. OpenAI’s verifier reads OpenAI’s SynthID and OpenAI-issued Content Credentials only. Gemini images need Google’s own verification surfaces, and the SynthID Detector page explains what is open to whom.
The Content Credentials are metadata and are usually gone after a screenshot or a social upload, so that row reads Clean with a no-manifest note. SynthID is in the pixels and is designed to survive screenshots, re-encoding, resizing and cropping, so that row can still read Found.
It is collapsed, not hidden. This page is for the one question a browser cannot answer alone, so the provider check comes first. Open the local scan to see the file’s Content Credentials, EXIF, XMP and PNG text chunks, all read in this tab.
Every check runs in your browser: how it works. The limits are written down too: what DetectMark cannot remove.