← back to gallery

Cred Route

AI image provenance signal registry plus a URL scanner that reads C2PA manifests and EXIF in seconds.

aic2pasynthidcontent-credentialsprovenancetrust-and-safetyai-image
Open product ↗

cred-route

Live AI media provenance signal registry (C2PA, SynthID, EXIF) with a public URL scanner. Paste a public image URL and see, in seconds, whether it carries detectable AI markers.

Live: holyai.me/cred-route

Why now

On May 19, 2026 OpenAI became C2PA-conformant and started embedding SynthID
watermarks in every image generated by ChatGPT, Codex, and the OpenAI API.
Kakao, ElevenLabs, and Nvidia joined the same day. Google Search and Chrome
announced native C2PA + SynthID detection. The Content Authenticity Initiative
now spans 100+ companies and Google DeepMind has watermarked over 100 billion
assets with SynthID.

For the three populations who care — content creators wondering whether their
image will be auto-flagged on Google or Meta, newsroom verification teams
triaging an inbound photo, and trust-and-safety engineers picking a library
for their upload pipeline — there is no single live index.

cred-route is that index, plus a public scanner.

What it does

What it does NOT do

Data sources

| Source | URL | Frequency |
|---|---|---|
| HN Algolia | https://hn.algolia.com/api/v1/search_by_date | every 30 min |
| GitHub repo search | https://api.github.com/search/repositories | every hour |
| GitHub org repos (c2pa-org, contentauth) | https://api.github.com/orgs/.../repos | every 6 hours |
| arxiv API | http://export.arxiv.org/api/query | every 2 hours |
| c2pa-org/conformance-public | GitHub Contents API + raw markdown | every 12 hours |
| Provider announcement pages | curated list (see fetchers/provider-pages.js) | every 6 hours |
| Scanner inputs | user-submitted URLs via POST /api/scan | on demand |

Every datum traces to one of these. No seed arrays of provider names with
hardcoded "supports yes/no" cells; no Math.random.

Stack

API

| Method | Path | Purpose |
|---|---|---|
| GET | /cred-route/health | liveness — { ok: true } |
| GET | /cred-route/api/summary | counts + last refresh per source |
| GET | /cred-route/api/generators | known generators |
| GET | /cred-route/api/platforms | verifier platforms |
| GET | /cred-route/api/tools | OSS tool catalogue |
| GET | /cred-route/api/events | news feed |
| GET | /cred-route/api/scans/recent | last 50 public scans |
| GET | /cred-route/api/scan/:id | one scan |
| POST | /cred-route/api/scan | scan an image URL, JSON body { url } |
| POST | /cred-route/api/refresh/:source | manual refresh trigger |
| GET | /cred-route/api/provider-pages | provider page hashes |
| GET | /cred-route/api/fetch-log | refresh history |

Setup

cp .env.example .env
npm install
npm start
# http://127.0.0.1:4854/cred-route/

ENABLE_CRON=false npm start skips the background scheduler.

License

MIT.