---
title: "List guardrails"
method: GET
path: "/v1/projects/{project_id}/guardrails"
tags: ["Guardrails"]
---

# List guardrails

`GET /v1/projects/{project_id}/guardrails`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}/guardrails`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

Returns all guardrails in the project.

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

List of guardrails

- object
  - `data` Guardrail[], required
    - `id` string: Public ID of the guardrail
    - `project_id` string: Public ID of the owning project
    - `name` string: Human-readable name
    - `description` string, nullable: Optional description
    - `version` integer: Incremented on every document write; prior versions are archived
    - `document` GuardrailDocument: The action-class document. `class` maps a call to an action class; `guard` gates class-B autonomy. Both are single JSON Logic expressions over the `args.*` / `context.*` / `runtime.*` namespaces.
      - `class` union, required: A class literal (`A` / `B` / `C` / `D`) or a JSON Logic expression returning one. An invalid result resolves to `default_class`.
        - 'A' | 'B' | 'C' | 'D'
        - object
      - `default_class` 'A' | 'B' | 'C' | 'D': Applied when the `class` expression returns anything other than a valid class. Defaults to `C` (fail-closed).
      - `guard` object: A single JSON Logic expression; when the call classifies as `B` it must evaluate truthy to execute autonomously. Compose multiple conditions with `{ "and": [...] }`.
      - `escalate` boolean: When `true`, a failing guard routes to approval instead of tripping fail-closed.
      - `expires_in` integer: Default approval window in seconds for a class-C approval this guardrail files. Omitted → the platform's 24h default. When several guardrails apply, the governing (strictest-matching) one's value is used.
    - `context_tool_id` string, nullable: Optional tool the platform calls at evaluation time to fetch fresh guardrail context.
    - `context_mode` 'merge' | 'replace' | 'null', nullable: How tool-fetched context combines with the caller-supplied context.
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
