Template gallery / donation-receipt

Donation receipt template

Written acknowledgment for a US 501(c)(3), set as a letterpress card rather than a database export: a centred masthead carrying the organisation's name and EIN, the donor addressed for a window envelope, contributions as a dated ledger with the giving figures in EB Garamond, the deductible amount computed where goods or services were provided, and the statement the IRS requires set at reading size in the display face rather than shrunk into a footer. Non-cash rows print no value with the reason stated, because a charity may not assign one.

chromium default PDF 20 top-level fields Billed per page

Rendered preview of the donation-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
accent string optional The one plum spot: the receipt label, the section marks, the non-cash note and the signature. A hex colour or a CSS colour keyword. It is interpolated into the stylesheet, so nothing else is accepted.
currency string optional
receipt_number string required
receipt_label string optional
title string optional
period string optional The span the receipt covers, for an annual statement.
issued_on string (date) optional
organisation object { name, address, phone, email, … } required
donor object { name, address_line1, address_line2, city_state_zip, … } required
opening string optional
contributions_heading string optional
contributions array of object { date, date_text, description, detail, … } required One row per gift or per group of gifts. A row with `amount` is a cash contribution and is added to the total; a row without one is treated as non-cash and prints an em dash, because a charity may not state the value of donated property.
total_override number optional Replaces the computed cash total. Only for reconciling against a donor system that is the record of truth.
goods_and_services object { provided, description, value, intangible_religious, … } optional The part the IRS actually requires. Leave the object out, or set `provided: false`, and the receipt states that no goods or services were provided. Set `provided: true` and it names them, gives your good faith estimate of their value, and computes the deductible amount. Set `intangible_religious: true` for the wording churches use instead.
noncash_note string optional Replaces the default paragraph explaining why no value is stated for donated property.
notes array of string optional
closing string optional
signer object { name, title, script } optional
tax_status string optional Replaces the default 501(c)(3) and section 170(c) sentence.
disclaimer string optional Replaces the default "we cannot give tax advice" line.

Default render options

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

page_size "Letter"
margin "0.7in"
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": "2026-A-0417",
  "receipt_label": "Annual contribution statement",
  "title": "Your 2026 giving statement",
  "period": "For contributions received January 1 – December 31, 2026",
  "issued_on": "2027-01-12",
  "currency": "USD",
  "organisation": {
    "name": "Riverlight Community Food Bank, Inc.",
    "address": "2200 Vance Street, Wilmington, NC 28401",
    "phone": "(910) 555-0126",
    "email": "giving@riverlightfood.example.test",
    "website": "riverlightfood.example.test",
    "ein": "56-2418907"
  },
  "donor": {
    "name": "Marguerite and Anselm Achterberg",
    "address_line1": "417 Castle Street",
    "address_line2": "Apartment 3B",
    "city_state_zip": "Wilmington, NC 28401",
    "reference": "D-10428"
  },
  "opening": "Thank you. This statement is the record you need for your tax return: it lists everything we received from you in 2026, states what we gave you in return, and shows the amount that is deductible.",
  "contributions": [
    {
      "date_text": "Jan 5 – Dec 5, 2026",
      "description": "Monthly recurring gift",
      "detail": "Twelve payments of $75.00 on the fifth of each month",
      "method": "Card",
      "amount": 900
    },
    {
      "date": "2026-05-03",
      "description": "Spring appeal",
      "detail": "Designated to the mobile pantry",
      "method": "Online",
      "amount": 500
    },
    {
      "date": "2026-09-12",
      "description": "Harvest Table gala — two tickets",
      "detail": "Tickets at $125 each. See the required statement below.",
      "method": "Card",
      "amount": 250
    },
    {
      "date": "2026-10-03",
      "description": "Fourteen cases of canned vegetables and soup",
      "detail": "Delivered to the Vance Street pantry and logged by D. Marchetti",
      "method": "In kind"
    },
    {
      "date": "2026-11-20",
      "description": "Year-end appeal",
      "detail": "Check no. 2841, designated to the winter heating fund",
      "method": "Check",
      "amount": 1500
    }
  ],
  "goods_and_services": {
    "provided": true,
    "description": "dinner for two at the Harvest Table gala on September 12, 2026",
    "value": 68,
    "note": "The tickets were $125 each and the meal was catered at $34 a head. The remaining $182 of that gift is a contribution."
  },
  "notes": [
    "Gifts designated to a particular fund are used for that purpose. Where a designated fund is fully met, the board may redirect the balance to the general fund and will write to the donor before doing so.",
    "The monthly recurring gift is a single authorisation on your card ending 4417. It continues until you tell us to stop, and you can change or cancel it at any time.",
    "Contributions received after December 31, 2026 appear on next year's statement, even where the check is dated earlier. The date we use is the postmark for mail and the settlement date for cards."
  ],
  "closing": "If anything here does not match your own records, write to giving@riverlightfood.example.test and we will check it against the bank rather than against our own spreadsheet. Thank you for a year in which we served 41,600 households.",
  "signer": {
    "name": "Imogen Thorsdottir",
    "title": "Executive Director, Riverlight Community Food Bank, Inc.",
    "script": "Imogen Thorsdottir"
  }
}

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": "donation-receipt@1",
  "format": "pdf",
  "data": "… the example payload above …"
}'
With no API key, over MCPshell
# No API key. The first call mints a trial of 10 PDF pages or 10 images.
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": "donation-receipt",
        "format": "pdf",
        "data": { … see the example payload above … }
      }
    }
  }'

Pin the version — donation-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 (20 top-level properties)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Charitable contribution receipt",
  "type": "object",
  "required": [
    "organisation",
    "donor",
    "receipt_number",
    "contributions"
  ],
  "additionalProperties": true,
  "properties": {
    "accent": {
      "type": "string",
      "description": "The one plum spot: the receipt label, the section marks, the non-cash note and the signature. A hex colour or a CSS colour keyword. It is interpolated into the stylesheet, so nothing else is accepted.",
      "examples": [
        "#5b2a5f"
      ],
      "default": "#5b2a5f",
      "pattern": "^(#[0-9a-fA-F]{3,8}|[a-zA-Z]{3,20})$"
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "examples": [
        "USD"
      ]
    },
    "receipt_number": {
      "type": "string",
      "examples": [
        "2026-A-0417"
      ]
    },
    "receipt_label": {
      "type": "string",
      "default": "Contribution receipt",
      "examples": [
        "Annual contribution statement"
      ]
    },
    "title": {
      "type": "string",
      "default": "Receipt for your charitable contribution",
      "examples": [
        "Your 2026 giving statement"
      ]
    },
    "period": {
      "type": "string",
      "description": "The span the receipt covers, for an annual statement.",
      "examples": [
        "For contributions received January 1 – December 31, 2026"
      ]
    },
    "issued_on": {
      "type": "string",
      "format": "date",
      "examples": [
        "2027-01-12"
      ]
    },
    "organisation": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The exact legal name. The required statement quotes it.",
          "examples": [
            "Riverlight Community Food Bank, Inc."
          ]
        },
        "address": {
          "type": "string",
          "examples": [
            "2200 Vance Street, Wilmington, NC 28401"
          ]
        },
        "phone": {
          "type": "string",
          "examples": [
            "(910) 555-0126"
          ]
        },
        "email": {
          "type": "string",
          "format": "email",
          "examples": [
            "giving@riverlightfood.example.test"
          ]
        },
        "website": {
          "type": "string",
          "examples": [
            "riverlightfood.example.test"
          ]
        },
        "ein": {
          "type": "string",
          "description": "Employer identification number. A donor claiming a deduction will want it on the receipt.",
          "examples": [
            "56-2418907"
          ]
        },
        "logo_url": {
          "type": "string",
          "format": "uri",
          "examples": [
            "https://example.com/riverlight.png"
          ]
        }
      }
    },
    "donor": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "examples": [
            "Marguerite and Anselm Achterberg"
          ]
        },
        "address_line1": {
          "type": "string",
          "examples": [
            "417 Castle Street"
          ]
        },
        "address_line2": {
          "type": "string",
          "examples": [
            "Apartment 3B"
          ]
        },
        "city_state_zip": {
          "type": "string",
          "examples": [
            "Wilmington, NC 28401"
          ]
        },
        "reference": {
          "type": "string",
          "examples": [
            "D-10428"
          ]
        }
      }
    },
    "opening": {
      "type": "string",
      "examples": [
        "Thank you. This is the record you need for your tax return; the numbers below are everything we received from you this year."
      ]
    },
    "contributions_heading": {
      "type": "string",
      "default": "Contributions received",
      "examples": [
        "Contributions received"
      ]
    },
    "contributions": {
      "type": "array",
      "minItems": 1,
      "description": "One row per gift or per group of gifts. A row with `amount` is a cash contribution and is added to the total; a row without one is treated as non-cash and prints an em dash, because a charity may not state the value of donated property.",
      "items": {
        "type": "object",
        "required": [
          "description"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "examples": [
              "2026-11-20"
            ]
          },
          "date_text": {
            "type": "string",
            "description": "Used instead of `date` for a row that covers a span.",
            "examples": [
              "Jan 5 – Dec 5, 2026"
            ]
          },
          "description": {
            "type": "string",
            "examples": [
              "Year-end appeal"
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "Check no. 2841, designated to the winter heating fund"
            ]
          },
          "method": {
            "type": "string",
            "examples": [
              "Check"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "description": "Leave it off for a non-cash gift.",
            "examples": [
              1500
            ]
          }
        }
      }
    },
    "total_override": {
      "type": "number",
      "minimum": 0,
      "description": "Replaces the computed cash total. Only for reconciling against a donor system that is the record of truth.",
      "examples": [
        3150
      ]
    },
    "goods_and_services": {
      "type": "object",
      "description": "The part the IRS actually requires. Leave the object out, or set `provided: false`, and the receipt states that no goods or services were provided. Set `provided: true` and it names them, gives your good faith estimate of their value, and computes the deductible amount. Set `intangible_religious: true` for the wording churches use instead.",
      "properties": {
        "provided": {
          "type": "boolean",
          "default": false,
          "examples": [
            true
          ]
        },
        "description": {
          "type": "string",
          "examples": [
            "dinner for two at the Harvest Table gala on September 12, 2026"
          ]
        },
        "value": {
          "type": "number",
          "minimum": 0,
          "description": "Your good faith estimate. It is subtracted from the total to give the deductible amount.",
          "examples": [
            68
          ]
        },
        "intangible_religious": {
          "type": "boolean",
          "default": false,
          "examples": [
            true
          ]
        },
        "note": {
          "type": "string",
          "examples": [
            "The ticket price was $125 each; the meal was catered at $34 a head."
          ]
        }
      }
    },
    "noncash_note": {
      "type": "string",
      "description": "Replaces the default paragraph explaining why no value is stated for donated property.",
      "examples": [
        "Determining fair market value is the donor's responsibility."
      ]
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string",
        "examples": [
          "Gifts designated to a particular fund are used for that purpose."
        ]
      },
      "examples": [
        [
          "Designated gifts are used for that purpose."
        ]
      ]
    },
    "closing": {
      "type": "string",
      "examples": [
        "If anything here does not match your own records, write to giving@riverlightfood.example.test and we will check it against the bank."
      ]
    },
    "signer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "examples": [
            "Imogen Thorsdottir"
          ]
        },
        "title": {
          "type": "string",
          "examples": [
            "Executive Director"
          ]
        },
        "script": {
          "type": "string",
          "description": "A signature set in italic serif, in place of a blank rule.",
          "examples": [
            "Imogen Thorsdottir"
          ]
        }
      }
    },
    "tax_status": {
      "type": "string",
      "description": "Replaces the default 501(c)(3) and section 170(c) sentence.",
      "examples": [
        "This organisation is exempt from federal income tax under section 501(c)(3)."
      ]
    },
    "disclaimer": {
      "type": "string",
      "description": "Replaces the default \"we cannot give tax advice\" line.",
      "examples": [
        "We cannot give tax advice; ask your preparer."
      ]
    }
  }
}