Template gallery / receipt

receipt

Letter-size payment receipt: paid stamp, payment method and reference, what the payment was applied to, and any remaining balance.

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

Rendered preview of the receipt 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
receipt_number string required
invoice_number string optional The invoice this payment settles, if any.
paid_on string (date) required
amount_paid number required
currency string optional
accent string optional
notes string optional
balance_due number optional What is still owed after this payment. 0 prints "paid in full".
merchant object { name, address, email, tax_id, … } required
customer object { name, address, email } required
payment object { method, last4, reference, processor } required
applied_to array of object { description, period, amount } optional What the payment covered.

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.

example.jsonjson
{
  "receipt_number": "RCP-8841",
  "invoice_number": "INV-1042",
  "paid_on": "2026-09-16",
  "amount_paid": 423.08,
  "currency": "USD",
  "balance_due": 0,
  "merchant": {
    "name": "Galley Render",
    "address": "2727 Jean Lafitte Dr, Fernandina Beach, FL 32034",
    "email": "billing@galleyrender.com",
    "tax_id": "88-3310427"
  },
  "customer": {
    "name": "Acme Robotics",
    "address": "100 Market St, Austin, TX 78701",
    "email": "ap@acme.test"
  },
  "payment": {
    "method": "Visa",
    "last4": "4242",
    "reference": "ch_3QkT2mB9xLp0",
    "processor": "Stripe"
  },
  "applied_to": [
    {
      "description": "Starter plan",
      "period": "Sep 1 – Sep 30, 2026",
      "amount": 19
    },
    {
      "description": "Overage, 96,400 renders beyond plan",
      "period": "Sep 1 – Sep 30, 2026",
      "amount": 385.6
    },
    {
      "description": "Sales tax (FL, 7%)",
      "amount": 18.48
    }
  ],
  "notes": "Keep this receipt for your records. Charges appear on your statement as GALLEY RENDER."
}

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": "receipt@1",
  "format": "pdf",
  "data": {
    "receipt_number": "RCP-8841",
    "invoice_number": "INV-1042",
    "paid_on": "2026-09-16",
    "amount_paid": 423.08,
    "currency": "USD",
    "balance_due": 0,
    "merchant": {
      "name": "Galley Render",
      "address": "2727 Jean Lafitte Dr, Fernandina Beach, FL 32034",
      "email": "billing@galleyrender.com",
      "tax_id": "88-3310427"
    },
    "customer": {
      "name": "Acme Robotics",
      "address": "100 Market St, Austin, TX 78701",
      "email": "ap@acme.test"
    },
    "payment": {
      "method": "Visa",
      "last4": "4242",
      "reference": "ch_3QkT2mB9xLp0",
      "processor": "Stripe"
    },
    "applied_to": [
      {
        "description": "Starter plan",
        "period": "Sep 1 – Sep 30, 2026",
        "amount": 19
      },
      {
        "description": "Overage, 96,400 renders beyond plan",
        "period": "Sep 1 – Sep 30, 2026",
        "amount": 385.6
      },
      {
        "description": "Sales tax (FL, 7%)",
        "amount": 18.48
      }
    ],
    "notes": "Keep this receipt for your records. Charges appear on your statement as GALLEY RENDER."
  }
}'
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": "receipt",
        "format": "pdf",
        "data": { … see the example payload above … }
      }
    }
  }'

Pin the version — receipt@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 (12 top-level properties)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Payment receipt",
  "type": "object",
  "required": [
    "receipt_number",
    "paid_on",
    "amount_paid",
    "merchant",
    "customer",
    "payment"
  ],
  "additionalProperties": true,
  "properties": {
    "receipt_number": {
      "type": "string",
      "examples": [
        "RCP-8841"
      ]
    },
    "invoice_number": {
      "type": "string",
      "description": "The invoice this payment settles, if any.",
      "examples": [
        "INV-1042"
      ]
    },
    "paid_on": {
      "type": "string",
      "format": "date",
      "examples": [
        "2026-09-16"
      ]
    },
    "amount_paid": {
      "type": "number",
      "minimum": 0,
      "examples": [
        423.08
      ]
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "examples": [
        "USD"
      ]
    },
    "accent": {
      "type": "string",
      "examples": [
        "#0f766e"
      ]
    },
    "notes": {
      "type": "string",
      "examples": [
        "Keep this receipt for your records. No goods or services were provided in exchange beyond those listed above."
      ]
    },
    "balance_due": {
      "type": "number",
      "minimum": 0,
      "description": "What is still owed after this payment. 0 prints \"paid in full\".",
      "examples": [
        0
      ]
    },
    "merchant": {
      "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": [
            "billing@galleyrender.com"
          ]
        },
        "tax_id": {
          "type": "string",
          "examples": [
            "88-3310427"
          ]
        },
        "logo_url": {
          "type": "string",
          "format": "uri",
          "examples": [
            "https://example.com/logo.png"
          ]
        }
      }
    },
    "customer": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "examples": [
            "Acme Robotics"
          ]
        },
        "address": {
          "type": "string",
          "examples": [
            "100 Market St, Austin, TX 78701"
          ]
        },
        "email": {
          "type": "string",
          "format": "email",
          "examples": [
            "ap@acme.test"
          ]
        }
      }
    },
    "payment": {
      "type": "object",
      "required": [
        "method"
      ],
      "properties": {
        "method": {
          "type": "string",
          "description": "How it was paid.",
          "examples": [
            "Visa"
          ]
        },
        "last4": {
          "type": "string",
          "description": "Last four digits of the card or account.",
          "examples": [
            "4242"
          ]
        },
        "reference": {
          "type": "string",
          "description": "Processor or bank reference.",
          "examples": [
            "ch_3QkT2mB9xLp0"
          ]
        },
        "processor": {
          "type": "string",
          "examples": [
            "Stripe"
          ]
        }
      }
    },
    "applied_to": {
      "type": "array",
      "description": "What the payment covered.",
      "items": {
        "type": "object",
        "required": [
          "description",
          "amount"
        ],
        "properties": {
          "description": {
            "type": "string",
            "examples": [
              "Starter plan"
            ]
          },
          "period": {
            "type": "string",
            "examples": [
              "Sep 1 – Sep 30, 2026"
            ]
          },
          "amount": {
            "type": "number",
            "examples": [
              19
            ]
          }
        }
      }
    }
  }
}