# Start a meeting via API

**URL:** <https://devforum.zoom.us/t/start-a-meeting-via-api/28316>\
**Category:** API and Webhooks\
**Created:** [August 27, 2020, 11:09am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316 "2020-08-27T11:09:43Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [August 27, 2020, 11:09am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/1 "2020-08-27T11:09:43Z")

</div>

Hi fellows  
We are integrating Zoom meeting with our web application, and we have been able to use the Zoom API to create meetings, delete meetings, obtain information about meetings, join meetings etc., the only thing we have not found a way to do is to start the meeting via API , always requires the user to log in manually to use the meeting start link, does anyone know a way to start a meeting via API? We saw that this could be done via the SDK, but it apparently requires many other components.  
Thank you very much

---

<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 27, 2020, 11:09am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/2 "2020-08-27T11:09:47Z")

</div>

Hey @Marcus1

Thanks for posting on the Zoom Devforum! I am still learning, but I will try my best to help answer your question. 🙂

Checkout these related threads that may have the answer you are looking for:

> [@Start meeting through api](https://devforum.zoom.us/t/-/6699):
>
> Hi.I’m using your jwt service.So far i successfully able to create meeting.Now i want to start meeting as a host.Is it possible to do it from our website through api not from zoom app?If so can you show how to do so? Thank you.

> [@How to get list of attendees of a meeting via zoom api](https://devforum.zoom.us/t/-/757):
>
> How to get list of attendees of a meeting via zoom api

> [@Meeting start URL](https://devforum.zoom.us/t/-/10780):
>
> Description I’ve created a meeting using zoom API and get start meeting url and join meeting url. I have many person who is going to be host of the meeting so if I just pass start meeting URL to them then they will able to start the meeting using their zoom account, yes? Error The full error message or issue you are running into. Which App Type (OAuth / Chatbot / JWT / Webhook)? Knowing the endpoint/s can help us to identify your issue faster. Please link the ones you need help/have a quest…

If these threads did not help, please let us know by replying back here and someone from the Developer Relations team will get back to you shortly.

Thanks,  
DeveloperBot

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [August 27, 2020, 11:34am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/3 "2020-08-27T11:34:50Z")

</div>

So I understand, looking at the first thread, there is no way to do that via API

---

<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:** [August 28, 2020, 8:27pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/4 "2020-08-28T20:27:52Z")

</div>

Hey @Marcus1,

Correct, a real user (human) needs to start the meeting. 🙂

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 6, 2020, 1:11pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/5 "2020-09-06T13:11:32Z")

</div>

Hi tommy

Thanks for your answer. We read more about this Zoom integration, and apparently the API is used to create meetings, delete meetings, get information about meetings and so on, and the Zoom SDK could be used specifically to start and join meetings programmatically, without the need for a “humman” to start the meeting, is that correct? We tried to do this, start and join a meeting via SDK, but even considering we received an “OK” response from the init method, we are unable to join the meeting, we get the message:  
“Time limit for entering the meeting.” and “Failed to enter the meeting” (at the same modal. PS: we tried this inside a valid date/time of a meeting, so it was not expired)  
Looking at the console, we see the following messages:  
About INIT: Object {method: “init”, status: true, errorCode: 0, errorMessage: null, result: null}  
About JOIN: Object {method: “join”, status: false, result: “No permission”, errorMessage: “Failed to join the meeting.”, ErrorCode: 1}  
Another message that caught our attention was: “The cookie“ \_zm\_ctaid ”was rejected because it has already expired.” (Firefox 80.0.1)  
You can see our code below, the Meeting ID, API key and other information are correct, but changed here for security:

```
    ZoomMtg.setZoomJSLib('https://dmogdx0jrul3u.cloudfront.net/1.7.9/lib', '/av'); 
    ZoomMtg.setZoomJSLib('https://source.zoom.us/1.7.9/lib', '/av'); 
    ZoomMtg.preLoadWasm();
    ZoomMtg.prepareJssdk();

    const meetConfig = {
        apiKey:'xxxxxxxxxxx',
        meetingNumber: 'xxxxxxxxxxx',
        userName: 'Marcus',
        signature: 'xxxxxxxx',
        userEmail: 'marcus@xxxxxxxx',
        passWord: 'xxxxxxx',
        error(res) {
            console.log("Joining meeting error");
            console.dir(res);
        },
        success() {
            console.log("Joining success");
        }
    };
    ZoomMtg.init({
        leaveUrl: 'https://www.oursite.com.br',
        // isSupportAV: true,
        isSupportChat: false, 
        isSupportQA: false, 
        isLockBottom: false,
        success: function (success) {
            console.log("Init Success", success);
            console.dir(meetConfig);
            ZoomMtg.join(meetConfig);
        }
    });

```

We really appreciate any help or insight you can provide, thank you very much!

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 9, 2020, 4:57pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/6 "2020-09-09T16:57:20Z")

</div>

Hi @Marcus1,

Thanks for providing these details as you start working with our web SDK.

First, regarding the below—this is correct:

> Zoom SDK could be used specifically to start and join meetings programmatically, without the need for a “humman” to start the meeting, is that correct?

In regards to:

> we received an “OK” response from the init method, we are unable to join the meeting, we get the message:  
> “Time limit for entering the meeting.” and “Failed to enter the meeting” (at the same modal. PS: we tried this inside a valid date/time of a meeting, so it was not expired)

If possible, can you share the following:

- A screenshot of the modal/console error messages in the browser as you’ve encountered them
- A copy of the signature you’re using when trying to start the meeting

> Another message that caught our attention was: “The cookie“ \_zm\_ctaid ”was rejected because it has already expired.” (Firefox 80.0.1)

Similarly, the requested resources above will help me to debug.

Thanks, and I’ll keep an eye out!  
Will

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 9, 2020, 6:10pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/7 "2020-09-09T18:10:46Z")

</div>

Hi Will, thank you for you reply, you can see the screenshots below, hope it helps:

 ![Zoom1](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/9/98bbcb3607921a36e769c6487e9f00984120a95e.png)

 ![Zoom2](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/2/264c6a3603f6eb7cc4953abe0cbc4b7e4fed3252.png)

 ![Zoom3](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/a/a86e291dda2ce93ae07a53e8b76ae1eaf11c1545.png)

 ![Zoom4](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/7/71c31342b0b949553abb4313d09140b3c0fdb5ce.png)

---

<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:** [September 14, 2020, 4:31pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/8 "2020-09-14T16:31:13Z")

</div>

Hey @Marcus1,

Can you share your [Web SDK signature](https://marketplace.zoom.us/docs/sdk/native-sdks/web/build/signature) for a test meeting to [developersupport@zoom.us](mailto:developersupport@zoom.us) so we can help debug the issue?

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 14, 2020, 6:16pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/9 "2020-09-14T18:16:16Z")

</div>

Yes

![image001.jpg](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/f/f464dd1c7c382c015b3fc53eebe1cd1aadffee61.jpeg)

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 14, 2020, 6:22pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/10 "2020-09-14T18:22:16Z")

</div>

We are using this PHP function to generate the signature:

public static function generate\_signature ( $api\_key, $api\_secret, $meeting\_number, $role){

$time = time() \* 1000 - 30000;

$data = base64\_encode($api\_key . $meeting\_number . $time . $role);

$hash = hash\_hmac(‘sha256’, $data, $api\_secret, true);

$\_sig = $api\_key . “.” . $meeting\_number . “.” . $time . “.” . $role . “.” . base64\_encode($hash);

return rtrim(strtr(base64\_encode($_sig), ‘+/’, '-_’), ‘=’);

}

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 15, 2020, 8:47pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/11 "2020-09-15T20:47:28Z")

</div>

Hey @Marcus1,

Can you provide the actual signature itself instead of the generate\_signature function? (The one that’s been generated when you encounter this error). We’ll be able to debug once we can see the already generated signature.

Thanks!  
Will

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 16, 2020, 2:30pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/12 "2020-09-16T14:30:46Z")

</div>

Hi Will  
The signature number generated is:

tks!

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 17, 2020, 7:16pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/13 "2020-09-17T19:16:42Z")

</div>

Hey @Marcus1,

I think the signature here is a bit off—this should be roughly 127 characters long, and it looks like yours is 32 characters.

Can you make sure you’re correctly following the steps outlined here to generate your signature?:

> **[Generate Signature - Build an App - Web - Native SDKs - Zoom Software...](https://marketplace.zoom.us/docs/sdk/native-sdks/web/build/signature)**
>
> Generate Signature
> 
> Each request to start or join a meeting / webinar must be verified by an encrypted signature authorizing each user to enter. A signa...

Thanks,  
Will

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 18, 2020, 10:41am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/14 "2020-09-18T10:41:28Z")

</div>

Hi Will, thank you again for your help!

![image001.jpg](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/f/f464dd1c7c382c015b3fc53eebe1cd1aadffee61.jpeg)

![image002.jpg](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/3/3872a9bfea27a0a475fc38f9feb621eb4769b607.jpeg)

---

<div class="post-metadata">

**Author:** ![wikikidslimited](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/wikikidslimited/32/3615_2.png) [@wikikidslimited](https://devforum.zoom.us/u/wikikidslimited)\
**Post date:** [September 18, 2020, 11:10am UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/15 "2020-09-18T11:10:25Z")

</div>

Hi Will,

```
 I am also facing the same issue which @Marcus1 has faced. I generated signature using the documentation 'https://marketplace.zoom.us/docs/sdk/native-sdks/web/build/signature' using PHP 

```

and I got the signature as '. But still getting the same error as @Marcus1 mentioned.

---

<div class="post-metadata">

**Author:** ![Marcus1](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@Marcus1](https://devforum.zoom.us/u/Marcus1)\
**Post date:** [September 21, 2020, 1:42pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/16 "2020-09-21T13:42:44Z")

</div>

Hi Will  
To be sure we have the correct signature, we now are using Heroku, an it generated this signature:

Now we get the message “The meeting number is wrong”

Thank you!

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 22, 2020, 6:46pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/17 "2020-09-22T18:46:45Z")

</div>

Hi @wikikidslimited,

When I decode your signature, I can see that you’re missing a few fields, such as the JWT token:  
 ![image](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/6/6c164bad957e050a94482cbdb1c72bf83a025cc1.png)

Please ensure you’re including the JWT token, the meeting ID, timestamp, and role in your signature when you follow [these steps](https://marketplace.zoom.us/docs/sdk/native-sdks/web/build/signature).

Thanks,  
Will

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 22, 2020, 6:48pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/18 "2020-09-22T18:48:08Z")

</div>

Hey @Marcus1,

I’m still seeing `undefined`s in your signature:

 ![image](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/e/e36cbb1e974cb073fe70e0ba011dfd82bce931f4.png)

Can you please ensure you’re passing valid values for the fields I referenced in the above post?

Thanks,  
Will

---

<div class="post-metadata">

**Author:** ![wikikidslimited](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/wikikidslimited/32/3615_2.png) [@wikikidslimited](https://devforum.zoom.us/u/wikikidslimited)\
**Post date:** [September 23, 2020, 3:57pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/19 "2020-09-23T15:57:15Z")

</div>

Hi will,

```
 I'm using php code to generate signature 

 function generate_signature ( $api_key, $api_secret, $meeting_number, $role){
$time = time() * 1000 - 30000;//time in milliseconds (or close enough)
$data = base64_encode($api_key . $meeting_number . $time . $role);
$hash = hash_hmac('sha256', $data, $api_secret, true);	
$_sig = $api_key . "." . $meeting_number . "." . $time . "." . $role . "." . base64_encode($hash);	
return rtrim(strtr(base64_encode($_sig), '+/', '-_'), '=');
  }

  This function has only four parameters. apikey, apisecret, meetingnumber, role which I am providing it correct. But you are saying to include JWT Token. I confused where to include this JWT Token. Can you please guide me.

```

Thank you

---

<div class="post-metadata">

**Author:** ![will.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/will.zoom/32/14417_2.png) [@will.zoom](https://devforum.zoom.us/u/will.zoom)\
**Post date:** [September 24, 2020, 6:16pm UTC](https://devforum.zoom.us/t/start-a-meeting-via-api/28316/20 "2020-09-24T18:16:07Z")

</div>

Hey @wikikidslimited,

Apologies—I meant to say the API key and secret! In the signature you provided, the first parameter is preceded by a “…” which is invalid.

Have you tried using our [signature generator](https://heroku.com/deploy?template=https://github.com/zoom/websdk-sample-signature-node.js)?

Thanks,  
Will

[Next page](https://devforum.zoom.us/t/start-a-meeting-via-api/28316.md?page=2)
