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

Rendered preview of the meeting-minutes 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 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.

example.jsonjson
{
  "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

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": "meeting-minutes@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": "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 →

Try a free tool

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"
      ]
    }
  }
}