A PDF API for developers and AI agents. No template editor, no template IDs, no dashboard. One POST request, or one MCP tool call. Markdown comes with a stylesheet that makes agent-written documents look right by default.
| built for | invoices · receipts · reports · agent output |
| send | Markdown, HTML, or a public URL |
| get back | PDF bytes, or a link that expires in an hour |
# Invoice #42 | Item | Price | |--------|--------| | Widget | $9.00 |
| Item | Price |
|---|---|
| Widget | $9.00 |
| Gadget | $24.00 |
# no signup needed, 10 seconds curl -X POST https://mintpdf.dev/v1/pdf \ -H "Content-Type: application/json" \ -d '{"markdown":"# Invoice #42\n\n| Item | Price |\n|---|---|\n| Widget | $9.00 |\n| Gadget | $24.00 |","pageNumbers":true}' \ --output invoice.pdf # → 200 application/pdf · one A4 page, table already styled # want a link instead of bytes? add: "output": "url" → {"download_url": "…", "expires_at": "…"}
# one line in your MCP config "mintpdf": { "command": "npx", "args": ["-y", "mintpdf-mcp"] } # or point straight at the hosted endpoint with mcp-remote: # …railway.app/mcp
| tools | generate_pdf · pdf_from_url |
| transport | streamable HTTP, stateless |
| returns | download URL, 1h TTL |
# send content, not a template id $ curl -sS -X POST https://mintpdf.dev/v1/pdf \ -H 'Content-Type: application/json' \ -d '{"markdown":"# Q3 report\n\nRevenue grew **12%**.", "pageNumbers":true, "footerText":"Acme Ltd"}' \ -o report.pdf -D - HTTP/2 200 content-type: application/pdf x-ratelimit-remaining: 2 $ pdfinfo report.pdf | head -3 Pages: 3 Page size: 595 x 842 pts (A4) File size: 166 kB # prefer a link? add "output":"url" $ curl -sS …/v1/pdf -d '{"markdown":"# Hi","output":"url"}' {"download_url":"https://mintpdf.dev/f/…", "expires_at":"…","size_bytes":6751} ✓ # the file is deleted an hour later
One POST, or one MCP tool call from an agent. No template to design first, no template id to keep in sync with your code.
Markdown gets a stylesheet that keeps code blocks and tables whole across page breaks and repeats table headers. Send HTML instead and your own CSS is used as-is.
Stream the file straight into your response, or take a download URL valid for one hour. Nothing is stored afterwards.
One email, one key, no card. Or try 3 renders a day with no signup at all.
# or from the terminal curl -X POST …/v1/keys \ -d '{"email":"you@example.com"}'
| format | A4 · Letter · Legal · A3 · A5 |
| margin | any, e.g. "18mm" |
| landscape | true / false |
| header / footer | text on every page |
| pageNumbers | "3 / 7" in footer |
| engine | Chromium. Your CSS works |
Your documents are rendered and forgotten. Generated files auto-delete after one hour. No accounts, no document storage, no tracking of what you render. Requests to private and internal addresses are blocked at the browser layer.