Reference

PDF to Word

The PDF-to-Word lane keeps the current multipart upload contract while reusing the same auth, queued job lifecycle, and download flow as the rest of the API.

Reference
View as Markdown

Reference

Endpoint Reference

POST/v1/pdf/to-word

Queue a PDF-to-DOCX conversion using the existing multipart service contract through the shared gateway.

Auth

Bearer token required.

Idempotency

Supports optional Idempotency-Key replay protection and upload digest hints.

Content Type

multipart/form-data

Headers

NameTypeRequiredLocationDescription
AuthorizationBearer <API_KEY>YesheaderUser-owned API key created in the DocuShell dashboard.
Idempotency-KeystringNoheaderRecommended for safely retrying submit requests without creating duplicate jobs.
X-File-NamestringNoheaderOptional idempotency and metadata hint for uploaded files.
X-File-SizeintegerNoheaderOptional caller-declared byte size.
X-File-SHA256stringNoheaderOptional digest used when deduplicating retries.

Request Fields

NameTypeRequiredLocationDescription
filefileYesmultipartSource PDF upload.
optionsJSON stringNomultipartOptional conversion settings such as ocr or output format.

Request Notes

  • The public lane passes the existing multipart request through to the internal converter, so the body shape matches the current service contract.

Convert to Word

bash

curl -X POST "https://api.docushell.com/api/v1/pdf/to-word" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: word-demo-001" \
  -H "X-File-Name: contract.pdf" \
  -F "file=@./contract.pdf;type=application/pdf" \
  -F 'options={"ocr":false,"format":"docx"}'

Try It Now

Console placeholder for safe sandbox execution.

Coming soon

Queued response

json

{
  "job_id": "job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT",
  "status": "queued",
  "cost": 20,
  "service": "pdf-to-word",
  "request_id": "req_01JX8Y62XCDNZ2BM7TBM2M9Q8E",
  "links": {
    "status": "/v1/jobs/job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT",
    "download": "/v1/jobs/job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT/download"
  }
}

Status response

json

{
  "job_id": "job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT",
  "status": "done",
  "service": "pdf-to-word",
  "request_id": "req_01JX8Y62XCDNZ2BM7TBM2M9Q8E",
  "result": {
    "filename": "quarterly-report.docx",
    "sizeBytes": 184322,
    "download": "/v1/jobs/job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT/download"
  },
  "completed_at": "2026-04-24T10:12:56.145Z",
  "links": {
    "status": "/v1/jobs/job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT",
    "download": "/v1/jobs/job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT/download"
  }
}
Completed jobs return a public download link and keep the file streaming URL behind the gateway. Downloads use application/vnd.openxmlformats-officedocument.wordprocessingml.document.

Poll And Download

  • Completed jobs stream one DOCX file from GET /v1/jobs/:jobId/download.
  • See [Quickstart](/getting-started#queued-response) for the shared submit, poll, and download flow.

Failure Notes

  • Missing uploads and invalid option payloads return invalid_request style failures before the job is queued.
  • Uploads larger than 1 GB are rejected before the worker handoff.
  • backend_unavailable indicates the converter was unreachable before the job could be accepted.

Upload too large

400invalid_request

The public route enforces a hard 1 GB ceiling on uploads.

400 error

json

{
  "error": {
    "code": "invalid_request",
    "message": "Upload exceeds maximum allowed size (1 GB).",
    "type": "invalid_request_error",
    "request_id": "req_01JX8Y62XCDNZ2BM7TBM2M9Q8E"
  }
}