Make a scanned PDF searchable
Searchable PDF (OCR) is an API that takes a scanned PDF (just a photo of each page, no real text behind it) and adds an invisible text layer on top of every page: it looks exactly the same, but its text can now be searched, selected and copied.
How it works
You send the PDF and get back the same document, page by page, with the recognized text "glued" on top of each image (invisible: it doesn't change how it looks). The engine runs on our own server, without sending your pages to any outside AI provider.
Unlike every other PDF tool, this one charges 1 credit PER PAGE, not 1 per call: OCR genuinely costs CPU per page, unlike near-instant operations like rotating or watermarking. Cap of 30 pages per call; for a longer PDF, split it first.
All you need
- Your API key. Create it in your dashboard with "+ Create key".
- In your automation platform, an "HTTP Request" step (n8n, Make, Zapier, Pipedream…).
How to use it in n8n
- Method:
POST· URL:https://api.cofferdock.com/pdf-ocr - Send Headers:
x-api-key= your key - Send Body: binary file (in n8n: "n8n Binary File")
- In Options → Response → Response Format: choose File
Options
| Option | Default | What it does |
|---|---|---|
language | eng | eng (English) or spa (Spanish): the scanned text's language. |
API overview
- Endpoint:
POST https://api.cofferdock.com/pdf-ocr - Auth:
x-api-key: YOUR_KEY. - Input: raw PDF bytes, or JSON
{ "file": "<base64>" }. - Engine: rasterizes every page (same engine as PDF to images) and hands it to Tesseract, hosted by us.
- Languages:
engandspaonly for now. - Limits: 10 requests/min per IP (the lowest on the platform). Max 30 pages. 1 credit PER PAGE, not per call.
Example
curl -X POST "https://api.cofferdock.com/pdf-ocr?language=eng" \
-H "x-api-key: YOUR_KEY" -H "Content-Type: application/pdf" \
--data-binary @scanned.pdf \
--output searchable.pdf
Response
{ "success": true, "pdf": "JVBERi0xLjQK...", "mime_type": "application/pdf",
"meta": { "language": "eng", "pages": 3, "size_bytes": 184213, "used": 15, "remaining": 485 } }
What you get back
By default: with the raw PDF it returns the PDF directly; with JSON it returns pdf as base64. Add output=pdf to force the binary, or output=url for a temporary link.