Convert PDF to Word
A PDF is a finished document, not a working one — the moment someone needs to fix a typo, update a clause, or repurpose a report, the format fights back. This endpoint converts a PDF into a real, editable DOCX so the file can be worked on again instead of retyped.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Why PDFs resist editing on purpose
PDF was built in the early 1990s to guarantee a document looks the same on any machine, which means it stores pages as fixed layouts of glyphs and positions rather than as flowing, structured text. That design choice is exactly why PDFs are trustworthy for sharing and terrible for editing: there is no paragraph to click into, no list to renumber, just shapes that happen to read as words. doc.pdf_to_word reverses that trade-off for the cases where editing matters more than fixed layout.
What actually happens during conversion
Send the file to POST /doc/pdf-to-word, get a task_id immediately, and receive the resulting DOCX by webhook or a signed link valid for 24 hours once the job finishes. Behind that single call, the page geometry gets reconstructed into paragraphs, headings, tables and lists so the output opens in any word processor as a document someone can actually type into, not a picture pretending to be one.
Where the conversion has limits
Text-based PDFs — the ones exported from a word processor or generated by software — convert with the most faithful structure, since the underlying text is already there to extract and re-flow. Scanned PDFs, which are really just images of pages, need character recognition first, and dense multi-column layouts or heavily designed pages will never map perfectly onto a linear document format; expect a close, workable draft rather than a pixel-identical clone.
Who reaches for this instead of retyping
Legal teams pull an old contract out of a PDF archive to redline a new version. HR departments update a policy document that only survives as a scanned PDF from years ago. Students and researchers convert a paper to extract and requote sections without transcribing paragraphs by hand. In every case, the alternative was manual retyping, and this endpoint replaces that hour of work with one API call.
How it slots into a document pipeline
Because the task is asynchronous and billed per request plus per page, it fits naturally into a batch job that walks a folder of PDFs overnight, or a single conversion triggered from a support ticket. The endpoint is finishing its rollout now, so plan integrations expecting availability soon, with the same async contract — submit, get a task_id, collect the result — that the rest of the API follows.
What you can do with it
Redlining an old contract
A law firm converts a signed PDF agreement back into DOCX so it can track changes and negotiate an amendment in a word processor.
Reviving a scanned policy manual
An HR team turns a years-old scanned employee handbook, saved only as PDF, into an editable document they can finally update.
Quoting a research paper
A graduate student converts a journal PDF to extract and requote passages for a literature review instead of retyping them.
Batch archive migration
A records department runs an overnight job converting a folder of historical PDF reports into DOCX for a document management system.
FAQ
How do I convert a PDF to Word with the API?
Send it to POST /doc/pdf-to-word, store the task_id you get back, and receive the DOCX file by webhook or a signed link valid for 24 hours.
Is the PDF to Word API free?
No, there's no free tier or trial. It costs $0.051 per request plus $0.003 per page, and a failed conversion is never charged.
Does it work on scanned PDFs?
Scanned PDFs are images of pages, so they need character recognition before conversion; text-based PDFs convert with more accurate structure.
Will the DOCX look exactly like the PDF?
Simple documents map closely; complex layouts with multiple columns or heavy design elements convert into a close, editable approximation rather than a pixel-perfect copy.
Is the endpoint live right now?
It's finishing deployment and should be accepting jobs soon; integrate against the documented contract now so you're ready when it opens.
Can I convert large or multi-page PDFs?
Yes, pricing scales per page on top of the base request fee, so long reports and short letters are both handled by the same call.
Can I batch-convert many PDFs at once?
Yes, submit each file as its own async task and collect the DOCX results by webhook as each one finishes.
What happens to my file after conversion?
The PDF and the resulting DOCX are deleted after the retention window and are never used to train any model.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/doc/pdf-to-word \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pdf":"https://ejemplo.com/contrato.pdf"}'const res = await fetch("https://api.kit.forhosting.com/doc/pdf-to-word", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pdf": "https://ejemplo.com/contrato.pdf"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/pdf-to-word",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pdf": "https://ejemplo.com/contrato.pdf"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/pdf-to-word", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pdf":"https://ejemplo.com/contrato.pdf"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pdf":"https://ejemplo.com/contrato.pdf"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/pdf-to-word", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"pdf": "https://ejemplo.com/contrato.pdf"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.pdf_to_word",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 25 |
max_pages | 200 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
413 | input_too_large | The file exceeds the size limit. |