/logs
curl --request GET \
--url https://api.daily.co/v1/logs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.daily.co/v1/logs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.daily.co/v1/logs', 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/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.daily.co/v1/logs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.daily.co/v1/logs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daily.co/v1/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"logs": [
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:55.324000000Z",
"message": "disconnect on pagehide",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": null,
"domainName": "your-domain",
"level": 2,
"code": 7991
},
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:55.324000000Z",
"message": "leaving session",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": null,
"domainName": "your-domain",
"level": 1,
"code": 8000
},
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:54.338000000Z",
"message": "participant left",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": "6436dbcb-f60a-48c4-90ca-4588f60f6fbc",
"domainName": "your-domain",
"level": 1,
"code": 8020
}
]
}{
"error": "invalid-request-error",
"info": "mtgSessionId or userSessionId is required"
}Logs
List Logs
GET
/
logs
/logs
curl --request GET \
--url https://api.daily.co/v1/logs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.daily.co/v1/logs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.daily.co/v1/logs', 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/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.daily.co/v1/logs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.daily.co/v1/logs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daily.co/v1/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"logs": [
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:55.324000000Z",
"message": "disconnect on pagehide",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": null,
"domainName": "your-domain",
"level": 2,
"code": 7991
},
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:55.324000000Z",
"message": "leaving session",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": null,
"domainName": "your-domain",
"level": 1,
"code": 8000
},
{
"time": "2026-03-23T16:32:55.473000000Z",
"clientTime": "2026-03-23T16:32:54.338000000Z",
"message": "participant left",
"mtgSessionId": "008c1f0f-6fc5-4e5f-b872-1b9623cb1e7a",
"userSessionId": "7a51a4b2-92cf-4ad2-b53b-9d01cc985a38",
"peerId": "6436dbcb-f60a-48c4-90ca-4588f60f6fbc",
"domainName": "your-domain",
"level": 1,
"code": 8020
}
]
}{
"error": "invalid-request-error",
"info": "mtgSessionId or userSessionId is required"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
If true, you get a "logs" array in the results
If true, results have "metrics" array
Filters by this user ID (aka "participant ID"). Required if mtgSessionId is not present in the request
Filters by this Session ID. Required if userSessionId is not present in the request
Filters by the given log level name
Available options:
ERROR, INFO, DEBUG ASC or DESC, case insensitive
A JS timestamp (ms since epoch in UTC)
A JS timestamp (ms since epoch), defaults to the current time
Limit the number of logs and/or metrics returned
Number of records to skip before returning results
Response
200
Show child attributes
Show child attributes