HTML to PDF API

The same API and endpoints as image rendering, with one extra parameter. We render your HTML, CSS or URL in real Chrome and return a real vector PDF, not a screenshot in a wrapper.

Free for the first 25 renders a month. No credit card.
html-to-pdf.sh bash
curl -X POST https://app.html2img.com/api/html \
  -H 'X-API-Key: your-key-here' \
  -H 'Content-Type: application/json' \
  -d '{
    "html": "<h1>Invoice #1042</h1><p>Due within 30 days.</p>",
    "css": "h1 { color: #4f46e5; }",
    "format": "pdf"
  }'

One parameter, two endpoints

Add format: "pdf" to a request you already make. The HTML endpoint turns your markup into a document. The Screenshot endpoint turns any public URL into one.

From your own HTML

POST /api/html
{
  "html": "<h1>Invoice #1042</h1>",
  "format": "pdf"
}
html parameter docs

From any URL

POST /api/screenshot
{
  "url": "https://example.com",
  "format": "pdf"
}
url parameter docs

The MCP server exposes the same option, so an AI agent can produce a PDF from a single tool call.

Real PDFs, not screenshots in a wrapper

Plenty of tools rasterise your page and glue the image into a PDF shell. That gives you a file nobody can search. This is not that.

Selectable, searchable text

Open the file and highlight a sentence. Search it, copy it, paste it. The text layer is real, not a picture of letters.

Webfonts embedded

Google Fonts, Adobe Fonts and self-hosted @font-face all load server-side and are embedded in the document, so the PDF looks the same on every machine.

Vector everywhere it counts

Text, borders, shapes and gradients stay sharp at any zoom level. Only genuine raster content, your img tags and canvases, is embedded as pixels.

Automatic pagination

Long content flows across as many A4 pages as it needs. A 15 section report becomes a clean multi-page document without any extra parameters.

Backgrounds included

Background colours, gradients and images print by default. No pale, half-styled output to work around.

Served from the CDN

The response url points to a .pdf file on i.html2img.com, delivered as application/pdf from a global edge network.

What people build with it

Invoices

Render the invoice your customer sees in the browser as the PDF you attach to the email. Same markup, same styles, one extra parameter on the request.

Receipts

Fire a render from your payment webhook and store the returned URL against the order. The receipt is searchable later because the text layer is real.

Reports

A monthly report built as one long HTML page paginates on its own. Charts render as crisp vectors if you draw them with CSS or SVG.

Certificates

Generate a certificate per attendee from a loop in your code. Names stay selectable, so the file works with screen readers and copy-paste.

Event tickets

Send the ticket as a PDF attachment people can print or keep offline. The same HTML can also render as a PNG for the confirmation screen.

Printable versions

Anything you already generate as an image can ship as a document instead. Change format, keep everything else.

Turn any URL into a PDF

Archive release notes, snapshot a pricing page before a change, or keep a record of a page you do not control. The Screenshot endpoint loads the URL in Chrome and returns the rendered page as a document.

url-to-pdf.sh bash
curl -X POST https://app.html2img.com/api/screenshot \
  -H 'X-API-Key: your-key-here' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/release-notes",
    "format": "pdf",
    "webhook_url": "https://your-app.com/hooks/pdf-ready"
  }'

Third-party pages load at their own pace. Pass a webhook_url for slow renders and we deliver the finished file to you instead of holding the request open.

The scope, stated plainly

PDF output is built for parity with the image renderer: the PDF looks exactly like the PNG of the same input would. That design has three consequences worth knowing before you integrate.

Pages are A4 portrait for now. Long content paginates automatically, but you cannot pick US Letter, landscape or custom sizes.

Rendering uses your normal screen CSS. @media print rules are not applied, so everything the document needs belongs in your standard styles.

The sizing parameters (width and height, dpi, fullpage and selector) do not apply in PDF mode. Content reflows to the page width, and vector output is already sharp at any zoom level.

If your project needs precise page geometry, headers and footers or print stylesheets, a dedicated PDF service will serve you better. If you want the document to match what you already render as an image, this does exactly that.

Compared to running your own renderer

wkhtmltopdf renders with a WebKit build that predates most of the CSS you write today, and the project is no longer maintained. Grid and flexbox layouts degrade or fail, and you carry the binary in every environment that renders.

Headless Puppeteer gives you current Chrome, but now you host it: a browser binary in your deploy, memory tuning, crash recovery and security patches on your schedule. That is a reasonable trade for some teams and a distraction for most.

HTML to Image runs current Chrome for you. There is nothing to install, nothing to patch and no browser in your build artefacts. You make an HTTP request and get a URL back.

One credit per PDF

A PDF render costs the same single credit as an image render, from the same monthly pool. No separate PDF tier, no multiplier. See pricing.

The response you get back

The usual JSON envelope, with the url pointing at a .pdf file served as application/pdf. The getting started guide covers the full request and response shape.

response.json json
{
  "success": true,
  "id": "9d5f9b52-6b32-4a1c-a9c5-1f0b2a9e4c11",
  "credits_remaining": 499,
  "url": "https://i.html2img.com/image-1784019129398-416501.pdf"
}

Frequently asked questions

Is the text in the PDF selectable?

Yes. The output is a vector PDF with a real text layer and embedded fonts, so text can be selected, searched and copied in any PDF viewer. Only genuine raster content, such as img elements and canvases, is embedded as pixels.

What page size do PDFs use?

A4 portrait, and long content paginates across pages automatically. Other page sizes and orientations are not available yet, so if your project needs US Letter or landscape output today, a dedicated PDF service will fit better.

Do my @media print styles apply?

No. The PDF is rendered with your normal screen CSS so it looks like the image output would. Put everything the document needs in your standard styles rather than in a print stylesheet.

What does a PDF render cost?

One credit, exactly the same as an image render. The free tier covers 25 renders a month across images and PDFs, with no credit card. See pricing for the paid tiers.

Can templates return PDFs?

Not yet. The named template endpoints output PNG only for now. To produce a PDF of document-shaped content such as an invoice, send your own markup through the HTML endpoint with format set to pdf.

Can I convert a live URL to a PDF?

Yes. Send the URL to the Screenshot endpoint with format set to pdf and we load the page in Chrome and return the document. For slow third-party pages, pass a webhook_url and we deliver the finished file asynchronously.

How is this different from wkhtmltopdf?

wkhtmltopdf renders with an old WebKit build and is no longer maintained, so modern CSS such as grid and flexbox degrades or fails. HTML to Image renders in current Chrome, there is nothing to install or patch, and no browser binary ships in your deploy.

Render your first PDF

25 renders a month on the free tier, images and PDFs alike. No credit card.