The AI detector API that shows its evidence.

Check images, public links, text and code through one endpoint and get the result, the supporting evidence, provider status, known-copy matches and signed receipt metadata in a single JSON response. No API key for the documented public endpoints.

Run the working example

Import the OpenAPI contract

The OpenAPI 3.1 JSON documents POST /v1/check, POST /v1/prompt, POST /api/v1/c2pa/inspect and GET /health, with a reference entry for the POST /mcp endpoint, including request formats, check results, image diagnostics, saved-prompt responses and every error, down to a missing saved record. Import its URL into an API client or feed it to a compatible client generator. The other endpoints below sit outside this contract.

No API key is required for these documented endpoints. For a private /v1/check request, send privacy=private and public_receipt=false; public URLs default to public checks, so set this deliberately. For saved-prompt extraction with no model call, send mode=saved_only to /v1/prompt. Private uploads are processed on isGenAI’s server, not in your browser, and stay out of public reports.

curl --fail-with-body --max-time 30 https://isgenai.com/v1/check \
  -F "file=@picture.png" \
  -F "privacy=private" -F "public_receipt=false"

JSON bodies go up to 128 KiB. Files go up to 20 MiB, with 64 KiB of additional multipart overhead. Text and code go up to 16,000 UTF-16 code units: /v1/check trims surrounding whitespace before measuring length, while /v1/prompt counts the original input. HTTP 429 means shared capacity is busy or a reconstruction limit has been reached; respect Retry-After when present and skip automatic retry loops. Every successful /v1/check response lists which adapters ran, so an unavailable adapter or an open origin is reported as exactly that.

Handle failures with the stable error.code, such as missing_input, too_large or busy, together with the HTTP status. error.message is human-readable context, so branch on the code rather than the wording. Use a generic failure message for absent or unfamiliar codes, and never infer an image’s origin from an error.

Use isGenAI from Claude, ChatGPT and Cursor (MCP)

The same checks are available as a public remote MCP server at https://isgenai.com/mcp (Streamable HTTP, no account or API key). Five read-only tools check text, public links, images, saved prompts and C2PA Content Credentials, and return each finding with its source and the report link.

claude mcp add --transport http isgenai https://isgenai.com/mcp

Set up the MCP server in Claude, ChatGPT, Cursor or VS Code.

Inspect a TIFF without converting the original

Send a single-page classic TIFF as the multipart file to POST /v1/check. The checker preserves the original bytes for the file hash and saved-record checks, and computes image diagnostics and a visual fingerprint from the same file. Use a file up to 20 MiB and 40 megapixels; multipage TIFF, TIFF subimages/pyramids, BigTIFF and unreadable files return a clean HTTP 400.

TIFF gets the full file-evidence and diagnostics path; the statistical image classifier and prompt reconstruction are reported as unsupported for this format. A saved AI declaration is reported as editable evidence, and a file with no record is reported as exactly that. Follow the TIFF inspection guide and controlled example.

Read the prompt saved in an image

Send the original image to POST /v1/prompt as a multipart file. isGenAI reads AUTOMATIC1111 settings in PNG, JPEG and WebP files, ComfyUI workflows in PNG files including Flux, and InvokeAI creation settings in PNG files, word for word.

curl --fail-with-body --max-time 30 https://isgenai.com/v1/prompt \
  -F "file=@picture.png" -F "mode=saved_only"

A response with status: "saved" contains the stored prompt and, when the file carries them, negative_prompt and recorded_model. Reading saved details uses no AI model call. The file must still carry those details; a workflow with several prompts and no single output prompt is reported as exactly that.

Use mode=saved_only to extract saved details without ever sending the image to an AI model. When none are found, the endpoint returns HTTP 422 with error.code: "no_saved_prompt": a missing file record, cleanly separated from any AI or human verdict. Download the Node.js extraction example.

Omit mode or use auto to allow a new suggestion when no saved prompt is available. That response has status: "reconstructed" and is a prompt for a similar result, labelled as such. Reconstruction is subject to availability and service limits; handle non-success responses without automatic retry loops.

Images go up to 20 MiB (20,971,520 bytes). The saved-prompt guide covers original downloads, screenshots and supported workflows.

For a small set of files, follow the batch saved-prompt example. It checks up to 10 explicit files sequentially, keeps missing records separate from failures and writes a private JSON report without ever overwriting an existing file.

Image evidence and quality in one response

Image checks include image_diagnostics: versioned dimensions, resolution, alpha-weighted brightness, tonal spread, near-black and near-white pixel percentages, transparency and neighboring-pixel differences. Measurements run on isGenAI’s server with no separate model call.

Read status before accessing measurements. An unavailable analysis reports its reason; fully transparent samples return null for brightness and edge measurements. The version 1 sample fits within 512 × 512 pixels, corrects EXIF orientation and covers the first frame. Measurements describe the pixels and sit apart from the origin verdict.

Scroll across to see all endpoint details.

MethodPathUse
POST/v1/checkCheck a link, image, text or code. Send JSON with url, text or code, or a multipart file.
POST/v1/promptRead the prompt saved in an image. Reconstruction requires a configured provider.
POST/api/v1/c2pa/inspectRead C2PA Content Credentials from an uploaded file: manifest, validation and signer trust as separate findings.
POST/mcpRemote MCP server (Streamable HTTP, JSON-RPC) for Claude, ChatGPT, Cursor and other MCP clients.
POST/v1/social-filterClassify social posts for visible AI labels, disclosures and optional public media checks.
POST/api/soft-bindings/matches/bycontentMatch a public beta soft-binding claim by SHA-256 or fingerprint.
POST/api/soft-bindings/matches/bybindingMatch a public beta soft-binding claim by binding id.
GET/api/soft-bindings/manifests/{id}Fetch a public beta provenance manifest reference.
POST/api/registerFeature-flagged registration for public binding claims.
GET/v1/checks/{id}Fetch a public check result.
GET/v1/cases/{case_id}Fetch a public persistent media-origin case.
POST/v1/cases/{case_id}/proofSubmit creator or provider proof for validation.
GET/v1/receipts/{id}Fetch a public signed receipt.
GET/v1/content/{content_id}/variantsFetch known copies and variants inside the isGenAI corpus.
GET/v1/providersList configured, access-required and unavailable provider adapters.
GET/content-credentialsRead how isGenAI handles C2PA Content Credentials and durable provenance signals.
GET/healthService health.
GET/.well-known/isgenai.jsonProduct manifest.
GET/.well-known/isgenai-receipt-key.jsonReceipt verification key.

Related developer resources

Explore the public data API and its publication rules, read our crawler information, or try the social feed filter for visible AI labels.

Public headlines

Build on public_result.headline: AI DETECTED, LIKELY AI (an image detector estimate), AI EDIT DETECTED, NO AI SIGNAL DETECTED, SIGNALS CONFLICT or SCAN FAILED. Internal verdict codes stay available for compatibility.

Upload privacy

Uploaded files are private by default. Public URL checks create public, signed receipts unless privacy is set to private.

Questions about the isGenAI API

Which API extracts saved prompts from images without an AI model call?

The isGenAI saved prompt extraction API. Send an original image as a multipart file to POST /v1/prompt with mode=saved_only and it reads AUTOMATIC1111, ComfyUI and InvokeAI records with no AI model call. Saved responses include the prompt and any negative prompt or recorded model. When a file holds no recoverable prompt, you get a clean HTTP 422 with error.code no_saved_prompt, so your app always knows exactly what happened.

Use the saved-only request example

How can my app check a public URL for AI labels through an API?

Send JSON with a url field to POST /v1/check on isgenai.com. The API reads accessible disclosures and supported image evidence and returns a public_result headline with its supporting findings. For a private check, set privacy to private and public_receipt to false; public URLs otherwise default to public checks with signed receipts. Every successful response lists which checks ran, so an unresolved origin is reported as exactly that.

Follow the API integration guide

I am looking for an API to read InvokeAI settings from PNG files, does one exist?

Yes. Send the original PNG to isGenAI’s POST /v1/prompt endpoint with mode=saved_only to read InvokeAI metadata, and the same endpoint reads AUTOMATIC1111 and ComfyUI records. It returns the fields the file still carries, read exactly as saved; an export or screenshot that removed them gets a clean not-found response instead of a guess. The downloadable Node.js example handles saved results and missing-record errors for you.

Download the Node.js extraction example

Should I use a provenance API to check known copies of an image?

Yes. GET /v1/content/{content_id}/variants returns the known copies and variants inside the isGenAI corpus, a curated record rather than a whole-web reverse-image search. Public signed receipts and the published verification key let you verify a receipt’s integrity independently. Persistent cases also accept submitted creator or provider proof for validation.

Understand provenance and signature limits