Records departure for only the authenticated caller in the verified workspace. A joined member returns to invited, preserving their invitation and role so they may rejoin. Repeated departure, an already removed participant, and cleanup after meeting end are safe; waiting participants are refused. Does not end the meeting, remove another participant, delete history, capture media, or revoke previously issued provider credentials. Disconnect the caller's provider media before this action.
Action app_topolo_chat.meetings.leave · POST /api/meetings/{meetingId}/leave. Intended audience: public.
Catalog flags: readOnly=False, requiresConfirmation=True, destructive=False, agentAccess=confirm. HTTP method and empty permission fields do not override the actual effects or authority below.
Authority and prerequisites
- Declared authorization mode=runtime, requiredPermission=app_topolo_chat.meetings:write; actual source identity/resource checks below remain mandatory.
- Discover the actual identifier and current intended state within existing authority. Examples grant no access and are not executable probes.
Identifiers
- Use the meetingId in the caller’s verified workspace. No participantId or owner override is accepted.
Input
meetingId: type="string"; minLength=1. Required.
The exact native input/output schemas are retained in the hidden paired layer for this version. Top-level undeclared fields are rejected. Nested open records and semantic prerequisites still need source checks.
Effects and important boundaries
- Records departure for only the authenticated caller in the verified workspace. A joined member returns to invited, preserving their invitation and role so they may rejoin. Repeated departure, an already removed participant, and cleanup after meeting end are safe; waiting participants are refused.
- Does not end the meeting, remove another participant, delete history, capture media, or revoke previously issued provider credentials. Disconnect the caller's provider media before this action.
- Requires the authenticated member in the verified workspace, with a non-guest roster row. joined, invited and removed states are admitted for cleanup; a waiting participant is refused.
- Only joined status changes to invited. The invitation and role survive; already invited/removed rows remain as they were. The predicate deliberately permits cleanup after meeting end.
- Disconnect the caller’s provider media first. Recording departure does not revoke existing provider credentials, end the meeting, remove another participant or delete history.
Refusals, failures and recovery
- 400
workspace_required: Use the published workspace resource context. - 404
not_found: Use a meeting in the verified workspace in which the caller is a participant. - 409
participant_not_admitted: A waiting participant cannot use admitted-member departure. - 503
database_unavailable: Keep media disconnected and retry after the meeting data service recovers.
Departure does not destroy the invitation. To explicitly return, use meetings.join_token and join provider media again. A removed participant is not restored by departure.
Verification
- Read app_topolo_chat.meetings.get in the same workspace; the caller must no longer have joined status, and other participants and the meeting status must be unchanged.
- Retain actual request/receipt identifiers securely, preserve UNKNOWN effects and reconcile before any retry.
Run a reviewed request
Discover the current action and its resource requirements before running it. Save the approved input as reviewed-input.json; replace synthetic examples with values obtained through the intended authorized workflow. If discovery requires a resource binding, provide its published type and resolved ID separately on both plan and call. Stop if validation fails or the plan is not executable.
topolo actions get app_topolo_chat.meetings.leave --json
topolo actions validate app_topolo_chat.meetings.leave --data @reviewed-input.json --json
topolo actions plan app_topolo_chat.meetings.leave --data @reviewed-input.json --confirm --json
topolo actions call app_topolo_chat.meetings.leave --data @reviewed-input.json --confirm --json
--confirm must represent approval of the actual request and its effects. The examples do not supply that approval.
Worked examples
All examples are synthetic and unrun. They cannot authorize access, create human consent, prove media/provider success or establish financial/customer state. Placeholder tokens are unusable. No contact, payment, notification, provisioning or business read was executed.
Record own departure
SOURCE-AUTHORED SYNTHETIC, UNRUN. Output assessment: PASS_STRUCTURAL_ONLY_UNRUN.
Input:
{
"meetingId": "meeting_example"
}
Output illustration or error excerpt:
{
"state": "left",
"meetingId": "meeting_example",
"participantId": "user_example"
}
200 records roster departure only, with provider media already disconnected.
Refusal or failure
SOURCE-AUTHORED SYNTHETIC, UNRUN. Source-derived error-code excerpt only; messages/envelope can differ by layer or locale. Not a captured response. Output assessment: ERROR_EXCERPT_NOT_SUCCESS_SCHEMA.
Input:
{
"meetingId": "meeting_example"
}
Output illustration or error excerpt:
{
"error": "participant_not_admitted"
}
Waiting participants cannot use the admitted-member departure path.
Invalid input: stop at schema validation
SOURCE-AUTHORED SYNTHETIC, UNRUN. null is a no-response sentinel, not returned JSON null. Output assessment: NOT_APPLICABLE_NO_REQUEST.
Input:
{}
Output illustration or error excerpt:
null
Intentionally invalid input; no request was issued and no HTTP response/status is asserted.
Boundary: repeat cleanup after end/removal
SOURCE-AUTHORED SYNTHETIC, UNRUN. Output assessment: PASS_STRUCTURAL_ONLY_UNRUN.
Input:
{
"meetingId": "meeting_example"
}
Output illustration or error excerpt:
{
"state": "left",
"meetingId": "meeting_example",
"participantId": "user_example"
}
A repeated call can return left without restoring a removed participant or changing meeting state.
Source and verification limits
Reviewed against b5577fe8b0441cd07630b44866cb8b059a8bf047 at apps/api/src/handlers/meeting-presence-routes.ts and the published action schema on 2026-10-20. Examples are synthetic and unrun. Source review and schema validation do not prove current deployed behavior, provider completion or business delivery. Response excerpts are labelled where incomplete.
Change log
- 2026-10-20: Prepared the action guide with paired agent schemas, permission and effect boundaries, worked examples, verification and recovery instructions. Independently checked the pinned source; publication and runtime verification remain separate.