Template gallery / meeting-agenda

HOA meeting agenda template

Order of business for a board or membership meeting: numbered items grouped into sections under a newsletter masthead, the running clock set in the left margin so the times line up as a column, what the Board is being asked to do as a ruled tab at the right edge, an expected-adjournment row, the board packet listed by tab, and the owner comment policy.

chromium default PDF 12 top-level fields Billed per page

Rendered preview of the meeting-agenda 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 ruled tab that says what the Board is being asked to do. 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.
posted_by string optional Who posted the agenda, printed in the running foot beside the posting date.
rules_of_order string optional The parliamentary authority named in the running foot.
purpose string optional One line under the header, useful for special meetings.
association object { name, subtitle, logo_url } required
meeting object { kind, date, time, start_minutes, … } required
sections array of object { title, items } required Agenda in order of business. One section per heading, e.g. Opening, Reports, Unfinished business, New business, Closing.
attachments array of string optional Packet contents listed at the foot of the agenda.
notes string optional
comment_policy string optional Replaces the default owner-comment paragraph.
posted_on string (date) optional
posted_where string optional

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
{
  "association": {
    "name": "Heron Bay Homeowners Association, Inc.",
    "subtitle": "Board of Directors"
  },
  "meeting": {
    "kind": "Regular",
    "date": "2026-10-13",
    "time": "6:30 p.m.",
    "start_minutes": 1110,
    "location": "Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC",
    "virtual": "meet.example.test/heron-bay-board",
    "dial_in": "(910) 555-0177, code 884 221#",
    "expected_duration": "90 minutes"
  },
  "purpose": "Regular monthly business meeting. The draft 2027 operating budget is item 7 and is open for owner comment before the November adoption vote.",
  "sections": [
    {
      "title": "Opening",
      "items": [
        {
          "number": "1",
          "title": "Call to order and roll call",
          "presenter": "Priya Raghunathan, President",
          "minutes": 5,
          "action": "Information"
        },
        {
          "number": "2",
          "title": "Approval of the September 8, 2026 regular meeting minutes",
          "presenter": "Matthew Okafor, Secretary",
          "minutes": 5,
          "action": "Vote",
          "detail": "Draft minutes were circulated to directors on October 6."
        }
      ]
    },
    {
      "title": "Reports",
      "items": [
        {
          "number": "3",
          "title": "Treasurer's report and September financials",
          "presenter": "Ana Alvarez, Treasurer",
          "minutes": 10,
          "action": "Information",
          "bullets": [
            "Operating and reserve balances at September 30",
            "Delinquency report: two accounts over 90 days",
            "Year-to-date variance against the 2026 budget"
          ]
        },
        {
          "number": "4",
          "title": "Management report",
          "presenter": "Denise Hollowell, Cape Fear Property Management",
          "minutes": 10,
          "action": "Information",
          "detail": "Work orders, clubhouse roof replacement status, and the pressure-washing completion walk."
        },
        {
          "number": "5",
          "title": "Architectural Review Committee",
          "presenter": "Karen Whitfield, Chair",
          "minutes": 5,
          "action": "Information"
        }
      ]
    },
    {
      "title": "Unfinished business",
      "items": [
        {
          "number": "6",
          "title": "Traffic calming on Marsh Wren Drive",
          "presenter": "Denise Hollowell",
          "minutes": 15,
          "action": "Discussion",
          "detail": "Three quotes were obtained as directed on September 8, from $4,150 to $6,900, to be weighed against the 2027 paving reserve."
        },
        {
          "number": "7",
          "title": "Architectural review fee schedule",
          "presenter": "Karen Whitfield",
          "minutes": 10,
          "action": "Discussion",
          "detail": "Cost breakdown requested at the September meeting is in the packet. The September motion to raise the fee to $75 failed 1-4."
        }
      ]
    },
    {
      "title": "New business",
      "items": [
        {
          "number": "8",
          "title": "First reading of the 2027 operating budget",
          "presenter": "Ana Alvarez, Treasurer",
          "minutes": 20,
          "action": "Discussion",
          "detail": "No vote tonight. Adoption is scheduled for the November 10 meeting after the owner comment period required by the bylaws.",
          "bullets": [
            "Proposed assessment of $268 per month, up 4.2% from $257",
            "Reserve contribution raised from $61,000 to $68,400",
            "Insurance premium increase of $9,100 driven by the coastal wind pool"
          ]
        },
        {
          "number": "9",
          "title": "Annual meeting notice, ballot and proxy",
          "presenter": "Matthew Okafor, Secretary",
          "minutes": 10,
          "action": "Vote",
          "detail": "Approve for mailing by October 30, thirty days before the December 1 annual meeting."
        }
      ]
    },
    {
      "title": "Closing",
      "items": [
        {
          "number": "10",
          "title": "Homeowner open forum",
          "minutes": 15,
          "action": "Hearing"
        },
        {
          "number": "11",
          "title": "Executive session: delinquent accounts and one contract matter",
          "minutes": 15,
          "action": "Discussion"
        },
        {
          "number": "12",
          "title": "Adjourn",
          "minutes": 2,
          "action": "Vote"
        }
      ]
    }
  ],
  "attachments": [
    "Draft minutes of the September 8, 2026 regular meeting",
    "September 2026 financial statements and delinquency report",
    "Three speed hump quotes (Coastal Paving, Anchor Site Works, Rivermark Asphalt)",
    "Architectural review cost breakdown",
    "Draft 2027 operating budget and reserve schedule"
  ],
  "notes": "Directors who cannot attend should notify the Secretary by noon on the day of the meeting.",
  "posted_by": "Matthew Okafor, Secretary",
  "rules_of_order": "Robert's Rules of Order Newly Revised (12th ed.)",
  "posted_on": "2026-10-06",
  "posted_where": "the clubhouse bulletin board"
}

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-agenda@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-agenda",
        "format": "pdf",
        "data": { … see the example payload above … }
      }
    }
  }'

Pin the version — meeting-agenda@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": "HOA / board meeting agenda",
  "type": "object",
  "required": [
    "association",
    "meeting",
    "sections"
  ],
  "additionalProperties": true,
  "properties": {
    "accent": {
      "type": "string",
      "description": "The association's navy, used for the ruled tab that says what the Board is being asked to do. 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})$"
    },
    "posted_by": {
      "type": "string",
      "description": "Who posted the agenda, printed in the running foot beside the posting date.",
      "examples": [
        "Matthew Okafor, Secretary"
      ]
    },
    "rules_of_order": {
      "type": "string",
      "description": "The parliamentary authority named in the running foot.",
      "default": "Robert's Rules of Order Newly Revised",
      "examples": [
        "Robert's Rules of Order Newly Revised (12th ed.)"
      ]
    },
    "purpose": {
      "type": "string",
      "description": "One line under the header, useful for special meetings.",
      "examples": [
        "Regular monthly business meeting. The draft 2027 budget is item 7 and is open for owner comment."
      ]
    },
    "association": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "examples": [
            "Heron Bay Homeowners Association, Inc."
          ]
        },
        "subtitle": {
          "type": "string",
          "default": "Board of Directors",
          "examples": [
            "Board of Directors"
          ]
        },
        "logo_url": {
          "type": "string",
          "format": "uri",
          "examples": [
            "https://example.com/heron-bay.png"
          ]
        }
      }
    },
    "meeting": {
      "type": "object",
      "required": [
        "date"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "Regular",
            "Special",
            "Annual",
            "Organisational",
            "Emergency"
          ],
          "examples": [
            "Regular"
          ]
        },
        "date": {
          "type": "string",
          "format": "date",
          "examples": [
            "2026-10-13"
          ]
        },
        "time": {
          "type": "string",
          "examples": [
            "6:30 p.m."
          ]
        },
        "start_minutes": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1439,
          "description": "Start time as minutes past midnight (6:30 p.m. is 1110). Given, each item that has `minutes` prints the clock time it is expected to begin.",
          "examples": [
            1110
          ]
        },
        "location": {
          "type": "string",
          "examples": [
            "Heron Bay Clubhouse, 1400 Marsh Wren Drive, Wilmington, NC"
          ]
        },
        "virtual": {
          "type": "string",
          "description": "Video link or meeting ID.",
          "examples": [
            "meet.example.test/heron-bay-board"
          ]
        },
        "dial_in": {
          "type": "string",
          "examples": [
            "(910) 555-0177, code 884 221#"
          ]
        },
        "expected_duration": {
          "type": "string",
          "examples": [
            "90 minutes"
          ]
        }
      }
    },
    "sections": {
      "type": "array",
      "minItems": 1,
      "description": "Agenda in order of business. One section per heading, e.g. Opening, Reports, Unfinished business, New business, Closing.",
      "items": {
        "type": "object",
        "required": [
          "title",
          "items"
        ],
        "properties": {
          "title": {
            "type": "string",
            "examples": [
              "New business"
            ]
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "title"
              ],
              "properties": {
                "number": {
                  "type": "string",
                  "description": "Item label; defaults to its position within the section.",
                  "examples": [
                    "7"
                  ]
                },
                "title": {
                  "type": "string",
                  "examples": [
                    "First reading of the 2027 operating budget"
                  ]
                },
                "presenter": {
                  "type": "string",
                  "examples": [
                    "Ana Alvarez, Treasurer"
                  ]
                },
                "minutes": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Time allotted. Drives the running clock printed in the left margin.",
                  "examples": [
                    20
                  ]
                },
                "action": {
                  "type": "string",
                  "description": "What the Board is being asked to do with the item. Printed at the right edge of the row under a short navy rule, so the column can be scanned for the votes.",
                  "enum": [
                    "Vote",
                    "Discussion",
                    "Information",
                    "Consent",
                    "Hearing"
                  ],
                  "examples": [
                    "Vote"
                  ]
                },
                "detail": {
                  "type": "string",
                  "examples": [
                    "Draft mailed to directors on October 6. No vote tonight; adoption is scheduled for the November meeting after the statutory owner comment period."
                  ]
                },
                "bullets": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "examples": [
                      "Assessment increase of 4.2% to $268 per month"
                    ]
                  },
                  "examples": [
                    [
                      "Assessment increase of 4.2% to $268 per month"
                    ]
                  ]
                }
              }
            }
          }
        }
      }
    },
    "attachments": {
      "type": "array",
      "description": "Packet contents listed at the foot of the agenda.",
      "items": {
        "type": "string",
        "examples": [
          "Draft July 14 minutes"
        ]
      },
      "examples": [
        [
          "Draft July 14 minutes"
        ]
      ]
    },
    "notes": {
      "type": "string",
      "examples": [
        "Directors who cannot attend should notify the Secretary by noon on the day of the meeting so the quorum can be confirmed in advance."
      ]
    },
    "comment_policy": {
      "type": "string",
      "description": "Replaces the default owner-comment paragraph.",
      "examples": [
        "Owners may address the Board during the open forum. Comments are limited to three minutes per owner."
      ]
    },
    "posted_on": {
      "type": "string",
      "format": "date",
      "examples": [
        "2026-10-06"
      ]
    },
    "posted_where": {
      "type": "string",
      "examples": [
        "the clubhouse bulletin board and heronbayhoa.example.test"
      ]
    }
  }
}