VideoSDK Server SDK
The VideoSDK Server SDKs provide server-side access to the VideoSDK v2 REST APIs from Node.js, Go, and Rust. All three SDKs offer the same functionality: creating rooms, generating access tokens, managing recordings, HLS and RTMP streams, telephony, and AI agents.
Select your language in any code sample below.
Install
- Node.js
- Go
- Rust
# npm
npm install @videosdk.live/server-sdk
# pnpm
pnpm add @videosdk.live/server-sdk
# yarn
yarn add @videosdk.live/server-sdk
Requires Node.js 18 or later.
go get github.com/videosdk-live/videosdk-server-sdk-go
Requires Go 1.23 or later.
cargo add videosdk-server-sdk
cargo add tokio --features rt-multi-thread,macros
Or add them to Cargo.toml directly:
[dependencies]
videosdk-server-sdk = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
Requires Rust 1.75 or later.
Get your credentials
Create an API key and secret in the VideoSDK Dashboard. Pass them to the client, or set them in the environment (see Configuration).
Keep your secret on the server. It signs tokens, so it must never reach a browser or mobile app.
Quick start
- Node.js
- Go
- Rust
import { VideoSDK, Grant } from "@videosdk.live/server-sdk";
const client = new VideoSDK({
apiKey: process.env.VIDEOSDK_API_KEY!,
secret: process.env.VIDEOSDK_SECRET!,
});
// Create a room
const room = await client.rooms.create({ geoFence: "us002" });
// Generate a token for your client application to join the room
const token = client
.accessToken()
.setParticipant("user-123")
.grant(Grant.AllowJoin)
.forRoom(room.roomId)
.expiresIn("2h")
.toJwt();
client, err := videosdk.NewClient(
videosdk.WithAPIKey("YOUR_API_KEY"),
videosdk.WithSecret("YOUR_SECRET"),
)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
// Create a room
room, err := client.Rooms.Create(ctx, videosdk.RoomCreateParams{
GeoFence: videosdk.String(videosdk.RegionUS002),
})
// Generate a token for your client application to join the room
b, _ := client.AccessToken()
token, _ := b.
SetParticipant("user-123").
Grant(videosdk.GrantAllowJoin).
ForRoom(room.RoomID).
ExpiresIn(2 * time.Hour).
ToJWT()
use std::time::Duration;
use videosdk::{Client, Grant, Region, RoomCreateParams};
let client = Client::builder()
.api_key("YOUR_API_KEY")
.secret("YOUR_SECRET")
.build()?;
// Create a room
let room = client
.rooms()
.create(RoomCreateParams {
geo_fence: Some(Region::US002),
..Default::default()
})
.await?;
// Generate a token for your client application to join the room
let token = client
.access_token()?
.set_participant("user-123")
.grant(Grant::AllowJoin)
.for_room(&room.room_id)
.expires_in(Duration::from_secs(2 * 60 * 60))
.to_jwt()?;
The client signs and attaches its own management token on every request, so you never set an Authorization header for server-side calls.
Capabilities
| Area | Resources |
|---|---|
| Meetings | Rooms, Sessions, Participants |
| Media | Recordings, HLS, RTMP, Transcription, Transcodings, WHIP, WHEP, Socket ingest |
| Telephony | SIP, Batch calls, Connectors |
| AI | Agents |
| Webhooks | Webhooks |
API reference
- Node.js: API reference
- Go: API reference
- Rust: API reference
Examples
- Node.js: videosdk-server-sdk-examples-nodejs
- Go: videosdk-server-sdk-examples-go
- Rust: videosdk-server-sdk-examples-rust
Next steps
Got a Question? Ask us on discord

