---
title: "List policies"
method: GET
path: "/policies"
tags: ["policies"]
---

# List policies

`GET /policies`

## Request

- Base URL: `https://api.instruxi.dev/api/v1/enforcer`
- URL: `https://api.instruxi.dev/api/v1/enforcer/policies`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `X-API-Key`

Custom Rego policies visible to the caller: every GLOBAL policy (tenant_id null — world-readable by design) plus the caller's own tenant's policies. Does not include the built-in static policy.rego engine, which every request runs regardless. Filters only narrow that visibility; total counts the rows matching every filter. Policies are whole Rego modules: there is no per-policy resource_type or effect to filter on.

## Query parameters

- `q` string
- `active` boolean
- `sort` 'name' | 'created' | 'updated'
- `sort_dir` 'asc' | 'desc'
- `limit` integer
- `offset` integer
- `tenant_id` string, uuid
- `all_tenants` boolean

## Response `200`

OK

- InternalDeliveryHttpHandlerPolicyPageResponse
  - `data` EnforcerV3InternalDomainPolicyPolicy[]
    - `active` boolean
    - `created_at` string
    - `created_by` string
    - `description` string
    - `id` string
    - `name` string
    - `source` string
    - `source_sha` string
    - `tenant_id` string: nil = global
    - `updated_at` string
  - `limit` integer
  - `offset` integer
  - `success` boolean
  - `total` integer

## Other responses

- `401`: Unauthorized
- `403`: forbidden: tenant_id/all_tenants beyond your own tenant without the cross_tenant grant
- `500`: Internal Server Error

---

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