curl --request POST \
--url https://api.checkfu.com/v1/sessions/{id}/fork \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'checkfu-version: <checkfu-version>' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"at_event": "<unknown>",
"checkpoint": "<unknown>"
}
'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/fork"
payload = {
"at_event": "<unknown>",
"checkpoint": "<unknown>"
}
headers = {
"checkfu-version": "<checkfu-version>",
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'checkfu-version': '<checkfu-version>',
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({at_event: '<unknown>', checkpoint: '<unknown>'})
};
fetch('https://api.checkfu.com/v1/sessions/{id}/fork', 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}/fork",
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([
'at_event' => '<unknown>',
'checkpoint' => '<unknown>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"checkfu-version: <checkfu-version>",
"idempotency-key: <idempotency-key>"
],
]);
$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}/fork"
payload := strings.NewReader("{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("checkfu-version", "<checkfu-version>")
req.Header.Add("idempotency-key", "<idempotency-key>")
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.checkfu.com/v1/sessions/{id}/fork")
.header("checkfu-version", "<checkfu-version>")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/fork")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"agent": {
"id": "<string>",
"description": "<string>",
"harness": "<string>",
"mcp_servers": [
{
"type": "url",
"name": "<string>",
"url": "<string>"
}
],
"model": {
"id": "<string>",
"effort": {
"type": "low"
},
"inference_geo": "global",
"speed": "standard"
},
"name": "<string>",
"skills": [
{
"type": "anthropic",
"skill_id": "<string>",
"version": "<string>"
}
],
"system": "<string>",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{
"name": "bash",
"type": "bash",
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
],
"default_config": {
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
}
],
"multiagent": {
"agents": [
{
"id": "<string>",
"description": "<string>",
"harness": "<string>",
"mcp_servers": [
{
"type": "url",
"name": "<string>",
"url": "<string>"
}
],
"model": {
"id": "<string>",
"effort": {
"type": "low"
},
"inference_geo": "global",
"speed": "standard"
},
"name": "<string>",
"skills": [
{
"type": "anthropic",
"skill_id": "<string>",
"version": "<string>"
}
],
"system": "<string>",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{
"name": "bash",
"type": "bash",
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
],
"default_config": {
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
}
],
"type": "agent",
"version": 1
}
],
"type": "coordinator"
},
"type": "agent",
"version": 1
},
"archived_at": "<string>",
"budget": {
"type": "limit",
"max_list_cost": {
"amount": "<string>",
"currency": "USD"
}
},
"created_at": "<string>",
"environment_id": "<string>",
"metadata": {},
"outcome_evaluations": [
{
"completed_at": "<string>",
"description": "<string>",
"explanation": "<string>",
"iteration": 1,
"outcome_id": "<string>",
"result": "<string>",
"type": "outcome_evaluation"
}
],
"resources": [
{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"mount_path": "<string>",
"type": "github_repository",
"url": "<string>",
"checkout": {
"type": "branch",
"name": "<string>"
}
}
],
"stats": {
"active_seconds": 1,
"duration_seconds": 1
},
"status": "rescheduling",
"title": "<string>",
"type": "session",
"updated_at": "<string>",
"usage": {
"active_seconds": 1,
"cache_creation": {
"ephemeral_1h_input_tokens": 1,
"ephemeral_5m_input_tokens": 1
},
"cache_read_input_tokens": 1,
"input_tokens": 1,
"list_cost": {
"amount": "<string>",
"currency": "USD"
},
"output_tokens": 1,
"server_tool_use": {
"web_fetch_requests": 1,
"web_search_requests": 1
}
},
"vault_ids": [
"<string>"
],
"automation_id": "<string>"
}{
"target_session_id": "<string>",
"status": "pending",
"phase": "selecting_prefix",
"cursor": 1,
"retry_after_ms": 1
}{
"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": "validation.conflict",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-conflict"
}
}{
"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"
}
}{
"error": {
"type": "runtime.runner_unavailable",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-runner-unavailable"
}
}Fork a Session
Creates an independent Session from a readable prefix of this Session’s event ledger. The body is a selector: an empty object takes the committed head, { at_event } an exact event, { checkpoint } a live Checkpoint whose sandbox disk is cloned as well. An Idempotency-Key is required, and a 202 fork-progress envelope (target_session_id, phase, cursor, retry_after_ms) means retry the exact same request and key until 201 returns the Session. Inherited events keep their ids and sequence numbers, the target appends session.forked as its first new event and becomes independently driveable, and no Run leases, waits, or pending ActionApprovals carry over.
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 POST \
--url https://api.checkfu.com/v1/sessions/{id}/fork \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'checkfu-version: <checkfu-version>' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"at_event": "<unknown>",
"checkpoint": "<unknown>"
}
'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/fork"
payload = {
"at_event": "<unknown>",
"checkpoint": "<unknown>"
}
headers = {
"checkfu-version": "<checkfu-version>",
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'checkfu-version': '<checkfu-version>',
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({at_event: '<unknown>', checkpoint: '<unknown>'})
};
fetch('https://api.checkfu.com/v1/sessions/{id}/fork', 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}/fork",
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([
'at_event' => '<unknown>',
'checkpoint' => '<unknown>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"checkfu-version: <checkfu-version>",
"idempotency-key: <idempotency-key>"
],
]);
$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}/fork"
payload := strings.NewReader("{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("checkfu-version", "<checkfu-version>")
req.Header.Add("idempotency-key", "<idempotency-key>")
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.checkfu.com/v1/sessions/{id}/fork")
.header("checkfu-version", "<checkfu-version>")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/fork")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"at_event\": \"<unknown>\",\n \"checkpoint\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"agent": {
"id": "<string>",
"description": "<string>",
"harness": "<string>",
"mcp_servers": [
{
"type": "url",
"name": "<string>",
"url": "<string>"
}
],
"model": {
"id": "<string>",
"effort": {
"type": "low"
},
"inference_geo": "global",
"speed": "standard"
},
"name": "<string>",
"skills": [
{
"type": "anthropic",
"skill_id": "<string>",
"version": "<string>"
}
],
"system": "<string>",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{
"name": "bash",
"type": "bash",
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
],
"default_config": {
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
}
],
"multiagent": {
"agents": [
{
"id": "<string>",
"description": "<string>",
"harness": "<string>",
"mcp_servers": [
{
"type": "url",
"name": "<string>",
"url": "<string>"
}
],
"model": {
"id": "<string>",
"effort": {
"type": "low"
},
"inference_geo": "global",
"speed": "standard"
},
"name": "<string>",
"skills": [
{
"type": "anthropic",
"skill_id": "<string>",
"version": "<string>"
}
],
"system": "<string>",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{
"name": "bash",
"type": "bash",
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
],
"default_config": {
"enabled": true,
"permission_policy": {
"type": "always_allow"
}
}
}
],
"type": "agent",
"version": 1
}
],
"type": "coordinator"
},
"type": "agent",
"version": 1
},
"archived_at": "<string>",
"budget": {
"type": "limit",
"max_list_cost": {
"amount": "<string>",
"currency": "USD"
}
},
"created_at": "<string>",
"environment_id": "<string>",
"metadata": {},
"outcome_evaluations": [
{
"completed_at": "<string>",
"description": "<string>",
"explanation": "<string>",
"iteration": 1,
"outcome_id": "<string>",
"result": "<string>",
"type": "outcome_evaluation"
}
],
"resources": [
{
"id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"mount_path": "<string>",
"type": "github_repository",
"url": "<string>",
"checkout": {
"type": "branch",
"name": "<string>"
}
}
],
"stats": {
"active_seconds": 1,
"duration_seconds": 1
},
"status": "rescheduling",
"title": "<string>",
"type": "session",
"updated_at": "<string>",
"usage": {
"active_seconds": 1,
"cache_creation": {
"ephemeral_1h_input_tokens": 1,
"ephemeral_5m_input_tokens": 1
},
"cache_read_input_tokens": 1,
"input_tokens": 1,
"list_cost": {
"amount": "<string>",
"currency": "USD"
},
"output_tokens": 1,
"server_tool_use": {
"web_fetch_requests": 1,
"web_search_requests": 1
}
},
"vault_ids": [
"<string>"
],
"automation_id": "<string>"
}{
"target_session_id": "<string>",
"status": "pending",
"phase": "selecting_prefix",
"cursor": 1,
"retry_after_ms": 1
}{
"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": "validation.conflict",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#validation-conflict"
}
}{
"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"
}
}{
"error": {
"type": "runtime.runner_unavailable",
"message": "<string>",
"more": "https://docs.checkfu.com/reference/errors#runtime-runner-unavailable"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
2026-08-31 1 - 255Path Parameters
^sess_[0-9a-f]{32}$Body
Response
ManagedAgentsSession
^sess_[0-9a-f]{32}$Show child attributes
Show child attributes
A canonical UTC ISO-8601 timestamp with millisecond precision.
24^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$Show child attributes
Show child attributes
A canonical UTC ISO-8601 timestamp with millisecond precision.
24^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$^env_[0-9a-f]{32}$at most 16 correlation pairs with keys of 1 to 64 characters
Show child attributes
Show child attributes
Show child attributes
Show child attributes
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Show child attributes
Show child attributes
rescheduling, running, idle, terminated session A canonical UTC ISO-8601 timestamp with millisecond precision.
24^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$Show child attributes
Show child attributes
^vlt_[0-9a-f]{32}$^auto_[0-9a-f]{32}$