Template gallery / summary

summary

One-page executive summary: headline, the bottom line up front, a metric strip, findings in two columns, a recommendation block and dated next steps. Sized to stay on a single Letter page.

chromium default PDF 17 top-level fields 1 unit per page

Rendered preview of the summary template
Rendered by Galley from the example payload below, at 816px wide , scale 2.

Fields

The full JSON Schema is below. Required fields are marked; anything missing comes back as a 422 naming the path, the expected type and a value that would be accepted.

Field Type Required Description
title string required The headline. Two lines at most on one page.
deck string optional A sentence of context under the headline.
eyebrow string optional
organization string optional
issued_on string (date) optional
accent string optional
bottom_line string optional The conclusion, stated first.
recommendation string optional
findings_heading string optional
findings_split integer optional How many findings go in the left column. Defaults to half.
prepared_by string optional
reference string optional
footer_left string optional Overrides prepared_by in the footer.
footer_right string optional Overrides reference in the footer.
metrics array of object { label, value, delta, direction } optional
findings array of object { title, body } optional
next_steps array of object { action, owner, due } optional

Default render options

Applied unless you override them. Options are part of the cache key.

page_size "Letter"
margin "0.55in"
print_background true

Example payload

This exact object renders the preview above. It is also what the API echoes back in a validation error, so an agent can repair a payload without a round trip to the docs.

example.jsonjson
{
  "title": "Move the us-east render pool before the November peak",
  "deck": "Q3 reliability held across 14.2 million renders, but one region is now inside the failover margin and the November invoice peak lands in six weeks.",
  "eyebrow": "Decision brief",
  "organization": "Galley Render — Reliability",
  "issued_on": "2026-09-16",
  "accent": "#0f766e",
  "bottom_line": "Add eight workers to us-east by November 1 at roughly $340 per month. Everything else on the reliability list can wait for Q1 without risk to the invoice peak.",
  "metrics": [
    {
      "label": "Renders, Q3",
      "value": "14.2M",
      "delta": "+18% vs Q2",
      "direction": "up"
    },
    {
      "label": "p95 latency",
      "value": "1.41s",
      "delta": "−31% vs Q2",
      "direction": "up"
    },
    {
      "label": "Failure rate",
      "value": "0.17%",
      "delta": "−0.06pp",
      "direction": "up"
    },
    {
      "label": "us-east headroom",
      "value": "19%",
      "delta": "policy floor is 25%",
      "direction": "down"
    },
    {
      "label": "Cost of fix",
      "value": "$340",
      "delta": "per month",
      "direction": "up"
    }
  ],
  "findings": [
    {
      "title": "us-east is inside the failover margin",
      "body": "Peak concurrency reached 19.4 of 24 workers on August 28. Losing a single instance during the invoice peak would queue renders rather than shed them."
    },
    {
      "title": "The latency tail is multi-page PDFs",
      "body": "Statements and report appendices account for 5% of volume and 61% of time above p99. The Satori fast path is effectively flat at 55ms."
    },
    {
      "title": "Failures are template bugs, not platform faults",
      "body": "Of 24,681 failures, 19.8% were Liquid parse errors in customer-authored templates pushed straight to the API without validation."
    },
    {
      "title": "Cache hit rate slipped 2.1 points",
      "body": "Three large accounts began stamping a timestamp into every payload, which defeats the deterministic cache key. A docs fix and one support email should recover most of it."
    },
    {
      "title": "Frankfurt can wait",
      "body": "eu-central sits at 26% headroom and its instance price steps down in January. Building it now costs 40% more for the same capacity."
    },
    {
      "title": "Cloudflare overflow works but is expensive",
      "body": "Burst traffic routed to Browser Rendering cost $0.19 per thousand against $0.04 in-house. Keep it as a safety valve, not a capacity plan."
    }
  ],
  "recommendation": "Approve the us-east expansion now and defer the eu-central build to January. Ship the cache-key guidance to the three affected accounts this week; it is free and recovers more margin than the new workers cost.",
  "next_steps": [
    {
      "action": "Provision eight us-east workers and re-run the load test",
      "owner": "S. Adeyemi",
      "due": "2026-11-01"
    },
    {
      "action": "Email the three accounts defeating the cache key",
      "owner": "M. Mueller",
      "due": "2026-09-19"
    },
    {
      "action": "Split report appendix tables into chunked renders",
      "owner": "Platform",
      "due": "2026-10-15"
    },
    {
      "action": "Revisit the eu-central build with January pricing",
      "owner": "S. Adeyemi",
      "due": "2027-01-12"
    }
  ],
  "prepared_by": "M. Mueller, Reliability",
  "reference": "ENG-RPT-0031 · Confidential"
}

Render it

With an API keyshell
curl -sS https://api.galleyrender.com/v1/render \
  -H "Authorization: Bearer $GALLEY_API_KEY" \
  -H 'content-type: application/json' \
  -d '{
  "template": "summary@1",
  "format": "pdf",
  "data": "… the example payload above …"
}'
With no API key, over MCPshell
# No API key. The first call mints a 50-render trial.
curl -sS https://mcp.galleyrender.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "render",
      "arguments": {
        "template": "summary",
        "format": "pdf",
        "data": { … see the example payload above … }
      }
    }
  }'

Pin the version — summary@1 — in anything you ship. Publishing a new version never changes an old one. Render endpoint reference →

Try a free tool

Renders the example payload on the production service. No account, no key.

JSON Schema

schema.json (17 top-level properties)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "One-page summary",
  "type": "object",
  "required": [
    "title"
  ],
  "additionalProperties": true,
  "properties": {
    "title": {
      "type": "string",
      "description": "The headline. Two lines at most on one page.",
      "examples": [
        "Move the us-east render pool before the November peak"
      ]
    },
    "deck": {
      "type": "string",
      "description": "A sentence of context under the headline.",
      "examples": [
        "Q3 reliability held, but one region is now inside the failover margin and the November invoice peak lands in six weeks."
      ]
    },
    "eyebrow": {
      "type": "string",
      "default": "Summary",
      "examples": [
        "Decision brief"
      ]
    },
    "organization": {
      "type": "string",
      "examples": [
        "Galley Render — Reliability"
      ]
    },
    "issued_on": {
      "type": "string",
      "format": "date",
      "examples": [
        "2026-09-16"
      ]
    },
    "accent": {
      "type": "string",
      "examples": [
        "#0f766e"
      ]
    },
    "bottom_line": {
      "type": "string",
      "description": "The conclusion, stated first.",
      "examples": [
        "Add eight workers to us-east by November 1 at roughly $340 per month. Everything else can wait for Q1."
      ]
    },
    "recommendation": {
      "type": "string",
      "examples": [
        "Approve the us-east expansion now and defer the eu-central build to January, when the Frankfurt instance price step lands."
      ]
    },
    "findings_heading": {
      "type": "string",
      "default": "What we found",
      "examples": [
        "What we found"
      ]
    },
    "findings_split": {
      "type": "integer",
      "minimum": 0,
      "description": "How many findings go in the left column. Defaults to half.",
      "examples": [
        3
      ]
    },
    "prepared_by": {
      "type": "string",
      "examples": [
        "M. Mueller, Reliability"
      ]
    },
    "reference": {
      "type": "string",
      "examples": [
        "ENG-RPT-0031 · Confidential"
      ]
    },
    "footer_left": {
      "type": "string",
      "description": "Overrides prepared_by in the footer.",
      "examples": [
        "M. Mueller, Reliability"
      ]
    },
    "footer_right": {
      "type": "string",
      "description": "Overrides reference in the footer.",
      "examples": [
        "ENG-RPT-0031 · Confidential"
      ]
    },
    "metrics": {
      "type": "array",
      "maxItems": 5,
      "items": {
        "type": "object",
        "required": [
          "label",
          "value"
        ],
        "properties": {
          "label": {
            "type": "string",
            "examples": [
              "p95 latency"
            ]
          },
          "value": {
            "type": "string",
            "examples": [
              "1.41s"
            ]
          },
          "delta": {
            "type": "string",
            "examples": [
              "−31% vs Q2"
            ]
          },
          "direction": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ],
            "default": "up",
            "examples": [
              "up"
            ]
          }
        }
      }
    },
    "findings": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title"
        ],
        "properties": {
          "title": {
            "type": "string",
            "examples": [
              "us-east has 19% headroom"
            ]
          },
          "body": {
            "type": "string",
            "examples": [
              "Peak concurrency hit 19.4 of 24 workers on Aug 28. Our failover policy needs 25%."
            ]
          }
        }
      }
    },
    "next_steps": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "action"
        ],
        "properties": {
          "action": {
            "type": "string",
            "examples": [
              "Provision eight us-east workers"
            ]
          },
          "owner": {
            "type": "string",
            "examples": [
              "S. Adeyemi"
            ]
          },
          "due": {
            "type": "string",
            "format": "date",
            "examples": [
              "2026-11-01"
            ]
          }
        }
      }
    }
  }
}