Scheduling meetings via API with LTI Pro


LTI Pro supports querying historical or upcoming meetings by the userID via API. The meetings generated in the response will be meetings that are scheduled within an LMS course. If a meeting has not been imported into a course utilizing LTI Pro or scheduled using the LTI Pro app, the meeting will not be queried.

Note: The base URL for the requests is https://applications.zoom.us/api/v1/lti/rich.

Prerequisites for scheduling meetings via API with LTI Pro

How to initiate an LTI Pro schedule meeting API call

Example API request and response

URL/open/meeting/list
MethodGET
Content-Typeapplication/json
Header ParametersX-Lti-Signature: A digital signature can be valid for 60 minutes (see below for more details).
Request

https://applications.zoom.us/api/v1/lti/rich/open/meeting/list?key=te2BnjG2QUOxSxiQZBHYAw&timestamp=1659605405120&
isUpComing=true&pageNum=1&pageSize=1&userId=_vIWeZ76TtuFceCKHkVk4Q

Response

Normal response 

{
"status": true,
"result": {
"pageNum": 1,
"pageSize": 12,
"total": 1,
"list": [{
"meetingId": "UxDWPuPdT1OBudHV56kYJQ==",
"meetingNumber": "86756778157",
"hostId": "_vIWeZ76TtuFceCKHkVk4Q",
"topic": "Alpha DevA Course1",
"startTime": "2022-08-04 10:00:00",
"duration": 60,
"timezone": "Asia/Shanghai",
"pmi": null,
"type": 3,
"status": 0
}]
}
}

Abnormal response 

{
"status": false,
"errorCode": "401",
"errorMessage": "Verify LTI signature failed(2203)."
}

Retriveing the userID from LTI Pro

  1. Log into your LMS.
  2. Launch the LTI Pro Developer Tool.
    Note: this will need to be launched with a user who is a Zoom user. 
  3. Click on the Network tab.
  4. In the search bar for developer tools, search for and click on user/settings/all.
  5. There should only be one API listed under the Name column. Next to the API, click Preview
  6. Copy and save the UserID value.

Creating the Request Header

The following is the format for the Request Header:

--header 'X-Lti-Signature: HJbQ5AB1Hydbl2m_pdON4il1j3w'

In this example:

  1. The signature base string is created using the following query parameters - "isUpComing=true&key=qAnfmSQeSeKWHOE19lwMYg&pageNum=1&pageSize=20&timestamp=1661494048201&userId=_vIWeZ76TtuFceCKHkVk4Q"
  2. The LTI secret can be found within your LTI Pro configuration by clicking Edit next to the desired LTI Credentials.
    Note: It is very important to keep these values private.
  3. The signature is calculated by passing the base string and secret to the HMAC-SHA1 hashing algorithm. The calculated signature is then converted to encodeBase64URLSafeString.
  4. Utilize the signature value obtained from step 3 in the X-Lti-Signatureheader.

Note: The signature will be valid for 60 minutes.

Request and response parameters 

Request parameters

FieldTypeDescription
isUpComingBooleanIf the value is true, it will return the upcoming meeting list which is ordered by time. If the value is false, it will return the historical meeting list and it will be ordered by time (descending order).
keyStringIdentifier of the LTI application that is making the request. LTI Key value can be found in LTI config page.
pageNumStringpageNum > 0
pageSizeStringpageSize between 1 and 1000
timestampStringCurrent timestamp when the request is created. The value is in milliseconds.
userIdStringZoom user unique ID

Response parameters

FieldTypeDescription
statusBooleanTrue indicates that the request is normal; false indicates that the request is abnormal.
resultObjectRequest result object.
+pageNumIntegerCurrent page number.
+pageSizeIntegerCurrent page size.
+totalIntegerTotal meeting count.
+listObject arrayResult list by object array.
++meetingIdStringMeeting ID.
++meetingNumberStringZoom meeting number.
++hostIdStringUser ID of the host.
++topicStringMeeting topic.
++startTimeStringMeeting start time.
++durationIntegerThe meeting duration in minutes.
++timeZoneStringTime zone for the meeting start time. 
++pmiStringIf the value is not null, it represents the meeting number of PMI, which is equal to the meetingNumber field at this time
++typeInteger

Meeting type:

  • 0 - pre-schedule
  • 1 - instant
  • 2 - schedule
  • 3 - Recurring Meeting with no fixed time
  • 8 - Recurring Meeting with fixed time
++statusInteger

Meeting status:

  • 0 - not started
  • 1 - started
  • 2 - finished