Developers & CMS Integration

Keep your provenance badge alive in any CMS.

Most CMS platforms and image CDNs strip C2PA metadata the moment they resize or convert an upload to WebP. Reconize's embeddable badge and Soft-Binding API recover the signer's record directly from the picture, audio, or video fingerprint, with zero file uploads.

Stripped 1080p JPEG verified live by the Reconize CMS badge
Live Demo

This JPEG has zero metadata.

The image on the left (resaved-1080.jpg) had all of its C2PA Content Credentials stripped when it was resized for web delivery.

The embedded badge.js script computes a short visual fingerprint and keypoints in your browser, queries relay.reconize.me/registry/v1/lookup, and displays the confirmed signer badge. Click the badge in the bottom-right corner of the photo to inspect the match.

1. Embeddable CMS Badge (badge.js)

Drop a single script tag into WordPress, Webflow, Ghost, Squarespace, Sanity, or any custom site. When a visitor views or clicks a badged image, video, or audio player, the widget computes the fingerprint locally in the browser and looks up the registered creator.

Option A: Badge specific images, audio, or video

Add data-reconize-badge to any <img>, <video>, <audio>, or <figure>. Add data-reconize-auto="true" to verify automatically as the element scrolls into view:

<script src="https://reconize.me/embed/badge.js" defer></script>

<img src="/uploads/portfolio-hero.webp"
     alt="Editorial portrait"
     data-reconize-badge
     data-reconize-auto="true">

Option B: Auto-badge every image inside CMS articles (WordPress / Ghost / Webflow)

Pass a CSS selector in data-selector on the script tag so you never have to edit individual blog posts or CMS templates:

<script src="https://reconize.me/embed/badge.js"
        data-selector="article img, .entry-content img, .gh-content img"
        data-auto="true"
        defer></script>

Option C: Instant ISCC lookup for headless CMS & DAM pipelines

If your DAM or CMS stores the file's ISCC Instance-Code at ingest time, pass it in data-reconize-iscc (base64). The badge resolves via the C2PA Soft Binding API in a single lightweight request without decoding image pixels:

<img src="https://cdn.example.com/photo.avif"
     data-reconize-badge
     data-reconize-auto="true"
     data-reconize-iscc="AA...">

2. Public Verification & C2PA Soft-Binding HTTP API

Platforms, DAMs, and automated pipelines can query the Reconize relay directly over HTTPS. CORS (Access-Control-Allow-Origin: *) is enabled on all read endpoints. Media files are never uploaded; callers send only a compact fingerprint, keypoint set, watermark payload, or signature hash.

EndpointMethodPurpose
/registry/v1/lookup POST Look up a stripped photo (fp + kp), audio clip (afp), or video (vfp / vkp). Returns { ok: true, state: "content", kind, leaf: { displayName, signedAt, mediaType } }.
/softbinding/v1/services/supportedAlgorithms GET C2PA Soft Binding API discovery. Lists me.reconize.videoseal.1, io.iscc.v0, and me.reconize.kp.1.
/softbinding/v1/matches/byBinding GET, POST C2PA Soft Binding Resolution API (Spec 2.2). Accepts { alg, value, kp?, vkp?, maxResults? } and returns matching registry records, creator declarations (did:web), and EU TDM / AI training reservation notices.
/log/v1/lookup?sig=<b64url> GET Transparency log inclusion proof for a signature, plus the earliest OpenTimestamps Bitcoin anchor covering the checkpoint.

Example: Querying the C2PA Soft-Binding API

curl -s https://relay.reconize.me/softbinding/v1/services/supportedAlgorithms

# Look up an ISCC Instance-Code or VideoSeal soft-binding payload:
curl -s -X POST https://relay.reconize.me/softbinding/v1/matches/byBinding \
  -H "Content-Type: application/json" \
  -d '{
    "alg": "io.iscc.v0",
    "value": "KACYP427..."
  }'

Example: Browser JS SDK Lookup (fingerprint.js)

Your web app or CMS upload form can import Reconize's browser fingerprinter directly to check contributor uploads before they enter your CMS:

import { pictureFingerprints, audioFingerprint, registryLookup } from 'https://reconize.me/verify/fingerprint.js';

async function verifyUploadedImage(file) {
  const fps = await pictureFingerprints(file);
  if (!fps.length) return { matched: false };
  const res = await registryLookup({ fp: fps[0], kp: fps.kp });
  return res.state === 'content' ? { matched: true, creator: res.leaf.displayName, signedAt: res.leaf.signedAt } : { matched: false };
}

3. Local Signing & Studio Pipelines (ReconizeSDK)

Reconize never accepts raw media uploads for signing on a remote server. Signing always happens on your hardware so confidential cuts, scripts, and masters never leave your machine: