Get trail moment
curl --request GET \
--url https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}', 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.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}",
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>"
],
]);
$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://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}"
req, _ := http.NewRequest("GET", url, nil)
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://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"flow_name": "<string>",
"trail_name": "<string>",
"moment_number": 123,
"created_at": 123,
"template_id": "<string>",
"compliance_status": {}
}{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Input payload validation failed"
}{
"message": "You don't have permission to access this resource"
}{
"message": "Flow, trail or moment not found"
}{
"message": "Two slots share an attestation name, so no policy input can be built"
}Get trail moment
Get one moment, with each attestation's stored body joined onto its slot entry.
`moment_expression` can be specified as follows:
- `latest`: the newest moment in the series
- `N`: the moment with that `moment_number`, as cited by the listing
example: 42
- `@{YYYY-MM-DDTHH:MM:SS}`: the newest moment recorded at or before that UTC
instant. Fractional seconds are optional, and are read to microseconds.
example: @{2026-08-27T12:00:00}
Address a moment you already know by its `moment_number`. An instant carries
less precision than the `created_at` the listing publishes, so one built by
rounding a listed `created_at` can fall before its own moment and select the
one before it.
GET
/
trails
/
{org}
/
{flow_name}
/
{trail_name}
/
moments
/
{moment_expression}
Get trail moment
curl --request GET \
--url https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}', 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.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}",
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>"
],
]);
$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://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}"
req, _ := http.NewRequest("GET", url, nil)
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://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/trails/{org}/{flow_name}/{trail_name}/moments/{moment_expression}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"flow_name": "<string>",
"trail_name": "<string>",
"moment_number": 123,
"created_at": 123,
"template_id": "<string>",
"compliance_status": {}
}{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Input payload validation failed"
}{
"message": "You don't have permission to access this resource"
}{
"message": "Flow, trail or moment not found"
}{
"message": "Two slots share an attestation name, so no policy input can be built"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Pattern:
^[a-zA-Z0-9][a-zA-Z0-9\.\-_~]*$Pattern:
^[a-zA-Z0-9][a-zA-Z0-9\.\-_~]*$Response
Successful Response
A moment with each attestation's stored body joined onto its slot entry.
Name of the flow the trail belongs to, as asked for
Pattern:
^[a-zA-Z0-9][a-zA-Z0-9\.\-_~]*$Name of the trail
Pattern:
^[a-zA-Z0-9][a-zA-Z0-9\.\-_~]*$Address of this moment within the trail's series
Unix timestamp at which the moment was recorded
Id of the flow template the moment was evaluated against
Compliance slots as at the moment, keyed by attestation name so a policy can address one, each entry carrying the fields of its stored attestation. Untyped because a joined body carries whatever fields its attestation type defines.
Last modified on October 16, 2026