Integrate Zoom Meeting and Video SDK for Web Video Conferencing
You're launching an educational platform or online consultation service. Your user should stay on your site, but ready-made solutions like Google Meet force them to leave the interface — hurting UX and conversion. The solution is to embed Zoom SDK directly. We've completed over 15 such integrations for EdTech, telemedicine, and corporate portals. Integration keeps users on the site, ensures secure authentication via server-side signature generation, and automates meeting creation. The solution doesn't affect Core Web Vitals: Meeting SDK loads asynchronously, and Video SDK uses WebRTC natively. Development time is reduced by up to 2 weeks compared to DIY implementation, lowering project costs by 30–50%.
What problems does Zoom SDK solve?
- Loss of context: Users stay on your site; the conference opens internally.
- Security: Signature generation on the backend, OAuth authorization, webhook verification.
- Customization: Video SDK allows you to tailor the interface to your brand.
- Automation: Create meetings via API, handle start/end events.
Additionally, CORS and browser compatibility issues are resolved — all modern browsers (Chrome, Firefox, Safari, Edge) are supported.
Meeting SDK vs Video SDK: Which to choose?
| Parameter | Meeting SDK | Video SDK |
|---|---|---|
| UI | Ready-made Zoom interface | Fully custom |
| Implementation time | 3–4 days | 1–2 weeks |
| Flexibility | Low | High |
| Participant management | Limited | Full control |
| Examples | Webinars, consultations | Medical appointments, training |
Meeting SDK is 3–5 times faster to implement. However, for projects requiring a unique interface (branding, specific controls), Video SDK is the only choice.
How does signature generation work?
A signature authenticates a participant to the conference. It is generated server-side using SDK Key and SDK Secret. Never pass the secret to the client. According to the Zoom Meeting SDK documentation, this is the only secure method.
How we integrate Zoom: a case study with Next.js and Node.js
In one project (a platform for psychologists), we used Next.js 14 (App Router) on the frontend and Express on the backend. The Meeting SDK was installed via the @zoom/meetingsdk package. The conference widget opened inside the appointment page. Signature generation was placed in the /api/zoom/signature endpoint. Here's the generation code:
import crypto from 'crypto';
export function generateZoomSignature(
sdkKey: string,
sdkSecret: string,
meetingNumber: string,
role: 0 | 1
): string {
const timestamp = new Date().getTime() - 30000;
const msg = Buffer.from(`${sdkKey}${meetingNumber}${timestamp}${role}`).toString('base64');
const hash = crypto.createHmac('sha256', sdkSecret).update(msg).digest('base64');
const signature = Buffer.from(
`${sdkKey}.${meetingNumber}.${timestamp}.${role}.${hash}`
).toString('base64');
return signature;
}
The signature is sent to the client, where ZoomMtg.join is called. We also implemented meeting creation via the Zoom API and webhook handling:
async function createZoomMeeting(params: {
topic: string;
startTime: Date;
durationMinutes: number;
hostEmail: string;
}): Promise<{ id: string; joinUrl: string; password: string }> {
const tokenResponse = await fetch(
`https://zoom.us/oauth/token?grant_type=account_credentials&account_id=${process.env.ZOOM_ACCOUNT_ID}`,
{
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(
`${process.env.ZOOM_CLIENT_ID}:${process.env.ZOOM_CLIENT_SECRET}`
).toString('base64')}`,
},
}
);
const { access_token } = await tokenResponse.json();
const meetingResponse = await fetch(
`https://api.zoom.us/v2/users/${params.hostEmail}/meetings`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
topic: params.topic,
type: 2,
start_time: params.startTime.toISOString(),
duration: params.durationMinutes,
timezone: 'Europe/Moscow',
settings: {
waiting_room: true,
join_before_host: false,
mute_upon_entry: true,
auto_recording: 'none',
},
}),
}
);
const meeting = await meetingResponse.json();
return {
id: String(meeting.id),
joinUrl: meeting.join_url,
password: meeting.password,
};
}
Webhooks were configured for logging: when a meeting started/ended, who joined. Example handler:
app.post('/api/webhooks/zoom', async (req, res) => {
if (req.body.event === 'endpoint.url_validation') {
const hashForValidate = crypto
.createHmac('sha256', process.env.ZOOM_WEBHOOK_SECRET_TOKEN!)
.update(req.body.payload.plainToken)
.digest('hex');
return res.json({ plainToken: req.body.payload.plainToken, encryptedToken: hashForValidate });
}
const { event, payload } = req.body;
switch (event) {
case 'meeting.started':
await db.meetings.markStarted(payload.object.id);
break;
case 'meeting.ended':
await db.meetings.markEnded(payload.object.id, payload.object.duration);
break;
case 'meeting.participant_joined':
await db.meetings.addParticipant(payload.object.id, payload.object.participant.user_name);
break;
}
res.status(200).end();
});
To boost performance, we use Redis for caching Zoom access tokens, reducing API calls and decreasing latency by 30%.
Why trust integration to professionals?
Signature errors, webhook verification issues, key leaks — common problems with DIY implementation. Our team has 10+ years of full-stack development experience and Zoom Developer certification. We guarantee correct endpoint operation, secure encryption, and stable performance under loads up to 500 concurrent conferences. Typical savings: $5,000–$15,000 vs building from scratch.
Typical mistakes when integrating Zoom SDK
- Leaking SDK Secret: never pass secret to the client.
- Incorrect signature generation: check timestamp and role.
- Ignoring webhook verification: always verify the signature.
- No error handling when creating meetings: handle API limits.
- Forgetting CORS: configure headers on the backend.
Deliverables
- Requirements analysis and SDK selection.
- Architecture design: frontend widget, backend endpoints, webhooks.
- Integration implementation: signature generation, meeting creation, event handling.
- Testing at all stages (unit, integration, e2e).
- Deployment on your server or Vercel.
- Documentation and team training.
- 2 weeks of post-release support.
Process stages with approximate timelines
| Stage | Duration (Meeting SDK) | Duration (Video SDK) |
|---|---|---|
| Analysis | 1 day | 2 days |
| Design | 1 day | 2 days |
| Implementation | 2 days | 5 days |
| Testing | 1 day | 2 days |
| Deployment & support | 1 day | 2 days |
| Total | 3–5 days | 1–2 weeks |
Timelines and pricing
- Meeting SDK + signature + meeting creation: 3–5 days, starting from $2,500.
- Video SDK + custom UI + webhooks: 1–2 weeks, starting from $6,000.
Ready for turnkey integration? Contact us for a free consultation and project estimate. We'll help choose the right SDK and plan the work. Get your quote now.







