Originally published on the Yir blog. I work on Yir, an image & video API router, so the last section describes our own product.
Anyone buying an image API through a reseller eventually asks: is this 4K image a native 4K render, or a 1K image that was upscaled? Is a result labeled GPT Image 2 API actually something ChatGPT made in the app?
Your eyes won't settle it. AI-upscaled images often look cleaner than the originals: noise smoothed away, edges very crisp. What does settle it is the C2PA signature inside the file.
What a C2PA signature is
Think of it as a certificate of origin for an AI image. When OpenAI, Google or ByteDance generate an image or video, they write a record into the file: who made it, which model, when, and whether it is AI-generated. The record is signed with the vendor's certificate, so nobody else can edit or forge it.
The signature is also bound to the file's content. If the file is upscaled, re-compressed or edited, the content no longer matches. So if the signature is there but the content doesn't match, someone touched the file after the vendor produced it.
C2PA is an open standard started by Adobe, Microsoft, Intel, the BBC and others, also known as Content Credentials. It is not EXIF: anyone can edit EXIF, while C2PA detects changes to either the content or the record.
Which AI vendors sign their output
| Vendor | Format | What you can learn |
|---|---|---|
| OpenAI GPT Image | PNG | API or ChatGPT app, time of generation; some files name the exact model |
| Google (Nano Banana, Veo and more) | Image / MP4 | Generated by Google and unchanged; does not distinguish API from the Gemini app |
| ByteDance Seedance | MP4 | Volcengine Ark or BytePlus, model name, time of generation |
| ByteDance Seedream | Image | Volcengine Ark or BytePlus, model name |
| Black Forest Labs FLUX | Image | Generated by BFL and unchanged; does not say API or the exact model |
| Recraft | Image | Generated by Recraft and unchanged (tested on V3) |
| Adobe | PNG | Adobe signs on a partner model's behalf and names it, such as GPT Image 2; not signed by OpenAI itself |
The table is based on original files we received in October 2026 and covers only the models we tested. Platforms such as fal and ElevenLabs also sign files, but that does not prove the underlying model; Grok signatures cannot be verified yet.
For checking channels, OpenAI's signature is the most useful because it records whether the image came from the API or from ChatGPT. Those are different goods: the API renders the size you requested, while the ChatGPT app decides size and quality itself, around 1.5 megapixels.
Google's signature only proves the pixels are Google's untouched output. It can't tell the API from the Gemini app, or Nano Banana 2 from Pro.
Check it yourself: Yir's C2PA Viewer
We built a free tool: C2PA Viewer. Drop in an image or video; the file is parsed in your browser and never uploaded.
Three fields are enough:
- Signer: OpenAI, Google, ByteDance, or a third party such as Adobe.
- Generated by: the API or an app like ChatGPT.
- Changed since: whether the content still matches the signature.
General credential viewers, including the official Content Credentials Verify, will tell you "issued by OpenAI, generated with AI", but they don't separate the API from ChatGPT, and an upscaled file just shows up as invalid. Those two points are exactly what you need when checking a channel.
There is one case where most tools just say "no credential" and ours looks one step further: the credential was wiped. A blank block of the same length sits where the credential used to be, and its length hints at who signed it. That is a useful clue, but with the signature gone the tool will not call the file an original.
Before you start:
- Use the original file. Download it from the API's result URL as-is. Don't re-save, screenshot or convert it. Chat apps and social platforms usually strip credentials.
- No credential doesn't mean fake. Many models never write one; it only means there's no evidence.
- One clean file doesn't make a clean channel. Channels often mix several sources, so sample more than once, over time.
Tested: APIMart and KIE
On October 7, 2026 we checked the original files APIMart and KIE delivered for each GPT Image tier, and spot-checked their Nano Banana and Seedream output; APIMart's GPT Image 2K/4K routes were retested on October 13. This is a snapshot. Sources change, and next month may look different.
APIMart
| Model · route · tier | What you get |
|---|---|
| GPT Image 2 · standard route · 2K/4K | API original or Adobe re-sign, native output (verified) |
| GPT Image 2 · official route · 2K/4K | API original |
| GPT Image 2.5 Flare · standard route · 4K | API original |
| GPT Image 2.5 · Ext route · 2K/4K | API original |
| Nano Banana 2 | Google's untouched output |
| Seedream 5.0 Pro | Vendor original |
Every APIMart file we checked was native output. The official route for GPT Image 2 returns API originals. The standard route mixes API originals with Adobe Firefly re-signs at the requested size; we grade those re-signs as native output (verified), not as vendor originals. Every Nano Banana and Seedream file was the vendor's untouched output.
KIE
| Model · tier | What you get |
|---|---|
| GPT Image 2 / 2.5 · 1K | Mostly untouched ChatGPT app output |
| GPT Image 2 · 2K/4K | API original; some files had the credential wiped, pixels untouched |
| GPT Image 2.5 · 2K/4K | Mostly credential wiped, pixels untouched |
| Nano Banana 2 | Google's untouched output |
None of the KIE files we tested were upscaled. 1K came from the ChatGPT app; 2K/4K were API originals, many with the credential wiped; the blank length and encoding show they started as API renders with untouched pixels. We have few GPT Image 2 text-to-image samples so far and will keep checking.
What this means
- What you get depends on the route and tier, not just the channel. The channel name alone tells you little.
- App renders at 1K are common. They're untouched, but the app decides size and quality, so they aren't the same as API output.
- A wiped credential isn't tampering. Untouched pixels and re-encoded files are different things.
Let Yir check for you
Spot checks find problems, but you can't run them on every call. Yir checks every delivery and attaches a grade to the result:
-
original: vendor API output -
app: vendor app output, unchanged -
equivalent: no valid signature, but evidence that nothing was upscaled or changed, such as a wiped credential with untouched pixels -
altered: upscaled or changed -
unverified: no evidence either way
Set a floor with routing.fidelity:
-
genuine(default): skips any route we've declared as upscaling or altering output, such as a route that delivers upscaled ChatGPT renders as 2K/4K. -
original: vendor originals only, for showcases and comparisons where you present the image as the model's own output. -
any: no filter. Upscaling channels are often cheaper, and that choice is yours.
{
"model": "openai/gpt-image-2",
"input": { "type": "text", "prompt": "..." },
"parameters": { "resolution": "2K", "aspect_ratio": "16:9" },
"routing": { "fidelity": "original" }
}
If no channel meets the floor, the request fails instead of quietly downgrading. When a channel's source changes, the checks on live deliveries surface it and the default genuine steers away from it; when a channel fails, Yir moves to the next available one. You are billed by the channel that actually ran the job.
fidelity lowers the odds of getting an upscaled image; it is not a guarantee. That's why each file's actual grade is in the result, so you can decide per image whether to use it.
FAQ
Can C2PA prove an image is AI-generated?
Only when the file carries a credential. It records what the vendor itself wrote about the file's origin. It doesn't judge the picture, and it doesn't read invisible watermarks like SynthID.
Is my file uploaded?
No. The C2PA Viewer parses files in your browser and sends them nowhere.
Why does my image show "no content credentials"?
Usually because it was re-saved, screenshotted, or passed through a chat app or social platform. Use the original file returned by the API.
How can I quickly tell whether a GPT Image 4K file was upscaled?
Check how it was generated and whether it changed since signing. Generated by ChatGPT plus a content mismatch almost always means an app render that was upscaled.
Is a ChatGPT app render a fake?
It isn't altered: the vendor signature is valid and the pixels are untouched. But the app decides size and quality, so it isn't the same product as an API render. On Yir it is graded app; genuine keeps it and original excludes it.
To check a file, open the C2PA Viewer. To compare channel prices, see the GPT Image 2 model page.


Top comments (0)