The PDF API built for developers
One simple REST endpoint per task. Merge, convert, compress and protect PDFs from any language — no SDK, no servers, no PDF libraries to wrestle with.
Quick start
1. Get a key
Sign in and create a key in your dashboard.
2. Call an endpoint
POST your file as multipart/form-data.
3. Get the result
The processed file streams back instantly.
curl -X POST https://smallpdf.us/api/v1/merge \
-H "X-API-Key: YOUR_API_KEY" \
-F "files=@image1.pdf" \
-F "files=@image2.pdf" \
-o merged.pdfAuthentication
Every request must include your secret key in the X-API-Key header. Create and manage keys in your dashboard. Keep keys server-side — never expose them in client code.
X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxBase URL & responses
All endpoints are POST under:
- On success the processed file is returned directly in the body.
- On error a JSON body is returned:
{ "error": "...", "code": "..." } - Every response includes
X-RateLimit-Limit/X-RateLimit-Remaining - Uploads are scanned for malware and deleted from our servers immediately after processing.
Endpoints
Organize
/v1/mergeMerge PDFCombine two or more PDFs into a single document, in the order provided.
Parameters
filesfile[]requiredTwo or more PDF files.
Returns: PDF file · merged.pdf
curl -X POST https://smallpdf.us/api/v1/merge \
-H "X-API-Key: YOUR_API_KEY" \
-F "files=@image1.pdf" \
-F "files=@image2.pdf" \
-o merged.pdf/v1/splitSplit PDFSplit a PDF. Without `pages` you receive a ZIP with one PDF per page; with `pages` you receive a single PDF of just those pages.
Parameters
filefilerequiredThe PDF to split.
pagesstringoptionalOptional range, e.g. "1,3,5-7".
Returns: PDF file · split.pdf
curl -X POST https://smallpdf.us/api/v1/split \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-F "pages=1-3" \
-o split.pdf/v1/rotateRotate PDFRotate every page by a multiple of 90 degrees.
Parameters
filefilerequiredThe PDF to rotate.
angleintoptional90, 180 or 270. Default 90.
Returns: PDF file · rotated.pdf
curl -X POST https://smallpdf.us/api/v1/rotate \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-F "angle=90" \
-o rotated.pdfConvert
/v1/pdf-to-wordPDF to WordConvert a PDF into an editable Word (.docx) document with layout preserved.
Parameters
filefilerequiredThe PDF to convert.
Returns: Word .docx file · converted.docx
curl -X POST https://smallpdf.us/api/v1/pdf-to-word \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-o converted.docx/v1/word-to-pdfWord to PDFConvert a Word document (.doc, .docx, .odt, .rtf) into a PDF.
Parameters
filefilerequiredThe document to convert.
Returns: PDF file · converted.pdf
curl -X POST https://smallpdf.us/api/v1/word-to-pdf \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.docx" \
-o converted.pdf/v1/pdf-to-jpgPDF to JPGRender each PDF page to a JPG image. Returns a ZIP archive.
Parameters
filefilerequiredThe PDF to convert.
qualitystringoptionalstandard (150dpi) · high (300) · maximum (600).
Returns: ZIP archive of images · pages.zip
curl -X POST https://smallpdf.us/api/v1/pdf-to-jpg \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-F "quality=high" \
-o pages.zip/v1/pdf-to-pngPDF to PNGRender each PDF page to a PNG image. Returns a ZIP archive.
Parameters
filefilerequiredThe PDF to convert.
qualitystringoptionalstandard · high · maximum.
Returns: ZIP archive of images · pages.zip
curl -X POST https://smallpdf.us/api/v1/pdf-to-png \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-F "quality=high" \
-o pages.zip/v1/jpg-to-pdfJPG to PDFCombine one or more JPG images into a single PDF (one image per page).
Parameters
filesfile[]requiredOne or more JPG images.
Returns: PDF file · images.pdf
curl -X POST https://smallpdf.us/api/v1/jpg-to-pdf \
-H "X-API-Key: YOUR_API_KEY" \
-F "files=@image1.jpg" \
-F "files=@image2.jpg" \
-o images.pdf/v1/png-to-pdfPNG to PDFCombine one or more PNG images into a single PDF (one image per page).
Parameters
filesfile[]requiredOne or more PNG images.
Returns: PDF file · images.pdf
curl -X POST https://smallpdf.us/api/v1/png-to-pdf \
-H "X-API-Key: YOUR_API_KEY" \
-F "files=@image1.png" \
-F "files=@image2.png" \
-o images.pdfOptimize
/v1/compressCompress PDFReduce a PDF's file size with lossless stream compression.
Parameters
filefilerequiredThe PDF to compress.
Returns: PDF file · compressed.pdf
curl -X POST https://smallpdf.us/api/v1/compress \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-o compressed.pdfSecure
/v1/protectProtect PDFEncrypt a PDF with AES-256 so it can only be opened with the password.
Parameters
filefilerequiredThe PDF to protect.
passwordstringrequiredPassword required to open the file.
Returns: PDF file · protected.pdf
curl -X POST https://smallpdf.us/api/v1/protect \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@input.pdf" \
-F "password=secret123" \
-o protected.pdfPlans & quota
| Plan | API calls | Price |
|---|---|---|
| Free | 50 / month | $0 |
| Starter | 1,000 / month | $9/mo |
| Pro | 10,000 / month | $19/mo |
| Max | 100,000 / month | Contact sales |
Quota resets on the 1st of each month (UTC). Only successful calls count. See full pricing →
Status & error codes
| HTTP | Code | Meaning |
|---|---|---|
| 200 | — | Success. The processed file is returned in the body. |
| 400 | BAD_INPUT | Missing or invalid file / parameters. |
| 401 | NO_API_KEY · BAD_API_KEY | Missing, invalid or revoked key. |
| 429 | QUOTA_EXCEEDED | Monthly quota used up — upgrade your plan. |
| 500 | PROCESSING_ERROR | The file could not be processed. |
Start building today
Create a free API key and make your first call in under a minute.
Get your API key