Guardrails
List Guardrail Executions
Tail the append-only audit log of guardrail evaluations.
GET
/
api
/
v1
/
guardrail-executions
List Guardrail Executions
curl --request GET \
--url https://api.example.com/api/v1/guardrail-executionsimport requests
url = "https://api.example.com/api/v1/guardrail-executions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/guardrail-executions', 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.example.com/api/v1/guardrail-executions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/api/v1/guardrail-executions"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/api/v1/guardrail-executions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/guardrail-executions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyReturns the append-only audit log of guardrail evaluations the caller is allowed to see, newest first. Rows persist for 90 days (enforced by the BullMQ retention worker).
Authentication
Requires a Bearer token with thebilling API key scope.
Query Parameters
integer
Number of rows to return. 1–200, default 50.
string
Narrow to one API key (UUID).
string
Narrow to one policy (UUID).
string
ISO timestamp. Returns rows created strictly after this time. Use this to tail the log.
Request Examples
# Most recent 20 evaluations for a single policy
curl "https://www.hitheo.ai/api/v1/guardrail-executions?limit=20&policy_id=$POLICY_ID" \
-H "Authorization: Bearer $THEO_API_KEY"
# Tail every evaluation since a timestamp
curl "https://www.hitheo.ai/api/v1/guardrail-executions?since=2026-01-15T18:00:00.000Z" \
-H "Authorization: Bearer $THEO_API_KEY"
const recent = await theo.guardrails.executions.list({
policyId,
limit: 20,
});
// Long-poll for new rows
const since = new Date(Date.now() - 60_000).toISOString();
const newRows = await theo.guardrails.executions.list({ since });
Visibility
- Personal callers (no active org): see only rows authored by themselves on personal policies.
- Team callers: see every member’s rows on policies owned by the active org. Visibility follows the policy, not the user who triggered the row.
Response
{
"executions": [
{
"id": "exec_abc123",
"user_id": "user_xyz",
"key_id": "key_abc",
"policy_id": "1f4f2c1a-...",
"policy_name": "Compliance-strict",
"guardrail_id": "pii_redactor",
"phase": "input",
"verdict": "redact",
"matched_pattern": "email,phone",
"redacted_count": 2,
"latency_ms": 1,
"created_at": "2026-01-15T18:24:11.123Z"
}
]
}
Was this page helpful?
List Guardrail Executions
curl --request GET \
--url https://api.example.com/api/v1/guardrail-executionsimport requests
url = "https://api.example.com/api/v1/guardrail-executions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/guardrail-executions', 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.example.com/api/v1/guardrail-executions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/api/v1/guardrail-executions"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/api/v1/guardrail-executions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/guardrail-executions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body