Inkspan › Guides › How to convert Markdown to PDF in Python
Markdown is the most convenient format to generate programmatically and the least convenient to hand to a customer. The /v1/generate/markdown endpoint closes that gap: send Markdown, get a styled PDF. It is the shortest path from a generated report, a changelog, or LLM output to a document someone can file or print.
Tables and fenced code blocks are enabled, which covers most of what generated reports actually use. Markdown is converted to HTML and then rendered through the same engine as /v1/generate/html.
import requests
r = requests.post(
'https://api.inkspan.dev/v1/generate/markdown',
headers={'X-API-Key': 'ink_live_...'},
json={
"markdown": "# Q3 Report\n\n| Metric | Value |\n|---|---|\n| Signups | 1200 |"
},
)
r.raise_for_status()
with open('document.pdf', 'wb') as f:
f.write(r.content)
| Name | Type | Required | Description |
|---|---|---|---|
markdown | string | yes | Markdown source. GitHub-style tables and fenced code blocks are supported. |
filename | string | no | Filename in the response's Content-Disposition. |
Returns a PDF as a binary stream with Content-Type: application/pdf and Content-Disposition: attachment; filename=document.pdf. Write the response body straight to disk — do not parse it as JSON.
/v1/generate/html.<div style='page-break-after:always'></div>).\n when embedding Markdown in a JSON request body.| Status | Meaning | Fix |
|---|---|---|
401 | Invalid or missing API key | Send your key in the X-API-Key header. |
402 | Monthly quota exceeded | The response reports used/quota. Upgrade at inkspan.dev/#pricing. |
422 | Missing or invalid parameter | Check required fields in the table above — the body names the offending field. |
Failed requests do not count against your quota; only successful ones are metered.
Not from this endpoint. Convert the Markdown to HTML in your own code, wrap it in a styled document, and POST that to /v1/generate/html instead.
No. Diagrams are not rendered — generate the image separately and reference it with an absolute URL.
Yes, this is a common use. Models emit Markdown naturally, so this endpoint is usually the last step in an agent pipeline that produces a report.
Get a free API key →Related Generate guides: generate a PDF from HTML · generate a PDF from a template