Filter Syntax

Filters are used in hypertab_query_rows, hypertab_update_rows, hypertab_delete_rows, and hypertab_count_rows. The format is { column: { operator: value } }.

Operators

OperatorDescriptionExample
eqEquals (exact match){ "status": { "eq": "active" } }
neqNot equals{ "status": { "neq": "deleted" } }
gtGreater than{ "size": { "gt": 100 } }
gteGreater than or equal{ "size": { "gte": 100 } }
ltLess than{ "size": { "lt": 50 } }
lteLess than or equal{ "size": { "lte": 50 } }
containsString contains (case-insensitive){ "name": { "contains": "corp" } }
not_containsString does not contain{ "name": { "not_contains": "test" } }
starts_withString starts with{ "email": { "starts_with": "john" } }
ends_withString ends with{ "email": { "ends_with": "@acme.com" } }
inValue is one of the given array values{ "status": { "in": ["active", "pending"] } }
not_inValue is not any of the given array values{ "status": { "not_in": ["deleted", "archived"] } }
betweenValue is between two numbers (inclusive){ "size": { "between": [100, 500] } }
is_nullValue is null / missing{ "email": { "is_null": true } }
is_not_nullValue exists and is not null{ "email": { "is_not_null": true } }

Combining Filters

Multiple column filters in the same where object are AND-combined automatically. A record must match ALL conditions.

Multiple filters (AND)
{
  "where": {
    "status": { "eq": "active" },
    "size": { "gte": 100 },
    "industry": { "in": ["SaaS", "Fintech"] },
    "email": { "is_not_null": true }
  }
}
i
OR Logic
Filters in the object form are always AND-combined. For same-column alternatives, use the in operator (e.g. { "status": { "in": ["active", "pending"] } }). For richer OR logic, pass where as an array of condition objects, each with a column, op, value, and an optional logic field.

Type-Specific Usage

Text / Email / URL / Phone

Use eq, neq, contains, starts_with, is_null.

{ "email": { "contains": "@acme.com" } }
Number / Currency

Use eq, gt, gte, lt, lte, between.

{ "revenue": { "between": [100000, 500000] } }
Select / Multi-select

Use eq, neq, in, contains (for multi-select to match any tag).

{ "tags": { "contains": "enterprise" } }
Boolean

Use eq with true or false.

{ "is_verified": { "eq": true } }
Datetime

Use gt, lt, between with ISO 8601 strings.

{ "_ht_created_at": { "gt": "2026-01-01T00:00:00Z" } }

Sorting

Sort by one or more columns. Each column can be "asc" or "desc". Default sort is _ht_created_at DESC.

Sort by multiple columns
{
  "order_by": {
    "score": "desc",
    "name": "asc"
  }
}

Pagination

Use limit with either offset or an after_id cursor for pagination. Pass include_total: true to also get the total count of matching records.

Paginated query
{
  "tool": "hypertab_query_rows",
  "arguments": {
    "table": "leads",
    "where": { "status": { "eq": "active" } },
    "order_by": { "score": "desc" },
    "limit": 25,
    "offset": 50
  }
}
*
The default page size is 25 records and the hard cap is 1000 records per page. For large result sets, page through with offset or an after_id cursor.