Claude watermark vs ChatGPT: only one marks your text

Both labs quoted Answer in the first paragraph Runs on your device

Only one of the two labs documents a text watermark. Anthropic's documentation for Claude describes a statistical watermark and states plainly that "nothing is added to the text and there are no hidden characters". OpenAI's documentation for ChatGPT describes no text watermark at all — so there is no ChatGPT side to this comparison, and the "hidden characters in ChatGPT text" you may have read about are ordinary invisible characters, which are a different layer entirely.

On images the two labs converge, then diverge again. Both attach C2PA content credentials to the images they produce. OpenAI goes further and also embeds Google's SynthID into the pixels of images generated through ChatGPT, Codex and the API. A cleaner can remove the credentials. It cannot reach either lab's statistical or pixel-level mark.

WHAT EACH LAB ACTUALLY MARKS Three layers. A cleaner reaches the blue one and nothing else. CLAUDE (ANTHROPIC) CHATGPT (OPENAI) text word choices statistical watermark documented, no characters added nothing documented no text watermark published image metadata file header C2PA content credentials removable by a cleaner C2PA content credentials removable by a cleaner image pixels the picture itself none documented no pixel watermark published SynthID watermark embedded in the pixels

The two labs, side by side

Every cell below comes from the two companies' own published material, not from a comparison someone wrote about them. Where a lab has published nothing, the cell says so rather than guessing.

 Claude (Anthropic)ChatGPT (OpenAI)
Text markDocumented: statistical, no characters addedNone documented
Text detectionAPI in private preview, vetted organisations onlyNo text equivalent published
Image provenanceC2PA content credential on images and filesC2PA content credentials since DALL·E 3 (2024)
Image pixel markNone documentedSynthID, through a Google partnership
Public checkerNoneImage verification tool, in preview

What Anthropic documents

Anthropic published its text watermarking documentation in August 2026 and describes a statistical mark: the model's word choices are nudged in a pattern that is invisible in any single sentence but measurable across hundreds. The key sentence for anyone comparing the two labs is this one, and it is worth quoting rather than paraphrasing:

"Nothing is added to the text and there are no hidden characters."

Detection is available through an API in private preview, offered to organisations that need to verify watermarking rather than to the public. There is no self-serve checker. Why no public tool can confirm it →

What OpenAI documents

OpenAI's content provenance material covers images and audio. In its May 2026 announcement it describes a multi-layered approach: C2PA conformance, SynthID watermarking for images, and a public verification tool. It states that it began adding Content Credentials to images generated by DALL·E 3 in 2024, later extending that to ImageGen and Sora, and that the SynthID layer starts with images generated through ChatGPT, Codex or the OpenAI API.

Two of its own sentences are the most useful part of this comparison, because they describe the exact boundary our tool lives on:

Nothing in that announcement describes a text watermark. That is the whole of the difference on the text side: one lab published a scheme for text, the other did not.

Where the "ChatGPT hidden characters" story comes from

People do find invisible characters in text that has passed through ChatGPT, and that part is real. What is not real is the conclusion that they are a watermark. Those characters are the ordinary character layer: zero-width spaces, zero-width joiners, directional marks, soft hyphens and stray byte-order marks. They arrive from web pages, PDFs, content-management templates, autocorrect and some chat interfaces — and they can be removed, because they are bytes.

The distinction matters because the two layers need different answers. Characters can be deleted. A statistical pattern cannot, because deleting it would mean changing which words the model chose. A tool that offers to "remove the ChatGPT watermark" by stripping characters is describing character cleanup, whether or not it knows that. Cleaning a whole folder of it →

Prove the difference on your own text

You do not have to take any of this on faith. The cleaner on this site is one file of plain JavaScript, and it reports what it did. Run it in Node against a sentence with the character layer pasted in:

node dev/claude_vs_chatgpt_check.js

Here is the complete output from this machine, unedited:

=== input ===
code points   : 84
UTF-8 bytes   : 102

=== per-character report ===
U+200B  before= 3  after= 0  removed
U+200C  before= 1  after= 0  removed
U+200D  before= 1  after= 0  removed
U+200E  before= 2  after= 0  removed
U+00AD  before= 2  after= 0  removed
U+FEFF  before= 1  after= 0  removed

=== result ===
found         : 10
removed       : 10
code points   : 84 -> 74
UTF-8 bytes   : 102 -> 74

cleaned text  : "The quarterly report is attached. Please review the figures before Friday."

=== the layer a cleaner cannot reach ===
word sequence unchanged : true
word count              : 11 -> 11
first 8 words           : The quarterly report is attached Please review the
matches the visible text: true

Read the last four lines again, because they are the argument. Ten invisible characters were found and all ten were removed. The word sequence did not change, the word count did not change, and the cleaned string is character-for-character identical to the sentence with nothing hidden in it. That is exactly why a cleaner cannot touch a statistical watermark: it does not rewrite your wording, so there is no watermark for it to disturb. A tool that claims to remove Claude's watermark has to be rewriting your text, which is a different act with a different cost.

What you can and cannot remove

LayerWhere it livesRemovable by a cleaner?
Invisible / zero-width charactersBytes in the stringYes
C2PA content credentialsMetadata on the fileYes
SynthID image watermarkPixels of the imageNo
Claude statistical watermarkWord choices of the modelNo

The two rows marked yes are the ones this site works on. The two rows marked no are not a limitation we are hiding — they are a property of where those marks are stored. A pixel watermark survives a metadata strip for the same reason a statistical watermark survives a character strip: neither one is metadata or characters. What the metadata strip does remove →

The honest limits

We cannot tell you whether a piece of text came from Claude, from ChatGPT, or from a person, and neither can any public tool. We cannot detect SynthID. We cannot detect a statistical watermark. What we can do is remove the two layers that are actually removable, and tell you clearly which layer any given check is looking at — which is the part this comparison is really about.

Quotations on this page are from Anthropic's and OpenAI's own published documentation. The command output is a real run on this machine, reproducible with the script named above. The two layers, explained in full →

Frequently asked questions

Does ChatGPT watermark text the same way Claude does?

No. Anthropic has published a text watermarking scheme for Claude and describes it as statistical. OpenAI has published nothing equivalent for text, so there is no ChatGPT text watermark to compare against. The two are not two versions of the same thing — one exists in the documentation and the other does not appear there at all.

Why do people say ChatGPT adds hidden characters to text?

Because people really do find invisible characters in text that has been through a chat interface, and it is a natural guess that they were put there on purpose as a mark. The characters are real; the explanation is not. Zero-width spaces, joiners, directional marks and soft hyphens are the ordinary character layer and arrive from many sources, including web pages and templates. They can be removed, and removing them does not remove anything a lab published.

Can I tell whether a piece of text came from Claude or ChatGPT?

Not from the file, and not with a public tool. Claude's watermark needs Anthropic's key to read, and there is no published ChatGPT text watermark to look for. AI detectors such as Turnitin and GPTZero return a score, but they read phrasing and statistics rather than a watermark, so their verdict is not evidence about which model produced a text. Cleaning invisible characters will not move their number either.

Does ChatGPT put content credentials on the images it generates?

Yes. OpenAI states that it began attaching Content Credentials to images generated by DALL·E 3 in 2024, later extending this to ImageGen and Sora, and that it has since become a C2PA Conforming Generator Product. These credentials are signed metadata attached to the file, which is why they are the part a cleaner can remove — and OpenAI says as much itself, noting that metadata can be stripped or broken by transformations.

Can a cleaner remove ChatGPT's image watermark?

It can remove one of the two layers. The C2PA credentials are metadata and come off with the rest of the file's metadata. The SynthID watermark is embedded in the image pixels rather than attached to the file, so stripping metadata does not touch it, and OpenAI describes watermarking as the layer that is more durable through transformations. Anyone promising to remove it by cleaning metadata is describing the first layer and calling it the second.

Does deleting invisible characters change how AI detectors score my text?

No. Detectors read the writing itself — phrasing patterns and statistical properties — not the presence of invisible bytes. So removing the character layer leaves their score where it was, in either direction. This is also the honest reason not to treat a character cleaner as a way past a detector: it operates on a different layer than the detector is measuring, which is why the two never meet.