meeting-tokens
curl --request POST \
--url https://api.daily.co/v1/meeting-tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"properties": {
"room_name": "<string>",
"eject_at_token_exp": false,
"eject_after_elapsed": 123,
"nbf": 123,
"exp": 123,
"is_owner": false,
"user_name": "<string>",
"user_id": "<string>",
"enable_screenshare": true,
"start_video_off": false,
"start_audio_off": false,
"enable_prejoin_ui": true,
"enable_live_captions_ui": true,
"enable_recording_ui": true,
"enable_terse_logging": false,
"knocking": false,
"start_cloud_recording": false,
"start_cloud_recording_opts": {},
"auto_start_transcription": false,
"close_tab_on_exit": false,
"redirect_on_meeting_exit": "<string>",
"lang": "en",
"permissions": {
"hasPresence": true,
"canSend": true,
"canReceive": {},
"canAdmin": true
}
}
}
'import requests
url = "https://api.daily.co/v1/meeting-tokens"
payload = { "properties": {
"room_name": "<string>",
"eject_at_token_exp": False,
"eject_after_elapsed": 123,
"nbf": 123,
"exp": 123,
"is_owner": False,
"user_name": "<string>",
"user_id": "<string>",
"enable_screenshare": True,
"start_video_off": False,
"start_audio_off": False,
"enable_prejoin_ui": True,
"enable_live_captions_ui": True,
"enable_recording_ui": True,
"enable_terse_logging": False,
"knocking": False,
"start_cloud_recording": False,
"start_cloud_recording_opts": {},
"auto_start_transcription": False,
"close_tab_on_exit": False,
"redirect_on_meeting_exit": "<string>",
"lang": "en",
"permissions": {
"hasPresence": True,
"canSend": True,
"canReceive": {},
"canAdmin": True
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
properties: {
room_name: '<string>',
eject_at_token_exp: false,
eject_after_elapsed: 123,
nbf: 123,
exp: 123,
is_owner: false,
user_name: '<string>',
user_id: '<string>',
enable_screenshare: true,
start_video_off: false,
start_audio_off: false,
enable_prejoin_ui: true,
enable_live_captions_ui: true,
enable_recording_ui: true,
enable_terse_logging: false,
knocking: false,
start_cloud_recording: false,
start_cloud_recording_opts: {},
auto_start_transcription: false,
close_tab_on_exit: false,
redirect_on_meeting_exit: '<string>',
lang: 'en',
permissions: {hasPresence: true, canSend: true, canReceive: {}, canAdmin: true}
}
})
};
fetch('https://api.daily.co/v1/meeting-tokens', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.daily.co/v1/meeting-tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'properties' => [
'room_name' => '<string>',
'eject_at_token_exp' => false,
'eject_after_elapsed' => 123,
'nbf' => 123,
'exp' => 123,
'is_owner' => false,
'user_name' => '<string>',
'user_id' => '<string>',
'enable_screenshare' => true,
'start_video_off' => false,
'start_audio_off' => false,
'enable_prejoin_ui' => true,
'enable_live_captions_ui' => true,
'enable_recording_ui' => true,
'enable_terse_logging' => false,
'knocking' => false,
'start_cloud_recording' => false,
'start_cloud_recording_opts' => [
],
'auto_start_transcription' => false,
'close_tab_on_exit' => false,
'redirect_on_meeting_exit' => '<string>',
'lang' => 'en',
'permissions' => [
'hasPresence' => true,
'canSend' => true,
'canReceive' => [
],
'canAdmin' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.daily.co/v1/meeting-tokens"
payload := strings.NewReader("{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.daily.co/v1/meeting-tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daily.co/v1/meeting-tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyIjoicm9vbS0wMjUzIiwiZCI6IjI1ZGY1MDU3LWVmMGQtNGQ5Ny1iZGU2LTBjZjI4NzI3NmNiYiIsImlhdCI6MTU0ODcyMjIwN30.LXZtTnksTjWLTNvucr0MCHL6cOaqCa2m3DKk4ugnkSQ"
}{
"error": "invalid-request-error",
"info": "missing required field"
}Meeting Tokens
Create Meeting Token
Create a meeting token
POST
/
meeting-tokens
meeting-tokens
curl --request POST \
--url https://api.daily.co/v1/meeting-tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"properties": {
"room_name": "<string>",
"eject_at_token_exp": false,
"eject_after_elapsed": 123,
"nbf": 123,
"exp": 123,
"is_owner": false,
"user_name": "<string>",
"user_id": "<string>",
"enable_screenshare": true,
"start_video_off": false,
"start_audio_off": false,
"enable_prejoin_ui": true,
"enable_live_captions_ui": true,
"enable_recording_ui": true,
"enable_terse_logging": false,
"knocking": false,
"start_cloud_recording": false,
"start_cloud_recording_opts": {},
"auto_start_transcription": false,
"close_tab_on_exit": false,
"redirect_on_meeting_exit": "<string>",
"lang": "en",
"permissions": {
"hasPresence": true,
"canSend": true,
"canReceive": {},
"canAdmin": true
}
}
}
'import requests
url = "https://api.daily.co/v1/meeting-tokens"
payload = { "properties": {
"room_name": "<string>",
"eject_at_token_exp": False,
"eject_after_elapsed": 123,
"nbf": 123,
"exp": 123,
"is_owner": False,
"user_name": "<string>",
"user_id": "<string>",
"enable_screenshare": True,
"start_video_off": False,
"start_audio_off": False,
"enable_prejoin_ui": True,
"enable_live_captions_ui": True,
"enable_recording_ui": True,
"enable_terse_logging": False,
"knocking": False,
"start_cloud_recording": False,
"start_cloud_recording_opts": {},
"auto_start_transcription": False,
"close_tab_on_exit": False,
"redirect_on_meeting_exit": "<string>",
"lang": "en",
"permissions": {
"hasPresence": True,
"canSend": True,
"canReceive": {},
"canAdmin": True
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
properties: {
room_name: '<string>',
eject_at_token_exp: false,
eject_after_elapsed: 123,
nbf: 123,
exp: 123,
is_owner: false,
user_name: '<string>',
user_id: '<string>',
enable_screenshare: true,
start_video_off: false,
start_audio_off: false,
enable_prejoin_ui: true,
enable_live_captions_ui: true,
enable_recording_ui: true,
enable_terse_logging: false,
knocking: false,
start_cloud_recording: false,
start_cloud_recording_opts: {},
auto_start_transcription: false,
close_tab_on_exit: false,
redirect_on_meeting_exit: '<string>',
lang: 'en',
permissions: {hasPresence: true, canSend: true, canReceive: {}, canAdmin: true}
}
})
};
fetch('https://api.daily.co/v1/meeting-tokens', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.daily.co/v1/meeting-tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'properties' => [
'room_name' => '<string>',
'eject_at_token_exp' => false,
'eject_after_elapsed' => 123,
'nbf' => 123,
'exp' => 123,
'is_owner' => false,
'user_name' => '<string>',
'user_id' => '<string>',
'enable_screenshare' => true,
'start_video_off' => false,
'start_audio_off' => false,
'enable_prejoin_ui' => true,
'enable_live_captions_ui' => true,
'enable_recording_ui' => true,
'enable_terse_logging' => false,
'knocking' => false,
'start_cloud_recording' => false,
'start_cloud_recording_opts' => [
],
'auto_start_transcription' => false,
'close_tab_on_exit' => false,
'redirect_on_meeting_exit' => '<string>',
'lang' => 'en',
'permissions' => [
'hasPresence' => true,
'canSend' => true,
'canReceive' => [
],
'canAdmin' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.daily.co/v1/meeting-tokens"
payload := strings.NewReader("{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.daily.co/v1/meeting-tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daily.co/v1/meeting-tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"properties\": {\n \"room_name\": \"<string>\",\n \"eject_at_token_exp\": false,\n \"eject_after_elapsed\": 123,\n \"nbf\": 123,\n \"exp\": 123,\n \"is_owner\": false,\n \"user_name\": \"<string>\",\n \"user_id\": \"<string>\",\n \"enable_screenshare\": true,\n \"start_video_off\": false,\n \"start_audio_off\": false,\n \"enable_prejoin_ui\": true,\n \"enable_live_captions_ui\": true,\n \"enable_recording_ui\": true,\n \"enable_terse_logging\": false,\n \"knocking\": false,\n \"start_cloud_recording\": false,\n \"start_cloud_recording_opts\": {},\n \"auto_start_transcription\": false,\n \"close_tab_on_exit\": false,\n \"redirect_on_meeting_exit\": \"<string>\",\n \"lang\": \"en\",\n \"permissions\": {\n \"hasPresence\": true,\n \"canSend\": true,\n \"canReceive\": {},\n \"canAdmin\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyIjoicm9vbS0wMjUzIiwiZCI6IjI1ZGY1MDU3LWVmMGQtNGQ5Ny1iZGU2LTBjZjI4NzI3NmNiYiIsImlhdCI6MTU0ODcyMjIwN30.LXZtTnksTjWLTNvucr0MCHL6cOaqCa2m3DKk4ugnkSQ"
}{
"error": "invalid-request-error",
"info": "missing required field"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Show child attributes
Show child attributes
Response
200
Example:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyIjoicm9vbS0wMjUzIiwiZCI6IjI1ZGY1MDU3LWVmMGQtNGQ5Ny1iZGU2LTBjZjI4NzI3NmNiYiIsImlhdCI6MTU0ODcyMjIwN30.LXZtTnksTjWLTNvucr0MCHL6cOaqCa2m3DKk4ugnkSQ"
⌘I