What the API returns
A single POST /detect call with an image file returns a structured JSON response — no separate polling step, no webhook required for the basic flow:
{
"scan_id": "scan_...",
"verdict": "ai" | "real" | "uncertain",
"confidence_level": "high" | "medium" | "low",
"recommended_action": "allow" | "review",
"evidence_summary": "...",
"report_url": "/scans/.../report"
}Common integration patterns
- Upload moderation — screen user-submitted images at upload time and route "uncertain"/AI results to a human review queue instead of auto-blocking.
- Marketplace trust & safety — check listing photos for AI-generated or manipulated images before publishing.
- Newsroom workflows — verify reader-submitted or social-sourced photos before publication, with a report link for the editorial record.
- Bulk/batch review — run existing image libraries through the API to flag likely AI content for audit.
Why recommended_action matters
The API doesn't just return a raw score — it returns a recommended_action of allow or review, so you can wire moderation logic without having to build your own probability-to-decision thresholds from scratch. High-confidence results are safe to automate; uncertain ones are flagged for a human, which keeps false positives from silently damaging real users.
There's a video endpoint too — /detect/video takes the same auth and returns the same response shape, plus a per-frame probability breakdown. See the AI video detector page for details.
Free tier includes API access at the standard monthly quota. See full request/response docs and auth details.
Read the API docsFrequently asked questions
What image formats does the API accept?
Standard web image formats (JPEG, PNG, WebP) submitted as multipart/form-data. See the docs page for exact size and format limits.
How is the API authenticated?
Requests use an x-api-key header with a partner API key, or a signed-in user's Google ID token as an Authorization: Bearer header — usage counts toward that account's monthly plan either way.
Is there a rate limit?
Yes, requests are rate-limited per minute per account to keep the service stable for everyone. Higher-volume needs are handled on the Business plan — contact us for custom limits.
Can I get a webhook instead of polling?
The current API returns the result synchronously in the same response — no polling or webhook needed for a single-image check. Contact us if your integration needs async/batch processing.