Update meeting
update_meetingReschedule, publish, start, close, or replace participants for a meeting. Only the fields you send are updated; omitted values remain unchanged.
Instructions
Change a meeting's title, time, place or invite list — or move its lifecycle state.
Reschedule ("move Thursday's review to 15:00"), publish a draft (state='open'),
start/wrap up a running one (state='in_progress'/'closed'), or fix participants.
Only passed parameters are sent; omitted fields stay as they are.
Returns the updated meeting in the same shape as get_meeting, including the fresh
lock_version for a follow-up edit.
Pitfalls. A closed meeting accepts a state-only patch (reopening it) and nothing
else; any other change is rejected with a validation error until it is reopened. A
conflict error (409) means somebody edited the meeting since you read it — the error
carries the fresh lock_version and the differing fields, so re-read and retry
deliberately. Needs 'edit meetings' permission; moving a meeting to another project
isn't offered.
Cross-references: get_meeting for current values/lock_version; create_meeting
to schedule a new one; delete_meeting to remove one; add_meeting_outcome for what
'in_progress' unlocks.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | New lifecycle state: 'open' publishes a draft to participants, 'in_progress' starts it (required before outcomes can be recorded), 'closed' freezes it, 'cancelled' calls it off. | |
| title | No | New title. Omit to leave alone; cannot be cleared. | |
| location | No | New room name or meeting URL; replaces the stored one. Null or an empty string clears it; omit to leave it untouched. | __unchanged__ |
| meeting_id | Yes | Numeric meeting id from list_meetings or get_meeting (never a project or agenda item id). | |
| start_time | No | New start as ISO 8601 with a timezone: '2026-08-03T14:00:00Z' or '...+02:00'. Offset-less times are rejected locally. Omit to keep the current time. | |
| lock_version | No | The lock_version from get_meeting. Passing it makes a concurrent edit fail loudly (409); omitting it fetches and echoes the current version — safe, but a wider conflict window. | |
| participants | No | Full new invite list (user ids), from search_principals or a project's memberships. Replaces the whole set — read the current list with get_meeting first and send it complete. Omit to leave untouched. | |
| duration_minutes | No | New length in minutes (90 = 1.5 hours); the end time is derived from it. Omit to keep the current duration. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Meeting id — what get_meeting and add_meeting_agenda_item take. | |
| notes | No | Degradation notes: agenda items that could not be read, work packages this account may not see. | |
| state | No | Lifecycle state: 'draft' (not yet opened to participants), 'open', 'in_progress', 'closed' or 'cancelled'. Cancelled meetings are excluded from listings. | |
| title | No | Meeting title. | |
| author | No | User who created the meeting. | |
| project | No | Project the meeting belongs to. | |
| end_time | No | ISO 8601 UTC end timestamp, derived from start plus duration. | |
| location | No | Room name or meeting URL as typed by the organizer. | |
| created_at | No | ISO 8601 UTC timestamp. | |
| start_time | No | ISO 8601 UTC start timestamp; null for an undated meeting. | |
| updated_at | No | ISO 8601 UTC timestamp. | |
| agenda_items | No | The agenda in order; always a list. Empty means either no agenda or an unreadable one — check 'notes' before concluding the meeting had none. | |
| lock_version | No | Optimistic-lock version. Echo it as update_meeting's lock_version so a concurrent edit fails loudly (409) instead of being overwritten. | |
| participants | No | Invited users; always a list. Attendance is not exposed by API v3. | |
| duration_hours | No | Scheduled length in hours (1.5 = 90 minutes); the wire sends an ISO duration, which is converted here. |