Scam AI raised $2.6M to combat AI-powered scams→
scam.ai

~/docs cat reading-the-result.md

Reading AI detection results

AI detection results combine a verdict, a score and, for video or audio, evidence from the analyzed moments. These fields describe what Eva V1.6 detected in one run. They do not establish authenticity, manipulation, intent or wrongdoing on their own.

Treat the response as a probabilistic signal within your own policy. A Scam AI result must never be the sole basis for a consequential decision about a person. Use independent evidence and an accountable review process for those decisions.

Verdicts are routing signals

verdict is a compact interpretation of the model output. It is not a pass, block or final case decision.

Verdict meanings and example policy paths
VerdictCurrent modality behaviorWhat it signalsExample policy path
LIKELY_REALImage, video and audioThe run found no strong signs of AI generation or manipulation. This is not proof that the media is authentic.Continue the standard workflow only if the other checks required by your policy also pass.
ALERTImage and videoThe run found some AI-related signals, but the result is inconclusive.Request more evidence, apply a step-up check or send the case to review.
LIKELY_AIImage, video and audioThe run found strong signs of AI generation or manipulation.Route the case to the higher-risk path defined by your policy, such as review, labeling, an added identity check or a temporary hold.

The shared response enum includes all three verdicts. The current audio path returns LIKELY_REAL or LIKELY_AI. Clients should still handle ALERT safely if it appears in an audio response, usually by sending it to review.

The score is a likelihood signal

score is a number from 0 to 1 representing the model's estimated likelihood that the media is AI-generated or manipulated. Values closer to 1 carry stronger AI or manipulation signals. Values closer to 0 carry weaker signals.

The score does not represent:

  • the API's accuracy on this request;
  • certainty that the verdict is correct;
  • the percentage of the file that was generated or altered; or
  • evidence about who created the media or why.

Use score to order or prioritize cases only within a policy your organization has defined for that workflow. Do not copy a threshold from another use case. The cost of an error, the available supporting evidence and the action's reversibility all affect where review belongs.

For video, threshold_used is the reference line applied to the per-frame series for that run. It describes model behavior. It is not your organization's approval, decline or enforcement threshold.

Evidence depends on the media type

The headline verdict and score summarize the run. Evidence fields show which sampled moments contributed information and which could not be scored.

Evidence returned for each media type
MediaEvidence in the responseHow to read it
ImageNo frame or segment arrayverdict and score apply to the image as a whole.
Videoframes[] and, when available, threshold_usedEach frame has an index, timestamp_s and score. Use the series to inspect the sampled timeline. A frame score describes that moment, while the headline result describes the clip-level run.
Audiosegments[] and duration_msEach window has start_ms, end_ms, value and status. A numeric value is the likelihood that the window is synthetic.
Media from a linkThe media-specific evidence plus sourceCompare analyzed_duration_s with duration_s. If source.truncated is true, the result covers only the fetched prefix, so policy must account for the missing portion.

Null, absent and abstained have different meanings

Never convert a null value to 0. Zero means the model produced a low manipulation score. Null means no score was produced.

  • score: null means no headline likelihood is available. Route the result through your unscored or review path rather than treating it as LIKELY_REAL.
  • frames[].score: null means that video frame was not scored. Read frames[].cause, such as timeout or not_attempted, and keep the gap visible.
  • segments[].value: null with status: "abstained" means the audio window was not scored. reason_codes explains why, for example no_voice_content.
  • An absent modality field can be normal. Images do not return frames[] or segments[]; uploads do not return source; and a video can omit threshold_used or frames[] when there is no series to show.
  • Nullable media metadata such as filename, mime_type or bytes means that value was not known. It does not change the detection score.

When no detector can assess the media, the API can return 422 NOT_ASSESSABLE instead of a completed detection. The error's reasons[] describes the abstention. Audio reasons can include no_voice_content or audio_too_short. Treat this as an explicit lack of evidence, not as a real or AI result. The error reference documents the response shape.

Keep the detection separate from your decision

An illustrative policy-led integration preserves the model output and records the customer's action as a separate event:

policy flow
detection signal = verdict + score + evidence + evidence gaps
policy input      = detection signal + case context + independent evidence
policy outcome    = review, step-up, label, hold or another defined action

Before applying a policy, confirm that the response refers to the expected media, review any null or abstained evidence, and check link coverage. Store id, verdict, score and relevant evidence with the policy version and the resulting human or system decision. Do not rewrite the detection verdict to match the later outcome.

Supporting response fields

Supporting response fields
FieldMeaning
summaryPlain-language text that matches the verdict. It explains the signal but adds no independent evidence.
idDetection ID for retrieval, tracing and support.
statuscompleted for a successful synchronous response.
created_atCompletion time in RFC 3339 format.
mediaThe detected media type and available file metadata.
modelThe Eva version that answered: Eva V1.5 or Eva V1.6, set per account.
credits_usedCredits debited for the run.
zero_charge_reasonPresent when credits_used is 0: sandbox or duplicate.

Start building

Create an API key in the dashboard and send your first file. To go through an integration or an on-prem deployment with our team, request a demo.