PDF API · live at api.printxpdf.com

Convert files from your own software.

This page is for developers. A handful of jobs (PowerPoint layout, ebooks, PDF passwords) need software a browser does not have, so they run on our server. Your program sends a file in one request and gets the converted file back. Files are handled in a sealed-off workspace and deleted the moment the reply is sent.

Live

One request

curl -X POST https://api.printxpdf.com/convert/ppt-to-pdf \
  -H "Authorization: Bearer $PRINTXPDF_KEY" \
  -F "file=@deck.pptx" \
  --output deck.pdf

Without a key you get 5 free conversions a month per internet connection (IP address). Each reply carries x-pxp-usage: used/limit and acontent-disposition file name.

EndpointAcceptsReturns
POST /convert/ppt-to-pdf.ppt .pptx .pps .ppsx .odpPDF
POST /convert/pdf-to-ppt.pdfPPTX with editable pages
POST /convert/epub-to-pdf.epubPDF, A4, page numbers
POST /convert/mobi-to-pdf.mobi .azw .azw3 .prcPDF, A4, page numbers
POST /convert/protect-pdf.pdf + password, ownerPassword?, permissions?AES-256 encrypted PDF
POST /convert/unlock-pdf.pdf + passwordthe same PDF without its password
POST /convert/pdf-to-pdfa.pdf + level (1b | 2b | 3b)PDF/A for archiving
GET /fetch?url=a page URLits HTML, for the web-page cleaner

Plans and limits

PlanConversions / monthKey
Free5 per IP addressnone
Pro · $3.99300yes
API · $19.995,000yes, valid for one year
Lifetime · $119 once300yes

Your access key

Get a key with the Pro or API plan. Keys are shown under Account, then Access key.

Errors

When something fails you get a short JSON reply like { "error", "code" }:

401 invalid_tokenThe key is missing, malformed, expired or rotated.
402 quota_exceededFree allowance used up; the body has used and limit.
402 subscription_inactiveThe subscription behind the key is cancelled or unpaid.
413 too_largeFiles are limited to 100 MB.
415 unsupported_media_typeWrong file type for that address (we check the file contents, not just the file name).
415 drm_protectedThe ebook is copy-protected (DRM) and cannot be converted.
429 rate_limited / quota_exceededSlow down, or the paid quota is used up for the month.
503 busyEvery converter is busy; wait the number of seconds given in Retry-After and try again.
504 timeoutThe job passed the two-minute limit.

Self-hosting

The whole API, including the conversion container, is open source in the worker/ directory of the repository. Deploy it to your own Cloudflare account with wrangler deploy and point the site at it with VITE_API_BASE.