Skip to content
Cloudflare Docs

End a session

To end the current session for all participants, remove all participants using kickAll(). This stops any ongoing recording for that session and sets the session status to ENDED.

Ending a session is different from leaving a meeting. Leaving disconnects only the current participant. The session remains active if other participants are still present.

Steps

  1. Check that the local participant has permission to remove participants.

    TypeScript
    const canEndSession = meeting.self.permissions.kickParticipant === true;
    if (!canEndSession) {
    // Disable the "End meeting/session" control in your UI.
    // You can also show a message to explain why the action is not available.
    }
  2. End the session by removing all participants.

    If the participant does not have the required permission, kickAll() throws a ClientError with error code 1201.

    TypeScript
    try {
    await meeting.participants.kickAll();
    } catch (err) {
    if (err?.code === 1201) {
    // The participant does not have permission to end the session.
    // Update your UI to indicate that the action is not allowed.
    return;
    }
    throw err;
    }
  3. Listen for the session end event.

    When the session ends, all participants leave the session. The SDK emits a roomLeft event with state set to ended.

    TypeScript
    meeting.self.on("roomLeft", ({ state }) => {
    if (state === "ended") {
    // Update your UI to show that the meeting session has ended.
    }
    });

You can also end a session from your backend by removing all participants using the Kick all participants API.

End a session from your backend

Remove all participants with the API

Use the Kick all participants API method to remove all participants from an active session for a meeting.

Required API token permissions

At least one of the following token permissions is required:
  • Realtime Admin
  • Realtime
Kick all participants
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings/$MEETING_ID/active-session/kick-all" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

Listen for session end events with webhooks

Register a webhook that subscribes to meeting.ended. RealtimeKit sends this event when the session ends. You can use it to trigger backend workflows, such as sending a notification, generating a report, or updating session records in your database.

Required API token permissions

At least one of the following token permissions is required:
  • Realtime Admin
  • Realtime
Add a webhook
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/webhooks" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Session ended webhook",
"url": "<YOUR_WEBHOOK_URL>",
"events": [
"meeting.ended"
]
}'

Disable a meeting

Ending a session does not disable the meeting. Participants can join the meeting again and start a new session. To prevent participants from joining again and starting a new session, set the meeting status to INACTIVE using the Update a meeting API.

Required API token permissions

At least one of the following token permissions is required:
  • Realtime Admin
  • Realtime
Update a meeting
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings/$MEETING_ID" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"status": "INACTIVE"
}'

Next steps

  • Review how presets control permissions in Preset.
  • Review the possible values of the local participant room state in Local Participant.