galley-render

Galley Render node for n8n — JSON in, PDF out. Render invoices, certificates, reports, labels and cards from a template and a payload.

Package Information

Released: this month
Downloads: 0 weekly / 0 monthly
Latest Version: 0.1.0
Author: Galley Render

Documentation

n8n-nodes-galley-render

n8n community node for Galley Render — JSON in, PDF
out
. A template plus a payload becomes a PDF, PNG or JPG behind a signed URL, deterministically
and cached, so an identical repeat render costs nothing.

Use it for the documents a workflow has to actually produce: invoices, quotes, change orders,
receipts, statements, purchase orders, certificates, reports, shipping labels, packing slips, OG
cards, tickets and badges.

Installation

n8n Cloud and self-hosted, from the UI: Settings → Community Nodes → Install →
n8n-nodes-galley-render.

Self-hosted, manually:

cd ~/.n8n
npm install n8n-nodes-galley-render

Restart n8n afterwards.

Credentials

You need a Galley Render API key (glr_sk_…). Two ways to get one:

  1. Sign up at galleyrender.com.
  2. Take the 10-render keyless trial: connect any MCP client to
    https://mcp.galleyrender.com/mcp, call any tool, and copy the trial.trial_token from the
    response. It is a real key and works here.

In n8n: Credentials → New → Galley Render API → paste the key. The Base URL field only needs
changing for a self-hosted or staging Galley API. Hitting Test calls GET /v1/usage, which is
free.

Operations

Resource Operation What it does
Render Create Template + data + format → a signed URL
Render Get One render by id, with a freshly signed URL
Render Get Many Recent renders, newest first
Template Get Many Templates on the account, with their latest version
Template Get One version: JSON Schema, options, example payload, HTML source
Template Validate Dry-run a payload. Free, renders nothing, same field-level errors.
Usage Get Period renders, cost, free-tier balance, spend cap, trial balance

A first workflow

  1. Galley Render → Template → Get Many to see what exists. The starter library covers invoice,
    quote, change order, receipt, statement, purchase order, certificate, report, shipping label,
    packing slip, OG card, social quote card, event ticket, badge, menu, price sheet, letter and
    chart card.
  2. Template → Get on the one you picked, and read its schema. That is the contract for data.
  3. Render → Create with Template set to invoice@3 — pin the version in anything you ship —
    and Data (JSON) set to your payload.
  4. The node outputs the render, including url. To attach the file, follow it with an HTTP
    Request
    node set to GET {{ $json.url }} with Response Format = File.

Signed URLs are short-lived; the stored file is not. Re-running Render → Get issues a fresh
signature.

Notes

  • Caching. cached: true in the output means the same template version, data, options and
    format were rendered before, and this call cost nothing.
  • Queued renders. Setting Webhook URL or Queue the Render returns status: "queued" with an
    id. Poll it with Render → Get, or let the webhook drive a separate workflow.
  • Validation errors. A bad payload comes back as a validation_error naming the field path, the
    expected type, what arrived and a value that would be accepted. Template → Validate gives you
    the same thing for free, before you spend a render.

Development

This repository holds only the n8n node. The Galley Render API, its SDKs and its docs live
elsewhere; this package talks to the public REST API and has zero runtime dependencies, which
is what n8n's verification guidelines require.

npm install
npm run build     # tsc, then copy the icon and codex file into dist/
npm test          # scripts/check-package.mjs — the checks n8n's verification makes
npm run lint      # npx @n8n/scan-community-package (needs network)

Releases are tag-driven. .github/workflows/publish.yml publishes to npm with provenance on a
v* tag, which is the only route n8n accepts for a community node since 1 May 2026:

npm version 0.1.1 --no-git-tag-version   # or edit package.json
git commit -am "0.1.1" && git tag -a v0.1.1 -m "0.1.1" && git push origin main --tags

The workflow refuses to publish if the tag and package.json disagree. Provenance also requires
package.json's repository field to keep pointing at this repository — do not repoint it.

Links

MIT licensed.

Discussion