{"formatVersion":"1","kind":"dock_integration","slug":"zoom-api","title":"Zoom API","summary":"Import a Harbor-safe Zoom starter set for profile lookup, bounded meeting listing, and approval-friendly meeting creation.","description":"A Dock-hosted Zoom API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Zoom action set for reading the authenticated user profile, listing that user's scheduled meetings with bounded filters, and creating meetings with explicit approval. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"zoom","name":"Zoom","websiteUrl":"https://developers.zoom.us/"},"category":"Work Management","tags":["zoom","meetings","video","scheduling","collaboration"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Starter actions stay anchored to the authenticated user via the `me` keyword so Harbor does not expose broad cross-user meeting management by default."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Zoom API","description":"Zoom API connection managed locally through Harbor.","baseUrl":"https://api.zoom.us/v2","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"get-me","label":"Get Me","description":"Return the authenticated Zoom user's profile using the safe `me` route.","method":"GET","path":"/users/me","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-user-settings","label":"Get User Settings","description":"Fetch settings for the authenticated Zoom user using the safe `me` route.","method":"GET","path":"/users/me/settings","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-meetings","label":"List Meetings","description":"List the authenticated user's meetings with bounded type and pagination filters.","method":"GET","path":"/users/me/meetings","inputs":{"parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["scheduled","live","upcoming","upcoming_meetings","previous_meetings"]},"default":"scheduled","description":"Meeting list type. Zoom only returns unexpired or recent windows for some values."},{"name":"page_size","in":"query","schema":{"type":"integer","minimum":1,"maximum":300},"default":30,"description":"Maximum number of meetings to return."},{"name":"next_page_token","in":"query","schema":{"type":"string"},"description":"Pagination token returned from a previous Zoom response."},{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Optional start date for meeting window filters."},{"name":"to","in":"query","schema":{"type":"string","format":"date"},"description":"Optional end date for meeting window filters."},{"name":"timezone","in":"query","schema":{"type":"string","minLength":1,"maxLength":100},"description":"Optional timezone identifier for the `from` and `to` date filters."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-meeting","label":"Get Meeting","description":"Fetch a specific Zoom meeting using an explicit meeting identifier.","method":"GET","path":"/meetings/{meetingId}","inputs":{"parameters":[{"name":"meetingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Zoom meeting ID or UUID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-recordings","label":"List Recordings","description":"List cloud recordings for the authenticated Zoom user using bounded date and pagination filters.","method":"GET","path":"/users/me/recordings","inputs":{"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Optional start date for the recordings window."},{"name":"to","in":"query","schema":{"type":"string","format":"date"},"description":"Optional end date for the recordings window."},{"name":"page_size","in":"query","schema":{"type":"integer","minimum":1,"maximum":300},"default":30,"description":"Maximum number of meetings with recordings to return."},{"name":"next_page_token","in":"query","schema":{"type":"string"},"description":"Pagination token returned from a previous Zoom response."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-meeting","label":"Create Meeting","description":"Create a Zoom meeting for the authenticated user using a bounded JSON request body under input.body.","method":"POST","path":"/users/me/meetings","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-meeting","label":"Update Meeting","description":"Update a Zoom meeting using an explicit meeting identifier and a bounded JSON request body.","method":"PATCH","path":"/meetings/{meetingId}","inputs":{"parameters":[{"name":"meetingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Zoom meeting ID or UUID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-meeting","label":"Delete Meeting","description":"Delete a Zoom meeting using an explicit meeting identifier.","method":"DELETE","path":"/meetings/{meetingId}","inputs":{"parameters":[{"name":"meetingId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Zoom meeting ID or UUID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate get-me and list-meetings before enabling create-meeting. Keep reads anchored to the authenticated user and keep create-meeting on approval unless your local policy explicitly allows trusted scheduling automation.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Zoom reads use `/users/me` so the starter set does not widen into cross-user scheduling by default, and create-meeting uses input.body for the meeting payload."}