# Gotenberg

> Turn web pages, HTML, Markdown and Word, Excel or PowerPoint files into PDFs and pictures with Gotenberg, the open source document converter you run yourself. Merge, split, rotate, watermark, compress and password-protect PDFs, make archive-ready PDF/A files, and read or set a PDF's properties.

App · 20 actions. Web page: https://docs.lodol.com/docs/integrations/gotenberg

## Actions

### Add a watermark to a PDF

Write text such as CONFIDENTIAL or DRAFT, or place an image such as a logo, across the pages of a PDF.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Watermark (`watermark`, text): Whether the watermark is words or a picture. One of: `text`, `image` (An image, such as a logo). Default: `text`.
- Text (`text`, text): The words to write across each page. Only when Watermark is Text.
- Image (`image`, text): The picture to place on each page: a PNG, JPEG or WebP. Upload one, or pick one from an earlier step. Only when Watermark is An image, such as a logo.
- Colour (`colour`, text): The colour of the words. Only when Watermark is Text. One of: `grey`, `red`, `blue`, `green`, `black`. Default: `grey`.
- Strength (`opacity`, text): How strongly the watermark shows. See-through keeps the page readable underneath. One of: `light` (Faint), `medium` (Half see-through), `solid`. Default: `medium`.
- Diagonal (`diagonal`, true/false): Run the watermark corner to corner. Off, it's level. Default: `true`.
- Pages (`pages`, text): Which pages, such as 1-3, 5 or 8- (page 8 to the end), or last. Leave empty for every page.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Attach files to a PDF

Put files inside a PDF as attachments, such as the spreadsheet behind a report, so they travel together.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Files to attach (`attachments`, list, required): Any files, such as a spreadsheet, a picture or an XML invoice. Upload them, or pick them from earlier steps.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF with its attachments, saved in Lodol for 30 days.

- `attached_files` (list): The names of the files attached.
- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "attached_files": [
    "orders.xlsx",
    "logo.png"
  ],
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_92a3b4c592a3b4c592a3b4c592a3b4c5",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_92a3b4c592a3b4c592a3b4c592a3b4c5",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 99918,
      "url": "/actions/core/serve-document/doc_92a3b4c592a3b4c592a3b4c592a3b4c5?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 99918,
  "url": "/actions/core/serve-document/doc_92a3b4c592a3b4c592a3b4c592a3b4c5?teamId=64b000000000000000000000"
}
```

### Check the Gotenberg server

See whether your Gotenberg server is up and ready to convert, and which version it runs.

**Inputs**: None.

**Outputs**

- `checked_at` (text): When it was checked, e.g. 2026-10-16T02:22:44Z.
- `chromium` (text): The part that renders web pages, HTML and Markdown: up or down. Null when the server doesn't have it.
- `is_healthy` (true/false): Whether the server is ready to convert.
- `libreoffice` (text): The part that converts Office documents: up or down. Null when the server doesn't have it.
- `problems` (list): What the server says is wrong, if anything.
- `server_url` (text): The server's address.
- `status` (text): up when everything works, down when not.
- `version` (text): Gotenberg's version, such as 8.38.1. Null for a version too old to say.

**Example output**

```json
{
  "checked_at": "2026-10-16T02:22:44Z",
  "chromium": "up",
  "is_healthy": true,
  "libreoffice": "up",
  "problems": [],
  "server_url": "https://gotenberg.example.com",
  "status": "up",
  "version": "8.38.1"
}
```

### Compress a PDF

Make a PDF smaller by compressing its pictures, so it's easier to email or store. Text stays sharp.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Compression (`level`, text): How much to compress the pictures. One of: `light` (A little: pictures look the same), `balanced`, `strong` (A lot: smallest file, softer pictures). Default: `balanced`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The smaller PDF, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `original_size_bytes` (number): The PDF's size before, in bytes.
- `page_count` (number): How many pages the PDF has.
- `saved_percent` (number): How much smaller it got, e.g. 43.4. 0 when there was nothing to compress, such as a PDF of only text.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_6f7081926f7081926f7081926f708192",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_6f7081926f7081926f7081926f708192",
      "filename": "Gutenberg.pdf",
      "page_count": 14,
      "size_bytes": 465462,
      "url": "/actions/core/serve-document/doc_6f7081926f7081926f7081926f708192?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Gutenberg.pdf",
  "original_size_bytes": 822635,
  "page_count": 14,
  "saved_percent": 43.4,
  "size_bytes": 465462,
  "url": "/actions/core/serve-document/doc_6f7081926f7081926f7081926f708192?teamId=64b000000000000000000000"
}
```

### Convert a document to PDF

Turn a Word, Excel, PowerPoint or OpenDocument file into a PDF. Text and CSV files and pictures work too.

**Inputs**

- Document (`document`, text, required): The file to convert, such as a .docx, .xlsx or .pptx. Upload one, or pick one from an earlier step.
- Landscape (`landscape`, true/false): Lay the pages on their side, wider than they are tall. Default: `false`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Convert a PDF to PDF/A or PDF/UA

Make a PDF that meets the archiving standard (PDF/A) many courts, governments and archives ask for, or the accessibility standard (PDF/UA).

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Standard (`standard`, text): Which standard to meet. Use what the place you're sending it to asks for. One of: `pdfa-2b` (PDF/A-2b, for archiving (recommended)), `pdfa-1b` (PDF/A-1b, the oldest archiving standard), `pdfa-3b` (PDF/A-3b, for archiving with attached files), `pdfua` (PDF/UA, for screen readers), `pdfa-2b-pdfua` (PDF/A-2b and PDF/UA together). Default: `pdfa-2b`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The converted PDF, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `standard` (text): The standard it meets: pdfa-2b, pdfa-1b, pdfa-3b, pdfua or pdfa-2b-pdfua.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_708192a3708192a3708192a3708192a3",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_708192a3708192a3708192a3708192a3",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 29095,
      "url": "/actions/core/serve-document/doc_708192a3708192a3708192a3708192a3?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 29095,
  "standard": "pdfa-2b",
  "url": "/actions/core/serve-document/doc_708192a3708192a3708192a3708192a3?teamId=64b000000000000000000000"
}
```

### Convert a web page to PDF

Turn a live web page into a PDF, the way a browser prints it, such as an invoice page, a report or a dashboard.

**Inputs**

- Web address (`url`, text, required): The address of the page, as it appears in the browser. It must open without signing in, since your Gotenberg server opens it.
- Paper size (`paper_size`, text): The size of the PDF's pages. One of: `A4` (A4 (21 × 29.7 cm)), `Letter` (US Letter (8.5 × 11 in)), `Legal` (US Legal (8.5 × 14 in)), `A3` (A3 (29.7 × 42 cm)), `A5` (A5 (14.8 × 21 cm)), `A6` (A6 (10.5 × 14.8 cm)), `Tabloid` (Tabloid (11 × 17 in)). Default: `A4`.
- Landscape (`landscape`, true/false): Lay the pages on their side, wider than they are tall. Default: `false`.
- Margins (`margins`, text): The blank space around each page's edge. One of: `none`, `small` (Small: 1 cm (0.4 in)), `medium` (Medium: 2 cm (0.8 in)), `large` (Large: 2.5 cm (1 in)). Default: `small`.
- Print backgrounds (`print_background`, true/false): Keep background colours and pictures. Turn off for a plainer page that uses less ink. Default: `true`.
- Add page numbers (`page_numbers`, true/false): Print the page number, such as 2 / 5, at the foot of every page. Default: `false`.
- Use the on-screen layout (`screen_layout`, true/false): Show the page as it looks on screen. Off, many sites use their print layout, which hides menus and adverts. Default: `false`.
- Wait before capturing (`wait_seconds`, number): Seconds to let the page finish loading first, up to 30. Raise it if a chart or a late-loading part comes out blank. From 0 to 30.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Convert HTML to PDF

Turn HTML, such as an invoice or a certificate built in an earlier step, into a PDF.

**Inputs**

- HTML (`html`, text, required): The page to render, as HTML. Styles and pictures with full https:// addresses are drawn as a browser would.
- Paper size (`paper_size`, text): The size of the PDF's pages. One of: `A4` (A4 (21 × 29.7 cm)), `Letter` (US Letter (8.5 × 11 in)), `Legal` (US Legal (8.5 × 14 in)), `A3` (A3 (29.7 × 42 cm)), `A5` (A5 (14.8 × 21 cm)), `A6` (A6 (10.5 × 14.8 cm)), `Tabloid` (Tabloid (11 × 17 in)). Default: `A4`.
- Landscape (`landscape`, true/false): Lay the pages on their side, wider than they are tall. Default: `false`.
- Margins (`margins`, text): The blank space around each page's edge. One of: `none`, `small` (Small: 1 cm (0.4 in)), `medium` (Medium: 2 cm (0.8 in)), `large` (Large: 2.5 cm (1 in)). Default: `small`.
- Print backgrounds (`print_background`, true/false): Keep background colours and pictures. Turn off for a plainer page that uses less ink. Default: `true`.
- Add page numbers (`page_numbers`, true/false): Print the page number, such as 2 / 5, at the foot of every page. Default: `false`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Convert Markdown to PDF

Turn Markdown text, with headings, lists, tables and code, into a neatly laid-out PDF.

**Inputs**

- Markdown (`markdown`, text, required): The text to lay out, in Markdown: # for headings, ** for bold, - for lists, and tables. The first heading becomes the file's name.
- Paper size (`paper_size`, text): The size of the PDF's pages. One of: `A4` (A4 (21 × 29.7 cm)), `Letter` (US Letter (8.5 × 11 in)), `Legal` (US Legal (8.5 × 14 in)), `A3` (A3 (29.7 × 42 cm)), `A5` (A5 (14.8 × 21 cm)), `A6` (A6 (10.5 × 14.8 cm)), `Tabloid` (Tabloid (11 × 17 in)). Default: `A4`.
- Landscape (`landscape`, true/false): Lay the pages on their side, wider than they are tall. Default: `false`.
- Margins (`margins`, text): The blank space around each page's edge. One of: `none`, `small` (Small: 1 cm (0.4 in)), `medium` (Medium: 2 cm (0.8 in)), `large` (Large: 2.5 cm (1 in)). Default: `small`.
- Add page numbers (`page_numbers`, true/false): Print the page number, such as 2 / 5, at the foot of every page. Default: `false`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Extract pages from a PDF

Make a new PDF of only the pages you name, such as the first page or the signature page.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Pages (`pages`, text, required): Which pages to keep, in order, such as 1-3, 5 or 8- (page 8 to the end), or last.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Flatten a PDF

Fix a PDF's form fields and comments into the page, so what was filled in can no longer be changed.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Merge PDFs

Join two or more PDFs into one, in the order you list them.

**Inputs**

- PDFs (`pdfs`, list, required): The PDFs to join, in order, at least two. Upload them, or pick them from earlier steps.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The merged PDF, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `merged_count` (number): How many PDFs were joined.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_4d5e6f704d5e6f704d5e6f704d5e6f70",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_4d5e6f704d5e6f704d5e6f704d5e6f70",
      "filename": "merged.pdf",
      "page_count": 3,
      "size_bytes": 106655,
      "url": "/actions/core/serve-document/doc_4d5e6f704d5e6f704d5e6f704d5e6f70?teamId=64b000000000000000000000"
    }
  ],
  "filename": "merged.pdf",
  "merged_count": 2,
  "page_count": 3,
  "size_bytes": 106655,
  "url": "/actions/core/serve-document/doc_4d5e6f704d5e6f704d5e6f704d5e6f70?teamId=64b000000000000000000000"
}
```

### Protect a PDF with a password

Lock a PDF so it needs a password to open, and stop people printing, copying or changing it.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Password to open (`password`, text): Anyone opening the PDF has to type this. Leave empty to let anyone open it, with the restrictions you choose.
- Don't allow (`restrictions`, list): What people who open the PDF can't do. Needs an owner password. One or more of: `printing`, `copying` (Copying text and pictures), `editing` (Changing the content), `commenting` (Adding comments), `filling_forms` (Filling in forms), `assembling` (Adding, removing or turning pages).
- Owner password (`owner_password`, text): A second password that lifts the restrictions, for you. Needed when you choose anything not to allow.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The protected PDF, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `needs_password_to_open` (true/false): Whether opening it needs the password.
- `page_count` (number): How many pages the PDF has.
- `restrictions` (list): What it doesn't allow: printing, copying, editing, commenting, filling_forms or assembling.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_5e6f70815e6f70815e6f70815e6f7081",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_5e6f70815e6f70815e6f70815e6f7081",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 16395,
      "url": "/actions/core/serve-document/doc_5e6f70815e6f70815e6f70815e6f7081?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "needs_password_to_open": true,
  "page_count": 2,
  "restrictions": [
    "printing",
    "copying"
  ],
  "size_bytes": 16395,
  "url": "/actions/core/serve-document/doc_5e6f70815e6f70815e6f70815e6f7081?teamId=64b000000000000000000000"
}
```

### Read a PDF's properties

Read a PDF's title, author, subject, keywords, dates and number of pages.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.

**Outputs**

- `author` (text): Who wrote it. Null when not given.
- `created_at` (text): When it was made, e.g. 2026-10-16T10:00:00Z.
- `created_with` (text): The app the document was made in, such as Writer, Microsoft Word or Chrome 155.
- `is_encrypted` (true/false): Whether it's protected with a password. Most properties can't be read from one.
- `keywords` (list): Its keywords. Empty when it has none.
- `language` (text): Its language, such as en-US, when given.
- `modified_at` (text): When it last changed.
- `page_count` (number): How many pages the PDF has.
- `pdf_made_with` (text): The program that wrote the PDF.
- `pdf_version` (text): The PDF format's version, such as 1.7.
- `properties` (object): Everything found in the file, under the names PDF readers use, such as Copyright.
- `subject` (text): What it's about. Null when not given.
- `title` (text): The PDF's title. Null when it has none.

**Example output**

```json
{
  "author": "Acme Ltd",
  "created_at": "2026-10-16T10:00:00Z",
  "created_with": "Writer",
  "is_encrypted": false,
  "keywords": [
    "invoice",
    "acme"
  ],
  "language": "en-US",
  "modified_at": "2026-10-16T11:00:00Z",
  "page_count": 2,
  "pdf_made_with": "LibreOffice 26.8.1.1 (X86_64)",
  "pdf_version": "1.7",
  "properties": {
    "Author": "Acme Ltd",
    "CreateDate": "2026:10:16 10:00:00Z",
    "Creator": "Writer",
    "FileType": "PDF",
    "Keywords": [
      "invoice",
      "acme"
    ],
    "Language": "en-US",
    "MIMEType": "application/pdf",
    "ModifyDate": "2026:10:16 11:00:00Z",
    "PDFVersion": 1.7,
    "PageCount": 2,
    "Producer": "LibreOffice 26.8.1.1 (X86_64)",
    "Subject": "March order",
    "Title": "Invoice 4021"
  },
  "subject": "March order",
  "title": "Invoice 4021"
}
```

### Rotate PDF pages

Turn some or all of a PDF's pages a quarter or half turn, to fix scans that came out sideways.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Turn (`angle`, text): How far to turn the pages. One of: `90` (A quarter turn clockwise), `180` (Upside down), `270` (A quarter turn anticlockwise). Default: `90`.
- Pages (`pages`, text): Which pages, such as 1-3, 5 or 8- (page 8 to the end), or last. Leave empty for every page.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The PDF made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 14795,
      "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "size_bytes": 14795,
  "url": "/actions/core/serve-document/doc_0f1e2d3c0f1e2d3c0f1e2d3c0f1e2d3c?teamId=64b000000000000000000000"
}
```

### Set a PDF's properties

Set a PDF's title, author, subject, keywords or dates, which show in a PDF reader's document properties and in search.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Title (`title`, text): The title. Leave empty to keep the one it has.
- Author (`author`, text): Who wrote it. Leave empty to keep the one it has.
- Subject (`subject`, text): What it's about, in a few words.
- Keywords (`keywords`, text): Words to find it by, separated by commas.
- Created (`created_at`, date and time): When it was made.
- Last changed (`modified_at`, date and time): When it last changed.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The updated PDF, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `properties_set` (list): Which properties were set: title, author, subject, keywords, created_at or modified_at.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 1,
  "document_ref": "doc_8192a3b48192a3b48192a3b48192a3b4",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_8192a3b48192a3b48192a3b48192a3b4",
      "filename": "Invoice 4021.pdf",
      "page_count": 2,
      "size_bytes": 19029,
      "url": "/actions/core/serve-document/doc_8192a3b48192a3b48192a3b48192a3b4?teamId=64b000000000000000000000"
    }
  ],
  "filename": "Invoice 4021.pdf",
  "page_count": 2,
  "properties_set": [
    "author",
    "keywords",
    "title"
  ],
  "size_bytes": 19029,
  "url": "/actions/core/serve-document/doc_8192a3b48192a3b48192a3b48192a3b4?teamId=64b000000000000000000000"
}
```

### Split a PDF

Cut a PDF into smaller PDFs with a set number of pages each, such as one file per page.

**Inputs**

- PDF (`pdf`, text, required): The PDF. Upload one, or pick one from an earlier step.
- Pages per file (`pages_per_file`, number): How many pages go in each new PDF. 1 makes one file per page; the last file has whatever is left. From 1 to 10000. Default: `1`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The new PDFs, in page order, saved in Lodol for 30 days. The first one is repeated at the top level.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): Every file made, each with its own link, name and pages.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `page_count` (number): How many pages the PDF has.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_count": 2,
  "document_ref": "doc_2b3c4d5e2b3c4d5e2b3c4d5e2b3c4d5e",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_2b3c4d5e2b3c4d5e2b3c4d5e2b3c4d5e",
      "filename": "report-part-1.pdf",
      "page_count": 1,
      "size_bytes": 12981,
      "url": "/actions/core/serve-document/doc_2b3c4d5e2b3c4d5e2b3c4d5e2b3c4d5e?teamId=64b000000000000000000000"
    },
    {
      "content_type": "application/pdf",
      "document_ref": "doc_3c4d5e6f3c4d5e6f3c4d5e6f3c4d5e6f",
      "filename": "report-part-2.pdf",
      "page_count": 1,
      "size_bytes": 12969,
      "url": "/actions/core/serve-document/doc_3c4d5e6f3c4d5e6f3c4d5e6f3c4d5e6f?teamId=64b000000000000000000000"
    }
  ],
  "filename": "report-part-1.pdf",
  "page_count": 1,
  "size_bytes": 12981,
  "url": "/actions/core/serve-document/doc_2b3c4d5e2b3c4d5e2b3c4d5e2b3c4d5e?teamId=64b000000000000000000000"
}
```

### Take a screenshot of a web page

Capture a web page as a PNG, JPEG or WebP picture: the whole page, or just what fits in the window.

**Inputs**

- Web address (`url`, text, required): The address of the page, as it appears in the browser. It must open without signing in, since your Gotenberg server opens it.
- Image format (`image_format`, text): The kind of picture to make. One of: `png` (PNG: sharpest, best for text), `jpeg` (JPEG: smallest, best for photos), `webp` (WebP: small and sharp). Default: `png`.
- Width (`width`, number): How wide the browser window is, in pixels. 1280 suits a laptop; 390 shows a page as a phone does. From 200 to 4000. Default: `1280`.
- Height (`height`, number): How tall the browser window is, in pixels. With Whole page on, the picture grows to fit the whole page anyway. From 200 to 4000. Default: `800`.
- Whole page (`full_page`, true/false): Capture the whole page, top to bottom. Turn off to capture only what fits in the window. Default: `true`.
- Sharp (`high_resolution`, true/false): Make the picture twice as detailed, like a high-resolution screen. The file is larger. Default: `false`.
- Wait before capturing (`wait_seconds`, number): Seconds to let the page finish loading first, up to 30. Raise it if a chart or a late-loading part comes out blank. From 0 to 30.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The picture made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): The picture made, as a one-item list.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `height` (number): The picture's height in pixels.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.
- `width` (number): The picture's width in pixels.

**Example output**

```json
{
  "content_type": "image/png",
  "document_count": 1,
  "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
  "documents": [
    {
      "content_type": "image/png",
      "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
      "filename": "example.com.png",
      "height": 800,
      "size_bytes": 82722,
      "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
      "width": 1280
    }
  ],
  "filename": "example.com.png",
  "height": 800,
  "size_bytes": 82722,
  "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
  "width": 1280
}
```

### Turn HTML into an image

Render HTML as a picture, such as a social media card or a banner built in an earlier step.

**Inputs**

- HTML (`html`, text, required): The page to render, as HTML. Styles and pictures with full https:// addresses are drawn as a browser would.
- Image format (`image_format`, text): The kind of picture to make. One of: `png` (PNG: sharpest, best for text), `jpeg` (JPEG: smallest, best for photos), `webp` (WebP: small and sharp). Default: `png`.
- Width (`width`, number): How wide the browser window is, in pixels. 1280 suits a laptop; 390 shows a page as a phone does. From 200 to 4000. Default: `1280`.
- Height (`height`, number): How tall the browser window is, in pixels. With Whole page on, the picture grows to fit the whole page anyway. From 200 to 4000. Default: `800`.
- Whole page (`full_page`, true/false): Capture the whole page, top to bottom. Turn off to capture only what fits in the window. Default: `true`.
- Sharp (`high_resolution`, true/false): Make the picture twice as detailed, like a high-resolution screen. The file is larger. Default: `false`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The picture made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): The picture made, as a one-item list.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `height` (number): The picture's height in pixels.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.
- `width` (number): The picture's width in pixels.

**Example output**

```json
{
  "content_type": "image/png",
  "document_count": 1,
  "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
  "documents": [
    {
      "content_type": "image/png",
      "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
      "filename": "example.com.png",
      "height": 800,
      "size_bytes": 82722,
      "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
      "width": 1280
    }
  ],
  "filename": "example.com.png",
  "height": 800,
  "size_bytes": 82722,
  "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
  "width": 1280
}
```

### Turn Markdown into an image

Render Markdown text as a picture, such as an announcement or a summary to share.

**Inputs**

- Markdown (`markdown`, text, required): The text to lay out, in Markdown: # for headings, ** for bold, - for lists, and tables. The first heading becomes the file's name.
- Image format (`image_format`, text): The kind of picture to make. One of: `png` (PNG: sharpest, best for text), `jpeg` (JPEG: smallest, best for photos), `webp` (WebP: small and sharp). Default: `png`.
- Width (`width`, number): How wide the browser window is, in pixels. 1280 suits a laptop; 390 shows a page as a phone does. From 200 to 4000. Default: `1280`.
- Height (`height`, number): How tall the browser window is, in pixels. With Whole page on, the picture grows to fit the whole page anyway. From 200 to 4000. Default: `800`.
- Whole page (`full_page`, true/false): Capture the whole page, top to bottom. Turn off to capture only what fits in the window. Default: `true`.
- Sharp (`high_resolution`, true/false): Make the picture twice as detailed, like a high-resolution screen. The file is larger. Default: `false`.
- Save as (`filename`, text): What to call the file, such as Invoice 4021. The right ending is added for you. Leave empty for a name taken from what was converted.

**Outputs**: The picture made, saved in Lodol for 30 days.

- `content_type` (text): The kind of file, such as application/pdf or image/png.
- `document_count` (number): How many files were made.
- `document_ref` (text): The file, for a later step that takes one, such as an email's attachments or a drive upload.
- `documents` (list): The picture made, as a one-item list.
- `filename` (text): The file's name, ending included, such as report.pdf.
- `height` (number): The picture's height in pixels.
- `size_bytes` (number): The file's size in bytes.
- `url` (text): A link to open or download the file in Lodol.
- `width` (number): The picture's width in pixels.

**Example output**

```json
{
  "content_type": "image/png",
  "document_count": 1,
  "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
  "documents": [
    {
      "content_type": "image/png",
      "document_ref": "doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d",
      "filename": "example.com.png",
      "height": 800,
      "size_bytes": 82722,
      "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
      "width": 1280
    }
  ],
  "filename": "example.com.png",
  "height": 800,
  "size_bytes": 82722,
  "url": "/actions/core/serve-document/doc_1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d?teamId=64b000000000000000000000",
  "width": 1280
}
```
