Meetings API
Create and manage meetings, resolutions, and minutes via the API.
Overview#
The Meetings module manages annual general meetings, special meetings, and board meetings.
| MCP tool | REST method | Scope |
|---|---|---|
list_meetings | GET /api/meetings | read:meetings |
create_meeting | POST /api/meetings | write:meetings |
update_meeting | PATCH /api/meetings/:id | write:meetings |
add_resolution | POST /api/meetings/:id/resolutions | write:meetings |
Meeting object#
{
id: string;
title: string;
type: "aga" | "aga-special" | "board";
status: "draft" | "notice-sent" | "held" | "minutes-sent";
scheduledAt: string; // ISO 8601, America/Montreal timezone
location: string;
quorumPercent: number; // % of fractions present
attendees: MeetingAttendee[];
resolutions: Resolution[];
createdAt: string;
updatedAt: string;
}
type Resolution = {
id: string;
title: string;
description: string;
majorityRequired: "simple" | "absolute" | "special";
votesFor: number;
votesAgainst: number;
votesAbstain: number;
outcome: "passed" | "rejected" | "pending";
};
create_meeting#
Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | ✅ | e.g. "2026 Annual General Meeting" |
type | string | ✅ | aga, aga-special, board |
scheduledAt | string | ✅ | ISO 8601 (e.g. 2026-06-15T19:00:00-04:00) |
location | string | ✅ | Address or URL (for video conferencing) |
agenda | string[] | — | List of agenda items |
Example#
{
"name": "create_meeting",
"arguments": {
"title": "2026 Annual General Meeting",
"type": "aga",
"scheduledAt": "2026-06-15T19:00:00-04:00",
"location": "Community room, 123 Main Street",
"agenda": [
"2025 financial statements",
"2026-2027 budget",
"Board of directors election"
]
}
}
Automatic notice#
After creation, use send_meeting_notice to send the notice to co-owners:
{
"name": "send_meeting_notice",
"arguments": {
"meetingId": "...",
"sendBy": "email",
"includeAgenda": true
}
}
Bill 16 requires 21 days notice for an AGM. Syndic+ refuses to send a notice if scheduledAt is less than 21 days away (except special meetings with a documented justification).
add_resolution#
Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
meetingId | string | ✅ | Meeting UUID |
title | string | ✅ | Short title |
description | string | — | Full resolution text |
majorityRequired | string | ✅ | simple (>50%), absolute (>75%), special (unanimous) |
Example#
{
"name": "add_resolution",
"arguments": {
"meetingId": "...",
"title": "Roof replacement",
"description": "Approve the contract with Toiture Québec inc. for $145,000 plus taxes",
"majorityRequired": "absolute"
}
}
Quorum#
The default quorum is 51% of the fractions present or represented. For smaller syndicates, the declaration may set a different quorum.
Compute the quorum in real time:
{
"name": "calculate_quorum",
"arguments": { "meetingId": "..." }
}
Response:
{
"present": 62.5,
"proxied": 10.0,
"total": 72.5,
"required": 51.0,
"quorumReached": true
}
Minutes#
After the meeting, create the minutes:
{
"name": "generate_minutes",
"arguments": {
"meetingId": "...",
"draft": true
}
}
Syndic+ generates a pre-filled PDF (title, date, location, attendees, resolutions with outcomes). You can edit it before distributing to co-owners.