Skip to main content
The Zoom plugin handles incoming webhooks. Point your provider’s subscription URL at your Corsair HTTP handler (see Overview for setup context and the exact URL shape).
New to Corsair? See webhooks and hooks.

Webhook map

  • meetings
    • cancelled (meetings.cancelled)
    • created (meetings.created)
    • ended (meetings.ended)
    • participantJoined (meetings.participantJoined)
    • participantLeft (meetings.participantLeft)
    • started (meetings.started)
  • recordings
    • completed (recordings.completed)
  • webinars
    • started (webinars.started)

HTTP handler setup

app/api/webhook/route.ts
import { processWebhook } from "corsair";
import { corsair } from "@/server/corsair";

export async function POST(request: Request) {
    const headers = Object.fromEntries(request.headers);
    const body = await request.json();
    const result = await processWebhook(corsair, headers, body);
    return result.response;
}

Events

Meetings

Cancelled

meetings.cancelled A meeting has been cancelled or deleted Payload
NameTypeRequiredDescription
eventmeeting.deletedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string
  },
  operator?: string,
  operator_id?: string
}
{
  event: meeting.deleted,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string
    },
    operator?: string,
    operator_id?: string
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            cancelled: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Created

meetings.created A meeting has been created Payload
NameTypeRequiredDescription
eventmeeting.createdYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string
  },
  operator?: string,
  operator_id?: string
}
{
  event: meeting.created,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string
    },
    operator?: string,
    operator_id?: string
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            created: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Ended

meetings.ended A meeting has ended Payload
NameTypeRequiredDescription
eventmeeting.endedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string
  }
}
{
  event: meeting.ended,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            ended: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Participant Joined

meetings.participantJoined A participant joined a meeting Payload
NameTypeRequiredDescription
eventmeeting.participant_joinedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string,
    participant?: {
      user_id?: string,
      user_name?: string,
      id?: string,
      join_time?: string,
      leave_time?: string,
      leave_reason?: string
    }
  }
}
{
  event: meeting.participant_joined,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string,
      participant?: {
        user_id?: string,
        user_name?: string,
        id?: string,
        join_time?: string,
        leave_time?: string,
        leave_reason?: string
      }
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            participantJoined: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Participant Left

meetings.participantLeft A participant left a meeting Payload
NameTypeRequiredDescription
eventmeeting.participant_leftYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string,
    participant?: {
      user_id?: string,
      user_name?: string,
      id?: string,
      join_time?: string,
      leave_time?: string,
      leave_reason?: string
    }
  }
}
{
  event: meeting.participant_left,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string,
      participant?: {
        user_id?: string,
        user_name?: string,
        id?: string,
        join_time?: string,
        leave_time?: string,
        leave_reason?: string
      }
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            participantLeft: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Started

meetings.started A meeting has started Payload
NameTypeRequiredDescription
eventmeeting.startedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string
  }
}
{
  event: meeting.started,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        meetings: {
            started: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Recordings

Completed

recordings.completed A cloud recording has completed processing Payload
NameTypeRequiredDescription
eventrecording.completedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: number,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    timezone?: string,
    duration?: number,
    total_size?: number,
    recording_count?: number,
    share_url?: string,
    password?: string,
    recording_files?: {
      id?: string,
      meeting_id?: string,
      recording_start?: string,
      recording_end?: string,
      file_type?: string,
      file_size?: number,
      play_url?: string,
      download_url?: string,
      status?: string,
      recording_type?: string
    }[]
  }
}
{
  event: recording.completed,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: number,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      timezone?: string,
      duration?: number,
      total_size?: number,
      recording_count?: number,
      share_url?: string,
      password?: string,
      recording_files?: {
        id?: string,
        meeting_id?: string,
        recording_start?: string,
        recording_end?: string,
        file_type?: string,
        file_size?: number,
        play_url?: string,
        download_url?: string,
        status?: string,
        recording_type?: string
      }[]
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        recordings: {
            completed: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})

Webinars

Started

webinars.started A webinar has started Payload
NameTypeRequiredDescription
eventwebinar.startedYes
event_tsnumberNo
payloadobjectYes
{
  account_id?: string,
  object: {
    uuid?: string,
    id?: string,
    host_id?: string,
    topic?: string,
    type?: number,
    start_time?: string,
    duration?: number,
    timezone?: string
  }
}
{
  event: webinar.started,
  event_ts?: number,
  payload: {
    account_id?: string,
    object: {
      uuid?: string,
      id?: string,
      host_id?: string,
      topic?: string,
      type?: number,
      start_time?: string,
      duration?: number,
      timezone?: string
    }
  }
}
webhookHooks example
zoom({
    webhookHooks: {
        webinars: {
            started: {
                before(ctx, args) {
                    return { ctx, args };
                },
                after(ctx, response) {
                },
            },
        },
    },
})