---
title: "HTML to PDF"
method: POST
path: "/pdf"
tags: ["PDF"]
---

# HTML to PDF

`POST /pdf`

## Request

- Base URL: `https://api.cofferdock.com`
- URL: `https://api.cofferdock.com/pdf`
- Auth: API key in header `x-api-key`

Renders HTML into a PDF (invoices, reports, tickets, contracts). Same rendering engine as /capture: inline CSS, web fonts and images allowed, no JavaScript. Send either html, or template + data (the "invoice" template works well as a PDF).

Costs 1 credit per call.

## Request body

- object
  - `html` string: The HTML to render (max 5 MB). Required unless you use template.
  - `template` 'social' | 'og' | 'invoice' | 'receipt' | 'certificate' | 'youtube': Use one of our ready-made designs instead of sending html. Fields, example texts and sizes: https://cofferdock.com/templates.json
  - `data` object: Texts for the template, e.g. { "name": "Jane Doe", "course": "n8n basics" } for "certificate". Plain text only: everything is escaped. Fields you leave out keep the example text.
  - `lang` 'en' | 'es': Language of the example texts of the template.
  - `format` 'A4' | 'A3' | 'A5' | 'Letter' | 'Legal' | 'Tabloid': Paper size.
  - `landscape` boolean: true = landscape page, false (default) = portrait.
  - `margin` integer: Margin in millimetres, same on all four sides.
  - `print_background` boolean: Print background colours and images.
  - `scale` number: Content scale factor (0.1-2). Default 1; use a value below 1 to fit more on each page.
  - `output` 'json' | 'binary' | 'url' | 'pdf': How to return the PDF: "json" (base64 in the JSON response), "binary" (the PDF itself, ready for n8n/Make/Zapier) or "url" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw.

## Response `200`

The resulting PDF (shape depends on `output`).

- union
  - object
    - `success` boolean
    - `pdf` string, byte
    - `mime_type` 'application/pdf'
    - `meta` object
      - `size_bytes` integer
      - `format` string
      - `used` integer: Credits used this month, after this call.
      - `remaining` integer, nullable: Credits left this month (null = unlimited).
      - `unlimited` boolean
  - object: Returned when output=url: a temporary download link (valid 15 minutes).
    - `success` boolean
    - `url` string, uri: Temporary download link. Expires in 15 minutes.
    - `expires_at` string, date-time
    - `mime_type` string
    - `size_bytes` integer
    - `meta` object
      - `used` integer: Credits used this month, after this call.
      - `remaining` integer, nullable: Credits left this month (null = unlimited).
      - `unlimited` boolean

## Other responses

- `400`: Invalid input (nothing is charged).
- `401`: Missing or invalid API key.
- `403`: Email not verified.
- `422`: An image, font or stylesheet linked from the HTML did not finish loading within 20 seconds. The body says which sites (`hosts`). The credit is not charged.
- `429`: Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).
- `503`: Server busy (queue full). Retry after the seconds in the Retry-After header.

---

[API](https://skmtc.dev/cofferdock/apis/cofferdock-api.md) · [All operations](https://skmtc.dev/cofferdock/apis/cofferdock-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cofferdock/apis/cofferdock-api/revisions/b57aa000d33a?raw)
