Skip to main content
A theme is a curated design preset you apply with one field. Instead of hand-authoring typography, page geometry, furniture, numbering, and styling rules for every document, set theme and the server resolves it to a fixed bundle — then merges your own settings on top. Blink PDF ships 15 themes across five categories, and the default (report-clean) is the plain engine output, so you only opt into a look when you name one.
Picking a theme never lets the server read your Markdown — the bundle is deterministic and applied blindly. Theme fonts are bundled and hosted, so themes are identical on every plan; the only plan differences are volume, rate, and the free-tier watermark, never typographic quality.

The theme Field

string
default:"report-clean"
The slug of a curated design preset (see the catalog below). Resolved server-side to a fixed bundle of typography, page, furniture, numbering, and rules, then merged under your own typography / page / furniture / rules — your values win per field. Omitting the field, or passing an unknown slug, applies report-clean.

Theme Catalog

The 15 themes, in slug order. report-clean is the default. Discover the same catalog programmatically at GET /v1/themes or through the MCP list_themes tool.
report-clean has an empty delta — requesting it, or sending no theme at all, leaves the rendered output byte-for-byte identical to the engine defaults. It exists so you can name the default explicitly.

What a Theme Controls

Each theme contributes up to six dimensions. Most of the visual identity lives in the rules array (colors, sizes, per-depth headings, code blocks, tables, blockquotes); a handful of themes also set fonts, page geometry, furniture, numbering, or a PDF outline.

Precedence: Your Settings Always Win

A theme layers under your request body — it never overrides anything you set explicitly:
  • typography, page, and furniture are deep-merged with you winning per field.
  • numbering and outline are taken from your body whenever you set them at all.
  • The theme’s rules are prepended before yours, so on any conflicting cascade leaf your later rule wins.
A theme expresses nothing you could not author by hand.
Fonts are all-or-nothing. If your request declares any font source — fontStack with a weighted family, googleFontsUrl/googleFontsUrls, or typography.body / typography.heading — the theme’s hosted typography is dropped wholesale, so a theme font is never mixed with your own. Everything else in the theme (page, furniture, numbering, outline, rules) still applies. See Fonts & Typography.

Unknown or Omitted Themes

Theme resolution never fails a render. If you omit theme or pass an unknown slug, the base report-clean theme is applied instead:
  • Omittedreport-clean is applied silently.
  • Unknown slugreport-clean is applied and the response carries an X-Render-Theme-Fallback header (for example applied=report-clean; requested=report-dat; didYouMean=report-data), plus a nearest-match didYouMean suggestion when one is within edit distance. A theme fallback also flips X-Render-Rendered-As-Requested to false.
On the validate endpoint the same outcome is surfaced structurally as a resolvedTheme object (slug / requested / fellBack / didYouMean) instead of a header.

Discovering Themes

GET /v1/themes returns the full catalog as JSON so tools and agents can list themes without hard-coding the slugs:
The response is cacheable — it carries a version-keyed ETag. AI agents connected through the MCP server can call the equivalent list_themes tool, which returns the same { version, default, themes[] } shape.
Combine a theme with your own overrides freely: start from report-data for a KPI-heavy report, then add a page.margin or a rules entry to fine-tune — your settings layer cleanly on top of the preset.