Records
Search Records Search for records in the specified table based on filter, sort, and pagination criteria.
POST /databases/{databaseId}/tables/{tableId}/records/search
Filtering Guide
The Search Records endpoint lets you filter, sort, and paginate records using a JSON request body. All three top-level fields (filter, sorting, paging) are optional.
{
"paging" : {
"offset" : 0 ,
"limit" : 50
},
"sorting" : [
{ "sortingField" : "field-uuid" , "sortType" : "ASC" }
],
"filter" : {
"condition" : { ... }
}
}
Filter Condition Types
Filters are passed in filter.condition. There are four types, determined by the operator.
Binary Conditions
Compare a field to a value:
{
"operator" : "CONTAINS" ,
"leftSide" : "field-uuid" ,
"rightSide" : "search term"
}
Operator Description Right Side ISEquals single value IS_NOTNot equals single value GREATER_THANGreater than number or date GREATER_THAN_OR_EQUALSGreater than or equal number or date LESS_THANLess than number or date LESS_THAN_OR_EQUALSLess than or equal number or date CONTAINSString contains string DOES_NOT_CONTAINString does not contain string STARTS_WITHString starts with string DOES_NOT_START_WITHString does not start with string ENDS_WITHString ends with string DOES_NOT_END_WITHString does not end with string IS_ONE_OFValue is one of array IS_NOT_ONE_OFValue is none of array HAS_ANY_OFMulti-value field has any of array HAS_ALL_OFMulti-value field has all of array HAS_NONE_OFMulti-value field has none of array
Unary Conditions
Check whether a field is empty — no rightSide needed:
{
"operator" : "IS_EMPTY" ,
"leftSide" : "field-uuid"
}
Operator Description IS_EMPTYField has no value IS_NOT_EMPTYField has a value
Ternary Conditions
Range-based checks with lowerBound and upperBound:
{
"operator" : "IS_BETWEEN" ,
"leftSide" : "field-uuid" ,
"lowerBound" : 10 ,
"upperBound" : 100
}
Operator Description IS_BETWEENValue is between bounds (inclusive) IS_NOT_BETWEENValue is outside bounds IS_WITHINDate is within a relative range IS_NOT_WITHINDate is outside a relative range
Composite Conditions
Combine multiple conditions with AND or OR:
{
"operator" : "AND" ,
"conditions" : [
{ "operator" : "CONTAINS" , "leftSide" : "name-field" , "rightSide" : "acme" },
{ "operator" : "GREATER_THAN" , "leftSide" : "amount-field" , "rightSide" : 1000 },
{
"operator" : "OR" ,
"conditions" : [
{ "operator" : "IS" , "leftSide" : "status-field" , "rightSide" : "active" },
{ "operator" : "IS_EMPTY" , "leftSide" : "archived-field" }
]
}
]
}
Relative Date Values
For date fields, you can use relative date strings instead of fixed ISO 8601 dates:
Format Examples PREDEFINED:<token>PREDEFINED:TODAY, PREDEFINED:YESTERDAY, PREDEFINED:TOMORROW, PREDEFINED:THIS_WEEK, PREDEFINED:LAST_WEEK, PREDEFINED:THIS_MONTH, PREDEFINED:THIS_YEAR, PREDEFINED:NEXT_MONTH, PREDEFINED:PAST_MONTH, PREDEFINED:7_DAYS_AGO, PREDEFINED:30_DAYS_FROM_NOWRELATIVE_DATE:<period>:<unit>RELATIVE_DATE:THIS:WEEK, RELATIVE_DATE:PAST:MONTH, RELATIVE_DATE:NEXT:QUARTER, RELATIVE_DATE:PAST:7 (7 days ago)ISO 8601 "2025-05-21", "2025-05-21T20:00:00.000Z"
Complete Example
Find active contacts named “acme” with an amount over 1000, created this month:
{
"paging" : { "offset" : 0 , "limit" : 50 },
"sorting" : [
{ "sortingField" : "amount-field-uuid" , "sortType" : "DESC" }
],
"filter" : {
"condition" : {
"operator" : "AND" ,
"conditions" : [
{ "operator" : "CONTAINS" , "leftSide" : "name-field-uuid" , "rightSide" : "acme" },
{ "operator" : "GREATER_THAN" , "leftSide" : "amount-field-uuid" , "rightSide" : 1000 },
{ "operator" : "IS" , "leftSide" : "status-field-uuid" , "rightSide" : "active" },
{ "operator" : "IS_WITHIN" , "leftSide" : "created-at-field-uuid" , "lowerBound" : "RELATIVE_DATE:THIS:MONTH" , "upperBound" : "PREDEFINED:TODAY" }
]
}
}
} Authorizations Softr-Api-KeyAPI key · header required
Query Parameters fieldNamesboolean default: false
If true, use field names as keys in the fields object instead of field IDs.
filterobject
Show child attributes filter. conditionobject
A condition for filtering records. Text-related conditions are case-insensitive.
Show child attributes filter.condition. operatorenum<string>
Available options: AND, OR, IS_EMPTY, IS_NOT_EMPTY, IS_BETWEEN, IS_NOT_BETWEEN, IS_WITHIN, IS_NOT_WITHIN, IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, CONTAINS, DOES_NOT_CONTAIN, STARTS_WITH, DOES_NOT_START_WITH, ENDS_WITH, DOES_NOT_END_WITH, IS_ONE_OF, IS_NOT_ONE_OF, HAS_ANY_OF, HAS_ALL_OF, HAS_NONE_OF
filter.condition. leftSidestring
The Field ID to apply the operator on.
filter.condition. rightSidestring | number | boolean | string[]
The value to compare against. Can be a string, number, or an array for operators like IS_ONE_OF.
filter.condition. lowerBoundstring
Lower bound for IS_BETWEEN operator.
filter.condition. upperBoundstring
Upper bound for IS_BETWEEN operator.
filter.condition. conditionsobject[]
Used for AND/OR operators to nest conditions.
Show child attributes filter.condition.conditions. operatorenum<string>
Available options: AND, OR, IS_EMPTY, IS_NOT_EMPTY, IS_BETWEEN, IS_NOT_BETWEEN, IS_WITHIN, IS_NOT_WITHIN, IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, CONTAINS, DOES_NOT_CONTAIN, STARTS_WITH, DOES_NOT_START_WITH, ENDS_WITH, DOES_NOT_END_WITH, IS_ONE_OF, IS_NOT_ONE_OF, HAS_ANY_OF, HAS_ALL_OF, HAS_NONE_OF
filter.condition.conditions. leftSidestring
The Field ID to apply the operator on.
filter.condition.conditions. rightSidestring | number | boolean | string[]
The value to compare against. Can be a string, number, or an array for operators like IS_ONE_OF.
filter.condition.conditions. lowerBoundstring
Lower bound for IS_BETWEEN operator.
filter.condition.conditions. upperBoundstring
Upper bound for IS_BETWEEN operator.
filter.condition.conditions. conditionsobject[]
Used for AND/OR operators to nest conditions.
Show child attributes filter.condition.conditions.conditions. operatorenum<string>
Available options: AND, OR, IS_EMPTY, IS_NOT_EMPTY, IS_BETWEEN, IS_NOT_BETWEEN, IS_WITHIN, IS_NOT_WITHIN, IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, CONTAINS, DOES_NOT_CONTAIN, STARTS_WITH, DOES_NOT_START_WITH, ENDS_WITH, DOES_NOT_END_WITH, IS_ONE_OF, IS_NOT_ONE_OF, HAS_ANY_OF, HAS_ALL_OF, HAS_NONE_OF
filter.condition.conditions.conditions. leftSidestring
The Field ID to apply the operator on.
filter.condition.conditions.conditions. rightSidestring | number | boolean | string[]
The value to compare against. Can be a string, number, or an array for operators like IS_ONE_OF.
filter.condition.conditions.conditions. lowerBoundstring
Lower bound for IS_BETWEEN operator.
filter.condition.conditions.conditions. upperBoundstring
Upper bound for IS_BETWEEN operator.
filter.condition.conditions.conditions. conditionsobject[]
Used for AND/OR operators to nest conditions.
Show child attributes filter.condition.conditions.conditions.conditions. operatorenum<string>
Available options: AND, OR, IS_EMPTY, IS_NOT_EMPTY, IS_BETWEEN, IS_NOT_BETWEEN, IS_WITHIN, IS_NOT_WITHIN, IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, CONTAINS, DOES_NOT_CONTAIN, STARTS_WITH, DOES_NOT_START_WITH, ENDS_WITH, DOES_NOT_END_WITH, IS_ONE_OF, IS_NOT_ONE_OF, HAS_ANY_OF, HAS_ALL_OF, HAS_NONE_OF
filter.condition.conditions.conditions.conditions. leftSidestring
The Field ID to apply the operator on.
filter.condition.conditions.conditions.conditions. rightSidestring | number | boolean | string[]
The value to compare against. Can be a string, number, or an array for operators like IS_ONE_OF.
filter.condition.conditions.conditions.conditions. lowerBoundstring
Lower bound for IS_BETWEEN operator.
filter.condition.conditions.conditions.conditions. upperBoundstring
Upper bound for IS_BETWEEN operator.
filter.condition.conditions.conditions.conditions. conditionsobject[]
Used for AND/OR operators to nest conditions.
Show child attributes filter.condition.conditions.conditions.conditions.conditions. operatorenum<string>
Available options: AND, OR, IS_EMPTY, IS_NOT_EMPTY, IS_BETWEEN, IS_NOT_BETWEEN, IS_WITHIN, IS_NOT_WITHIN, IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, CONTAINS, DOES_NOT_CONTAIN, STARTS_WITH, DOES_NOT_START_WITH, ENDS_WITH, DOES_NOT_END_WITH, IS_ONE_OF, IS_NOT_ONE_OF, HAS_ANY_OF, HAS_ALL_OF, HAS_NONE_OF
filter.condition.conditions.conditions.conditions.conditions. leftSidestring
The Field ID to apply the operator on.
filter.condition.conditions.conditions.conditions.conditions. rightSidestring | number | boolean | string[]
The value to compare against. Can be a string, number, or an array for operators like IS_ONE_OF.
filter.condition.conditions.conditions.conditions.conditions. lowerBoundstring
Lower bound for IS_BETWEEN operator.
filter.condition.conditions.conditions.conditions.conditions. upperBoundstring
Upper bound for IS_BETWEEN operator.
filter.condition.conditions.conditions.conditions.conditions. conditionsobject[]
Used for AND/OR operators to nest conditions.
sortingobject[]
Show child attributes sorting. sortingFieldstring
The Field ID to apply the sorting on
sorting. sortTypeenum<string>
Available options: ASC, DESC
pagingobject
Show child attributes paging. offsetinteger default: 0
paging. limitinteger default: 10
A paginated list of matching records.
dataobject[]
Show child attributes data. fieldsRecord<string, unknown>
A map of Field IDs to their values for this record.
data. createdAtstring<date-time>
data. updatedAtstring<date-time>
metadataobject
Show child attributes