If you ship a product that calls the Claude API, something changed under you in August 2026. Text coming back from supported models carries an embedded watermark, applied at the model level, with no parameter to turn it off. Files Claude generates carry signed C2PA provenance metadata. Both travel through to your users.
Nothing in your integration breaks. No response shape changed, no new required field appeared, no latency hit worth measuring. What changed is the set of claims you can honestly make about your own output, and the set of obligations that now sit with you rather than with Anthropic.
This is the practical version for engineering teams: what’s actually different in the response, what you now own, and what to add to your test suite. Building those checks in Apidog keeps them running on every deploy instead of surfacing during a compliance review.
What changed in the response
Concretely: nothing you can see.
The watermark is woven into the generated text itself. It’s imperceptible, it doesn’t change the meaning or readability of the response, and there’s no marker byte, header, or field announcing it. Your JSON parsing is unaffected. Your token counts are unaffected. Your prompt caching is unaffected.
What that means in practice:
- You cannot detect it yourself. There’s no public reader for the text watermark yet. Anthropic has committed to supporting detection and says documentation is coming.
- You cannot remove it. Watermarking is applied at the model level, which means it’s present no matter which Claude product or surface the text comes from. There’s no
watermark: false, no enterprise tier, no header. - You cannot escape it by reselling. If your product wraps Claude, the text your API returns is marked text. That’s true whether you present it as your own assistant, a summarization endpoint, or a copy generator.
- It follows the model, not the region. Marking applies wherever Claude is offered, worldwide, not only to EU traffic. Geo-routing does not opt you out.
For files it’s different and more visible. When Claude generates a supported file type such as .svg, .png, or .jpg, it attaches a signed C2PA manifest. That manifest is real bytes in the file, and it’s the part your pipeline can destroy.
The mixed-fleet problem
The single most operationally annoying detail: marking is not uniform across models.
Claude models launched on or after August 2, 2026 support machine-readable marking at launch. Models launched before that date are covered by a transition period, and Anthropic is working to add marking support to them. So right now the answer to “is our output marked?” depends entirely on which model ID you’re calling.
If you route across model tiers for cost, which many teams do after reading something like how to cut your Claude API bill, your fleet is mixed by design. A request that falls back from a newer model to an older one changes the marking status of that response, silently.
Two things follow.
Track marking status as a property of the model. Put it next to your pricing and context-window metadata, in whatever config drives your routing. Not a global boolean.
{
"models": {
"claude-opus-5": { "marked": true, "since": "2026-08-02" },
"claude-sonnet-5": { "marked": false, "note": "pre-cutoff, retrofit pending" }
}
}
Assert on the model you actually got. The Messages API returns the resolved model in the response body. If your code assumes a model and never checks, a fallback or a silent alias change can move you between marked and unmarked output without a single log line. That’s a one-line assertion in any test suite and it belongs in yours.
What Anthropic owns and what you own
This is the part teams get wrong, and the wording in Anthropic’s own guidance is unambiguous: if you deploy Claude in your own product, you should independently assess what Article 50 requires of your products and services.
Being a customer of a compliant provider does not transfer compliance to you.
| Role | Who | Obligation |
|---|---|---|
| Provider of the GPAI model | Anthropic | Article 50(2): mark outputs in a machine-readable format, make them detectable |
| Deployer of an AI system | You, usually | Article 50(1) and 50(4): tell people they’re interacting with AI, disclose deepfakes and AI-generated public-interest text |
Anthropic marking its output satisfies Anthropic’s duty. It does not satisfy your duty to tell a user they’re talking to a machine, or to label AI-generated text you publish on a matter of public interest. Those are separate requirements with separate exposure, and Article 50 breaches carry fines up to €15 million or 3% of worldwide annual turnover, whichever is higher. The breakdown is in EU AI Act Article 50 for API developers.
There’s also a subtler point. If you resell or expose Claude output through your own API, your callers have their own obligations, and they can only meet them if you tell them what they’re getting. A downstream team consuming your /summarize endpoint has no way to know the response is model output unless your contract says so. That’s an API design problem, and it’s the argument in adding AI disclosure to your own API.
Where your pipeline can break provenance
Text watermarks are durable in a way metadata never is: they live in the words, so they survive being copied out of a JSON field and into a database, a template, and a web page. Your pipeline can’t accidentally strip them.
Files are the opposite. A C2PA manifest is a container-level attachment. Anything that rewrites the container drops it unless it explicitly preserves and re-signs. The usual offenders:
- Image resizing and thumbnailing. Sharp, ImageMagick, Pillow, and friends will produce a clean new file with no manifest by default.
- Format conversion. PNG to WebP, JPEG to AVIF. New container, no manifest.
- Image CDNs and automatic optimization. Many rewrite on the fly. Some now preserve and re-sign, most historically did not.
- Re-saving through an editor or a screenshot. Both destroy it completely.
- Object storage pipelines that normalize uploads. Easy to forget these exist.
If you receive a Claude-generated image and serve it to users, the manifest is almost certainly gone by the time it reaches a browser unless someone deliberately preserved it. That’s not a hypothetical failure; it’s the default outcome. Your API is stripping C2PA metadata walks through catching it with a round-trip test.
What to add to your test suite
Four checks cover most of the practical risk. All of them are ordinary API assertions.
1. Assert the resolved model. Every AI-backed endpoint should verify the model in the response matches what you intended, so a fallback can’t silently change your marking status.
// Post-response script
const body = JSON.parse(pm.response.text());
pm.test("resolved model is the pinned one", function () {
pm.expect(body.model).to.eql(pm.environment.get("EXPECTED_MODEL"));
});
2. Assert your own disclosure field is present. If your contract promises ai_generated or an X-AI-Generated header, test it on every path that returns model output. Include the cached path and the error path, which is where these fields usually go missing.
3. Round-trip an image and verify the manifest. Upload a signed fixture, fetch it back through your real delivery path, and assert the C2PA manifest is still valid. This is the one that catches resize and CDN regressions.
4. Validate against your OpenAPI spec. Schema conformance stops disclosure fields from disappearing in a refactor. If you’re already running spec validation, this costs nothing extra; see how to validate OpenAPI specs.
Group the four into a test scenario, then run the scenario from apidog-cli in your pipeline so a regression fails the build. If your suite already lives in GitHub Actions, the wiring is the same as in automating API tests in GitHub Actions. Download Apidog to build the scenario against your own endpoints.
What this does not change
Worth stating plainly, because the coverage has been dramatic.
It does not make Claude output traceable to your account or your users. The mark signals content may have been processed by Claude. It’s not a per-customer identifier.
It does not degrade quality. Anthropic says the watermark doesn’t change the meaning, quality, or readability of the response, and nothing in the response format is different.
It does not give you a plagiarism detector. A detected mark says Claude may have touched the content, including for a proofread or translation. Absence of a mark says nothing at all.
It does not require code changes to keep working. Your integration is fine. The work is in your model config, your disclosure contract, and your file pipeline.
FAQ
Can I disable watermarking on the Claude API? No. Text watermarking is applied at the model level, so it’s present regardless of which Claude product or surface produced the text. No request parameter, header, or plan removes it.
Does watermarking affect token usage or latency? No. The watermark is part of how text is generated, not an extra processing step, and the response format is unchanged.
Does it apply if I call Claude through Bedrock, Vertex, or Microsoft Foundry? Embedded text watermarks apply through AWS, Google Cloud, and Microsoft Foundry. Signed provenance metadata may not be supported on every platform, depending on the file-handling features each one offers.
My users are outside the EU. Does this affect me? The marks apply worldwide, so yes, your output is marked. Whether Article 50 applies to your business is a separate question that depends on whether you place your system on the EU market or its output is used in the EU.
Do I have to tell my users their content is AI-generated? Probably, if you’re in scope. That’s Article 50(1) and 50(4), and it lands on you as the deployer, not on Anthropic. It’s a legal assessment for your product, not a technical one.
How do I know if the model I’m calling is marked? Models launched on or after August 2, 2026 mark at launch. Earlier ones are being retrofitted. Track it per model ID in your routing config and assert the resolved model in your tests.
The takeaway
The engineering impact of Claude’s watermarking is small and specific: your fleet is mixed, so track marking per model and assert the model you actually got. Your file pipeline probably destroys C2PA manifests, so round-trip test it. Your callers can’t see any of this, so put disclosure in your contract.
The compliance impact is larger, and it’s the part that doesn’t show up in a diff. Anthropic marking its output is Anthropic’s obligation discharged. Yours is still open.



