Reference for fileForensics runs: endpoints, request rules, statuses, every detector and the errors you can get. For what fileForensics is and how it’s metered, see the overview. For a first run end to end, see the quickstart.

How it works

A run checks a file that is already stored in your workspace, identified by its file_id, so there is no upload in the request. Each result appears under forensics.<key> once that detector has reported, and the file checks appear under checks.<key>.
1

Start a run

POST /v1/forensics returns 202 with a run_id, status: "queued" and a poll_url. Runs started at upload with enabledProducts: ["FILE_FORENSICS"] run all 55 checks; read them with GET /v1/forensics/files/{file_id}.
2

Poll

GET /v1/forensics/runs/{run_id} until status is complete or error. Web presence can take up to about 180 seconds.
3

Retry if stuck

A run still queued or running after about 6 minutes is stuck. POST /v1/forensics/runs/{run_id}/retry re-runs the same file and spec_filter under a new run_id, which is the one to poll. The original run then reports error.
4

Clean up

DELETE /v1/forensics/runs/{run_id} once you have the result. The file itself is not affected.
Forensics runs are not jobs: they do not appear on GET /v1/jobs/{job_id} and have no callback. See Async jobs for how they compare with other async work.

Endpoints

Request

spec_filter is required so that a detector added later cannot silently change what an existing integration runs.

Response

Run status

Detector status

Every detector result has a status, and usually a one-line value. Route on each detector’s status, not the run’s: a complete run can still contain an issue.
For web_presence, the combined web_presence boolean is absent when the run reached no conclusion (still running, skip or error). Do not read a missing value as “not found on the web”.

Detectors

The MCP tool run_file_forensics accepts the same keys. See MCP tools.

File checks

File checks describe the file rather than judge it. They come back under checks.<key> on every run whose spec_filter includes at least one forensic check, using the same statuses. Most report found when there is something to describe, or none when there isn’t. A few report issue when something is worth a look, such as blank pages, skewed or low-resolution scans, or timestamps that disagree.

Integrity questions

document_integrity_decisions asks 17 fixed questions about whether the content holds together. Each answer is under decisions, with a class of signal, no_signal or insufficient_evidence. final_decision combines the answers and sets the detector’s result: A question can go unanswered, for example when the file has no page images or no signature. Its class is then insufficient_evidence, or null when no answer came back. When the integrity questions aren’t enabled, document_integrity_decisions reports skip, and its value says the check is disabled.

Errors

See Errors for the response format.

Forensics quickstart

Run your first check end to end.

KYC checks

Choose detectors per document and route on the result.

Uploads

Store a file and get its fileId.

MCP tools

Run fileForensics from an AI assistant.