Quickstart
Make your first call in about ten minutes. You'll create a project, mint a join token from your backend, and join the room from a web page.
1. Create a project
Sign up in the console, confirm your email and create a project. The console shows your API key once, so copy it into your backend's secrets now. It looks like sfk_t_<project>_….
Keep the API key on your server. Anyone with it can create rooms and tokens for your project. If it leaks, create a new key in the console and delete the old one.
2. Mint a join token on your backend
Each person who joins a call needs a join token. Ask for one with your API key:
curl -X POST https://api.appsocom.dev/tokens \
-H "Authorization: Bearer $APPSOCOM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"roomId":"demo-room","userId":"u_123","name":"Ada"}'
# → {"token":"eyJ…","expiresAt":1763000000}The same call from Node:
import { SfuKit } from "@appsocom/node";
const kit = new SfuKit({ url: "https://api.appsocom.dev", adminKey: process.env.APPSOCOM_API_KEY! });
// e.g. in your "join meeting" route, after you've checked who the user is:
const { token } = await kit.createToken({ roomId: "demo-room", userId: user.id, name: user.name });Rooms don't need to be created first. A room starts when the first person joins and ends two minutes after the last person leaves. There are SDKs for Python, PHP, Dart and Go too.
3. Join from your app
npm install @appsocom/clientimport { joinRoom, attachTrack } from "@appsocom/client";
const { token } = await fetch("/api/join-token").then((r) => r.json()); // your backend route
const room = await joinRoom({ url: "https://api.appsocom.dev", token, audio: true, video: true });
room.on("local-track", (kind, track) => {
if (kind === "video") attachTrack(document.querySelector("#me"), track);
});
room.on("track", (participant, kind, track) => {
if (kind === "video") attachTrack(videoFor(participant.id), track); // remote audio plays by itself
});
document.querySelector("#mic").onclick = () => room.toggleMic();
document.querySelector("#leave").onclick = () => room.leave();Open the page in two browser windows and you're in a call.
Want a complete call screen instead? With React it's a single component:
import { VideoConference } from "@appsocom/react";
import "@appsocom/react/styles.css";
<VideoConference url="https://api.appsocom.dev" token={token} />4. Next steps
- Choose what each person may do with roles and permissions.
- Have Appsocom Live tell your backend about joins and leaves with webhooks.
- Watch your usage on the project page in the console, and see pricing for what's free.