No API key. No account. No sign-up. Merge, compress, split, rotate, convert and OCR PDFs over plain HTTP. Post a file, get an id, download the result.
Last updated: 1 September 2026
This is the same engine the ScanReviver website runs on. It is free to call within the limits below, and there is nothing to register for.
Every job is two steps. You POST your file and get a small JSON object back with an id. You then GET the result using that id. The reason for the split is that one job can produce more than one output: a merged PDF, a single page, or a ZIP of images.
# step 1 — send two PDFs to be merged
$ curl -s -F "[email protected]" -F "[email protected]" \
https://scanreviver.com/api/pdf-merge
{"id":"5ea56646f09146979eabc2faecd0f889","bytes":72597,"files":2}
# step 2 — download the merged file
$ curl -s -o merged.pdf \
https://scanreviver.com/api/pdf-file/5ea56646f09146979eabc2faecd0f889
All of these take multipart/form-data and return JSON containing an id.
| Endpoint | Send | Then fetch from |
|---|---|---|
POST /api/pdf-merge | files, one field repeated per PDF | /api/pdf-file/{id} |
POST /api/pdf-compress | file, plus level (good by default) | /api/pdf-file/{id} |
POST /api/pdf-split | file | /api/pdf-split-file/{id} |
POST /api/pdf-to-images | file | /api/pdf-zip/{id}, or one page at a time from /api/pdf-page/{id}/{n} |
POST /api/pdf-to-word | file | /api/pdf-word/{id} |
POST /api/pdf-to-excel | file | /api/pdf-excel/{id} |
POST /api/pdf-to-ppt | file | /api/pdf-ppt/{id} |
POST /api/ocr-text | file | nothing — the text comes back in the same response |
The site has more endpoints than these, covering rotating, cropping, page numbers, watermarks, forms and signing. They follow the same two-step shape. If you need one that is not listed here, ask on the contact page and we will document it properly rather than let you guess.
/api/ocr-text is the one that does not need a second call, because the result is text rather than a file:
$ curl -s -F "[email protected]" https://scanreviver.com/api/ocr-text
{"text":"Invoice 2026 total 42 euro","pages":1,"total_pages":1,"chars":26}
| Maximum per file | 250 MB |
|---|---|
| Maximum per job | 1000 MB |
| Pages per job | 30 |
| Jobs at once | 1 per IP address |
| Jobs per day | No cap |
| Result stays available | 45 minutes |
The 45 minutes matter: download the result in the same run of your script. An id you saved yesterday will not work, and that is deliberate — nothing of yours sits on our disk longer than it has to.
Errors come back as JSON, not as a file, so check the status code before writing the body anywhere.
| Status | Meaning |
|---|---|
400 | The file cannot be used for this operation, or the job id is unknown or older than 45 minutes. The message says which. |
413 | Too big, or too many pages. |
422 | A required form field is missing. |
429 | You already have a job running from this address. |
A useful one to expect: sending a scanned PDF to the Word converter gives a 400 telling you to run OCR first, because there is no real text in the file to convert.
import requests
BASE = "https://scanreviver.com"
r = requests.post(f"{BASE}/api/pdf-merge",
files=[("files", open("a.pdf", "rb")),
("files", open("b.pdf", "rb"))],
timeout=180)
r.raise_for_status()
job = r.json()["id"]
out = requests.get(f"{BASE}/api/pdf-file/{job}", timeout=180)
out.raise_for_status()
open("merged.pdf", "wb").write(out.content)
Build on it, including in something you charge for. Two things we ask, neither enforced: keep to one job at a time so everyone gets a turn, and if your project lists what it uses, link back to scanreviver.com. That is what keeps this free.
Planning real volume? Say hello on the contact page first. We would rather hear from you than throttle you.
No. No key, no account, no sign-up.
One job can have several outputs, such as a single page or a ZIP of all of them. The id lets you pick which one you want.
45 minutes, then the result is deleted.
No. The only throttle is one job processing at a time per IP address.
The pass raises the file size and page count on the website. Treat the numbers on this page as what you get without one.
An API that lets you send a PDF file over HTTP and get a result back, such as a compressed file, extracted text, or a converted document. No browser is needed; it works from any script or application.
Yes. Post a file to the endpoint, get a job id back, and fetch the result with a second request. Works from curl, Python, Node.js or any language that can make HTTP calls.
Yes. This API has no key, no account and no daily cap. The only limits are 250 MB per file and 25 pages per PDF.
Post the file to the relevant endpoint, such as /api/pdf-to-word, and fetch the result from the matching download path. The endpoints table on this page lists all available conversions.
No. There is no key, no account and no sign-up. Post your file to the endpoint you need and you get a job id back.
PDF work can produce several outputs from one job, such as a page range or a whole ZIP. The POST returns a job id and a second GET fetches the result you want. Merging and compressing return the PDF from /api/pdf-file/{id}.
45 minutes. After that the job id stops working and the file is gone. Download it in the same script run rather than storing the id for later.
250 MB per file, 25 pages per PDF, and one job processing at a time per IP address. There is no daily cap.
Yes, through the OCR endpoint, which returns the recognised text as JSON. The Word and Excel converters need a PDF that already contains real text and will tell you so if it does not.
Terms are on the terms page, and what happens to your data is on the privacy page.