Explainer · 6 min read
Does ChatGPT watermark its text?
No. OpenAI built the technology and decided not to deploy it. But its images are marked, and that part you can check yourself in about five seconds.
Short answer
No watermark in the text. Yes, marks on the images.
The text: built, then shelved
OpenAI developed a text watermarking method and, by its own account, chose not to release it. The reported reasons were practical rather than philosophical: the mark was not robust enough to survive determined paraphrasing, there was a serious risk of false positives, and there was concern that users would simply move to competitors who did not mark their output.
Whatever you make of that decision, the consequence is straightforward. There is no ChatGPT text watermark to find, because there is no ChatGPT text watermark. A tool advertising that it detects one is describing something that does not exist.
Then why do people keep finding hidden characters?
This is the most interesting confusion in the whole subject, and it has a specific origin.
Users noticed that output from GPT-4o sometimes contained a narrow no-break space — codepoint U+202F — sitting where an ordinary space should be. It is invisible in normal rendering, it survives copy-paste, and it looked for all the world like a deliberate fingerprint. A wave of “ChatGPT watermark detector” tools appeared to hunt for exactly this.
OpenAI's position is that these are artefacts of how the model was trained rather than an intentional mark. That explanation fits the evidence: the characters appear inconsistently, they vary between models, and a deliberate watermark built this way would be trivially defeated by anyone who ran a find-and-replace.
Why finding U+202F proves nothing
Narrow no-break spaces are not an AI invention. They are ordinary typography, used correctly in French punctuation, in scientific units, and by any number of word processors and typesetting systems. Text that has been through Word, InDesign, a CMS, a PDF export, or a translation tool can pick them up.
So the character's presence tells you the text passed through some piece of software. It does not tell you which one, and it certainly does not tell you a human did not write the sentences. Building an accusation on that is how innocent people get flagged.
The images are genuinely different
Here is where OpenAI does mark its output, and where you have real evidence to work with. Images from ChatGPT, Codex, and the OpenAI API carry two things:
- C2PA content credentials — a cryptographically signed manifest recording what produced the file. This is verifiable, it is not probabilistic, and this site reads it in your browser.
- SynthID — Google DeepMind's watermark, embedded in the pixels themselves. Nobody outside Google's gated detector can read it. More on that here.
The pairing is deliberate and quite clever. The credential is strong evidence but fragile — a screenshot destroys it. The pixel watermark is weaker evidence but tougher, surviving transformations that strip metadata. Together they cover each other's failure modes.
The catch with image credentials
Fragile means fragile. If someone screenshots an AI-generated image, or a platform re-encodes it on upload, the C2PA credential is gone and the file becomes indistinguishable from any other image as far as provenance goes.
This is why “no credentials” is never evidence of anything. You can watch it happen to your own files with the platform survival test — put an image through a resize, a recompression, and a screenshot, and watch every signal vanish in order.
Practical summary
- ChatGPT text: no watermark exists. Nothing to detect, nothing to remove.
- Hidden characters in that text: real, sometimes present, and meaningless as evidence of authorship.
- OpenAI images: C2PA credentials you can verify today, plus SynthID you cannot.
- Absence of any of it: expected, ordinary, and not suspicious.
Check an image or some text
If you have an OpenAI image with its credentials intact, the audit will show you the signature and the declared origin. If you have text, the checker will show you every invisible character in it.