curl --request GET \
--url https://api.checkfu.com/v1/sessions/{id}/events \
--header 'Authorization: Bearer <token>' \
--header 'checkfu-version: <checkfu-version>'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/events"
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}/events', 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}/events",
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}/events"
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}/events")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/events")
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{
"data": [
{
"id": "<string>",
"seq": 1,
"schema_version": 1,
"created_at": "<string>",
"type": "user.message",
"payload": {
"content": "<string>",
"authored_by": "<string>",
"caused_by": {
"kind": "api",
"request_id": "<string>"
},
"attachments": [
"<string>"
],
"prompt_integrity": {
"analyzer_version": "unicode-17.0.0-uts39-r32-checkfu-1",
"disposition": "accepted_normalization",
"original_digest": "<string>",
"findings": [
{
"kind": "mixed_script_confusable",
"utf16_offset": 1,
"code_point": "<string>",
"replacement": "<string>",
"answer_id": "<string>",
"value_index": 1
}
]
},
"connected_runtime": "<string>",
"run_delivery": "next_run",
"host_context": {
"source": "<string>",
"data": {}
},
"surface_scope_id": "<string>"
},
"provenance": "wire",
"presentation": {
"canonical_type": "<string>",
"provenance": "wire",
"known": true,
"classification": "input",
"visibility": "default",
"coalescible": true,
"notification": "none",
"milestone": true,
"terminal": true,
"summary": "<string>"
},
"attested": true
}
],
"next_page": "<string>",
"unavailable": [
{
"seq": 1,
"content_class": "message",
"reason": "shredded",
"structural_replay": "complete",
"replay_fact": {
"version": 1,
"seq": 1,
"kind": "state_neutral"
},
"prompt_integrity": {
"analyzer_version": "unicode-17.0.0-uts39-r32-checkfu-1",
"disposition": "accepted_normalization"
}
}
]
}{
"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"
}
}List persisted Session events
Pages the Session’s persisted event ledger — the durable truth every transcript, trace, usage record, and UI projection is derived from. Returns readable envelopes in data, positions whose content cannot be produced in unavailable (each naming its seq, content class, and a shredded or zdr reason), and next_page; continue until next_page is null. Pages are budgeted by owned ledger positions, so a page can carry an empty data array and a non-empty unavailable array. limit defaults to 100 and is capped at 1000; order within a Session by seq and deduplicate by event id. Positional access is declared, not incidental: pass after to start reading after any event seq — the same per-session coordinate SSE resumes from via Last-Event-ID — so a client can rewind to or reread any earlier slice. after and page are mutually exclusive; page remains the continuation token.
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}/events \
--header 'Authorization: Bearer <token>' \
--header 'checkfu-version: <checkfu-version>'import requests
url = "https://api.checkfu.com/v1/sessions/{id}/events"
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}/events', 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}/events",
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}/events"
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}/events")
.header("checkfu-version", "<checkfu-version>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checkfu.com/v1/sessions/{id}/events")
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{
"data": [
{
"id": "<string>",
"seq": 1,
"schema_version": 1,
"created_at": "<string>",
"type": "user.message",
"payload": {
"content": "<string>",
"authored_by": "<string>",
"caused_by": {
"kind": "api",
"request_id": "<string>"
},
"attachments": [
"<string>"
],
"prompt_integrity": {
"analyzer_version": "unicode-17.0.0-uts39-r32-checkfu-1",
"disposition": "accepted_normalization",
"original_digest": "<string>",
"findings": [
{
"kind": "mixed_script_confusable",
"utf16_offset": 1,
"code_point": "<string>",
"replacement": "<string>",
"answer_id": "<string>",
"value_index": 1
}
]
},
"connected_runtime": "<string>",
"run_delivery": "next_run",
"host_context": {
"source": "<string>",
"data": {}
},
"surface_scope_id": "<string>"
},
"provenance": "wire",
"presentation": {
"canonical_type": "<string>",
"provenance": "wire",
"known": true,
"classification": "input",
"visibility": "default",
"coalescible": true,
"notification": "none",
"milestone": true,
"terminal": true,
"summary": "<string>"
},
"attested": true
}
],
"next_page": "<string>",
"unavailable": [
{
"seq": 1,
"content_class": "message",
"reason": "shredded",
"structural_replay": "complete",
"replay_fact": {
"version": 1,
"seq": 1,
"kind": "state_neutral"
},
"prompt_integrity": {
"analyzer_version": "unicode-17.0.0-uts39-r32-checkfu-1",
"disposition": "accepted_normalization"
}
}
]
}{
"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-27 Path Parameters
^sess_[0-9a-f]{32}$Query Parameters
x >= 10 <= x <= 9007199254740991^c1_[0-9a-z]+$Response
Success
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
- Option 13
- Option 14
- Option 15
- Option 16
- Option 17
- Option 18
- Option 19
- Option 20
- Option 21
- Option 22
- Option 23
- Option 24
- Option 25
- Option 26
- Option 27
- Option 28
- Option 29
- Option 30
- Option 31
- Option 32
- Option 33
- Option 34
- Option 35
- Option 36
- Option 37
- Option 38
- Option 39
- Option 40
- Option 41
- Option 42
- Option 43
- Option 44
- Option 45
- Option 46
- Option 47
- Option 48
- Option 49
- Option 50
- Option 51
- Option 52
- Option 53
- Option 54
- Option 55
- Option 56
- Option 57
- Option 58
- Option 59
- Option 60
- Option 61
- Option 62
- Option 63
- Option 64
- Option 65
- Option 66
- Option 67
- Option 68
- Option 69
- Option 70
- Option 71
- Option 72
- Option 73
- Option 74
- Option 75
- Option 76
- Option 77
- Option 78
- Option 79
- Option 80
- Option 81
- Option 82
- Option 83
- Option 84
- Option 85
- Option 86
- Option 87
- Option 88
- Option 89
- Option 90
- Option 91
- Option 92
- Option 93
- Option 94
- Option 95
- Option 96
- Option 97
- Option 98
- Option 99
- Option 100
- Option 101
- Option 102
- Option 103
- Option 104
- Option 105
- Option 106
- Option 107
- Option 108
- Option 109
- Option 110
- Option 111
- Option 112
- Option 113
- Option 114
- Option 115
- Option 116
- Option 117
- Option 118
- Option 119
- Option 120
- Option 121
- Option 122
- Option 123
- Option 124
- Option 125
- Option 126
- Option 127
- Option 128
- Option 129
- Option 130
Show child attributes
Show child attributes
Show child attributes
Show child attributes