# Webhook Event JSON Responses

**URL:** <https://devforum.zoom.us/t/webhook-event-json-responses/1650>\
**Category:** API and Webhooks\
**Created:** [September 7, 2018, 2:03pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650 "2018-09-07T14:03:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Adam\_Gilmore](https://avatars.discourse-cdn.com/v4/letter/a/bc79bd/32.png) [@Adam\_Gilmore](https://devforum.zoom.us/u/Adam_Gilmore)\
**Post date:** [September 7, 2018, 2:03pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/1 "2018-09-07T14:03:56Z")

</div>

I’m using ASP .NET Core 2.1 and created a Web API endpoint to receive Webhook event notifications. I first tested using Swagger and Postman, expecting the JSON in the HttpPost body to be formatted according to these documents:&nbsp;[https://developer.zoom.us/docs/webhooks/](https://developer.zoom.us/docs/webhooks/)&nbsp;and [https://developer.zoom.us/docs/webhooks-v2/](https://developer.zoom.us/docs/webhooks-v2/)&nbsp;&nbsp;so everything was working locally.

When I published the application to make my endpoint publicly accessible, the JSON objects I received from the meeting\_ended and participant\_left events were in a different format.&nbsp;Some events appear to send a uniquely formatted JSON objects based on event type, but I was not able to find any documentation on the Zoom website. Is this documentation available?

**JSON for meeting\_ended:**

\*\*NOTE - For some reason “end\_time” is not populated in the meeting\_ended event.

{&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp; **“payload”** :{&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“account\_id”** :"—REMOVED–",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“meeting”** :{&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“duration”** :60,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“start\_time”** :“2018-09-07T03:48:13Z”,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“timezone”** :“America/New\_York”,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“end\_time”** :"",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“topic”** :“Test&nbsp;in&nbsp;Azure”,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“id”** :“528888737”,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“uuid”** :"—REMOVED–",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **“host\_id”** :"—REMOVED–"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;  
&nbsp;&nbsp;&nbsp;},  
&nbsp;&nbsp;&nbsp; **“event”** :“meeting\_ended”  
}

JSON for participant\_left

{  
&nbsp; &nbsp; “payload”:{  
&nbsp; &nbsp; &nbsp; &nbsp; “meeting”:{  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; “duration”:60,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“start\_time”:“2018-09-07T03:48:13Z”,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“timezone”:“America/New\_York”,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“end\_time”:"",  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“topic”:“TestinAzure”,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“id”:528888737,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“uuid”:"—REMOVED–",  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“host\_id”:"—REMOVED–",  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“participant”:{  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“leave\_time”:“2018-09-07T03:52:05Z”,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“user\_id”:"—REMOVED–",  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;“user\_name”:“AdamGilmore”  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;},  
&nbsp; &nbsp; “event”:“participant\_left”  
}

&nbsp;

Regards,

Adam

---

<div class="post-metadata">

**Author:** ![michael\_p.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/michael_p.zoom/32/18105_2.png) [@michael\_p.zoom](https://devforum.zoom.us/u/michael_p.zoom)\
**Post date:** [September 7, 2018, 5:17pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/2 "2018-09-07T17:17:52Z")

</div>

Hi Adam,&nbsp;

Yes we do have documentation available here for Webhooks [https://devdocs.zoom.us/docs/subscribing-to-zoom-events-1](https://devdocs.zoom.us/docs/subscribing-to-zoom-events-1) and the payloads for webhooks here -&nbsp;[https://devdocs.zoom.us/docs/marketplace-reference.&nbsp;](https://devdocs.zoom.us/docs/marketplace-reference.%C2%A0)

Thanks

---

<div class="post-metadata">

**Author:** ![Adam\_Gilmore](https://avatars.discourse-cdn.com/v4/letter/a/bc79bd/32.png) [@Adam\_Gilmore](https://devforum.zoom.us/u/Adam_Gilmore)\
**Post date:** [September 7, 2018, 5:43pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/3 "2018-09-07T17:43:00Z")

</div>

Hi Michael,

Thank you for the links! I don’t see “end\_time” as part of the meeting\_ended payload. Any reason why this would be blank?

Regards,

Adam

---

<div class="post-metadata">

**Author:** ![michael\_p.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/michael_p.zoom/32/18105_2.png) [@michael\_p.zoom](https://devforum.zoom.us/u/michael_p.zoom)\
**Post date:** [September 7, 2018, 9:48pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/4 "2018-09-07T21:48:20Z")

</div>

Hi Adam,&nbsp;

Some of our Webhook payloads don’t include all the meeting information by design and its similar to the meeting API where we don’t include the end\_time as well. I can reach out to the Engineers to see if they can include it in a future release.&nbsp;

Thanks

---

<div class="post-metadata">

**Author:** ![DeveloperBot](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/developerbot/32/12632_2.png) [@DeveloperBot](https://devforum.zoom.us/u/DeveloperBot)\
**Post date:** [August 21, 2020, 5:54pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/5 "2020-08-21T17:54:37Z")

</div>

Closed on August 21, 2020, 5:54pm UTC



---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [January 22, 2025, 10:15pm UTC](https://devforum.zoom.us/t/webhook-event-json-responses/1650/6 "2025-01-22T22:15:10Z")

</div>

Hey everyone,

Recently we launched **Zoom Rivet for Node.js**. Zoom Rivet is **Zoom’s Official API Library and API Wrapper**.

We currently support Node.js. Java, Python, GO, C#, and other languages are coming soon or being considered.

[Zoom Rivet](https://developers.zoom.us/docs/rivet/javascript/get-started/) is available on [npm](https://www.npmjs.com/package/@zoom/rivet) and can be used to automatically handle [OAuth](https://developers.zoom.us/docs/rivet/javascript/authorization/) and easily call [Zoom APIs](https://developers.zoom.us/docs/api/) like [Meetings](https://developers.zoom.us/docs/api/meetings/), [Phone](https://developers.zoom.us/docs/api/phone/), [Users](https://developers.zoom.us/docs/api/users/), [Team Chat](https://developers.zoom.us/docs/api/team-chat/), [Chatbot](https://developers.zoom.us/docs/api/chatbot/), [Accounts](https://developers.zoom.us/docs/api/accounts/), [Video SDK](https://developers.zoom.us/docs/api/video-sdk/), and more. It even includes a Webhook server to easily receive Zoom [Webhooks](https://developers.zoom.us/docs/api/webhooks/).

```auto
npm install @zoom/rivet

```

Example that handles OAuth and calls a Meeting API and listens to a webhook event:

```js
import { MeetingsS2SAuthClient } from "@zoom/rivet/meetings";

(async () => {
   const meetingsClient = new MeetingsS2SAuthClient({
      clientId: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      webhooksSecretToken: process.env.WEBHOOKS_SECRET_TOKEN,
      accountId: process.env.ACCOUNT_ID
   });

   // Rivet Events and Endpoints Go Here

   meetingsClient.endpoints.meetings.getMeeting({
      path: { meetingId: "MEETINGID" }
   }).then((response) => {
      console.log(response)
   });

   meetingsClient.webEventConsumer.event("meeting.started", (response) => {
      console.log(response.payload);
   })

   const server = await meetingsClient.start();

   console.log(`Zoom Rivet Events Server running on: ${JSON.stringify(server.address())}`);
})();

```

NPM:

> **[@zoom/rivet](https://www.npmjs.com/package/@zoom/rivet)**
>
> Zoom Rivet is a comprehensive toolkit built to help developers quickly integrate and manage server-side applications within the Zoom ecosystem. This tool currently supports Node.js, offering core functionalities like authentication, API wrappers, and...

Docs:

> **[Get started - Zoom Developers](https://developers.zoom.us/docs/rivet/javascript/get-started/)**
>
> The Zoom Developer Platform is an open platform that allows third-party developers to build applications and integrations upon Zoom’s video-first unified communications platform.

Sample App:

> **[GitHub - zoom/rivet-javascript-sample: Standup Bot sample app for Zoom Rivet for...](https://github.com/zoom/rivet-javascript-sample)**
>
> Standup Bot sample app for Zoom Rivet for JavaScript

For feedback, requests, or questions please refer to the Rivet Devforum Category:

> **[Zoom Rivet](https://devforum.zoom.us/c/rivet/90)**
>
> Zoom Rivet helps quickly integrate server-side applications with Zoom. Built-in authentication, API wrappers and event subscriptions let you focus on business logic, not infrastructure.

Best,  
Tommy
