REST API · v1 · 99.9% SLO

One endpoint. Three media types.

POST a file or URL. Get back a verdict, confidence score, and the specific signals that drove it. Average response under 2 seconds.

SOC 2 · GDPR · 60s file purge · IPv6

cURL
Node.js
Python
Go
# detect a deepfake from a URL curl https://api.deepfakedetector.ai/v1/detect \ -H "Authorization: Bearer $DD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "media_url": "https://example.com/clip.mp4", "media_type": "video" }'
import DeepfakeDetector from '@deepfakedetector/sdk'; const dd = new DeepfakeDetector(process.env.DD_API_KEY); const result = await dd.detect.video({ url: 'https://example.com/clip.mp4' }); console.log(result.verdict, result.confidence); // "synthetic" 0.91
from deepfakedetector import Client dd = Client(api_key=os.environ["DD_API_KEY"]) result = dd.detect.video( url="https://example.com/clip.mp4" ) print(result.verdict, result.confidence) # synthetic 0.91
import "github.com/deepfakedetector/dd-go" dd := dd.NewClient(os.Getenv("DD_API_KEY")) result, err := dd.DetectVideo(ctx, &dd.DetectInput{ URL: "https://example.com/clip.mp4", }) log.Println(result.Verdict, result.Confidence) // synthetic 0.91
Endpoints

Three calls. That's it.

A single base URL, three resource paths — image, audio, video. Same auth, same response shape, same error semantics across all of them.

POST/v1/detect/image~0.8s
POST/v1/detect/audio~1.4s
POST/v1/detect/video~2.1s
GET/v1/jobs/{id}~50ms
Request schema

Send a URL or a file.

Upload via multipart, or pass us a public/signed URL. We'll fetch, scan, score, and purge — all within 60 seconds of the verdict.

ParameterTypeDescription
media_urlstringHTTPS URL to the file. Either media_url OR multipart upload required.required*
media_typeenumimage, audio, or video. Inferred from MIME if omitted.
callback_urlstringWebhook for async jobs. We POST the verdict here when done.
strict_modebooleanLower confidence threshold. Increases recall, may reduce precision. Default false.
retainbooleanKeep the file for 30 days for audit. Default false (60s purge).
Request body
// POST /v1/detect/video { "media_url": "https://example.com/clip.mp4", "strict_mode": false, "callback_url": "https://your-app.com/webhook" }
Response
{ "job_id": "job_8mTk2x", "verdict": "synthetic", "confidence": 0.91, "generator": "sdxl-v1.0", "signals": { "skin_texture": "unnatural", "geometric": "symmetric", "lighting": "consistent" }, "flagged_segments": [ {"start": 2.4, "end": 5.8} ], "latency_ms": 1842 }
SDKs

Official clients in eight languages.

Same call, same shape. Auth, retries, exponential backoff, file streaming, and webhook signature verification handled for you.

JavaScript / TypeScriptv2.4.1
Pythonv2.3.0
Gov1.8.0
Rubyv1.5.2
PHPv1.4.0
Javav1.6.1
.NETv1.3.0
Rustv0.9.0
Reliability

Production-ready by default.

Built on the same infrastructure that handles 15,000+ detections a month for paying customers — banks, newsrooms, fact-check desks, and KYC teams.

99.9%

Uptime SLO. Multi-region active-active. Status page at status.deepfakedetector.ai.

<2s

Median end-to-end latency for image and audio. Video scales with duration — ~1× realtime.

60s

File purge after verdict by default. SOC 2 audited retention. retain=true for 30-day audit holds.

300/m

API rate limit applies per plan. Burst allowance for known clients.

Detect Deepfakes Before They Spread.

Free tier ships with 50 detections/month and the full API surface — no card required. Test in production before you commit.