Subchapter 2.6
references/filtering.mdMarkdown3 KBView on GitHub
| Operator | SQL | Example |
|---|---|---|
eq | = | filter[year]=2024 or filter[year][eq]=2024 |
ne | != | filter[status][ne]=pending |
gt | > | filter[year][gt]=2020 |
gte | >= | filter[year][gte]=2020 |
lt | < | filter[score][lt]=500 |
lte | <= | filter[score][lte]=300 |
in | IN | filter[state][in]=CA,TX,NY |
like | LIKE | filter[name][like]=*Illinois* (use * as wildcard) |
The eq operator is the default when no operator is specified.
Simple equality:
curl 'https://api.tryopendata.ai/v1/datasets/nces/naep?filter%5Bjurisdiction_name%5D=Illinois'Numeric range:
curl 'https://api.tryopendata.ai/v1/datasets/nces/naep?filter%5Byear%5D%5Bgte%5D=2015&filter%5Byear%5D%5Blte%5D=2024'Multiple values (IN):
curl 'https://api.tryopendata.ai/v1/datasets/census/saipe?filter%5Bstate_postal%5D%5Bin%5D=CA,TX,NY'Pattern matching (LIKE):
curl 'https://api.tryopendata.ai/v1/datasets/nces/naep?filter%5Bjurisdiction_name%5D%5Blike%5D=*New*'Combining multiple filters (AND logic):
curl 'https://api.tryopendata.ai/v1/datasets/nces/naep?filter%5Bjurisdiction_name%5D=Illinois&filter%5Byear%5D%5Bgte%5D=2015&filter%5Bsubject%5D=Mathematics'Filter values are automatically coerced based on column type:
"2024" becomes 2024"3.14" becomes 3.14"true", "1", "yes" become TrueFilter column names are validated against the dataset schema. If you reference a column that doesn’t exist, you get a FilterError with the list of valid columns.
URL-encode brackets. [ is %5B, ] is %5D. Most HTTP clients and libraries handle this automatically, but raw curl needs encoding or quoting.
Case-sensitive column names. Column names are lowercase with underscores (e.g., jurisdiction_name, not Jurisdiction Name). Use the /columns endpoint to check exact names.
Bare params are not filters. ?year=2024 does nothing. You need ?filter[year]=2024. The API returns an unknown_param warning if you make this mistake.
LIKE wildcard is *, not %. The API converts * to SQL % internally. Use * in filter values.