Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

PDF Tampering Detection

Checks each page of a PDF for edits and AI generation, and gives a verdict for the whole document.

SlugIDStatusTaggedModel version
pdf-tampering-detection13ActiveWhen a page was AI-checkedv1

What it detects

Each page is classified first, then checked:

PageCheckPage verdict
A full-page scan with something added on top (visible text, annotations, filled shapes or an extra image)The added items are markedEDITED
A full-page scan with nothing addedAI image checkFAKE if AI-generated, REAL if not
Anything else (text, tables, logos or photos on a normal page)Not checkedOUT_OF_SCOPE

It does not detect:

  • Pixel-level edits on a scan, such as Photoshop retouching with nothing added on top. These pages come out REAL.
  • Edits to native PDF text or tables. These pages are OUT_OF_SCOPE.
  • File-structure signs such as incremental saves or creator/producer mismatches.
  • Anything in encrypted PDFs, which are not analyzed.

Request

SlotAccepted contentType
originalapplication/pdf

Send the PDF's page count as pageCount. It is required, and it sets the job's cost.

{
  "taskTypeId": "13",
  "inputs": [
    { "slotName": "original", "fileName": "agreement.pdf", "contentType": "application/pdf", "sizeBytes": 734003, "pageCount": 3 }
  ]
}

See Running a job for the full create, upload and finalize flow.

Limits

  • File size: up to the account upload limit, 10 MB by default.
  • Encrypted PDFs are not analyzed.

Result

FieldTypeDescription
verdictstringDocument verdict; see below
isFakebooleantrue when verdict is TAMPERED
totalPagesintegerPages analyzed
fakePagesintegerPages the AI check found AI-generated (FAKE)
editedPagesintegerPages with content added on top of a scan
scannedPagesintegerPages that are full-page scans
outOfScopePagesintegerPages that weren't checked
aiCheckFailedPagesintegerScanned pages where the AI check couldn't run
confidencePercent, fakeConfidencePercent, realConfidencePercent, tag, tagBoundariesPresent when at least one page went through the AI check; see result fields
modelVersionstringVersion of the model that produced the result
verdictWhen
TAMPEREDAt least one page is FAKE or EDITED
AUTHENTICNo tampered pages, and at least one page is REAL
UNDETERMINEDNo tampered or authentic pages, and the AI check couldn't run on at least one page
OUT_OF_SCOPEEvery page is OUT_OF_SCOPE
{
  "isFake": true,
  "verdict": "TAMPERED",
  "confidencePercent": 82.9,
  "fakeConfidencePercent": 82.9,
  "realConfidencePercent": 17.1,
  "tag": "fake",
  "tagBoundaries": { "real": 30, "likelyReal": 50, "likelyFake": 75 },
  "totalPages": 1,
  "fakePages": 1,
  "editedPages": 0,
  "scannedPages": 1,
  "outOfScopePages": 0,
  "aiCheckFailedPages": 0,
  "modelVersion": "v1"
}

Use verdict to decide what to do with the document; an OUT_OF_SCOPE or UNDETERMINED document was not verified either way.

Output artifacts

kindFileDescription
resultresult.jsonDocument verdict, page counts, SHA3-256 / MD5 hashes and file metadata
resultresult_N.jsonOne per page: page verdict, the reason, any added items with their positions, and confidence
heatmapheatmap_N.pngOne per page where available: AI heatmap for scanned pages, added items marked in red for EDITED pages, or a plain render for OUT_OF_SCOPE pages

Download them from artifacts on GET /jobs/{id}.

Cost and availability

  • Priced per page: the per-page price set by your plan × pageCount. The exact amount is returned as cost when you create the job. See Quotas & Credits.
  • Available on the cloud API; your plan decides which task types you can use.