DeepFakeShield API reference

REST API

DeepFakeShield API

On-premises synthetic-media analysis for audio and video.

Version
1.0.0
Base URL
https://dfs.sensifai.com/api/v1
OpenAPI document
/api/v1/openapi.json
Endpoints
29

DeepFakeShield analyses audio and video for evidence of synthetic generation or manipulation and returns one of four decision states with machine-readable reason codes.

What this API will not do. It never returns a binary real/fake verdict, never claims a calibrated probability unless an engine reports calibration, and never sends submitted media to a third party: analysis runs entirely inside the deployment. Media is deleted after processing unless the caller explicitly asks for it to be retained.

Decisions. LIKELY_GENUINE, UNCERTAIN, SUSPICIOUS, ANALYSIS_FAILED. Thresholds are configuration, recorded per analysis as a versioned operating point. UNCERTAIN is a real answer, not an error: it means the evidence does not support a classification either way.

Authentication. A browser session cookie for the dashboard, or an API key in Authorization: Bearer <key> / X-API-Key: <key> for integrations.

System

Health, version and capability reporting.

GET /live Liveness — the process is serving

Always 200 while this process answers requests. Touches nothing: no database, no detector backend, no FFmpeg. This is the endpoint a container health check or a reverse proxy should use, because /health deliberately returns 503 when a dependency is unusable and a proxy that is told 503 stops routing to a container that is perfectly alive. Use /health on a dashboard or a probe, where the dependency detail is the point.

Responses

  • 200The process is serving.

Try it


              
GET /health Readiness — dependency status

Returns 200 when the deployment can do its job: the database answers, FFmpeg is present, every modality it serves has a selected engine that is available, and — only in FORENSICS_MODE=remote, which promises to fail rather than substitute — the neural sidecar is up. 503 otherwise. The forensics check reports the optional neural backend and carries required: false in auto and builtin modes, where a missing sidecar is a recorded fallback rather than an outage. Safe to poll; use /live for liveness.

Responses

  • 200The deployment can analyse media.
  • 503At least one dependency it needs is unusable.

Try it


              
GET /version Software, schema, engine and capability versions

Responses

  • 200Version inventory.

Try it


              

Engines

Detector inventory and the model registry.

GET /models Detector inventory and model registry

Lists every engine that can answer for a modality, which one is selected, whether it is available, and — for engines with weights — the recorded SHA-256 and its integrity state.

Responses

  • 200Engine and registry inventory.

Try it


              
GET /profiles Analysis profiles and their operating points

Responses

  • 200Available profiles.

Try it


              

Analyses

Submit media, read results, export evidence.

POST /analyses Submit media for analysis

Accepts multipart/form-data with a file part plus form fields, or application/json with a chunkedUploadId obtained from the stream endpoint.

The media is stored under a randomised key, hashed with SHA-256, analysed, and then deleted unless retainMedia=true. The response returns immediately with a queued analysis; poll it or read it later.

Responses

  • 202Analysis accepted and queued.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /analyses Search and page through analysis history

Parameters

NameInTypeRequired
qquerystringno
statusquery#/components/schemas/AnalysisStatusno
decisionquery#/components/schemas/DecisionStateno
mediaKindquerystringno
limitqueryintegerno
offsetqueryintegerno

Responses

  • 200A page of history.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
POST /analyses/stream Submit a short clip as a raw chunked body

For sources that cannot produce a multipart body: send the bytes as the request body with Content-Type set to the media type and X-Filename. Returns a chunkedUploadId to submit with POST /analyses.

Responses

  • 201Bytes stored.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /analyses/{id} Full analysis record including per-channel detail

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 200The analysis.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
DELETE /analyses/{id} Delete an analysis and any retained media

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 204Deleted.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /analyses/{id}/result The decision, the reasons and the per-channel outcome

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 200The result.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /analyses/{id}/evidence The evidence record

The durable record: media SHA-256, engine names, versions and weights checksums, configuration version, measurements, decision and its rule, and the declared limitations. ?format=txt renders the same record as a report; ?download=true sets a file name.

Parameters

NameInTypeRequired
idpathstringyes
formatquerystringno
downloadquerybooleanno

Responses

  • 200The evidence record.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /analyses/{id}/advisory The deterministic summary of the result, and the model-written note if one passed the guard

summary is written by code from the evidence record and is present whether or not any language model ran: the final decision, the score and how it relates to the thresholds, each channel, the input quality, the reason codes, every limitation that applies, and the calibration caveat. narrative is a model-written note and is present only if it passed the vocabulary guard; it is checked for forbidden claims, not for accuracy. A note that was discarded leaves status failed with errorCode VERIFICATION_FAILED and no narrative.

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 200Advisory status, deterministic summary and optional note.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              

Dashboard

Aggregate operational figures.

GET /dashboard Analyses today, counts by media kind and decision, and processing times

The same projection the dashboard screen is rendered from, so a figure here and the figure on screen cannot disagree. decisions holds counts; decisionLabels holds the display strings for the four states.

Responses

  • 200Aggregate figures.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              

Account

The caller’s identity, entitlement, quota and API keys.

GET /me Identity, entitlement, quota and usage for the caller

Responses

  • 200Account summary.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /api-keys List API keys belonging to the caller

Responses

  • 200Keys without their secrets.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
POST /api-keys Create an API key

The token is returned exactly once and is not recoverable afterwards.

Responses

  • 201Key created; token included once.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
DELETE /api-keys/{id} Revoke an API key

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 200Revoked.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              

Admin

User, engine, profile, retention and audit administration.

GET /admin/users List users

Responses

  • 200A page of users.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
PATCH /admin/users/{id} Change a role, suspend or reinstate an account

Refuses to remove the last active administrator.

Parameters

NameInTypeRequired
idpathstringyes

Responses

  • 200Updated.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /admin/audit Security and administration audit trail

Parameters

NameInTypeRequired
actorIdquerystringno
actionquerystringno
outcomequerystringno
limitqueryintegerno
offsetqueryintegerno

Responses

  • 200Audit entries.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /admin/models Model registry with integrity state

Responses

  • 200Registry.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
POST /admin/models/{key}/verify Re-hash a model’s weights and record the result

Parameters

NameInTypeRequired
keypathstringyes

Responses

  • 200Integrity result.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /admin/retention Retention posture and what is due for removal

Responses

  • 200Retention preview.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
PUT /admin/retention Set the record retention window

Responses

  • 200Updated.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /admin/usage-outbox Marketplace usage submission state

Responses

  • 200Outbox summary.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
GET /admin/webhook-events Recent marketplace webhook deliveries

Responses

  • 200Deliveries.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              
POST /admin/selftest Run the deployment self-test

Checks configuration, storage, FFmpeg, the database, engine availability and model integrity, and returns a per-check report.

Responses

  • 200Self-test report.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 413
  • 415
  • 422
  • 429
  • 500

Try it


              

Webhooks

Marketplace callbacks. Signature-verified.

POST /webhooks/sensifai Marketplace webhook receiver

Verifies Sensifai-Signature (HMAC-SHA256 over <t>.<raw body>) with a five-minute tolerance, deduplicates on the event id, and projects subscription and balance changes. Always answers 2xx for a verified event, including a duplicate.

Responses

  • 200Accepted or duplicate.
  • 400Body could not be parsed or carried no event id.
  • 401Signature verification failed.

Try it


              

Schemas

The full document, including every schema, is at /api/v1/openapi.json.

  • Account
  • Analysis
  • AnalysisStatus
  • AnalysisType
  • ApiKey
  • ApiKeyCreated
  • ApiKeyList
  • AuditList
  • Channel
  • Dashboard
  • DecisionState
  • Error
  • Health
  • HistoryItem
  • HistoryPage
  • Models
  • Profiles
  • QualityState
  • ReasonCode
  • Result
  • Retention
  • StreamReceipt
  • User
  • UserList
  • Version