Reference
Markdown to PDF
This endpoint accepts Markdown and a small set of rendering options, then delivers the finished PDF through the shared DocuShell jobs API.
Reference
Reference
Endpoint Reference
POST/v1/markdown-to-pdf
Queue a Markdown render job and download the finished PDF through the shared jobs API.
Auth
Bearer token required.
Idempotency
Supports optional Idempotency-Key replay protection.
Content Type
application/json
Headers
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
| Authorization | Bearer <API_KEY> | Yes | header | User-owned API key created in the DocuShell dashboard. |
| Idempotency-Key | string | No | header | Recommended for safely retrying submit requests without creating duplicate jobs. |
| Content-Type | application/json | Yes | header | JSON body with Markdown content. |
Request Fields
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
| markdown | string | Yes | body | Markdown source. The public lane enforces a 2 MB request body limit. |
| file_name | string | No | body | Optional source name used to derive the output filename. |
| page_size | A4 | Letter | Legal | No | body | Target print size for the generated PDF.Default: A4 |
First request
bash
curl -X POST "https://api.docushell.com/api/v1/markdown-to-pdf" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-001" \
-d '{
"markdown": "# DocuShell\n\nRendered through the public API.",
"file_name": "quickstart.md",
"page_size": "A4"
}'Try It Now
Console placeholder for safe sandbox execution.
Queued response
json
{
"job_id": "job_01JX8Y5YJ2M2D8N1AQ5F7Q3KVT",
"status": "queued",
"cost": 5,
"service": "markdown-to-pdf",
"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": "markdown-to-pdf",
"request_id": "req_01JX8Y62XCDNZ2BM7TBM2M9Q8E",
"result": {
"filename": "quarterly-report.pdf",
"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/pdf.
Poll And Download
- Completed jobs stream one
application/pdffile fromGET /v1/jobs/:jobId/download. - See [Quickstart](/getting-started#queued-response) for the shared submit, poll, and download flow.
Failure Notes
- Malformed JSON or missing
markdowncontent returnsinvalid_request. - Bodies larger than 2 MB are rejected before a job is created.
backend_unavailableindicates the render service was unreachable before the queue handoff completed.
Oversized request body
400invalid_requestThe Markdown payload or overall JSON request exceeds the configured 2 MB limit.
400 error
json
{
"error": {
"code": "invalid_request",
"message": "Request body exceeds the 2 MB limit.",
"type": "invalid_request_error",
"request_id": "req_01JX8Y62XCDNZ2BM7TBM2M9Q8E"
}
}