> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.
# List guardrail runs
> List guardrail runs through the workspace-scoped public API.
Returns recent runs as an array. For workspace API callers, `originalContent` and `rewriteReason` are always `null`; this endpoint does not expose the original reply text. An empty array means no recorded runs.
See the [Guardrails overview](/en/api-reference/guardrails) for shared schemas and runtime limitations.
<ParamField header="Authorization" type="string" required>Bearer workspace API key. The key needs `read` scope.</ParamField>
<ParamField query="botId" type="string" required>Agent UUID in the authenticated workspace.</ParamField>
<ParamField query="limit" type="integer">1 to 100; defaults to 20.</ParamField>
## Response
<ResponseField name="[]" type="array">Runs with `id`, `companyId`, `botId`, `interactionId`, `userEventId`, `action`, `rounds`, `report`, `originalContent`, `rewriteReason`, and `createdAt`.</ResponseField>
<ResponseField name="action" type="string">`passed`, `rewritten`, `blocked`, or `error`. Inspect individual verdicts even when the action is `passed`.</ResponseField>
<ResponseField name="report" type="array">Per-policy `policyId`, `checkType`, `name`, and `verdicts`. Verdicts are `pass`, `fail`, or `error`, in initial-check then recheck order.</ResponseField>
<RequestExample>
~~~bash cURL theme={null}
curl --request GET \
--url "https://api-prod.usefini.com/v2/guardrail-policies/runs/public?botId=11111111-1111-4111-8111-111111111111&limit=20" \
--header "Authorization: Bearer $FINI_API_KEY"
~~~
~~~javascript Node.js theme={null}
const response = await fetch("https://api-prod.usefini.com/v2/guardrail-policies/runs/public?botId=11111111-1111-4111-8111-111111111111&limit=20", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.FINI_API_KEY}` },
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
~~~
~~~python Python theme={null}
import os
import requests
response = requests.get(
"https://api-prod.usefini.com/v2/guardrail-policies/runs/public?botId=11111111-1111-4111-8111-111111111111&limit=20",
headers={"Authorization": f"Bearer {os.environ['FINI_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
~~~
</RequestExample>
<ResponseExample>
~~~json 200 theme={null}
[
{
"id": "44444444-4444-4444-8444-444444444444",
"companyId": "33333333-3333-4333-8333-333333333333",
"botId": "11111111-1111-4111-8111-111111111111",
"interactionId": "55555555-5555-4555-8555-555555555555",
"userEventId": "66666666-6666-4666-8666-666666666666",
"action": "rewritten",
"rounds": 2,
"report": [
{
"policyId": "22222222-2222-4222-8222-222222222222",
"checkType": "banned_terms",
"name": "Banned terms",
"verdicts": [
"fail",
"pass"
]
}
],
"originalContent": null,
"rewriteReason": null,
"createdAt": "2026-10-01T08:10:00.000Z"
}
]
~~~
</ResponseExample>
## Related topics
- [Overview](/en/api-reference/guardrails.md)
- [List guardrail policies](/en/api-reference/list-guardrail-policies.md)
- [List guardrail check types](/en/api-reference/list-guardrail-check-types.md)
This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
Guardrails

