Build Zoom Meeting SDK App
AnthropicOfficialCreated by ZoomDistributed by Anthropic
- Skill
- Tool integration
- Software development
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a comprehensive reference for developers embedding the Zoom Meeting SDK into their applications. It covers platform-specific implementation details, authentication flows, UI customization options, and critical security practices like server-side signature generation. It serves as a central hub for navigating the SDK's various platform-specific guides, troubleshooting runbooks, and official sample repositories.
What it does
- Provides implementation patterns for embedding Zoom meetings in web, mobile, and desktop apps.
- Outlines the mandatory server-side process for generating secure SDK signatures.
- Distinguishes between Client View and Component View for web integrations.
- Offers guidance on handling platform-specific SDK behaviors and common UI conflicts.
- Links to specialized documentation for Android, iOS, macOS, Windows, and Linux environments.
- Includes troubleshooting resources for common join, auth, and waiting room issues.
When to use it
- When you need to embed a live Zoom meeting experience directly into your application UI.
- When implementing programmatic meeting joins or bot-based meeting interactions.
- When troubleshooting SDK authentication, signature errors, or meeting join failures.
- When you need to determine the correct SDK view type (Client vs. Component) for your web project.
- When setting up development environments for specific platforms like Unreal, Electron, or mobile.
Advantages
- Centralizes complex documentation for multiple platforms into a single reference point.
- Enforces security best practices by mandating server-side signature generation.
- Provides clear architectural guidance to avoid common pitfalls like CSS conflicts.
- Facilitates rapid troubleshooting with dedicated runbooks and triage guides.
- Maintains clear separation between official Zoom UI and custom integration requirements.
Usage examples
- “How do I securely generate a signature for the Zoom Meeting SDK in Node.js?”
- The agent provides a server-side code example using jsrsasign to sign a JWT with your SDK Secret, ensuring credentials remain hidden from the client.
- “I am getting a CSS conflict where my app UI breaks when the Zoom meeting loads. How do I fix this?”
- The agent suggests scoping your CSS and provides specific CSS overrides to ensure the Zoom UI renders correctly without affecting your application shell.
- “What is the difference between Client View and Component View in the Web SDK?”
- The agent explains that Client View provides the full-page Zoom experience, while Component View allows for embedding the meeting within a specific div for a more integrated look.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/anthropics/build-zoom-meeting-sdk-app/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip build-zoom-meeting-sdk-app.zip -d .agents/skills
Documentation by Zoom
/build-zoom-meeting-sdk-app
Background reference for embedded Zoom meetings across web, mobile, desktop, and Linux bot environments. Prefer build-zoom-meeting-app or build-zoom-bot first, then route here for platform detail.
Zoom Meeting SDK
Embed the full Zoom meeting experience into web, mobile, desktop, and headless integrations.
Hard Routing Guardrail (Read First)
If the user asks to embed/join meetings inside their app UI, route to Meeting SDK implementation.
Do not switch to REST-only meeting link flow unless the user explicitly asks for meeting resource management or browser
join_urllinks.Meeting SDK join path requires SDK signature + SDK join call; REST
join_urlis not a Meeting SDK join payload.
Prerequisites
Zoom app with Meeting SDK credentials
SDK Key and Secret from Marketplace
Platform-specific development environment (Web, Android, iOS, macOS, Unreal, Electron, Linux, or Windows)
Need help with OAuth or signatures? See the zoom-oauth skill for authentication flows.
Need pre-join diagnostics on web? Use probe-sdk before Meeting SDK init/join to gate low-readiness devices/networks.
Start troubleshooting fast: Use the 5-Minute Runbook before deep debugging.
Quick Start (Web - Client View via CDN)
<script src="https://source.zoom.us/3.1.6/lib/vendor/react.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/react-dom.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/redux.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/redux-thunk.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/lodash.min.js"></script>
<script src="https://source.zoom.us/3.1.6/zoom-meeting-3.1.6.min.js"></script>
<script>
// CDN provides ZoomMtg (Client View - full page)
// For ZoomMtgEmbedded (Component View), use npm instead
ZoomMtg.preLoadWasm();
ZoomMtg.prepareWebSDK();
ZoomMtg.init({
leaveUrl: window.location.href,
patchJsMedia: true,
disableCORP: !window.crossOriginIsolated,
success: function() {
ZoomMtg.join({
sdkKey: 'YOUR_SDK_KEY',
signature: 'YOUR_SIGNATURE', // Generate server-side!
meetingNumber: 'MEETING_NUMBER',
userName: 'User Name',
passWord: '', // Note: camelCase with capital W
success: function(res) { console.log('Joined'); },
error: function(err) { console.error(err); }
});
},
error: function(err) { console.error(err); }
});
</script>Critical Notes (Web)
1. CDN vs npm - Different APIs!
| Distribution | Global Object | View Type | API Style |
|---|---|---|---|
CDN (zoom-meeting-{ver}.min.js) | ZoomMtg | Client View (full-page) | Callbacks |
npm (@zoom/meetingsdk) | ZoomMtgEmbedded | Component View (embeddable) | Promises |
2. Backend Required for Production
Never expose SDK Secret in client code. Generate signatures server-side:
// server.js (Node.js example)
const KJUR = require('jsrsasign');
app.post('/api/signature', (req, res) => {
const { meetingNumber, role } = req.body;
const iat = Math.floor(Date.now() / 1000) - 30;
const exp = iat + 60 * 60 * 2;
const header = { alg: 'HS256', typ: 'JWT' };
const payload = {
sdkKey: process.env.ZOOM_SDK_KEY,
mn: String(meetingNumber).replace(/\D/g, ''),
role: parseInt(role, 10),
iat, exp, tokenExp: exp
};
const signature = KJUR.jws.JWS.sign('HS256',
JSON.stringify(header),
JSON.stringify(payload),
process.env.ZOOM_SDK_SECRET
);
res.json({ signature, sdkKey: process.env.ZOOM_SDK_KEY });
});3. CSS Conflicts - Avoid Global Resets
Global * { margin: 0; } breaks Zoom's UI. Scope your styles:
/* BAD */
* { margin: 0; padding: 0; }
/* GOOD */
.your-app, .your-app * { box-sizing: border-box; }4. Client View Toolbar Cropping Fix
If toolbar falls off screen, scale down the Zoom UI:
#zmmtg-root {
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
width: 100vw !important;
height: 100vh !important;
/* Critical for SPAs (React/Next/etc): ensure Zoom UI isn't behind your app shell/overlays. */
z-index: 9999 !important;
transform: scale(0.95) !important;
transform-origin: top center !important;
}5. Hide Your App When Meeting Starts
Client View takes over full page. Hide your UI:
// In ZoomMtg.init success callback:
document.documentElement.classList.add('meeting-active');
document.body.classList.add('meeting-active');body.meeting-active .your-app { display: none !important; }
body.meeting-active { background: #000 !important; }UI Options (Web)
Meeting SDK provides Zoom's UI with customization options:
| View | Description |
|---|---|
| Component View | Extractable, customizable UI - embed meeting in a div |
| Client View | Full-page Zoom UI experience |
Note: Unlike Video SDK where you build the UI from scratch, Meeting SDK uses Zoom's UI as the base with customization on top.
Key Concepts
| Concept | Description |
|---|---|
| SDK Key/Secret | Credentials from Marketplace |
| Signature | JWT signed with SDK Secret |
| Component View | Extractable, customizable UI (Web) |
| Client View | Full-page Zoom UI (Web) |
Detailed References
Platform Guides
android/SKILL.md - Android SDK (default/custom UI, join/start/auth lifecycle, mobile integration)
android/references/android-reference-map.md - Android API surface map and drift watchpoints
ios/SKILL.md - iOS SDK (default/custom UI, join/start/auth lifecycle, mobile integration)
ios/references/ios-reference-map.md - iOS API surface map and drift watchpoints
macos/SKILL.md - macOS SDK (desktop default/custom UI, service controllers, host flows)
macos/references/macos-reference-map.md - macOS API surface map and drift watchpoints
unreal/SKILL.md - Unreal Engine wrapper (C++/Blueprint wrapper behavior and SDK mapping)
unreal/references/unreal-reference-map.md - Unreal wrapper reference map and version-lag notes
references/android.md - Android pointer doc for fast routing from broad Meeting SDK queries
references/ios.md - iOS pointer doc for fast routing from broad Meeting SDK queries
references/macos.md - macOS pointer doc for fast routing from broad Meeting SDK queries
references/unreal.md - Unreal pointer doc for fast routing from broad Meeting SDK queries
linux/SKILL.md - Linux SDK headless bot skill entrypoint
linux/linux.md - Linux SDK (C++ headless bots, raw media access)
linux/references/linux-reference.md - Linux dependencies, Docker, troubleshooting
react-native/SKILL.md - React Native SDK (iOS/Android wrapper, join/start flows, bridge setup)
react-native/SKILL.md - React Native complete navigation
electron/SKILL.md - Electron SDK (desktop wrapper, auth/join flows, module controllers, raw data)
electron/SKILL.md - Electron complete navigation
windows/SKILL.md - Windows SDK (C++ desktop applications, raw media access)
windows/references/windows-reference.md - Windows dependencies, Visual Studio setup, troubleshooting
web/references/web.md - Web SDK (Component + Client View)
web/references/web-tracking-id.md - Tracking ID configuration
Features
references/authorization.md - SDK JWT generation
references/bot-authentication.md - ZAK vs OBF vs JWT tokens for bots
references/breakout-rooms.md - Programmatic breakout room management
references/ai-companion.md - AI Companion controls in meetings
references/webinars.md - Webinar SDK features
references/forum-top-questions.md - Common forum question patterns (what to cover)
references/triage-intake.md - What to ask first (turn vague reports into answers)
references/signature-playbook.md - Signature/root-cause playbook
references/multiple-meetings.md - Joining multiple meetings / multiple instances
references/troubleshooting.md - Common issues and solutions
Sample Repositories
Official (by Zoom)
| Type | Repository | Stars |
|---|---|---|
| Linux Headless | meetingsdk-headless-linux-sample | 4 |
| Linux Raw Data | meetingsdk-linux-raw-recording-sample | 0 |
| Web | meetingsdk-web-sample | 643 |
| Web NPM | meetingsdk-web | 324 |
| React | meetingsdk-react-sample | 177 |
| Auth | meetingsdk-auth-endpoint-sample | 124 |
| Angular | meetingsdk-angular-sample | 60 |
| Vue.js | meetingsdk-vuejs-sample | 42 |
Full list: See general/references/community-repos.md
Resources
Official docs: https://developers.zoom.us/docs/meeting-sdk/
Developer forum: https://devforum.zoom.us/
Environment Variables
See references/environment-variables.md for standardized
.envkeys and where to find each value.
Files
- ATTRIBUTION.mdAdded by AutoGineer993 B
- LICENSELicence file added by AutoGineer1.1 KiB
- RUNBOOK.md2.6 KiB
- SKILL.md11.0 KiB
- references/ai-companion.md6.4 KiB
- references/android.md754 B
- references/authorization.md2.3 KiB
- references/bot-authentication.md10.5 KiB
- references/breakout-rooms.md11.8 KiB
- references/environment-variables.md1.4 KiB
- references/forum-top-questions.md3.9 KiB
- references/ios.md919 B
- references/macos.md599 B
- references/multiple-meetings.md965 B
- references/signature-playbook.md1.4 KiB
- references/triage-intake.md1.9 KiB
- references/troubleshooting.md4.1 KiB
- references/unreal.md732 B
- references/webinars.md7.9 KiB
references/breakout-rooms.md
Breakout Rooms
Programmatically manage breakout rooms in Zoom meetings across all platforms.
Overview
Breakout rooms allow hosts to split meeting participants into smaller groups. This guide covers SDK APIs for creating, managing, and controlling breakout rooms.
Platform Support
| Platform | Support Level | Notes |
|---|---|---|
| Web SDK | Full | Complete API |
| iOS SDK | Full | Creator + Admin helpers |
| Android SDK | Full | Creator + Admin helpers |
| Windows SDK | Full | Controller interface |
| macOS SDK | Full | Controller interface |
| Linux SDK | Limited | Basic functionality only |
| Video SDK | Different | Uses "Subsessions" - not native breakout rooms |
Important: Video SDK does NOT have native breakout rooms. It uses a "Subsessions" concept requiring manual session management.
REST API: Pre-assigned Rooms
Create meetings with pre-assigned breakout rooms:
POST /v2/users/{userId}/meetings{
"topic": "Team Workshop",
"type": 2,
"settings": {
"breakout_room": {
"enable": true,
"rooms": [
{
"name": "Team Alpha",
"participants": ["[email protected]", "[email protected]"]
},
{
"name": "Team Beta",
"participants": ["[email protected]", "[email protected]"]
}
]
}
}
}Limitation: Pre-assigned rooms are NOT auto-opened. The host must manually open breakout rooms when the meeting starts. There is NO REST API to auto-open rooms.
Web SDK Implementation
Create Breakout Rooms
// Create 5 rooms with auto-generated names (Room 1, Room 2, etc.)
ZoomMtg.BreakoutRoom.createBreakoutRoom({
data: 5,
success: (response) => console.log('Rooms created:', response),
error: (error) => console.error('Error:', error)
});
// Create named rooms
ZoomMtg.BreakoutRoom.createBreakoutRoom({
data: [
{ name: 'Engineering' },
{ name: 'Design' },
{ name: 'Product' }
],
success: (response) => console.log('Rooms created:', response),
error: (error) => console.error('Error:', error)
});Get Breakout Rooms
ZoomMtg.BreakoutRoom.getBreakoutRooms({
success: (response) => {
const rooms = response.result.rooms;
rooms.forEach(room => {
console.log(`Room ID: ${room.boId}, Name: ${room.name}`);
});
},
error: (error) => console.error('Error:', error)
});Assign Participants
// Get unassigned attendees first
ZoomMtg.BreakoutRoom.getUnassignedAttendeeList({
success: (response) => {
const unassigned = response.result.unassignedAttendeeList;
console.log('Unassigned:', unassigned);
}
});
// Assign user to a room
ZoomMtg.BreakoutRoom.assignUserToBreakoutRoom({
targetRoomId: 'room-id-here',
userId: 12345678,
success: (response) => console.log('Assigned:', response),
error: (error) => console.error('Error:', error)
});Move Participants Between Rooms
ZoomMtg.BreakoutRoom.moveUserToBreakoutRoom({
targetRoomId: 'destination-room-id',
userId: 12345678,
success: (response) => console.log('Moved:', response),
error: (error) => console.error('Error:', error)
});Open Breakout Rooms
ZoomMtg.BreakoutRoom.openBreakoutRooms({
options: {
isAutoJoinRoom: false, // Let participants choose
isBackToMainSessionEnabled: true, // Allow returning to main
isTimerEnabled: true, // Enable countdown
timerDuration: 1800, // 30 minutes (seconds)
needCountDown: true, // Show countdown
waitSeconds: 60 // Wait before auto-join
},
success: (response) => console.log('Rooms opened:', response),
error: (error) => console.error('Error:', error)
});Close Breakout Rooms
ZoomMtg.BreakoutRoom.closeBreakoutRooms({
success: (response) => console.log('Rooms closed:', response),
error: (error) => console.error('Error:', error)
});Broadcast Message
ZoomMtg.BreakoutRoom.broadcast({
message: 'Please return to the main room in 2 minutes',
success: (response) => console.log('Broadcast sent:', response),
error: (error) => console.error('Error:', error)
});Check User Status
// Get current user's breakout room
ZoomMtg.BreakoutRoom.getCurrentBreakoutRoom({
success: (response) => {
const { roomId, name, attendeeStatus } = response.result;
console.log(`Current room: ${name}, Status: ${attendeeStatus}`);
}
});
// attendeeStatus values:
// 1: UNASSIGNED - Not assigned to any room
// 2: ASSIGNED_NOT_JOIN - Assigned but hasn't joined yet
// 3: IN_BO - Currently in breakout roomiOS SDK Implementation
Get Helpers
#import <MobileRTC/MobileRTC.h>
// Get meeting service
MobileRTCMeetingService *meetingService = [[MobileRTC sharedRTC] getMeetingService];
// Get breakout room creator (for creating rooms)
MobileRTCBOCreator *boCreator = [meetingService getCreatorHelper];
// Get breakout room admin (for managing rooms)
MobileRTCBOAdmin *boAdmin = [meetingService getAdminHelper];Create Rooms
// Create 3 breakout rooms
[boCreator createBreakoutRoom:3 completion:^(NSError *error) {
if (error) {
NSLog(@"Error: %@", error.localizedDescription);
} else {
NSLog(@"Rooms created");
}
}];
// Create room with specific name
[boCreator createBreakoutRoomWithName:@"Engineering" completion:^(NSError *error) {
// Handle result
}];Manage Rooms
// Open all rooms
[boAdmin openAllRoomsCompletion:^(NSError *error) {
if (!error) {
NSLog(@"Rooms opened");
}
}];
// Assign user to room
[boAdmin assignUser:userId toRoom:roomId completion:^(NSError *error) {
if (!error) {
NSLog(@"User assigned");
}
}];
// Close all rooms
[boAdmin closeAllRoomsCompletion:^(NSError *error) {
if (!error) {
NSLog(@"Rooms closed");
}
}];Event Handling
@interface MyDelegate : NSObject <MobileRTCMeetingServiceDelegate>
@end
@implementation MyDelegate
- (void)onMeetingBreakoutRoomStatusChanged:(MobileRTCBreakoutRoomStatus)status {
switch (status) {
case MobileRTCBreakoutRoomStatusNotStarted:
NSLog(@"Breakout rooms not started");
break;
case MobileRTCBreakoutRoomStatusStarted:
NSLog(@"Breakout rooms started");
break;
case MobileRTCBreakoutRoomStatusClosed:
NSLog(@"Breakout rooms closed");
break;
}
}
@endAndroid SDK Implementation
Get Helpers
import us.zoom.sdk.ZoomSDK
val zoomSDK = ZoomSDK.getInstance()
val meetingService = zoomSDK.meetingService
val boController = meetingService?.inMeetingBreakoutRoomController
// Get creator (for creating rooms)
val creator = boController?.getCreatorHelper()
// Get admin (for managing rooms)
val admin = boController?.getAdminHelper()Create Rooms
// Create breakout rooms
val error = creator?.createBreakoutRoom(5) // Create 5 rooms
if (error == SDKError.SDKERR_SUCCESS) {
Log.d("Breakout", "Rooms created")
}
// Create room with name
creator?.createBreakoutRoomWithName("Engineering")Manage Rooms
// Open all rooms
admin?.openAllRooms()
// Assign user to room
admin?.assignUser(userId, roomId)
// Move user between rooms
admin?.assignUser(userId, newRoomId) // Removes from old room
// Broadcast message
admin?.broadcastToAll("Please return in 2 minutes")
// Close all rooms
admin?.closeAllRooms()Windows/macOS SDK Implementation
Windows (C++)
#include "meeting_breakout_rooms_interface.h"
class MyBreakoutRoomsEvent : public IMeetingBreakoutRoomsEvent {
public:
void OnBreakoutRoomsStartedNotification(const wchar_t* stBID) override {
// Handle breakout rooms started
wprintf(L"Breakout rooms started: %s\n", stBID);
}
};
// Get controller
IMeetingBreakoutRoomsController* pController =
pMeetingService->GetBreakoutRoomsController(nullptr);
// Set event handler
pController->SetEvent(new MyBreakoutRoomsEvent());
// Get list of rooms
IList<IBreakoutRoomsInfo*>* pRoomList = pController->GetBreakoutRoomsInfoList();
for (int i = 0; i < pRoomList->GetItemCount(); ++i) {
IBreakoutRoomsInfo* pRoom = pRoomList->GetItem(i);
wprintf(L"Room: %s (ID: %s)\n",
pRoom->GetBreakoutRoomName(),
pRoom->GetBID());
}
// Join a breakout room
pController->JoinBreakoutRoom(L"room-id");
// Leave breakout room
pController->LeaveBreakoutRoom();macOS (Objective-C)
#import <ZoomSDK/ZoomSDK.h>
// Get controller
ZoomSDKBreakoutRoomsController *boController =
[[ZoomSDK sharedSDK] getMeetingService] getBreakoutRoomsController];
// Join breakout room
[boController requestJoinBreakoutRoom:@"room-id"];
// Leave breakout room
[boController requestLeaveBreakoutRoom];
// Close all rooms (host only)
[boController requestCloseAllBreakoutRooms];Permissions
Host/Co-Host Restrictions
| Action | Host | Co-Host | Participant |
|---|---|---|---|
| Create breakout rooms | ✅ | ✅ | ❌ |
| Open breakout rooms | ✅ | ✅ | ❌ |
| Close breakout rooms | ✅ | ✅ | ❌ |
| Assign participants | ✅ | ✅ | ❌ |
| Move participants | ✅ | ❌ | ❌ |
| Broadcast messages | ✅ | ✅ | ❌ |
| Join any room | ✅ | ✅* | ❌ |
*Co-hosts can only join rooms assigned by host.
Limitations
Capacity Limits
| Account Type | Max Rooms | Max Participants |
|---|---|---|
| Standard | 50 rooms | 500 total |
| Large Meeting Add-on | 100 rooms | 1,000 total |
Recording Limitations
Cloud Recording: Only records the main session
Local Recording: Records only the room the recorder is in
Host cannot record breakout rooms they're not in
Cannot Auto-Open Pre-Assigned Rooms
Critical: There is NO API to auto-open pre-assigned breakout rooms. The host MUST manually open rooms when the meeting starts.
Session Timeout
If no participant remains in the main session during breakout rooms, the main session may close after timeout. Ensure at least one participant (host or bot) stays in main session.
Best Practices
1. Check Support Before Creating
ZoomMtg.BreakoutRoom.getBreakoutRoomOptions({
success: (response) => {
if (response.result.isSupportBreakoutRoom) {
// Proceed to create rooms
}
}
});2. Handle User Status
// Check before assigning
ZoomMtg.BreakoutRoom.getUserStatus({
userId: userId,
success: (response) => {
const { attendeeStatus } = response.result;
if (attendeeStatus === 3) { // IN_BO
// User already in a room - move instead of assign
}
}
});3. Error Handling
function handleBreakoutError(error) {
switch (error.method) {
case 'createBreakoutRoom':
if (error.errorMessage.includes('not support')) {
alert('Breakout rooms not enabled for this meeting');
}
break;
case 'assignUserToBreakoutRoom':
if (error.errorMessage.includes('not host')) {
alert('Only host/co-host can assign participants');
}
break;
}
}Video SDK Note
Video SDK does NOT have native breakout rooms. Instead, use "Subsessions":
Create separate Video SDK sessions
Move participants between sessions programmatically
Implement your own room management logic
See: https://developers.zoom.us/blog/build-breakout-rooms-for-video-sdk/
Resources
Web SDK Docs: https://developers.zoom.us/docs/meeting-sdk/web/
iOS SDK Docs: https://developers.zoom.us/docs/meeting-sdk/ios/
Android SDK Docs: https://developers.zoom.us/docs/meeting-sdk/android/
REST API - Meetings: https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#tag/Meetings
Developer Forum: https://devforum.zoom.us/
Requirements and compatibility
Written for: Claude Code, Claude apps
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Zoom
- Publisher
- Anthropic (Official)
- Distributed by
- Anthropic
- Source
- anthropics/knowledge-work-plugins · partner-built/zoom-plugin/skills/meeting-sdk · commit e050c2e
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from partner-built/zoom-plugin/LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Zoom or Anthropic.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download build-zoom-meeting-sdk-app.zip