Skip to main content

Webhooks

Plug-N-Meet can notify your application about various events by sending webhook requests to a specified URL. You can configure this URL in the server settings or provide it when creating a room.

Receiving Webhooks

Webhook requests are sent as HTTP POST requests to the URLs you have configured, either in the server's config.yml file or during room creation. Each webhook event is encoded as JSON and included in the request body.

The request will have the Content-Type header set to application/webhook+json. Make sure your web server is configured to accept payloads with this content type.

Plug-N-Meet uses the same security pattern as LiveKit. To verify that webhook requests originate from Plug-N-Meet, each request includes Authorization and Hash-Token headers containing a signed JWT token. The token includes a SHA256 hash of the payload. For a PHP example, see webhook.php.

Events

You can review the event definitions here.

All webhook events include the following fields:

  • id: A UUID identifying the event
  • createdAt: UNIX timestamp in seconds

Room Created

interface CommonNotifyEvent {
event: 'room_created'
room: Room
}

Room Started

interface CommonNotifyEvent {
event: 'room_started'
room: Room
}

Room Finished

interface CommonNotifyEvent {
event: 'room_finished'
room: Room
}

Participant Joined

interface CommonNotifyEvent {
event: 'participant_joined'
room: Room
participant: ParticipantInfo
}

Participant Left

interface CommonNotifyEvent {
event: 'participant_left'
room: Room
participant: ParticipantInfo
}

Track Published

Only sid, identity, and name are included in the Room and Participant objects.

interface CommonNotifyEvent {
event: 'track_published'
room: Room
participant: ParticipantInfo
track: TrackInfo
}

Track Unpublished

Only sid, identity, and name are included in the Room and Participant objects.

interface CommonNotifyEvent {
event: 'track_unpublished'
room: Room
participant: ParticipantInfo
track: TrackInfo
}

Recording Started

interface CommonNotifyEvent {
event: 'start_recording'
room: Room
recording_info: RecordingInfoEvent
}

Recording Ended

interface CommonNotifyEvent {
event: 'end_recording'
room: Room
recording_info: RecordingInfoEvent
}

Recording Proceeded

interface CommonNotifyEvent {
event: 'recording_proceeded'
room: Room
recording_info: RecordingInfoEvent
}

RTMP Started

interface CommonNotifyEvent {
event: 'start_rtmp'
room: Room
recording_info: RecordingInfoEvent
}

RTMP Ended

interface CommonNotifyEvent {
event: 'end_rtmp'
room: Room
recording_info: RecordingInfoEvent
}

Speech-to-Text Session Started

interface CommonNotifyEvent {
event: 'speech_to_text_session_started'
room: Room
speech_service: SpeechServiceEvent
}

Speech-to-Text Session Ended

interface CommonNotifyEvent {
event: 'speech_to_text_session_ended'
room: Room
speech_service: SpeechServiceEvent
}

Speech-to-Text Total Usage

interface CommonNotifyEvent {
event: 'speech_to_text_total_usage'
room: Room
speech_service: SpeechServiceEvent
}

Analytics Proceeded

interface CommonNotifyEvent {
event: 'analytics_proceeded'
room: Room
analytics: AnalyticsEvent
}