curl --request POST \
--url https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enabled": true
}
'import requests
url = "https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings"
payload = { "enabled": 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({enabled: true})
};
fetch('https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings', 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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings",
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([
'enabled' => 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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings"
payload := strings.NewReader("{\n \"enabled\": true\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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings")
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 \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"app_id": "6820f3a4e7b91d003c45a1f2",
"enabled": true,
"can_enable_recordings": true,
"enabled_at": "2026-09-01T10:15:00.123000",
"enabled_by": "jane@acme.com",
"exclude_admins": true,
"sampling_rate": 1
}Turn session recordings on or off
Turns session recordings on or off for the app. Recordings are available on the Builder plan and above, and capture starts once the app is published. See Session recordings.
In FERPA workspaces, only a workspace owner or admin can turn recordings on. Recordings that were enabled before the workspace became FERPA stop capturing until an owner or admin enables them again. App editors can still turn recordings off.
The first time you turn recordings on starts the app’s rolling 30-day recording window. Turning them off and on again doesn’t restart it.
The response echoes the enabled value you sent. When you turn recordings off, enabled_at and enabled_by keep the values from the last time they were turned on, including after the app has moved to another owner. Get session recording settings reports null for both.
curl --request POST \
--url https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enabled": true
}
'import requests
url = "https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings"
payload = { "enabled": 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({enabled: true})
};
fetch('https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings', 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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings",
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([
'enabled' => 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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings"
payload := strings.NewReader("{\n \"enabled\": true\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://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/session-recordings/apps/{app_id}/recording-settings")
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 \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"app_id": "6820f3a4e7b91d003c45a1f2",
"enabled": true,
"can_enable_recordings": true,
"enabled_at": "2026-09-01T10:15:00.123000",
"enabled_by": "jane@acme.com",
"exclude_admins": true,
"sampling_rate": 1
}Authorizations
Personal access token, sent as Authorization: Bearer <token>. Each operation lists the permission it needs: read_only or full_access. A full-access token can call every operation. A read-only token can call only the operations that list read_only; anything else returns 403 read_only_credential_route_not_allowed.
Path Parameters
ID of the app.
64^[a-zA-Z0-9._-]+$Body
true to turn recordings on, false to turn them off.
true
Response
The app's session recording settings.
An app's session recording settings.
ID of the app.
"6820f3a4e7b91d003c45a1f2"
Whether recordings are on. Reads false when they were turned on but the app has since moved to another owner or workspace, the owner's plan no longer includes recordings, or its FERPA workspace has not approved them.
true
Whether your workspace role allows enabling recordings. In FERPA workspaces, only owners and admins can enable them.
true
When recordings were turned on, as a UTC timestamp in ISO 8601 format, or null when they're off. A value read back carries no offset, and the response right after turning recordings on carries +00:00. The response to turning recordings off keeps the previous value.
"2026-09-01T10:15:00.123000"
Email of the user who turned recordings on, or null when they're off. The response to turning recordings off keeps the previous value.
"jane@acme.com"
Whether visits by the app's owners and admins are left out of recording.
true
Share of eligible visits that get recorded, from 0 to 1. 1 records every visit.
1
Was this page helpful?