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 | 25 MB |
|---|---|
| Maximum per job | 100 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.
Terms are on the terms page, and what happens to your data is on the privacy page.