Template gallery / notice-of-meeting
HOA notice of meeting template
Statutory notice of an annual or special meeting: a centred masthead and title, the date, time and place as one heavy-ruled block, the business to be conducted in two numbered columns, the quorum requirement stated as an arithmetic finding, the candidate list, and a detachable limited proxy behind a real tear rule on its own page with numbered instructions, 18pt vote boxes and the return deadline in brick red.
chromium default PDF 17 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. The keylines, the particulars block and the body stay black ink; the brick red on the proxy deadline is fixed. A hex colour or a CSS colour keyword. It is interpolated into the stylesheet, so nothing else is accepted. |
| record_date | string (date) | optional | The date on which ownership is fixed for voting. Printed in the notice sentence when given, because an owner who bought after it does not vote. |
| association | object { name, address, phone, email, … } | required | |
| meeting | object { kind, body, audience, date, … } | required | |
| authority | string | optional | The bylaw article or statute the notice is given under. |
| purpose | string | optional | |
| agenda | array of string | optional | Numbered order of business printed in the notice. |
| quorum | object { percent, total_units, units_needed } | optional | Used to build the default quorum paragraph. Ignored when `quorum_statement` is given. |
| quorum_statement | string | optional | Replaces the whole quorum paragraph. |
| seats | integer | optional | |
| candidates | array of object { name, unit, note } | optional | Declared candidates, for an election notice. |
| enclosures | array of string | optional | |
| closing | string | optional | |
| secretary | object { name, title } | required | |
| notice_given_on | string (date) | optional | |
| notice_certification | string | optional | How notice was delivered, for the record. |
| proxy | object { instructions, revocation, allow_general, options, … } | optional | The detachable proxy form on the second page. |
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.
{
"association": {
"name": "Heron Bay Homeowners Association, Inc.",
"address": "PO Box 4127, Wilmington, NC 28406",
"phone": "(910) 555-0177",
"email": "board@heronbayhoa.example.test"
},
"meeting": {
"kind": "Annual",
"body": "Members",
"audience": "owners of record of the Association",
"date": "2026-12-01",
"weekday": "Tuesday",
"time": "7:00 p.m.",
"sign_in_time": "6:30 p.m.",
"location": "Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC 28411",
"virtual": "meet.example.test/heron-bay-annual",
"dial_in": "(910) 555-0177, code 884 221#"
},
"record_date": "2026-10-15",
"authority": "Article III, Section 2 of the Bylaws and the North Carolina Planned Community Act",
"purpose": "The purpose of the meeting is to elect three directors to three-year terms, to receive the 2027 budget as adopted by the Board on November 10, 2026, and to transact any other business properly brought before the members.",
"agenda": [
"Call to order and certification of the quorum",
"Proof of notice of the meeting",
"Approval of the December 2, 2025 annual meeting minutes",
"President's report on the 2026 year",
"Treasurer's report and the adopted 2027 budget",
"Election of three directors to three-year terms",
"Vote to waive the 2027 reserve study update",
"Owner questions",
"Adjournment"
],
"quorum": {
"percent": 30,
"total_units": 186,
"units_needed": 56
},
"seats": 3,
"candidates": [
{
"name": "Daniel Voss",
"unit": "1418 Marsh Wren Drive",
"note": "incumbent, 2nd term"
},
{
"name": "Ana Alvarez",
"unit": "1502 Tern Court",
"note": "incumbent, 2nd term"
},
{
"name": "Lucia Marchetti",
"unit": "1377 Marsh Wren Drive"
},
{
"name": "Greg Sandoval",
"unit": "1290 Egret Landing"
},
{
"name": "Yusuf Demir",
"unit": "1461 Tern Court"
}
],
"enclosures": [
"Official ballot and return envelope",
"Candidate statements, printed as submitted and unedited",
"The 2027 budget adopted by the Board on November 10, 2026",
"Draft minutes of the December 2, 2025 annual meeting"
],
"closing": "Owners with questions before the meeting may write the Secretary at the address above or attend the October 13 board meeting, where the budget was presented for first reading.",
"secretary": {
"name": "Matthew Okafor",
"title": "Secretary"
},
"notice_given_on": "2026-10-29",
"notice_certification": "Mailed first class to every owner at the address shown in the Association's records and posted at the clubhouse and both entrance boards, thirty-three days before the meeting.",
"proxy": {
"allow_general": true,
"options": [
"For",
"Against",
"Abstain"
],
"items": [
{
"title": "Waive the reserve study update for fiscal year 2027",
"detail": "Requires a majority of the voting interests present in person or by proxy. A waiver defers the professional study one year; reserve funding is unchanged either way."
},
{
"title": "Approve the clubhouse kitchen refurbishment, not to exceed $46,000",
"detail": "Funded from the clubhouse reserve component, which held $71,200 at September 30, 2026."
},
{
"title": "Any lawful adjournment of this meeting for lack of a quorum",
"detail": "Marking “For” lets this proxy carry to the re-noticed meeting."
}
],
"return_to": "Return to the Secretary, Heron Bay HOA, PO Box 4127, Wilmington, NC 28406, or hand it in at the sign-in table.",
"deadline": "2026-11-30"
}
} Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "notice-of-meeting@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": "notice-of-meeting",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — notice-of-meeting@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 (17 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Notice of meeting with proxy form",
"type": "object",
"required": [
"association",
"meeting",
"secretary"
],
"additionalProperties": true,
"properties": {
"accent": {
"type": "string",
"description": "The association's navy. The keylines, the particulars block and the body stay black ink; the brick red on the proxy deadline is fixed. 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})$"
},
"record_date": {
"type": "string",
"format": "date",
"description": "The date on which ownership is fixed for voting. Printed in the notice sentence when given, because an owner who bought after it does not vote.",
"examples": [
"2026-10-15"
]
},
"association": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Heron Bay Homeowners Association, Inc."
]
},
"address": {
"type": "string",
"examples": [
"PO Box 4127, Wilmington, NC 28406"
]
},
"phone": {
"type": "string",
"examples": [
"(910) 555-0177"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"board@heronbayhoa.example.test"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/heron-bay.png"
]
}
}
},
"meeting": {
"type": "object",
"required": [
"date",
"time",
"location"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"Annual",
"Special",
"Regular",
"Budget",
"Recall"
],
"examples": [
"Annual"
]
},
"body": {
"type": "string",
"description": "Whose meeting it is. Also signs the notice.",
"default": "Members",
"examples": [
"Members"
]
},
"audience": {
"type": "string",
"default": "members of the Association",
"examples": [
"owners of record of the Association"
]
},
"date": {
"type": "string",
"format": "date",
"examples": [
"2026-12-01"
]
},
"weekday": {
"type": "string",
"examples": [
"Tuesday"
]
},
"time": {
"type": "string",
"examples": [
"7:00 p.m."
]
},
"sign_in_time": {
"type": "string",
"examples": [
"6:30 p.m."
]
},
"location": {
"type": "string",
"examples": [
"Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC 28411"
]
},
"virtual": {
"type": "string",
"examples": [
"meet.example.test/heron-bay-annual"
]
},
"dial_in": {
"type": "string",
"examples": [
"(910) 555-0177, code 884 221#"
]
}
}
},
"authority": {
"type": "string",
"description": "The bylaw article or statute the notice is given under.",
"examples": [
"Article III, Section 2 of the Bylaws and N.C. Gen. Stat. § 47F-3-108"
]
},
"purpose": {
"type": "string",
"examples": [
"The purpose of the meeting is to elect three directors, to receive the 2027 budget as adopted by the Board, and to transact any other business properly brought before the members."
]
},
"agenda": {
"type": "array",
"description": "Numbered order of business printed in the notice.",
"items": {
"type": "string",
"examples": [
"Election of three directors to three-year terms"
]
},
"examples": [
[
"Election of three directors to three-year terms"
]
]
},
"quorum": {
"type": "object",
"description": "Used to build the default quorum paragraph. Ignored when `quorum_statement` is given.",
"properties": {
"percent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"examples": [
30
]
},
"total_units": {
"type": "integer",
"minimum": 1,
"examples": [
186
]
},
"units_needed": {
"type": "integer",
"minimum": 1,
"description": "Pre-computed so the arithmetic on the page is yours, not the template's.",
"examples": [
56
]
}
}
},
"quorum_statement": {
"type": "string",
"description": "Replaces the whole quorum paragraph.",
"examples": [
"A quorum of thirty percent of the voting interests is required."
]
},
"seats": {
"type": "integer",
"minimum": 1,
"examples": [
3
]
},
"candidates": {
"type": "array",
"description": "Declared candidates, for an election notice.",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Daniel Voss"
]
},
"unit": {
"type": "string",
"examples": [
"1418 Marsh Wren Drive"
]
},
"note": {
"type": "string",
"examples": [
"incumbent, seeking a second term"
]
}
}
}
},
"enclosures": {
"type": "array",
"items": {
"type": "string",
"examples": [
"Official ballot and return envelope"
]
},
"examples": [
[
"Official ballot and return envelope"
]
]
},
"closing": {
"type": "string",
"examples": [
"Owners with questions before the meeting may write the Secretary at the address above."
]
},
"secretary": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Matthew Okafor"
]
},
"title": {
"type": "string",
"default": "Secretary",
"examples": [
"Secretary"
]
}
}
},
"notice_given_on": {
"type": "string",
"format": "date",
"examples": [
"2026-10-29"
]
},
"notice_certification": {
"type": "string",
"description": "How notice was delivered, for the record.",
"examples": [
"Mailed first class to every owner at the address in the Association's records and posted at the clubhouse and both entrance boards, 33 days before the meeting."
]
},
"proxy": {
"type": "object",
"description": "The detachable proxy form on the second page.",
"properties": {
"instructions": {
"type": "string",
"description": "Replaces the default instruction paragraph.",
"examples": [
"Complete every field, sign, date, and return this form so that it is received before the meeting is called to order."
]
},
"revocation": {
"type": "string",
"description": "The sentence under the numbered instructions saying how long the proxy lasts and how it is revoked.",
"default": "A proxy is valid only for the meeting named above and any lawful adjournment of it. An owner may revoke a proxy at any time before the vote is taken, by attending in person or by delivering written notice to the Secretary.",
"examples": [
"This proxy expires eleven months from the date signed unless a shorter period is stated."
]
},
"allow_general": {
"type": "boolean",
"default": false,
"description": "Adds a general-proxy option beside quorum-only and limited.",
"examples": [
true
]
},
"options": {
"type": "array",
"description": "Column headings on the limited-proxy table.",
"default": [
"For",
"Against",
"Abstain"
],
"items": {
"type": "string",
"examples": [
"For"
]
},
"examples": [
[
"For",
"Against",
"Abstain"
]
]
},
"items": {
"type": "array",
"description": "Each matter the owner may direct a vote on.",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"examples": [
"Waive the reserve study update for fiscal year 2027"
]
},
"detail": {
"type": "string",
"examples": [
"Requires a majority of the voting interests present in person or by proxy."
]
}
}
}
},
"return_to": {
"type": "string",
"examples": [
"Return to: Secretary, Heron Bay HOA, PO Box 4127, Wilmington, NC 28406, or hand it to the sign-in table before 7:00 p.m."
]
},
"deadline": {
"type": "string",
"format": "date",
"examples": [
"2026-11-30"
]
}
}
}
}
}