DNZ Voice Docs
Channels & RTC Token API
All production calls use your API key in the Authorization header. Base URL: voice-api.dnzteam.online. Channels are billed as participant-minutes.
Create a channel
POST /v1/channels (alias: POST /v1/rooms)
Headers: Authorization: Bearer dnz_vk_…
Body: channelName (optional, a-z A-Z 0-9 _), title, maxPeers (2–100), mode (open | moderated)
POST https://voice-api.dnzteam.online/v1/channels
Authorization: Bearer dnz_vk_xxxx
{
"channelName": "class_101",
"maxPeers": 50,
"mode": "open"
}
→ 201 { "channelName": "class_101", "roomId": "class_101", "status": "active" }Issue RTC Token
POST /v1/channels/{channelName}/token
uid: stable user id from your database
displayName: shown in the channel
role: host | speaker | listener
The response also includes iceServers (real STUN/TURN via coturn) — pass it straight into client.join() so browsers behind strict NATs/firewalls can still connect.
POST https://voice-api.dnzteam.online/v1/channels/class_101/token
{
"uid": "user_8821",
"displayName": "Ahmed",
"role": "speaker"
}
→ { "token": "…", "peerId": "…", "iceServers": [...], "channelName": "class_101", "expiresIn": 86400 }TURN credentials
GET /v1/turn-credentials — returns iceServers for NAT traversal.
Use the same API key. Call from client after you have network permission.
Close channel
DELETE /v1/channels/{channelName} — ends the live session and stops billing for new joins.