Records
Querying records
Combine bounded filters, sorting, projection and deterministic cursor pagination through ordinary URL parameters.
Filtered list
GET /api/v1/collections/issues/records
?filter=status%20%3D%20%22open%22%20%26%26%20priority%20%3E%3D%203
&sort=-priority,id
&fields=title,status,priority
&limit=25JavaScript
const params = new URLSearchParams({
filter: 'status = "open" && priority >= 3',
sort: '-priority,id',
fields: 'title,status,priority',
limit: '25'
});
const page = await trestle.get(`/api/v1/collections/issues/records?${params}`);Next page
When nextCursor is present, pass it unchanged as cursor. Do not decode it or combine it with a different filter/sort contract. List pages are capped at 100 records; use repeated cursor requests rather than asking for an unbounded response.
Provider storage
Filter expressions compile to parameterized predicates whose boolean, numeric and text values are bound with each provider's native types. The same filter string produces the same ordering and membership on SQLite and PostgreSQL; user input never reaches SQL as text.