> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs-beta.getzep.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-beta.getzep.com/_mcp/server.

# List graph content policy events

POST https://api.getzep.com/api/v4/graphs/{graph_uuid}/content-policy/events/list
Content-Type: application/json

Lists the content policy decisions recorded for a graph, newest first. Each event carries identifiers only. A graph without a content policy returns an empty list.

Reference: https://docs-beta.getzep.com/sdk-reference/graph/list-content-policy-events

## Authentication

- `Authorization` header (required) (prefixed with ` Api-Key  `) — Type "Api-Key" followed by a space and the project API key.

## Request

### Path parameters

- `graph_uuid` (string, required) — Graph UUID

### Query parameters

- `limit` (integer, optional) — Page size
- `cursor` (string, optional) — Opaque page cursor

### Body (application/json)

This endpoint expects a v4.ContentPolicyEventListRequest.

- `filters` (map from string to any, optional) — Exact-match filters. Supported keys: episode_uuid and drop_reason.

## Response

### 200

OK

- `items` (list of v4.ContentPolicyEvent, optional) — The events on this page, newest first.
- `next_cursor` (string, optional) — The cursor to pass as the next request's cursor to fetch the following page; absent when no further pages remain.
- `total_size` (integer, optional) — The total number of events that match the filters.

## Errors

### 400 Bad Request Error

Bad Request

- `error` (v4.ErrorBody, optional)

### 401 Unauthorized Error

Unauthorized

- `error` (v4.ErrorBody, optional)

### 403 Forbidden Error

Forbidden

- `error` (v4.ErrorBody, optional)

### 404 Not Found Error

Not Found

- `error` (v4.ErrorBody, optional)

## Types

### v4.ContentPolicyEvent

- `artifact_kind` (enum, optional) — The kind of artifact the decision applied to. episode marks the episode-level record that carries every matched category.
  - Allowed values: `entity`, `entity_attribute`, `entity_summary`, `edge`, `thread_summary`, `document_summary`, `observation`, `episode`
- `category_keys` (list of string, optional) — The keys of the categories with a matched rule.
- `decided_at` (string, optional) — The time of the decision.
- `drop_reason` (enum, optional) — Why the artifact was dropped: match, indeterminate, oversize, or dependent.
  - Allowed values: `match`, `indeterminate`, `oversize`, `dependent`
- `episode_uuid` (string, optional) — The episode the decision belongs to.
- `id` (string, optional) — The opaque identifier of the event.
- `revision` (integer, optional) — The project revision number of the policy the graph bound.
- `rule_ids` (list of string, optional) — The identifiers of the rules that matched.

### v4.ErrorBody

- `code` (string, optional)
- `details` (map from string to any, optional)
- `message` (string, optional)
- `param` (string, optional)
- `request_id` (string, optional)

## Examples

**Request**

```json
{}
```

**Response**

```json
{
  "items": [
    {
      "artifact_kind": "edge",
      "category_keys": [
        "health"
      ],
      "decided_at": "2026-09-22T10:05:00Z",
      "drop_reason": "match",
      "episode_uuid": "7a1f3c2e-4b5d-4e6f-8a9b-0c1d2e3f4a5b",
      "id": "cpe_3f9a1c2b4d5e6f708192a3b4",
      "revision": 3,
      "rule_ids": [
        "rule_01J8ZJ1P2Q3R4S5T6U7V8W9X0Z"
      ]
    }
  ],
  "next_cursor": "string",
  "total_size": 12
}
```