Template gallery / statement
statement
Multi-page account statement: opening balance, dated activity with a running balance, aging buckets, and a detachable remittance slip. Table headers repeat on every page.
chromium default PDF 16 top-level fields 1 unit per page
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 |
|---|---|---|---|
| statement_number | string | required | |
| account_number | string | required | |
| period_start | string (date) | required | |
| period_end | string (date) | required | |
| due_on | string (date) | optional | |
| currency | string | optional | |
| accent | string | optional | |
| opening_balance | number | optional | Balance carried forward into the period. |
| closing_balance | number | optional | Optional. Left out, it is computed from the opening balance and the activity rows. |
| remit_to | string | optional | |
| payment_instructions | string | optional | |
| notes | string | optional | |
| company | object { name, address, email, phone, … } | required | |
| customer | object { name, attention, address, email } | required | |
| aging | object { current, days_30, days_60, days_90, … } | optional | Aging buckets across the top. Leave the object out to hide the row. |
| activity | array of object { date, description, reference, charge, … } | required | Dated rows in order. Each row is a charge or a credit; the running balance is computed. |
Default render options
Applied unless you override them. Options are part of the cache key.
| page_size | "Letter" |
| margin | "0.5in" |
| 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.
{
"statement_number": "STM-2026-09",
"account_number": "ACME-0041",
"period_start": "2026-08-01",
"period_end": "2026-08-31",
"due_on": "2026-09-30",
"currency": "USD",
"opening_balance": 1240.5,
"remit_to": "Galley Render, PO Box 1188, Fernandina Beach, FL 32035",
"payment_instructions": "ACH: routing 063100277, account 1900042318. Reference the account number above. Card payments at galleyrender.com/pay.",
"notes": "Balances over 30 days accrue a 1.5% monthly service charge. Questions about a line on this statement should reach ar@galleyrender.com within 15 days.",
"company": {
"name": "Galley Render",
"address": "2727 Jean Lafitte Dr, Fernandina Beach, FL 32034",
"email": "ar@galleyrender.com",
"phone": "(904) 555-0110"
},
"customer": {
"name": "Acme Robotics",
"attention": "Accounts Payable",
"address": "100 Market St, Austin, TX 78701",
"email": "ap@acme.test"
},
"aging": {
"current": 838.97,
"days_30": 924.01,
"days_60": 250,
"days_90": 0,
"days_over_90": 0
},
"activity": [
{
"date": "2026-08-03",
"description": "Invoice INV-1038 — Starter plan, August",
"reference": "INV-1038",
"charge": 404.6
},
{
"date": "2026-08-05",
"description": "Payment received — ACH",
"reference": "ACH-77120",
"credit": 1240.5
},
{
"date": "2026-08-08",
"description": "Invoice INV-1039 — Overage, 41,200 renders",
"reference": "INV-1039",
"charge": 164.8
},
{
"date": "2026-08-11",
"description": "Invoice INV-1040 — Priority render queue",
"reference": "INV-1040",
"charge": 250
},
{
"date": "2026-08-14",
"description": "Credit memo — duplicate charge on INV-1039",
"reference": "CM-0311",
"credit": 42
},
{
"date": "2026-08-17",
"description": "Invoice INV-1041 — Seat add-on (3 seats)",
"reference": "INV-1041",
"charge": 147
},
{
"date": "2026-08-19",
"description": "Payment received — Visa ···· 4242",
"reference": "ch_3QjP1a",
"credit": 404.6
},
{
"date": "2026-08-21",
"description": "Invoice INV-1042 — Overage, 96,400 renders",
"reference": "INV-1042",
"charge": 385.6
},
{
"date": "2026-08-22",
"description": "Service charge — balance over 30 days",
"reference": "FIN-0088",
"charge": 18.61
},
{
"date": "2026-08-24",
"description": "Invoice INV-1043 — Template migration, 6 hrs",
"reference": "INV-1043",
"charge": 900
},
{
"date": "2026-08-26",
"description": "Credit memo — goodwill adjustment",
"reference": "CM-0312",
"credit": 150
},
{
"date": "2026-08-27",
"description": "Invoice INV-1044 — Dedicated Chromium pool",
"reference": "INV-1044",
"charge": 600
},
{
"date": "2026-08-28",
"description": "Payment received — ACH",
"reference": "ACH-77455",
"credit": 500
},
{
"date": "2026-08-29",
"description": "Invoice INV-1045 — Sandbox environment",
"reference": "INV-1045",
"charge": 125
},
{
"date": "2026-08-30",
"description": "Invoice INV-1046 — Overage, 22,900 renders",
"reference": "INV-1046",
"charge": 91.6
},
{
"date": "2026-08-31",
"description": "Service charge — balance over 30 days",
"reference": "FIN-0091",
"charge": 22.37
}
]
} Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "statement@1",
"format": "pdf",
"data": "… the example payload above …"
}' # 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": "statement",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — statement@1 — in anything you ship. Publishing a new
version never changes an old one. Render endpoint reference →
Renders the example payload on the production service. No account, no key.
JSON Schema
schema.json (16 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Account statement",
"type": "object",
"required": [
"statement_number",
"account_number",
"period_start",
"period_end",
"company",
"customer",
"activity"
],
"additionalProperties": true,
"properties": {
"statement_number": {
"type": "string",
"examples": [
"STM-2026-09"
]
},
"account_number": {
"type": "string",
"examples": [
"ACME-0041"
]
},
"period_start": {
"type": "string",
"format": "date",
"examples": [
"2026-08-01"
]
},
"period_end": {
"type": "string",
"format": "date",
"examples": [
"2026-08-31"
]
},
"due_on": {
"type": "string",
"format": "date",
"examples": [
"2026-09-30"
]
},
"currency": {
"type": "string",
"default": "USD",
"examples": [
"USD"
]
},
"accent": {
"type": "string",
"examples": [
"#1e3a5f"
]
},
"opening_balance": {
"type": "number",
"description": "Balance carried forward into the period.",
"examples": [
1240.5
]
},
"closing_balance": {
"type": "number",
"description": "Optional. Left out, it is computed from the opening balance and the activity rows.",
"examples": [
2116.98
]
},
"remit_to": {
"type": "string",
"examples": [
"Galley Render, PO Box 1188, Fernandina Beach, FL 32035"
]
},
"payment_instructions": {
"type": "string",
"examples": [
"ACH: routing 063100277, account 1900042318. Reference the account number above."
]
},
"notes": {
"type": "string",
"examples": [
"Balances over 30 days accrue a 1.5% monthly service charge."
]
},
"company": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Galley Render"
]
},
"address": {
"type": "string",
"examples": [
"2727 Jean Lafitte Dr, Fernandina Beach, FL 32034"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"ar@galleyrender.com"
]
},
"phone": {
"type": "string",
"examples": [
"(904) 555-0110"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/logo.png"
]
}
}
},
"customer": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Acme Robotics"
]
},
"attention": {
"type": "string",
"examples": [
"Accounts Payable"
]
},
"address": {
"type": "string",
"examples": [
"100 Market St, Austin, TX 78701"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"ap@acme.test"
]
}
}
},
"aging": {
"type": "object",
"description": "Aging buckets across the top. Leave the object out to hide the row.",
"properties": {
"current": {
"type": "number",
"examples": [
876.48
]
},
"days_30": {
"type": "number",
"examples": [
740.5
]
},
"days_60": {
"type": "number",
"examples": [
500
]
},
"days_90": {
"type": "number",
"examples": [
0
]
},
"days_over_90": {
"type": "number",
"examples": [
0
]
}
}
},
"activity": {
"type": "array",
"minItems": 1,
"description": "Dated rows in order. Each row is a charge or a credit; the running balance is computed.",
"items": {
"type": "object",
"required": [
"date",
"description"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"examples": [
"2026-08-03"
]
},
"description": {
"type": "string",
"examples": [
"Invoice INV-1038 — Starter plan, August"
]
},
"reference": {
"type": "string",
"examples": [
"INV-1038"
]
},
"charge": {
"type": "number",
"minimum": 0,
"examples": [
404.6
]
},
"credit": {
"type": "number",
"minimum": 0,
"examples": [
1240.5
]
}
}
}
}
}
}