Filtering

Filters are passed as an object to listRecords and paginateRecords. Multiple fields use AND logic — all conditions must match.

Syntax

1{ fieldKey: { operator: value } }

Operators

Operator Description Example
eq Equal { status: { eq: 'open' } }
neq Not equal { status: { neq: 'done' } }
in In array { status: { in: ['open', 'in_progress'] } }
contains String contains (case-insensitive) { title: { contains: 'milk' } }
gt Greater than { priority: { gt: 3 } }
gte Greater than or equal { due_date: { gte: '2026-03-01' } }
lt Less than { priority: { lt: 5 } }
lte Less than or equal { due_date: { lte: '2026-03-31' } }

Filtering on a field key that does not exist in the entity schema returns an empty result set — no error is thrown.

Examples

1// Exact match2{ status: { eq: 'open' } }34// Multiple status values5{ status: { in: ['open', 'in_progress'] } }67// Text search (case-insensitive)8{ title: { contains: 'search term' } }910// Boolean field11{ is_complete: { eq: true } }1213// Date range14{ due_date: { gte: '2026-03-01', lte: '2026-03-31' } }15// Note: a single field can have multiple operators1617// Multiple fields (AND logic)18{ status: { eq: 'open' }, due_date: { lte: '2026-03-31' } }1920// Low stock electronics21{ category: { eq: 'electronics' }, quantity: { lte: 10 } }

multi_select Fields

Use contains to filter records where a multi-select field includes a specific value:

1// Records tagged as 'vendor'2{ tags: { contains: 'vendor' } }

No Client-Side Filtering

Always use the filter DSL instead of fetching all records and filtering in JavaScript. Filtering server-side is dramatically more efficient and doesn't break pagination.

OR Logic

OR logic across fields is not currently supported — all conditions use AND. If you need OR behaviour (e.g. "status is open OR assignee is me"), make two separate requests and merge the results in your app. Note that merging two paginated result sets can produce duplicates if records change between requests — deduplicate by id before rendering.