curl --request PATCH \
--url https://api.checkfu.com/v1/sessions/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'checkfu-version: <checkfu-version>' \
--data '
{
"title": "<string>",
"metadata": {}
}
'import requests
url = "https://api.checkfu.com/v1/sessions/{id}"
payload = {
"title": "<string>",
"metadata": {}
}
headers = {
"checkfu-version": "<checkfu-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'checkfu-version': '<checkfu-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({title: '<string>', metadata: {}})
};
fetch('https://api.checkfu.com/v1/sessions/{id}', 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.checkfu.com/v1/sessions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"checkfu-version: <checkfu-version>"
],
]);
$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.checkfu.com/v1/sessions/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("checkfu-version", "<checkfu-version>")
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.patch("https://api.checkfu.com/v1/sessions/{id}")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"workspace_id": "<string>",
"agent_id": "<string>",
"agent_deployment_id": "<string>",
"agent_deployment_revision_number": 1,
"execution_target_type": "managed",
"principal": "<string>",
"status": "pending",
"agent_release_number": 1,
"release_hash": "<string>",
"acted_as": "<string>",
"agent_installation_id": "<string>",
"surface_scope_id": "<string>",
"admitted_at": "<string>",
"vault_ids": [
"<string>"
],
"resources": [
{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"mount_path": "<string>",
"type": "github_repository",
"url": "<string>",
"checkout": {
"type": "branch",
"name": "<string>"
}
}
],
"mounts": [
{
"id": "<string>",
"kind": "project",
"project_id": "<string>",
"mount_path": "<string>",
"revision_policy": {
"kind": "latest"
},
"access": "read_only",
"writeback": null
}
],
"wire_version": "<string>",
"created_at": "<string>",
"archived_at": "<string>",
"title": "<string>",
"client_reference": "<string>",
"metadata": {},
"automation": "<string>",
"session_template_id": "<string>",
"session_template_version": 1,
"work_environment": {
"disposition": "resolved",
"resolver_version": "work-environment-resolver/v1",
"preset_catalog_version": 1,
"normalized_requirements": {
"schema_version": 1,
"execution": [
"shell"
],
"lifetime": "run",
"presentation": "none",
"human_access": "none",
"placement": [
"managed"
],
"isolation": {
"filesystem": "attachment",
"browser_profile": "attachment",
"process_namespace": "attachment",
"credentials": "grant_bound",
"clipboard": "disabled",
"downloads": "attachment"
},
"recovery": "none",
"retention": {
"mode": "ephemeral_zdr",
"maximum_seconds": 157680000,
"export": "forbidden"
},
"network": {
"mode": "none",
"policy": {
"action_policy_id": "<string>",
"action_policy_version": 1
}
},
"locality": {
"regions": [
"<string>"
],
"residency_required": true
},
"resources": {
"minimum_vcpu": 512,
"minimum_memory_mib": 2097152,
"minimum_disk_mib": 536870912,
"gpu": "forbidden"
}
},
"resolved_kind": "none",
"requires_screen": true,
"forced_by": [
"<string>"
],
"selected_provider": {
"provider": "<string>",
"tuple_digest": "<string>",
"evidence_grade": "double"
},
"considered": [
{
"provider": "<string>",
"tuple_digest": "<string>",
"qualified": true,
"reasons": [
{
"code": "live_qualification_missing",
"requirement_path": "<string>",
"expected": "<string>",
"observed": "<string>",
"evidence_reference": "<string>"
}
]
}
],
"warnings": [
{
"code": "shared_profile_credentials",
"message": "<string>",
"acknowledgement_required": true
}
],
"estimated_usage_dimensions": [
"compute_seconds"
],
"refusal": {
"code": "human_access_requires_presentation",
"requirement_path": "<string>",
"message": "<string>"
},
"portability": "not_applicable",
"candidate_set_digest": "<string>",
"resolution_digest": "<string>"
}
}{
"error": {
"type": "validation.malformed",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-malformed"
}
}{
"error": {
"type": "auth.invalid_key",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#auth-invalid-key"
}
}{
"error": {
"type": "auth.disabled_tenancy",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#auth-disabled-tenancy"
}
}{
"error": {
"type": "validation.not_found",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-not-found"
}
}{
"error": {
"type": "runtime.invalid_transition",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-invalid-transition"
}
}{
"error": {
"type": "budget.exceeded",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#budget-exceeded"
}
}{
"error": {
"type": "runtime.internal",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-internal"
}
}Update a Session's title or metadata
Sets or clears a Session’s display title and correlation metadata; title is required and null clears it, while metadata is optional — omitting it leaves the bag untouched and sending {} clears it. Metadata is replaced whole rather than merged per key, because the platform never reads the keys it stores. Both are display and correlation data only, with no admission, authorization, or routing meaning, and updating is last-write-wins and allowed while a turn is active or after the Session is terminal. A material change appends a content-free session.title_updated or session.metadata_updated marker — neither title text nor metadata keys and values enter the event ledger — while a non-null title or a non-empty bag is denied for zero-data-retention Sessions. Returns the updated Session.
Checkfu support posture: alpha; hosted. Required evidence journey: session-turn. Deployment-specific readiness and the latest proven release are available from GET /v1/support/capabilities.
curl --request PATCH \
--url https://api.checkfu.com/v1/sessions/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'checkfu-version: <checkfu-version>' \
--data '
{
"title": "<string>",
"metadata": {}
}
'import requests
url = "https://api.checkfu.com/v1/sessions/{id}"
payload = {
"title": "<string>",
"metadata": {}
}
headers = {
"checkfu-version": "<checkfu-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'checkfu-version': '<checkfu-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({title: '<string>', metadata: {}})
};
fetch('https://api.checkfu.com/v1/sessions/{id}', 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.checkfu.com/v1/sessions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"checkfu-version: <checkfu-version>"
],
]);
$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.checkfu.com/v1/sessions/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("checkfu-version", "<checkfu-version>")
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.patch("https://api.checkfu.com/v1/sessions/{id}")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"workspace_id": "<string>",
"agent_id": "<string>",
"agent_deployment_id": "<string>",
"agent_deployment_revision_number": 1,
"execution_target_type": "managed",
"principal": "<string>",
"status": "pending",
"agent_release_number": 1,
"release_hash": "<string>",
"acted_as": "<string>",
"agent_installation_id": "<string>",
"surface_scope_id": "<string>",
"admitted_at": "<string>",
"vault_ids": [
"<string>"
],
"resources": [
{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"mount_path": "<string>",
"type": "github_repository",
"url": "<string>",
"checkout": {
"type": "branch",
"name": "<string>"
}
}
],
"mounts": [
{
"id": "<string>",
"kind": "project",
"project_id": "<string>",
"mount_path": "<string>",
"revision_policy": {
"kind": "latest"
},
"access": "read_only",
"writeback": null
}
],
"wire_version": "<string>",
"created_at": "<string>",
"archived_at": "<string>",
"title": "<string>",
"client_reference": "<string>",
"metadata": {},
"automation": "<string>",
"session_template_id": "<string>",
"session_template_version": 1,
"work_environment": {
"disposition": "resolved",
"resolver_version": "work-environment-resolver/v1",
"preset_catalog_version": 1,
"normalized_requirements": {
"schema_version": 1,
"execution": [
"shell"
],
"lifetime": "run",
"presentation": "none",
"human_access": "none",
"placement": [
"managed"
],
"isolation": {
"filesystem": "attachment",
"browser_profile": "attachment",
"process_namespace": "attachment",
"credentials": "grant_bound",
"clipboard": "disabled",
"downloads": "attachment"
},
"recovery": "none",
"retention": {
"mode": "ephemeral_zdr",
"maximum_seconds": 157680000,
"export": "forbidden"
},
"network": {
"mode": "none",
"policy": {
"action_policy_id": "<string>",
"action_policy_version": 1
}
},
"locality": {
"regions": [
"<string>"
],
"residency_required": true
},
"resources": {
"minimum_vcpu": 512,
"minimum_memory_mib": 2097152,
"minimum_disk_mib": 536870912,
"gpu": "forbidden"
}
},
"resolved_kind": "none",
"requires_screen": true,
"forced_by": [
"<string>"
],
"selected_provider": {
"provider": "<string>",
"tuple_digest": "<string>",
"evidence_grade": "double"
},
"considered": [
{
"provider": "<string>",
"tuple_digest": "<string>",
"qualified": true,
"reasons": [
{
"code": "live_qualification_missing",
"requirement_path": "<string>",
"expected": "<string>",
"observed": "<string>",
"evidence_reference": "<string>"
}
]
}
],
"warnings": [
{
"code": "shared_profile_credentials",
"message": "<string>",
"acknowledgement_required": true
}
],
"estimated_usage_dimensions": [
"compute_seconds"
],
"refusal": {
"code": "human_access_requires_presentation",
"requirement_path": "<string>",
"message": "<string>"
},
"portability": "not_applicable",
"candidate_set_digest": "<string>",
"resolution_digest": "<string>"
}
}{
"error": {
"type": "validation.malformed",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-malformed"
}
}{
"error": {
"type": "auth.invalid_key",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#auth-invalid-key"
}
}{
"error": {
"type": "auth.disabled_tenancy",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#auth-disabled-tenancy"
}
}{
"error": {
"type": "validation.not_found",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-not-found"
}
}{
"error": {
"type": "runtime.invalid_transition",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-invalid-transition"
}
}{
"error": {
"type": "budget.exceeded",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#budget-exceeded"
}
}{
"error": {
"type": "runtime.internal",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-internal"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
2026-08-24 Path Parameters
^sess_[0-9a-f]{32}$Body
Response
Success
^sess_[0-9a-f]{32}$^wrkspc_[0-9a-f]{32}$^agent_[0-9a-f]{32}$^adep_[0-9a-f]{32}$x > 0managed, connected ^prin_[0-9a-f]{32}$pending, provisioning, running, reconciling, waiting, idle, paused, completed, failed, canceled x > 0^sha256:[0-9a-f]{64}$^prin_[0-9a-f]{32}$^aini_[0-9a-f]{32}$^surf_[0-9a-f]{32}$^vlt_[0-9a-f]{32}$- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
1 - 2551 - 255at most 16 correlation pairs with keys of 1 to 64 characters
Show child attributes
Show child attributes
^auto_[0-9a-f]{32}$^stpl_[0-9a-f]{32}$x > 0A deterministic allocation-free explanation of work-environment admission.
Show child attributes
Show child attributes