The image provenance API for developers
Check whether an image carries AI-generation and provenance signals in one synchronous API call — normalized C2PA, SynthID, and OpenAI provenance, backed by prepaid credits and durable request history.
Prepaid credits. Invalid uploads are rejected before you ever spend one.
Normalizes the signals you already care about
One request. One normalized result.
Send a single image as multipart form data and get back a strict, normalized verdict. The same public path powers the dashboard playground and every external integration.
Strict synchronous contract
One multipart upload, one normalized response. No polling, no webhooks, no provider noise leaking into your payload.
Idempotency keys
Send an Idempotency-Key and replays return the stored result with Idempotency-Replayed: true — never a second charge.
Stable public response
A small, versioned response shape that is safe to build against and stays stable as providers come and go.
{
"provenance": "openai_generated",
"signals": [
{ "type": "openai_provenance", "outcome": "detected" },
{ "type": "c2pa", "outcome": "unavailable" },
{ "type": "synthid", "outcome": "not_detected" }
],
"attemptsUsed": 1,
"durationMs": 1200,
"requestId": "req_8Fh2..."
}Provider complexity stays out of your contract.
Each provider speaks its own dialect. Image Provenance normalizes them into one outcome vocabulary and keeps the messy internals on our side of the boundary.
Normalized across providers
C2PA, SynthID, and OpenAI provenance are mapped to the same outcome vocabulary so you compare signals, not formats.
Provider complexity stays internal
Raw provider diagnostics are persisted for debugging and abuse review — never returned in your customer-facing contract.
Isolated verifier boundary
Provider checks run in a dedicated verifier with its own secrets, timeout, memory, and concurrency, separate from the public API.
A credit ledger that never surprises you.
Billing is a request-scoped ledger with a clear lifecycle. You only pay for results, and failed provider checks refund themselves automatically.
Validate before you reserve
Content-type and size validation, auth, and rate limits all run before a single credit is ever held.
Reserve → finalize → refund
One credit is reserved when work starts, finalized on a successful result, and refunded automatically on provider failure.
A ledger you can audit
Grants, adjustments, reservations, finalizations, and refunds are recorded as durable, request-scoped ledger events.
validateupload + auth + rate limitreservehold 1 credit for the requestverifyisolated verifier runsfinalizeresult returned to callerUse the language you already ship.
Send a plain multipart request or drop in a few lines with your HTTP client of choice. One image field, one bearer token, one normalized result.
Get your API keycurl https://api.imageprovenance.ai/v1/provenance/check \
-H "Authorization: Bearer ip_live_..." \
-H "Idempotency-Key: upload_2026_06_28" \
-F "image=@photo.jpg"Start checking image provenance today.
Create an API key, send your first image, and get a normalized provenance verdict in a single synchronous call.
