[go: up one dir, main page]

Deepfake detection API

Detect AI-generated images, video, audio, and text — programmatically

Send an image, video, audio clip or text and get back a verdict, confidence score and likely source model. Bearer-token auth, JSON responses, prepaid credits.

Quickstart

Three steps to your first detection call.

  1. Step 1
    Sign in

    Sign in to your Sealed Rose account, or create one if you do not have it yet.

  2. Step 2
    Create a key

    Open /api-keys and create a key. Live keys are prefixed sr_live_ and shown once — store it as a secret. New accounts automatically receive 25 complimentary test credits.

  3. Step 3
    First call

    Send the key as a Bearer token to any detection endpoint. The image example below returns a verdict in one request.

Your first request

curl — detect an image
curl -X POST https://sealedrose.com/api/v1/detect/image \
  -H "Authorization: Bearer sr_live_your_key_here" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg

Every request carries an Authorization: Bearer sr_live_… header. Optionally add an Idempotency-Key: <your-id> header so a retried request is charged at most once.

Authentication

The API authenticates with a Bearer token. Create and manage keys at /api-keys — sign in, create a key, and copy it once. Send it on every request:

Authorization header
Authorization: Bearer sr_live_your_key_here

A missing or invalid key returns 401 invalid_key. Keep keys server-side; never ship sr_live_ keys in client code.

Endpoint reference

All endpoints are POST and return JSON. Base URL: https://sealedrose.com.

POST/api/v1/detect/image

Detect image

Input: Raw image bytes (--data-binary @photo.jpg), or a multipart form with a file field. Up to 32 MB.

Example request
curl -X POST https://sealedrose.com/api/v1/detect/image \
  -H "Authorization: Bearer sr_live_your_key_here" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg
Example response
{
  "tool": "image",
  "aiGenerated": true,
  "confidence": 0.97,
  "detectedModel": "Midjourney",
  "aiScore": 0.97,
  "deepfakeScore": 0.12,
  "sources": [
    { "model": "midjourney", "score": 0.97 },
    { "model": "flux", "score": 0.14 }
  ],
  "checkId": "chk_8f2a1c",
  "cost": 1,
  "creditsRemaining": 99
}
POST/api/v1/detect/video

Detect video

Input: Raw video bytes (--data-binary @clip.mp4), or a multipart form with a file field. Up to 32 MB. Analyzed frame by frame.

Example request
curl -X POST https://sealedrose.com/api/v1/detect/video \
  -H "Authorization: Bearer sr_live_your_key_here" \
  -H "Content-Type: video/mp4" \
  --data-binary @clip.mp4
Example response
{
  "tool": "video",
  "aiGenerated": true,
  "confidence": 0.91,
  "detectedModel": "Sora",
  "sources": [
    { "model": "sora", "score": 0.91 }
  ],
  "checkId": "chk_5d1b90",
  "cost": 12,
  "creditsRemaining": 87
}
POST/api/v1/detect/audio

Detect audio

Input: Raw audio bytes (--data-binary @voice.mp3), or a multipart form with a file field. Up to 32 MB.

Example request
curl -X POST https://sealedrose.com/api/v1/detect/audio \
  -H "Authorization: Bearer sr_live_your_key_here" \
  -H "Content-Type: audio/mpeg" \
  --data-binary @voice.mp3
Example response
{
  "tool": "audio",
  "aiGenerated": false,
  "confidence": 0.88,
  "detectedModel": null,
  "aiScore": 0.09,
  "deepfakeScore": 0.11,
  "sources": [
    { "model": "elevenlabs", "score": 0.11 }
  ],
  "checkId": "chk_a3f7e2",
  "cost": 1,
  "creditsRemaining": 96
}
POST/api/v1/detect/text

Detect text

Input: A JSON body { "text": "…" }. Up to 25,000 characters.

Example request
curl -X POST https://sealedrose.com/api/v1/detect/text \
  -H "Authorization: Bearer sr_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "text": "The message you want to score for AI authorship." }'
Example response
{
  "tool": "text",
  "aiGenerated": true,
  "confidence": 0.96,
  "detectedModel": null,
  "sources": [
    { "model": "gpt4_turbo", "score": 0.96 }
  ],
  "checkId": "chk_20c4de",
  "cost": 1,
  "creditsRemaining": 95
}

Response & errors

A successful detection returns a 200 with the fields below. Image and audio checks add aiScore and deepfakeScore.

toolstring

Which detector ran: image, video, audio, text, or phone.

aiGeneratedboolean

The verdict — true if the media is judged AI-generated or manipulated.

confidencenumber (0–1)

Confidence in the verdict, from 0 (uncertain) to 1 (certain).

detectedModelstring | null

The generator we attribute the media to (e.g. "Sora"), or null when none is identified.

sourcesarray

Per-model breakdown: an array of { model, score } objects identifying detected generative model architectures (e.g. Midjourney, Sora, ElevenLabs).

aiScorenumber (0–1)

Image & audio only — likelihood the media is fully AI-generated.

deepfakeScorenumber (0–1)

Image & audio only — likelihood of a face-swap / manipulation.

checkIdstring

Unique id for this check — keep it for your records and support requests.

costnumber

Credits debited for this call (1 for image/audio/text/phone, 12 for video).

creditsRemainingnumber

Your balance after this call was billed.

Error envelope

Errors return a non-2xx status and a consistent envelope:

Error shape
{
  "error": {
    "code": "insufficient_credits",
    "message": "Your balance cannot cover this check."
  }
}
400bad_input

The request body was missing, malformed, or the wrong media type.

401invalid_key

The Authorization header is missing or the API key is not valid.

402insufficient_credits

Your balance cannot cover this check. Top up at /api-keys.

413too_large

Media exceeds the 32 MB limit, or text exceeds the 25,000-character limit.

422partial_stream

The video was too short to analyze — supply a longer clip.

500internal_error

Something failed on our side. Retry with an Idempotency-Key so you are not double-charged.

High-Throughput & OSINT Tooling

Batch inspection & certified forensic deliverables

Built for threat intelligence teams, OSINT researchers, trust & safety pipelines, and dispute investigators who need reliable programmatic verification.

Parallel batch processing

Submit hundreds of media URLs concurrently. Volatile in-memory workers analyze frame-by-frame temporal consistency and synthetic artifact anomalies in parallel.

Cryptographic hashing & PDF dossiers

Every verified check receives a unique check ID with permanent SHA-256 fingerprinting. Export PDF forensic reports for legal and compliance dossiers.

Pricing

Pricing is credit-based and prepaid. You buy credits up front and each call debits your balance — about $0.02–$0.03 per credit depending on pack size. Image, audio, text, and phone lookup checks cost 1 credit; video is 12 (video checks analyze 10 to 45 sampled frames). No subscription and no per-seat fee — you pay only for the checks you run.

Cost per check

DetectorEndpointCost
Image/api/v1/detect/image1 credit
Audio/api/v1/detect/audio1 credit
Text/api/v1/detect/text1 credit
Phone Lookup/api/v1/lookup/phone1 credit
Video/api/v1/detect/video12 credits

Credit packs

Bigger packs lower the per-credit price. Need higher volume or a custom plan? Contact us.

60 credits
$2.99
Single-case pass
150 credits
$4.99
Quick checks
500 credits
$15
Includes API
2,000 credits
$50
API & batch
10,000 credits
$200
Best value

Frequently asked questions

5 questions
Is my data stored?
Uploaded media is processed to produce a result and is not retained for training. We keep the check metadata (the checkId, tool, verdict, and cost) tied to your account for billing and audit, but the raw image, video, or audio is discarded after analysis. Send text over TLS like any other request; it is used only to score the submission.
Are there rate limits?
The API is metered by credits rather than a hard request quota — each call debits your prepaid balance, and a 402 insufficient_credits is returned when the balance runs out. If you send a large burst you may see brief 429-style backpressure; retry with exponential backoff and an Idempotency-Key. Need a higher sustained throughput? Contact us and we will provision it.
How does the Idempotency-Key work?
Send an Idempotency-Key header with a unique id of your choosing on any request. If the same key is seen again (for example after a network timeout and retry), we return the original result instead of running — and charging for — a second check. Use a fresh key for each distinct check, and reuse the same key when retrying that exact check.
Which models does it detect?
The API runs the same multi-modal neural forensic engine as our web verification tools. Video and image checks inspect deep structural, latent diffusion, and frequency artifacts to detect modern generators such as Sora, Kling, Runway, and Google Veo as well as face-swap manipulation; audio checks analyze acoustic harmonics and pitch contours to isolate synthetic-voice and voice-clone models; text checks score AI-written prose. The detectedModel field names the primary attributed generator when one is identified, and the sources array shows ranked generative architecture scores.
How do I get an API key?
Sign in to your Sealed Rose account, open /api-keys, and create a key. Live keys are prefixed sr_live_ and are shown once — copy it into your secret store. Every new account receives 25 complimentary starter credits to test the API immediately.

Ready to build?

Create a key, buy a starter pack of credits, and make your first detection call in minutes. The same forensic engine that powers our free tools, now in your stack.