# Zoom LTI Pro Bulk Import API usage

**URL:** <https://devforum.zoom.us/t/zoom-lti-pro-bulk-import-api-usage/61565>\
**Category:** API and Webhooks\
**Created:** [December 16, 2021, 11:29pm UTC](https://devforum.zoom.us/t/zoom-lti-pro-bulk-import-api-usage/61565 "2021-12-16T23:29:54Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![MaxedOut](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/maxedout/32/34130_2.png) [@MaxedOut](https://devforum.zoom.us/u/MaxedOut)\
**Post date:** [January 14, 2022, 6:22pm UTC](https://devforum.zoom.us/t/zoom-lti-pro-bulk-import-api-usage/61565/5 "2022-01-14T18:22:50Z")

</div>

I was able to get this working in Google App Script:

const importMeetingIntoMoodle = (meetingId, courseId) =\> {  
const timestamp = Date.now();  
const payload = [{  
meetingId: meetingId,  
contextId: courseId.trim(),  
domain: DOMAIN  
}];  
const headers = {  
“X-Lti-Signature”: getLtiSignature(timestamp)  
};  
try{  
return UrlFetchApp.fetch(`https://applications.zoom.us/api/v1/lti/rich/meeting/bulkImport?key=${ZOOM_LTI_KEY}&timestamp=${timestamp}`,  
{  
method: ‘POST’,  
contentType: ‘application/json’,  
headers: headers,  
payload: JSON.stringify(payload)  
});  
}  
catch(e){}  
}

const getLtiSignature = (timestamp) =\> {  
const signatureBaseString = `key=${ZOOM_LTI_KEY}&timestamp=${timestamp}`  
const signature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC\_SHA\_1,signatureBaseString, ZOOM\_LTI\_SECRET);  
return encodeURIComponent(Utilities.base64Encode(signature).replace(/=+$/, ‘’));  
}

As you can see, you have to encode the signature, remove the trailing equals sign (=), then encode to a URL safe string. Shoot me a reply if you have questions.

---

_[View the full topic](https://devforum.zoom.us/t/zoom-lti-pro-bulk-import-api-usage/61565)._
