---
title: "Get Job Routes By Filter"
method: POST
path: "/routes/filter"
---

# Get Job Routes By Filter

`POST /routes/filter`

## Request

- Base URL: `https://dc-region.zuperpro.com/api`
- URL: `https://dc-region.zuperpro.com/api/routes/filter`
- Auth: API key in header `x-api-key`

Rule-engine-based list endpoint — an alternative to the simple `filter.*` query params on the plain list endpoint, for building complex AND/OR filter conditions. Unlike other modules, `keyword` here is a condition embedded directly inside `filter_rules` (`{"key": "keyword", ...}`), not a separate top-level body field. Invalid `sort_by` returns 400.

## Request body

- object
  - `page` integer
  - `limit` integer
  - `sort` 'ASC' | 'DESC'
  - `filter_rules` object[]: Rule-engine filter conditions, ANDed/ORed per filter_rule_operator. Get the exact field key enum from this module's Meta Filter endpoint.
    - `key` 'keyword' | 'is_optimized' | 'departure' | 'total_jobs'
    - `operator` 'EQUAL_TO' | 'NOT_EQUAL_TO' | 'CONTAINS' | 'NOT_CONTAINS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'IS_EMPTY' | 'IS_NOT_EMPTY'
    - `value` unknown
    - `type` 'default_field' | 'nested_field' | 'custom_field'
  - `filter_rule_operator` 'AND' | 'OR'
  - `sort_by` 'route_name' | 'departure' | 'total_jobs'

## Response `200`

200

- object
  - `type` 'success'
  - `data` object[]: Job route documents — same shape as GET /routes.
  - `total_records` integer

## Other responses

- `400`: 400

## Changes

- **2026-11-03** `3c21bc232e16`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zuper/apis/zuper-pro-api/changes/routes/filter/post.md)

---

[API](https://skmtc.dev/zuper/apis/zuper-pro-api.md) - [All operations](https://skmtc.dev/zuper/apis/zuper-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zuper/apis/zuper-pro-api/revisions/3c21bc232e16?raw)
