LibreOffice as an API
Office files go in.
Real PDFs come out.
docxsdk turns Word, Excel and PowerPoint files into PDFs that match the original, fills Word templates and PDF forms from JSON, and reads any document back as clean Markdown. One HTTPS call from Vercel, Supabase or Workers, and no 400 MB office suite to ship.
- Real LibreOffice, not headless Chrome
- $0.002 per page, no plan
- First 500 pages free
Runs from anywhere you can make an HTTPS request
- Vercel
- Supabase
- Workers
- Netlify
- Lovable
- Bolt
- n8n
- Make
- Node.js
- Python
Why it breaks on deploy
LibreOffice doesn't fit in a serverless function
It works on localhost because LibreOffice is installed there. Then you deploy, and you get one of these.
libreoffice-convert
$ node convert.js
Error: Could not find soffice binary
The npm package is a wrapper. It still needs LibreOffice on the machine, which your laptop has and your serverless function doesn't.
Vercel
$ vercel deploy --prod
Error: The Vercel Function "api/convert" is 412.6mb uncompressed which exceeds the maximum uncompressed size limit of 250mb.
So you bundle LibreOffice yourself. A function stops at 250 MB unzipped by default, and the leanest headless LibreOffice build unpacks to about 400 MB.
Cloudflare Workers
$ wrangler tail
Error: [unenv] child_process.spawn is not implemented yet!
Workers can't start another program at all, and a Worker tops out at 64 MB of code and 128 MB of memory anyway.
docxsdk keeps LibreOffice on our servers. You send one HTTPS request and get the file back.
See the requestFeatures
POST /v1/convert
Office files to PDFs that look like the original
LibreOffice renders the real document instead of a browser guessing at its HTML, so tables, headers, page numbers and landscape sheets land where Word, Excel and PowerPoint put them.
- DOCX, DOC, ODT, RTF, XLSX, XLS, ODS, CSV, PPTX, PPT, ODP and HTML
- Microsoft core fonts, Carlito and Caladea built in, or send your own
- PDF/A-2b for archives, page ranges, wide sheets fit to the page
POST /v1/convert
4 files, 36 pages
- DOCXproposal.docxPDF12 pages1.8 s
- XLSXq3-model.xlsxPDF4 pages1.1 s
- PPTXboard-deck.pptxPDF18 pages
- ODTbrief.odtPDF2 pagesqueued
POST /v1/render + /v1/forms/fill
Fill Word templates and PDF forms from JSON
Design the invoice, contract or certificate in Word, where your team already works. Drop in tags, send your data, and get a PDF or an editable DOCX back.
{client.name}tags,{#items}loops for table rows,{#paid}conditions- Images, nested data and repeating rows from the same JSON
- PDF forms: fields filled by name, then flattened so nobody edits them
POST /v1/extract
Turn PDFs and Word files into Markdown an LLM can read
Real tables instead of a soup of numbers, headings and lists in reading order, and a page number on every block so answers can cite their source.
- Markdown tables that keep their rows and columns
- JSON blocks with page numbers, ready for chunking
- OCR only on pages that are images, at $0.008 a page
Use cases
The documents your app already promises
The jobs that get pushed to next sprint because nobody wants to run LibreOffice in production.
Invoices and receipts
Fill one Word template from your billing data and attach a PDF to every charge.
3,000 invoices a month$6
Contracts and proposals
Merge names, terms and prices into the contract your lawyer already signed off on.
A 12-page proposal$0.024
Reports and decks
Send the spreadsheet model or the board deck as a PDF that opens the same everywhere.
A 40-page board pack$0.08
AI and RAG ingestion
Feed contracts, filings and scans to your model as Markdown, tables intact.
A 300-page report$0.60
API
Four endpoints, one API key
Every endpoint takes a file or a URL and hands back a file or Markdown. Same auth, same job format, same balance.
- Waits for the fileSmall jobs answer in the same request, within 60 seconds. Longer ones return a job id to poll.
- Or calls you backPass a webhook_url and we POST the result there, signed with HMAC-SHA256.
- Upload it or link itSend the file itself or a URL to it, up to 50 MB and 500 pages per job.
- Gone when doneInputs are deleted when the job ends. Outputs expire after 24 hours.
POSTapi.docxsdk.com/v1/convert
curl https://api.docxsdk.com/v1/convert \
-H "Authorization: Bearer $DOCXSDK_API_KEY" \
-F file=@proposal.docx \
-F pdfa=2bResponse200 OK in 1.8 s
{
"id": "job_7HkQ2mWx",
"status": "succeeded",
"pages": 12,
"cost_usd": 0.024,
"output": {
"url": "https://files.docxsdk.com/job_7HkQ2mWx/proposal.pdf",
"content_type": "application/pdf",
"bytes": 412803,
"expires_at": "2026-10-28T09:41:07Z"
}
}Pricing
Pay per page. Credit never expires.
No plans, no seats, no monthly minimum. Top up from $5 and every endpoint draws from the same balance.
- Convert, render, forms, extract
- $0.002a page
- Pages that need OCR
- $0.008a page
- Past 100,000 pages a month
- $0.001a page
- Your first $1
- Free500 pages
$6a month, no plan to pick
3,000 one-page invoices a month
What it costs on the cheapest plan that covers it
- docxsdkPay as you go, 3,000 pages$6
- PDFMonkeyPro, 3,000 documents€15a month
- APITemplate.ioBasic, 3,000 PDFs$19a month, billed yearly
- PDF.coBusiness 1, 80,500 credits, 21 per DOCX page$44.99a month, billed yearly
- CarboneEssential Plus, 5,000 documents€95a month
- DocRaptorMax, 5,000 documents$149a month
List prices from each vendor's own pricing page, checked October 26, 2026. Euro prices are shown in euros.
FAQ
Questions, answered
What does docxsdk do?
It's an HTTPS API for the document jobs that need a real office suite: Word, Excel and PowerPoint files to PDF, Word templates and PDF forms filled from JSON, and PDFs or Word files turned into Markdown for LLMs. LibreOffice runs on our servers, you send a request.
Which formats can I send?
Word (DOCX, DOC, ODT, RTF), Excel (XLSX, XLS, ODS, CSV), PowerPoint (PPTX, PPT, ODP) and HTML. You get back a PDF or PDF/A-2b. Extract also reads PDFs, scanned ones included, and returns Markdown or JSON.
Will the PDF look like it does in Word?
As close as LibreOffice gets, which is very close. We ship the Microsoft core fonts plus Carlito and Caladea, which have the same letter widths as Calibri and Cambria, so lines and pages break where Word breaks them. Using a brand font? Send the .ttf or .otf along with the file.
How do templates work?
Write the document in Word with tags like {client.name}. Wrap a table row in {#items} and {/items} to repeat it for every item, and put a block between {#paid} and {/paid} to show it only when paid is true. POST the .docx with your JSON and get a PDF or an editable DOCX back. PDF forms work the same way: fields are matched by name, and flatten locks them.
What happens to my files?
Input files are deleted the moment a job finishes. Outputs sit behind a signed URL for 24 hours, then they're gone too. We never train on your documents.
Does it work from Vercel, Supabase or Cloudflare Workers?
That's the point. It's one fetch call with a Bearer key, so it runs from any serverless function, edge runtime, n8n flow or Lovable app, and you never ship or babysit LibreOffice.
How does billing work?
Prepaid credit. Convert, render, forms and extract cost $0.002 a page, pages that need OCR cost $0.008, and every page past 100,000 in a month costs $0.001. Your first $1 is free, top-ups start at $5 and credit never expires.
Start free
Try it with your ugliest Word file
Your first $1 is free: 500 pages across every endpoint, no card needed for a key.
