curl --request GET \
--url https://api.checkfu.com/v1/sessions/{id}/diff \
--header 'Authorization: Bearer <token>' \
--header 'checkfu-version: <checkfu-version>'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/diff"
headers = {
"checkfu-version": "<checkfu-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'checkfu-version': '<checkfu-version>', Authorization: 'Bearer <token>'}
};
fetch('https://api.checkfu.com/v1/sessions/{id}/diff', 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}/diff",
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>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api.checkfu.com/v1/sessions/{id}/diff"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("checkfu-version", "<checkfu-version>")
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.checkfu.com/v1/sessions/{id}/diff")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/diff")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"source": "<string>",
"branch": "<string>",
"through_event": "<string>",
"through_sequence": 1,
"source_tail": {
"session": "<string>",
"positions": 1,
"events": 1,
"unavailable": 1,
"by_type": [
{
"type": "<string>",
"count": 1
}
],
"settled": {
"type": "<string>",
"seq": 1
},
"last_seq": 1,
"complete": true
},
"branch_tail": {
"session": "<string>",
"positions": 1,
"events": 1,
"unavailable": 1,
"by_type": [
{
"type": "<string>",
"count": 1
}
],
"settled": {
"type": "<string>",
"seq": 1
},
"last_seq": 1,
"complete": true
},
"projection": {
"source_status": "<string>",
"branch_status": "<string>",
"diverged_fields": [
"<string>"
]
},
"source_outcome": {
"outcome": "<string>",
"iteration": 1,
"result": "<string>"
},
"branch_outcome": {
"outcome": "<string>",
"iteration": 1,
"result": "<string>"
},
"source_context": {
"cumulative_tokens": 1,
"current_context_tokens": 1,
"condensations": 1
},
"branch_context": {
"cumulative_tokens": 1,
"current_context_tokens": 1,
"condensations": 1
},
"wire": {
"canonical_form_version": 1,
"source_calls": 1,
"branch_calls": 1,
"compared": 1,
"matched": 1,
"unreadable": 1,
"truncated": true,
"first_divergence": {
"index": 1,
"source_seq": 123,
"branch_seq": 123
}
}
}{
"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": "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"
}
}Diff a forked Session against its source
Compares a fork with its recorded source: id must be a fork, and lineage is read from the branch’s own ledger rather than from anything the caller claims. Returns the fork boundary (through_event, through_sequence), a tail summary per side past that boundary (positions scanned, event counts by type, the settling event, last_seq, and a complete flag that goes false when the bounded scan truncated), the diverged projection fields and both statuses, plus each side’s Outcome and context-token totals. Unavailable positions are counted rather than guessed at, so erasure stays as visible here as in an export, and the whole view is derived on every read. An admin or root key may add wire=true for the model-wire drift block.
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 GET \
--url https://api.checkfu.com/v1/sessions/{id}/diff \
--header 'Authorization: Bearer <token>' \
--header 'checkfu-version: <checkfu-version>'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/diff"
headers = {
"checkfu-version": "<checkfu-version>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'checkfu-version': '<checkfu-version>', Authorization: 'Bearer <token>'}
};
fetch('https://api.checkfu.com/v1/sessions/{id}/diff', 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}/diff",
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>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api.checkfu.com/v1/sessions/{id}/diff"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("checkfu-version", "<checkfu-version>")
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.checkfu.com/v1/sessions/{id}/diff")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/diff")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["checkfu-version"] = '<checkfu-version>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"source": "<string>",
"branch": "<string>",
"through_event": "<string>",
"through_sequence": 1,
"source_tail": {
"session": "<string>",
"positions": 1,
"events": 1,
"unavailable": 1,
"by_type": [
{
"type": "<string>",
"count": 1
}
],
"settled": {
"type": "<string>",
"seq": 1
},
"last_seq": 1,
"complete": true
},
"branch_tail": {
"session": "<string>",
"positions": 1,
"events": 1,
"unavailable": 1,
"by_type": [
{
"type": "<string>",
"count": 1
}
],
"settled": {
"type": "<string>",
"seq": 1
},
"last_seq": 1,
"complete": true
},
"projection": {
"source_status": "<string>",
"branch_status": "<string>",
"diverged_fields": [
"<string>"
]
},
"source_outcome": {
"outcome": "<string>",
"iteration": 1,
"result": "<string>"
},
"branch_outcome": {
"outcome": "<string>",
"iteration": 1,
"result": "<string>"
},
"source_context": {
"cumulative_tokens": 1,
"current_context_tokens": 1,
"condensations": 1
},
"branch_context": {
"cumulative_tokens": 1,
"current_context_tokens": 1,
"condensations": 1
},
"wire": {
"canonical_form_version": 1,
"source_calls": 1,
"branch_calls": 1,
"compared": 1,
"matched": 1,
"unreadable": 1,
"truncated": true,
"first_divergence": {
"index": 1,
"source_seq": 123,
"branch_seq": 123
}
}
}{
"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": "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}$Query Parameters
true Response
Success
^sess_[0-9a-f]{32}$^sess_[0-9a-f]{32}$^evt_[0-9a-f]{32}$x > 0Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes