~/docs cat create-detection.md
Create a detection
POST /v1/detections — run a detection on one file. The server infers image, video, or audio, runs the right detectors, and answers with one envelope. Synchronous.
Request (multipart/form-data):
request fields
file binary the media — image ≤ 10 MB, video ≤ 25 MB, audio ≤ 25 MB
url string a video link, as an alternative to file
save string "true" | "false" — persist history + file (default "true")
Idempotency-Key: <key> optional header — a resend within 24 h replays the
stored answer instead of re-billingcurl
curl -X POST "https://api.scam.ai/v1/detections" \ -H "x-api-key: <YOUR_API_KEY>" \ -F "file=@/path/to/media.mp4"
response fields
id string detection id (null when save="false")
object string always "detection"
status string always "completed"
created_at string ISO timestamp
media object { type: "image" | "video" | "audio",
filename, mime_type, bytes }
model string the public model name, e.g. "Eva V1.6"
verdict string "LIKELY_AUTHENTIC" | "SUSPICIOUS" | "LIKELY_AI_MANIPULATED"
confidence float P(manipulated), 0.0–1.0 (nullable). 0 = certainly
real, 1 = certainly manipulated. NOT certainty in
the verdict — an authentic result is a LOW number
summary string one human-readable sentence (nullable)
credits_used number credits actually debited — prefer this over any quoteVideo and audio add their own fields on top of the base above:
video adds
frames_metered number frames billed
sampling_rate null the platform samples on its own grid, not a set rate
frames_analyzed number how many frames were scored
threshold_used number the line the verdict was decided against
frames array per-frame [{ index, timestamp_s, confidence_score, thumbnail_b64 }]audio adds
duration_ms number clip length — audio is billed by length
segments array per-window [{ start_ms, end_ms, value, status }]
value = P(synthetic), null for a window with no speechverdict is the same three-value enum for every media type.