Use the prebuilt room
Video grid, chat, screen share, recording, polls, breakout rooms and a whiteboard, ready the moment the room connects.
Get a key, open a room with one request, then drop the prebuilt room into React, Flutter, Swift or any of ten SDKs. The same room grows into phone calls, AI agents, live translation and recording when you need them.
Already signed up? Your keys are in the dashboard.
$ curl -X POST https://mediasfu.com/v1/rooms \
-H "Authorization: Bearer $MEDIASFU_API_USERNAME:$MEDIASFU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create","userName":"host",
"duration":30,"capacity":5,"eventType":"conference"}'
{
"success": true,
"roomName": "s9x2k7mp4q81",
"publicURL": "https://…mediasfu.com/meet/s9x2k7mp4q81/…",
"roomStatus": "ready"
…
}Sign up and your dashboard has a sandbox key ready. It runs every feature on your account from any origin, so you can build before you register a domain.
export MEDIASFU_API_USERNAME="your-api-username"
export MEDIASFU_API_KEY="your-api-key"Meetings, phone calls and AI agent sessions all run in a room. One POST /v1/rooms creates it and returns a link that opens a complete room in any browser.
| Field | What it sets |
|---|---|
eventType | conference (everyone talks), webinar (host and panel talk), broadcast (one to many) or chat (one to one) |
duration | Minutes the room stays open, 5 to 1440 |
capacity | Most people in the room at once |
userName | The host, unique among your active rooms |
publicURL signs the host in. Keep it for the host."action": "join" with the roomName.curl -X POST https://mediasfu.com/v1/rooms \
-H "Authorization: Bearer $MEDIASFU_API_USERNAME:$MEDIASFU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "create",
"userName": "host",
"duration": 30,
"capacity": 5,
"eventType": "conference"
}'{
"success": true,
"message": "Room created successfully",
"roomName": "s9x2k7mp4q81",
"userName": "host",
"secureCode": "k46g26no08ijc9t3id3ttd",
"publicURL": "https://<region>.mediasfu.com/meet/s9x2k7mp4q81/<host token>",
"link": "https://<region>.mediasfu.com",
"roomStatus": "ready",
"secret": "<room secret>"
}Pick your platform. Each SDK ships the complete room (video grid, chat, screen share, recording, polls, breakout rooms, whiteboard) as one component you can restyle, override piece by piece, or replace with your own screens.
The complete room as one component, on Vite or any React 18+ app.
Paste your key for a first run on your own machine. Before anyone else uses the app, move it to your server.
npm create vite@latest my-room -- --template react-ts
cd my-room
npm install mediasfu-reactjsimport { ModernMediasfuGeneric } from 'mediasfu-reactjs';
import 'mediasfu-reactjs/dist/main.css';
export default function App() {
return (
<ModernMediasfuGeneric
credentials={{ apiUserName: 'your-api-username', apiKey: 'your-api-key' }}
/>
);
}Anything in a browser or app bundle can be read. Before anyone outside your team uses the app, move room creation behind your own sign-in: your server adds the key, the SDK calls your server.
createMediaSFURoom and joinMediaSFURoom hooks call that route instead of MediaSFU.// npm install express (Node 18 or later)
import express from 'express';
const app = express();
app.use(express.json());
// requireSignedInUser is your existing auth middleware.
app.post('/api/mediasfu/rooms', requireSignedInUser, async (req, res) => {
const payload = req.body;
if (!['create', 'join'].includes(payload?.action)) {
return res.status(400).json({ success: false, error: 'Unsupported action.' });
}
// Decide here which rooms this user may create or join.
try {
const upstream = await fetch('https://mediasfu.com/v1/rooms', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.MEDIASFU_API_USERNAME}:${process.env.MEDIASFU_API_KEY}`,
},
body: JSON.stringify(payload),
});
const data = await upstream.json();
if (!upstream.ok) {
return res.status(upstream.status).json({ success: false, error: data.error || 'Room request failed.' });
}
res.json({ success: true, data });
} catch {
res.status(502).json({ success: false, error: 'MediaSFU is unreachable. Try again.' });
}
});
app.listen(3000);The same room connection powers all three, so you can start with the prebuilt room and move down a level only where your product needs it.
Video grid, chat, screen share, recording, polls, breakout rooms and a whiteboard, ready the moment the room connects.
Theme it, then replace only the parts you care about: the video card, the controls, the chat panel, the join screen.
Run the room without our UI and drive media, participants and chat from your own components.
Phone callers, AI agents, interpreters and recordings join the same room you just built, through the same key and the same API.
Record any room to the cloud, or add an HLS stream for large audiences. Bring in OBS or a hardware encoder over WHIP.
recordingParams on create · /v1/recordingsGive a room a phone number so callers dial straight in, or place outbound calls from your app.
supportSIP on create · /v1/sipconfigsPut a voice agent in a room or on a phone line, with your own prompt and your choice of model providers.
/v1/aicredentialsEveryone speaks their own language and hears everyone else in theirs, with live captions.
/v1/translationconfigsA summary, decisions and action items when the room ends, ready to send to your own system.
Add a join button, click to call or an AI agent to any website with one embed, styled in Widget Studio.
Describe the room you need and download a React project, or an integration kit for an app you already have.
Run the open-source MediaSFU Open server on your own hardware with the same SDKs and room UI.
Each of these runs in your browser on the same SDKs. Join from a second tab or your phone to see both sides.
Two people, one invite link. The room this page builds.
Open it liveBook, consent, wait and get admitted, with AI notes after.
Open it liveTalk on one device, hear yourself translated on the other.
Open it liveAuctions, classrooms, video KYC, broadcast control rooms and more.
Open it liveNo. Build your first room with the key in an environment variable on your own machine. Add the small server route from step 4 before anyone outside your team uses the app.
The one your app is already written in. Every SDK joins the same rooms, so a React web app, a Flutter app and a Swift app can all be in one call.
Where requests may come from, not what they can do. A sandbox key works from any origin for building; a production key accepts browser requests only from the domains you register.
Yes. Restyle the prebuilt room, swap individual pieces, or hide it completely and drive the room from your own components. The connection, media and room state stay the same.
Yes. MediaSFU Open is the open-source server; point the SDKs at it instead of MediaSFU Cloud. Cloud adds managed scaling, recording, phone numbers, AI agents and translation.
Signing up is free, and new accounts start with free minutes to build with. The pricing page has the usage rates for when you go live.
Sign up, copy your key, and paste the request above.