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{
"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"
}Get trail moment
Beta — the Server-side evaluation feature is in beta. Requests from organizations without it enabled receive 403 Forbidden.
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{
"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"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
Successful Response
A moment with each attestation's stored body joined onto its slot entry.
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, each attestation entry carrying the fields of its stored attestation. Untyped because a joined body carries whatever fields its attestation type defines.
Last modified on September 7, 2026