Template gallery / meeting-minutes
HOA meeting minutes template
Board meeting minutes for an HOA, condo board or nonprofit, set as a record book rather than a memo: a newsletter masthead over a double keyline, a roll-call table whose total row states the quorum finding as a finding, every motion as a record with its mover, seconder and recorded vote locked into a fixed right-hand column, action items, exhibits, and a secretary's certification that shares a page with real business.
chromium default PDF 21 top-level fields Billed 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 |
|---|---|---|---|
| accent | string | optional | The association's navy. Used for the status stamp and for a carried verdict; the keylines and body stay black ink. A hex colour or a CSS colour keyword. It is interpolated into the stylesheet, so nothing else is accepted. |
| status | "draft" | "unapproved" | "approved" | optional | Shown as a pill beside the heading unless it is "approved". |
| association | object { name, subtitle, address, logo_url } | required | The association or corporation whose board met. |
| meeting | object { kind, date, time, location, … } | required | |
| board_members | array of object { name, title, present, absence } | required | Every seated director, present or not. Roll call for the quorum count. |
| also_present | array of object { name, role } | optional | Managing agent, counsel, vendors and guests. |
| homeowners_present | integer | optional | Count of owners in the gallery. |
| quorum | object { required, present, met, note } | optional | Quorum finding. `present` is compared against the number of directors listed. |
| approval_of_minutes | string | optional | What happened to the previous meeting's minutes. |
| reports | array of object { title, presenter, body } | optional | Officer, committee and management reports, in the order given. |
| motions | array of object { number, text, moved_by, seconded_by, … } | optional | Each motion with its mover, seconder and recorded vote. |
| financial_position | object { as_of, lines, note } | optional | The balances the Board accepted, printed as a small ruled table under the reports. Minutes that record a treasurer's report without the figures are the ones an auditor sends back. |
| attachments | array of object { label, title, note } | optional | Documents handed to the Board and incorporated into the record by reference, so the minutes stay short without losing them. |
| certification | string | optional | The sentence above the signature lines. Defaults to the secretary's usual certification. |
| open_forum | string | optional | Summary of the homeowner comment period. |
| action_items | array of object { item, owner, due } | optional | What someone has to do before the next meeting. |
| executive_session | string | optional | What the closed session covered, stated generally. |
| next_meeting | object { date, time, location, note } | optional | |
| secretary | object { name, title } | optional | Left signature line. |
| president | object { name, title } | optional | Right signature line. |
| approved_on | string (date) | optional | Set once the Board approves them; otherwise the footer says they are a draft. |
Default render options
Applied unless you override them. Options are part of the cache key.
| page_size | "Letter" |
| margin | {"top":"0.7in","right":"0.7in","bottom":"0.95in","left":"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.
{
"status": "draft",
"association": {
"name": "Heron Bay Homeowners Association, Inc.",
"subtitle": "Board of Directors",
"address": "PO Box 4127, Wilmington, NC 28406"
},
"meeting": {
"kind": "Regular",
"date": "2026-09-08",
"time": "6:30 p.m.",
"location": "Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC",
"chair": "Priya Raghunathan, President",
"called_to_order": "6:32 p.m.",
"adjourned": "8:04 p.m.",
"recorded_by": "Matthew Okafor, Secretary"
},
"board_members": [
{
"name": "Priya Raghunathan",
"title": "President",
"present": true
},
{
"name": "Daniel Voss",
"title": "Vice President",
"present": true
},
{
"name": "Ana Alvarez",
"title": "Treasurer",
"present": true
},
{
"name": "Matthew Okafor",
"title": "Secretary",
"present": true
},
{
"name": "Karen Whitfield",
"title": "Director at large",
"present": true
},
{
"name": "Thomas Bergeron",
"title": "Director at large",
"present": false,
"absence": "Excused"
}
],
"also_present": [
{
"name": "Denise Hollowell",
"role": "community manager, Cape Fear Property Management"
},
{
"name": "Raymond Stipe",
"role": "Tidewater Roofing, for item 5 only"
}
],
"homeowners_present": 14,
"quorum": {
"required": 3,
"present": 5,
"met": true,
"note": "Director Alvarez joined at 6:41 p.m. and is recorded as present from that point."
},
"approval_of_minutes": "The minutes of the July 14, 2026 regular meeting were approved as corrected: the reserve transfer in paragraph 6 was changed from $12,000 to $12,500 to match the July bank statement. There was no August meeting.",
"reports": [
{
"title": "Treasurer's report",
"presenter": "Ana Alvarez, Treasurer",
"body": "Operating cash at August 31 was $48,712 against a year-to-date budget of $44,000. Reserve balances stood at $211,940 acr… [299 characters, shortened for display]"
},
{
"title": "Management report",
"presenter": "Denise Hollowell, Cape Fear Property Management",
"body": "Eleven work orders were opened in August and nine closed. The irrigation controller at the Marsh Wren entrance was repla… [261 characters, shortened for display]"
},
{
"title": "Architectural Review Committee",
"presenter": "Karen Whitfield, Chair",
"body": "Six applications were received: four approved, one approved with conditions, and one denied for a fence height exceeding six feet. The committee asked the Board to clarify whether composite decking colours require a separate submission."
}
],
"financial_position": {
"as_of": "2026-08-31",
"lines": [
{
"label": "Operating account — Live Oak Bank",
"amount": 48712.44,
"prior_amount": 45180.02
},
{
"label": "Reserve account — money market",
"amount": 211940.18,
"prior_amount": 209603.77
},
{
"label": "Assessments receivable",
"amount": 6215,
"prior_amount": 5890
},
{
"label": "Prepaid insurance and taxes",
"amount": 4108.33,
"prior_amount": 4930
}
],
"note": "The Board accepted the August statements as presented. Delinquencies over ninety days total $3,480 across two accounts, both referred to counsel."
},
"motions": [
{
"number": "2026-14",
"text": "To award the clubhouse roof replacement to Tidewater Roofing in the amount of $38,400, funded from the roofing reserve component, subject to receipt of a current certificate of insurance naming the Association as additional insured.",
"moved_by": "Ana Alvarez",
"seconded_by": "Karen Whitfield",
"vote": {
"for": 4,
"against": 0,
"abstain": 1
},
"result": "Carried",
"recusals": "Director Okafor, whose brother-in-law is employed by the bidder",
"discussion": "Three bids were received, from $34,900 to $41,200. Tidewater was not the lowest but was the only bidder carrying a twenty-year no-dollar-limit manufacturer warranty. The roofing component holds $52,300, so the award leaves $13,900 in it."
},
{
"number": "2026-15",
"text": "To amend the pool rules to close the pool at 9:00 p.m. from November 1 through March 31, and to direct management to post the revised hours at both gates.",
"moved_by": "Daniel Voss",
"seconded_by": "Priya Raghunathan",
"vote": {
"for": 5,
"against": 0,
"abstain": 0
},
"result": "Carried",
"discussion": "The change follows two complaints about noise after dark and brings the winter hours in line with the lighting on the pool deck."
},
{
"number": "2026-16",
"text": "To increase the architectural review application fee from $25 to $75.",
"moved_by": "Karen Whitfield",
"seconded_by": "Daniel Voss",
"vote": {
"for": 1,
"against": 4,
"abstain": 0
},
"result": "Failed",
"discussion": "The Board agreed the current fee does not cover the committee's costs but was unwilling to triple it without first publishing the cost breakdown to owners."
}
],
"open_forum": "Four owners spoke. Two asked about traffic calming on Marsh Wren Drive, and the Board directed management to obtain quot… [371 characters, shortened for display]",
"action_items": [
{
"item": "Obtain three quotes for speed humps on Marsh Wren Drive",
"owner": "Denise Hollowell",
"due": "2026-10-06"
},
{
"item": "Publish the architectural review cost breakdown to the Board",
"owner": "Denise Hollowell",
"due": "2026-10-06"
},
{
"item": "Collect Tidewater's certificate of insurance before work begins",
"owner": "Denise Hollowell",
"due": "2026-09-22"
},
{
"item": "Draft the annual meeting notice and limited proxy",
"owner": "Matthew Okafor",
"due": "2026-10-13"
},
{
"item": "Post the revised winter pool hours at both gates",
"owner": "Denise Hollowell",
"due": "2026-10-27"
}
],
"executive_session": "The Board met in executive session from 7:48 p.m. to 8:01 p.m. to discuss two delinquent accounts and one contract personnel matter. No votes were taken in closed session.",
"attachments": [
{
"label": "A",
"title": "Bid tabulation, clubhouse roof replacement, August 19, 2026",
"note": "three bidders"
},
{
"label": "B",
"title": "August 2026 financial statements, Cape Fear Property Management"
},
{
"label": "C",
"title": "Reserve study update, Coastal Reserve Advisors, May 4, 2026"
},
{
"label": "D",
"title": "Architectural Review Committee log, June to August 2026"
}
],
"next_meeting": {
"date": "2026-10-13",
"time": "6:30 p.m.",
"location": "Heron Bay Clubhouse",
"note": "The draft 2027 budget will be presented for first reading."
},
"secretary": {
"name": "Matthew Okafor",
"title": "Secretary"
},
"president": {
"name": "Priya Raghunathan",
"title": "President"
}
}
Values longer than 240 characters — data URIs, inline SVG — are shortened here so the
shape of the payload stays readable, and the replacement says how much was left out.
get_template and GET /v1/templates/:ref return them in full.
Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "meeting-minutes@1",
"format": "pdf",
"data": "… the example payload above …"
}' # 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": "meeting-minutes",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — meeting-minutes@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 (21 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "HOA / board meeting minutes",
"type": "object",
"required": [
"association",
"meeting",
"board_members"
],
"additionalProperties": true,
"properties": {
"accent": {
"type": "string",
"description": "The association's navy. Used for the status stamp and for a carried verdict; the keylines and body stay black ink. A hex colour or a CSS colour keyword. It is interpolated into the stylesheet, so nothing else is accepted.",
"default": "#1c3f60",
"examples": [
"#1c3f60"
],
"pattern": "^(#[0-9a-fA-F]{3,8}|[a-zA-Z]{3,20})$"
},
"status": {
"type": "string",
"description": "Shown as a pill beside the heading unless it is \"approved\".",
"enum": [
"draft",
"unapproved",
"approved"
],
"examples": [
"draft"
]
},
"association": {
"type": "object",
"required": [
"name"
],
"description": "The association or corporation whose board met.",
"properties": {
"name": {
"type": "string",
"examples": [
"Heron Bay Homeowners Association, Inc."
]
},
"subtitle": {
"type": "string",
"default": "Board of Directors",
"examples": [
"Board of Directors"
]
},
"address": {
"type": "string",
"examples": [
"PO Box 4127, Wilmington, NC 28406"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/heron-bay.png"
]
}
}
},
"meeting": {
"type": "object",
"required": [
"date"
],
"properties": {
"kind": {
"type": "string",
"description": "Regular, Special, Annual or Organisational.",
"enum": [
"Regular",
"Special",
"Annual",
"Organisational",
"Emergency"
],
"examples": [
"Regular"
]
},
"date": {
"type": "string",
"format": "date",
"examples": [
"2026-09-08"
]
},
"time": {
"type": "string",
"examples": [
"6:30 p.m."
]
},
"location": {
"type": "string",
"examples": [
"Heron Bay Clubhouse, 1400 Marsh Wren Drive"
]
},
"chair": {
"type": "string",
"description": "Who called the meeting to order.",
"examples": [
"Priya Raghunathan, President"
]
},
"called_to_order": {
"type": "string",
"examples": [
"6:32 p.m."
]
},
"adjourned": {
"type": "string",
"examples": [
"8:04 p.m."
]
},
"recorded_by": {
"type": "string",
"examples": [
"Matthew Okafor, Secretary"
]
}
}
},
"board_members": {
"type": "array",
"minItems": 1,
"description": "Every seated director, present or not. Roll call for the quorum count.",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Priya Raghunathan"
]
},
"title": {
"type": "string",
"examples": [
"President"
]
},
"present": {
"type": "boolean",
"default": true,
"examples": [
true
]
},
"absence": {
"type": "string",
"description": "Printed instead of \"No\" when absent, e.g. \"Excused\".",
"examples": [
"Excused"
]
}
}
}
},
"also_present": {
"type": "array",
"description": "Managing agent, counsel, vendors and guests.",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Denise Hollowell"
]
},
"role": {
"type": "string",
"examples": [
"Community manager, Cape Fear Property Management"
]
}
}
}
},
"homeowners_present": {
"type": "integer",
"minimum": 0,
"description": "Count of owners in the gallery.",
"examples": [
14
]
},
"quorum": {
"type": "object",
"description": "Quorum finding. `present` is compared against the number of directors listed.",
"properties": {
"required": {
"type": "integer",
"minimum": 1,
"examples": [
3
]
},
"present": {
"type": "integer",
"minimum": 0,
"examples": [
4
]
},
"met": {
"type": "boolean",
"default": true,
"examples": [
true
]
},
"note": {
"type": "string",
"examples": [
"Director Alvarez joined at 6:41 p.m. and is recorded as present from that point."
]
}
}
},
"approval_of_minutes": {
"type": "string",
"description": "What happened to the previous meeting's minutes.",
"examples": [
"The minutes of the July 14, 2026 regular meeting were approved as corrected; the reserve transfer figure in paragraph 6 was changed from $12,000 to $12,500."
]
},
"reports": {
"type": "array",
"description": "Officer, committee and management reports, in the order given.",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"examples": [
"Treasurer's report"
]
},
"presenter": {
"type": "string",
"examples": [
"Ana Alvarez, Treasurer"
]
},
"body": {
"type": "string",
"examples": [
"Operating cash at August 31 was $48,712 against a budget of $44,000. Two accounts remain more than 90 days delinquent and have been referred to counsel."
]
}
}
}
},
"motions": {
"type": "array",
"description": "Each motion with its mover, seconder and recorded vote.",
"items": {
"type": "object",
"required": [
"text",
"moved_by"
],
"properties": {
"number": {
"type": "string",
"description": "Motion label; defaults to its position in the list.",
"examples": [
"2026-14"
]
},
"text": {
"type": "string",
"examples": [
"To award the clubhouse roof replacement to Tidewater Roofing for $38,400, funded from the roof reserve component."
]
},
"moved_by": {
"type": "string",
"examples": [
"Ana Alvarez"
]
},
"seconded_by": {
"type": "string",
"examples": [
"Karen Whitfield"
]
},
"vote": {
"type": "object",
"description": "Recorded tally. The three counts are summed and printed as the number cast.",
"properties": {
"for": {
"type": "integer",
"minimum": 0,
"examples": [
4
]
},
"against": {
"type": "integer",
"minimum": 0,
"examples": [
0
]
},
"abstain": {
"type": "integer",
"minimum": 0,
"examples": [
1
]
}
}
},
"result": {
"type": "string",
"enum": [
"Carried",
"Failed",
"Tabled",
"Withdrawn"
],
"default": "Carried",
"examples": [
"Carried"
]
},
"recusals": {
"type": "string",
"description": "Directors who recused themselves and why.",
"examples": [
"Director Okafor, whose brother-in-law is employed by the bidder"
]
},
"discussion": {
"type": "string",
"examples": [
"Three bids were received. Tidewater was not the lowest bid but was the only one carrying a 20-year no-dollar-limit warranty."
]
}
}
}
},
"financial_position": {
"type": "object",
"description": "The balances the Board accepted, printed as a small ruled table under the reports. Minutes that record a treasurer's report without the figures are the ones an auditor sends back.",
"properties": {
"as_of": {
"type": "string",
"format": "date",
"description": "The statement date the balances are drawn from.",
"examples": [
"2026-08-31"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"amount"
],
"properties": {
"label": {
"type": "string",
"examples": [
"Operating account — Live Oak Bank"
]
},
"amount": {
"type": "number",
"examples": [
48712.44
]
},
"prior_amount": {
"type": "number",
"description": "The same account a month earlier, printed in a second column so the direction of travel is visible.",
"examples": [
45180.02
]
}
}
}
},
"note": {
"type": "string",
"examples": [
"Delinquencies over 90 days total $3,480 across two accounts, both referred to counsel."
]
}
}
},
"attachments": {
"type": "array",
"description": "Documents handed to the Board and incorporated into the record by reference, so the minutes stay short without losing them.",
"items": {
"type": "object",
"required": [
"label",
"title"
],
"properties": {
"label": {
"type": "string",
"description": "The exhibit mark, printed in mono.",
"examples": [
"A"
]
},
"title": {
"type": "string",
"examples": [
"Tidewater Roofing proposal dated August 19, 2026"
]
},
"note": {
"type": "string",
"examples": [
"Three bids, tabulated by management"
]
}
}
}
},
"certification": {
"type": "string",
"description": "The sentence above the signature lines. Defaults to the secretary's usual certification.",
"default": "I certify that the foregoing is a true and correct record of the proceedings of the meeting described above, taken from notes made by me at that meeting and from the exhibits presented to the Board.",
"examples": [
"I certify that the foregoing is a true and correct record of the proceedings of the meeting described above."
]
},
"open_forum": {
"type": "string",
"description": "Summary of the homeowner comment period.",
"examples": [
"Four owners spoke. Two asked about speed humps on Marsh Wren Drive; the Board asked management to obtain quotes. One raised the condition of the pool furniture, which is already in the 2027 reserve schedule."
]
},
"action_items": {
"type": "array",
"description": "What someone has to do before the next meeting.",
"items": {
"type": "object",
"required": [
"item"
],
"properties": {
"item": {
"type": "string",
"examples": [
"Obtain three quotes for two speed humps on Marsh Wren Drive"
]
},
"owner": {
"type": "string",
"examples": [
"Denise Hollowell"
]
},
"due": {
"type": "string",
"format": "date",
"examples": [
"2026-10-06"
]
}
}
}
},
"executive_session": {
"type": "string",
"description": "What the closed session covered, stated generally.",
"examples": [
"The Board met in executive session from 7:48 p.m. to 8:01 p.m. to discuss two delinquent accounts and one personnel matter. No votes were taken in closed session."
]
},
"next_meeting": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"examples": [
"2026-10-13"
]
},
"time": {
"type": "string",
"examples": [
"6:30 p.m."
]
},
"location": {
"type": "string",
"examples": [
"Heron Bay Clubhouse"
]
},
"note": {
"type": "string",
"examples": [
"The draft 2027 budget will be presented for first reading."
]
}
}
},
"secretary": {
"type": "object",
"description": "Left signature line.",
"properties": {
"name": {
"type": "string",
"examples": [
"Matthew Okafor"
]
},
"title": {
"type": "string",
"default": "Secretary",
"examples": [
"Secretary"
]
}
}
},
"president": {
"type": "object",
"description": "Right signature line.",
"properties": {
"name": {
"type": "string",
"examples": [
"Priya Raghunathan"
]
},
"title": {
"type": "string",
"default": "President",
"examples": [
"President"
]
}
}
},
"approved_on": {
"type": "string",
"format": "date",
"description": "Set once the Board approves them; otherwise the footer says they are a draft.",
"examples": [
"2026-10-13"
]
}
}
}