PDF Brightouts
REST API
All tools are available as REST endpoints. Send a multipart/form-data POST request — no authentication required. Files are processed in-memory and never stored.
Quick Start
All endpoints accept multipart/form-data and return JSON (except /api/convert, which returns a binary PDF). Here is a minimal example using cURL:
curl -X POST https://pdfbrightouts.com/api/analyze \
-F "file=@my-document.pdf" | jq .Replace my-document.pdf with your file path. All responses are UTF-8 encoded JSON unless noted otherwise.
Endpoints
/api/analyzeFull PDF forensic analysis. Inspects metadata, fonts, hidden content, document structure, embedded files, and integrity.
Request — multipart/form-data
| Field | Type |
|---|---|
file | File (PDF) |
Response
{
"metadata": {
"title": "Q4 Report",
"author": "Jane Smith",
"creator": "Adobe Acrobat",
"createdAt": "2024-01-15T10:30:00Z",
"modifiedAt": "2024-03-22T14:00:00Z",
"pdfVersion": "1.7",
"pageCount": 12,
"encrypted": false
},
"fonts": [
{ "name": "Helvetica", "type": "Type1", "embedded": true, "pages": [1, 2, 3] }
],
"hiddenContent": {
"hasInvisibleText": false,
"hasJavaScript": false,
"hiddenLayers": []
},
"structure": {
"bookmarks": [],
"formFields": [],
"hyperlinks": ["https://example.com"]
},
"embeddedFiles": [],
"integrity": {
"hasDigitalSignature": false,
"revisionCount": 1,
"producerChain": ["Adobe Acrobat Pro DC"],
"suspiciousIndicators": []
},
"healthScore": 92,
"fileSize": 204800,
"analyzedAt": "2025-06-01T09:00:00Z"
}cURL Example
curl -X POST https://pdfbrightouts.com/api/analyze \
-F "file=@document.pdf"/api/compareCompare two PDFs side by side and surface every difference — metadata changes, font swaps, structural edits, and text modifications.
Request — multipart/form-data
| Field | Type |
|---|---|
fileA | File (PDF) |
fileB | File (PDF) |
Response
{
"metadataDiffs": [
{
"field": "modifiedAt",
"valueA": "2024-01-01T00:00:00Z",
"valueB": "2024-06-15T09:30:00Z"
}
],
"fontDiffs": [],
"structureDiffs": [
{ "type": "hyperlink_added", "value": "https://new-link.com" }
],
"contentDiffs": [
{ "page": 3, "summary": "Text block changed on page 3" }
],
"healthScoreA": 88,
"healthScoreB": 74,
"analyzedAt": "2025-06-01T09:05:00Z"
}cURL Example
curl -X POST https://pdfbrightouts.com/api/compare \
-F "fileA=@original.pdf" \
-F "fileB=@modified.pdf"/api/batchAnalyze multiple PDFs in a single request. Returns an array of full analysis results in the same order as the uploaded files.
Request — multipart/form-data
| Field | Type |
|---|---|
file0, file1, file2, … | File (PDF) |
Response
[
{
"fileName": "report-q1.pdf",
"healthScore": 91,
"metadata": { "pageCount": 8, "author": "Alice" },
"analyzedAt": "2025-06-01T09:10:00Z"
},
{
"fileName": "report-q2.pdf",
"healthScore": 65,
"metadata": { "pageCount": 14, "author": "Bob" },
"analyzedAt": "2025-06-01T09:10:01Z"
}
]cURL Example
curl -X POST https://pdfbrightouts.com/api/batch \
-F "file0=@report-q1.pdf" \
-F "file1=@report-q2.pdf" \
-F "file2=@report-q3.pdf"/api/convertConvert a plain-text file to a clean, well-formatted PDF. Supports .txt, .md, .html, and .csv. Returns binary PDF data.
Request — multipart/form-data
| Field | Type |
|---|---|
file | File (.txt / .md / .html / .csv) |
Response
# Response: binary PDF stream
Content-Type: application/pdf
Content-Disposition: attachment; filename="converted.pdf"
<binary PDF data>cURL Example
curl -X POST https://pdfbrightouts.com/api/convert \
-F "file=@notes.md" \
--output converted.pdf/api/extractExtract all text content from a PDF, page by page. Useful for full-text search indexing, RAG pipelines, and content analysis.
Request — multipart/form-data
| Field | Type |
|---|---|
file | File (PDF) |
Response
{
"pages": [
{ "page": 1, "text": "Executive Summary\nThis report covers..." },
{ "page": 2, "text": "Table of Contents\n1. Introduction..." }
],
"totalPages": 12,
"totalCharacters": 18342,
"extractedAt": "2025-06-01T09:15:00Z"
}cURL Example
curl -X POST https://pdfbrightouts.com/api/extract \
-F "file=@document.pdf"/api/detectAI-assisted tamper and anomaly detection. Returns a risk verdict, confidence score, and a list of signals that contributed to the assessment.
Request — multipart/form-data
| Field | Type |
|---|---|
file | File (PDF) |
Response
{
"verdict": "suspicious",
"confidence": 0.83,
"riskScore": 67,
"signals": [
"Creation date predates PDF version 1.6 spec",
"Producer field overwritten after signing",
"Hidden JavaScript block detected"
],
"summary": "This document shows 3 indicators of post-signature modification.",
"analyzedAt": "2025-06-01T09:20:00Z"
}cURL Example
curl -X POST https://pdfbrightouts.com/api/detect \
-F "file=@suspicious.pdf"Questions or feedback?
All endpoints are free to use. Files are never stored — analysis happens in-memory on Vercel serverless functions and results are returned immediately.