# /filters

6 routes.

## GET /v1/filters

List filters

**Scopes** — `filters:read`

**Query**

| parameter | type | | limit |
|---|---|---|---|
| `limit` | integer | optional | max 200 |
| `cursor` | string | optional | max 4096 chars |
| `updated_since` | string | optional | max 24 chars |

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## POST /v1/filters

Create a filter (criteria uses tag names)

**Scopes** — `filters:write`

**Request body**

| field | type | | limit |
|---|---|---|---|
| `name` | string | required | max 256 chars, min 1 |
| `criteria` | string | required | max 10000 chars, min 1 |
| `symbol` | string | optional | max 64 chars, — |
| `id` | string | optional | max 64 chars |

**Errors** — [validation_failed](/errors/validation_failed) · [duplicate_id](/errors/duplicate_id) · [conflict](/errors/conflict) · [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## GET /v1/filters/{id}

One filter

**Scopes** — `filters:read`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## GET /v1/filters/{id}/todos

Evaluate a filter with the engine

**Scopes** — `filters:read`, `todos:read`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## PATCH /v1/filters/{id}

Change a filter

**Scopes** — `filters:write`

**Request body**

| field | type | | limit |
|---|---|---|---|
| `name` | string | optional | max 256 chars, min 1 |
| `criteria` | string | optional | max 10000 chars, min 1 |
| `symbol` | string | optional | max 64 chars, — |

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## DELETE /v1/filters/{id}

Delete a filter

**Scopes** — `filters:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)
