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.
Try it
GET
/analyses
Search and page through analysis history
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| q | query | string | no |
| status | query | #/components/schemas/AnalysisStatus | no |
| decision | query | #/components/schemas/DecisionState | no |
| mediaKind | query | string | no |
| limit | query | integer | no |
| offset | query | integer | no |
Responses
- 200A page of history.
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.
Try it
GET
/analyses/{id}
Full analysis record including per-channel detail
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 200The analysis.
Try it
DELETE
/analyses/{id}
Delete an analysis and any retained media
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 204Deleted.
Try it
GET
/analyses/{id}/result
The decision, the reasons and the per-channel outcome
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 200The result.
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
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
| format | query | string | no |
| download | query | boolean | no |
Responses
- 200The evidence record.
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
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 200Advisory status, deterministic summary and optional note.
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.
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.
Try it
GET
/api-keys
List API keys belonging to the caller
Responses
- 200Keys without their secrets.
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.
Try it
DELETE
/api-keys/{id}
Revoke an API key
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 200Revoked.
Try it
Admin
User, engine, profile, retention and audit administration.
GET
/admin/users
List users
Responses
- 200A page of users.
Try it
PATCH
/admin/users/{id}
Change a role, suspend or reinstate an account
Refuses to remove the last active administrator.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| id | path | string | yes |
Responses
- 200Updated.
Try it
GET
/admin/audit
Security and administration audit trail
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| actorId | query | string | no |
| action | query | string | no |
| outcome | query | string | no |
| limit | query | integer | no |
| offset | query | integer | no |
Responses
- 200Audit entries.
Try it
GET
/admin/models
Model registry with integrity state
Responses
- 200Registry.
Try it
POST
/admin/models/{key}/verify
Re-hash a model’s weights and record the result
Parameters
| Name | In | Type | Required |
|---|---|---|---|
| key | path | string | yes |
Responses
- 200Integrity result.
Try it
GET
/admin/retention
Retention posture and what is due for removal
Responses
- 200Retention preview.
Try it
PUT
/admin/retention
Set the record retention window
Responses
- 200Updated.
Try it
GET
/admin/usage-outbox
Marketplace usage submission state
Responses
- 200Outbox summary.
Try it
GET
/admin/webhook-events
Recent marketplace webhook deliveries
Responses
- 200Deliveries.
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.
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