Skip to main content

Listing, Filters and Fields

The *_list tools use the same pagination as the REST API: by cursor.

ArgumentDefaultMax
limit25100 (10000 on the *_ids tools)
cursor——
{ "name": "finance_payables_list", "arguments": { "limit": 50 } }

The result carries the usual envelope:

{
"data": [ /* ... */ ],
"meta": { "next_cursor": "eyJpZCI6Mn0" }
}

For the next page, send meta.next_cursor as cursor, with the same filters. next_cursor: null means this is the last page. See Listing and pagination in the API.

Filters​

filters is an object with exactly the filters the listing accepts — the tool's inputSchema enumerates them, with each one's operators. A filter or operator outside the list is refused before it reaches the endpoint. Pagination, sort and columns (limit, cursor, sort_by, sort_order, fields — and page, per_page and sort, from other APIs) are named arguments: inside filters they are refused with VALIDATION_ERROR, naming the keys, and never override the argument.

FormMeansBecomes
"status": "pending"equals?status=pending
"status": ["pending", "paid"]is in?status[in]=pending,paid
"due_date": { "gte": "2026-11-01", "lt": "2026-12-01" }operators?due_date[gte]=…&due_date[lt]=…
{ "name": "finance_payables_list",
"arguments": {
"filters": { "company_id": "…", "status": "pending", "due_date": { "lte": "2026-11-30" } },
"sort_by": "due_date", "sort_order": "asc"
} }

The full grammar is in Filtering and sorting.

Sorting​

ArgumentValuesDefault
sort_byOne of the columns the listing sorts by (the inputSchema lists them)varies per resource
sort_orderasc or descasc

Fields (fields)​

The record-read tools accept fields, an array of column names. Omitted, the whole record comes back; given, only those:

{ "name": "finance_payables_list",
"arguments": { "filters": { "status": "pending" }, "fields": ["description", "amount", "due_date"] } }
RuleWhy
id always comes backA projection you cannot follow up on is useless, and silently dropping id would break the next call, not this one.
Top level onlyfields: ["reconciliation"] returns the whole object; there is no reconciliation.kind syntax.
Record reads onlyWrites return the whole record; totals, *_ids and download do not offer the argument.
An unknown name is an error400 with details.unknown and details.available. Ignoring it would return fewer fields than asked, looking as if the record does not have them.

It is the same ?fields= as the API. And it is the cheapest way to reduce the context an agent spends.

finance_schemas_get — the field catalogue​

fields is only useful if you know what to ask for. finance_schemas_get answers from the published contract's schemas:

{ "name": "finance_schemas_get", "arguments": {} }
{ "name": "finance_schemas_get", "arguments": { "schema": "PayableV1" } }

With no argument it returns the catalogue; with schema, that schema's fields — name, type, enum, nullability and description. It is the same OpenAPI that generates the API reference.

Data contract​

What holds for the API holds here, because it is the same code:

  • snake_case everywhere, arguments and responses.
  • Money is a number in BRL, with up to 2 decimals: 1500.5 is R$ 1,500.50. Titles and transactions are always positive — direction comes from the type, not the sign.
  • Dates in ISO 8601.
  • Writes accept idempotency_key — see Idempotency.