Your server mints a join link
Create a meeting for the lesson, then a signed join link for each person. The link fixes their name and role, so nobody signs up and nobody can rename themselves.
- The API key stays on your server:
Authorization: Bearer … - Roles:
host,participant,viewer externalUserIdcomes back in attendance and webhooks- Links skip the waiting room and expire (1 min – 30 days)
// The API key never leaves your server. const NEBULM = 'https://meet.nebulm.com/api/v1'; const headers = { Authorization: `Bearer ${process.env.NEBULM_API_KEY}`, 'Content-Type': 'application/json', }; // 1. One meeting per lesson const { meeting } = await fetch(`${NEBULM}/meetings`, { method: 'POST', headers, body: JSON.stringify({ title: 'Algebra with Ms. Rivera', externalId: lesson.id }), }).then((r) => r.json()); // 2. A join link per person: name and role fixed by it const { joinLink } = await fetch(`${NEBULM}/meetings/${meeting.id}/join-links`, { method: 'POST', headers, body: JSON.stringify({ displayName: student.name, role: 'participant', externalUserId: student.id, expiresInSec: 7200, }), }).then((r) => r.json()); res.json({ joinUrl: joinLink.url }); // https://meet.nebulm.com/embed/…#t=…