Skip to content

Check an image for Depicta's AI marks

POST
/v1/verify

Check whether an image carries Depicta’s AI marks: Content Credentials (C2PA), the invisible TrustMark watermark and the exact file fingerprint. Free; no credits are charged.

Send the file as multipart/form-data in the field “image”: PNG, JPEG, WebP, GIF (first frame) or SVG, at most 50 MB (SVG 5 MB), 40 megapixels and 16,384 pixels per side. Convert HEIC or AVIF to JPEG or PNG first.

Or send application/json {“url”: “https://…”}: Depicta fetches a public http(s) URL on port 80 or 443 (at most 3 redirects, 10 s, 50 MB) and checks it the same way; by default 5 URL checks a minute per caller and 20 a minute per site. A URL that cannot be fetched answers 422 input_image_unreachable with the reason (blocked_address, http_status, timeout, too_large, connection_failed).

Authenticate with an API key (limits per account, by default 60 checks a minute and 2,000 a day) or, from the page at https://depicta.ai/verify, with a Cloudflare Turnstile token in the field cf-turnstile-response or the X-Turnstile-Token header (limits per address, by default 10 a minute and 100 a day). A request with neither gets 401 auth_missing_api_key.

The verdict is made_with_depicta, inconclusive or no_depicta_ai_marks, with one line per technique. no_depicta_ai_marks does not prove an image was not made with AI: marks can be removed, and other services use other marks. The answer never names an account, prompt, model or time of day; created_on is a UTC date.

Nothing uploaded is kept: the file is checked in memory and dropped, and the check is not recorded in the request audit log.

Errors: 401 auth_missing_api_key or auth_invalid_api_key; 403 auth_account_suspended (a suspended account’s key); 422 validation_error (no file, an unsupported format, too large, too many pixels, a failed captcha); 422 input_image_unreachable (URL mode); 429 rate_limit_exceeded with Retry-After; 503 service_unavailable with Retry-After when the checker is busy.

object
cf-turnstile-response

Cloudflare Turnstile token from https://depicta.ai/verify, for a request without an API key (or send it in the X-Turnstile-Token header).

string
url
required

A public http or https URL of the image (ports 80 and 443; at most 3 redirects, 10 s and 50 MB). Depicta fetches it, checks it in memory and keeps nothing.

string

OK

Media type application/json
object
ai_generated

True when the verdict is made_with_depicta.

boolean
ai_operation

Generated (made from a prompt) or edited (AI-modified from input images); null when unknown or not made with Depicta.

null | string
checked_at

When the check ran (RFC 3339, UTC).

string
created_on

The UTC date (YYYY-MM-DD) the image was made, from our registry; null when unknown. Never a time of day.

null | string
detector

The checking tool and its rules version.

string
other_credentials

True when valid Content Credentials from another issuer are present; check them with Content Credentials Verify. Depicta does not vouch for them.

boolean
receipt

A compact JWS (ES256) of this result signed by Depicta: iss, iat, the sha256 of the checked file, verdict, techniques and detector. Check it with the keys at GET /v1/verify/keys. Depicta keeps no copy.

string
summary

The verdict in plain words, with what it does and does not mean.

string
techniques

One entry per technique, always all three.

Array<object> | null
object
algorithm

Watermark only, when one of our watermarks was read: the TrustMark variant.

string
Allowed values: trustmark-q trustmark-p
issuer

Content_credentials only, when valid: who signed them.

string
Allowed values: depicta other
note

Watermark only, when no invisible watermark was found and that is expected for this file: a per-format line (one text for GIF, one for SVG, one for every other format, such as very plain, very small or mostly transparent images) saying why. The Content Credentials identify the image. Never a sign of removal or tampering.

string
result

Content_credentials: valid (signed by Depicta and says AI), valid_not_ai (signed by Depicta, no AI claim), valid_other_issuer, invalid (damaged or not genuine) or absent. watermark: match, mismatch (a Depicta watermark that does not fit this picture) or absent. fingerprint: match or no_match.

string
Allowed values: valid valid_not_ai valid_other_issuer invalid absent match mismatch no_match
technique

The marking technique: Content Credentials (C2PA), the invisible watermark, or the exact file fingerprint.

string
Allowed values: content_credentials watermark fingerprint
timestamped

Content_credentials only, when Depicta signed them: whether the signing time is backed by a trusted timestamp; otherwise it is the time the signer claimed.

null | boolean
verdict

Made_with_depicta: at least one technique confirms the image was made with Depicta’s AI. inconclusive: a Depicta mark is present but cannot be confirmed (a watermark that does not fit the picture, or Content Credentials naming Depicta that are damaged or not genuine). no_depicta_ai_marks: none found, which does not prove the image was not made with AI.

string
Allowed values: made_with_depicta inconclusive no_depicta_ai_marks

Unauthorized

Media type application/json
object
details
error
string
message
string
request_id
string

Forbidden

Media type application/json
object
details
error
string
message
string
request_id
string

Unprocessable Entity

Media type application/json
object
details
error
string
message
string
request_id
string

Too Many Requests

Media type application/json
object
details
error
string
message
string
request_id
string

Internal Server Error

Media type application/json
object
details
error
string
message
string
request_id
string

Service Unavailable

Media type application/json
object
details
error
string
message
string
request_id
string