Listing, Sorting and Filters
The *_list tools use the same pagination as the v1 API: by cursor (see
Pagination, sorting and filters).
| Argument | Default | Rule |
|---|---|---|
limit | 25 | 1 to 100 |
cursor | — | the meta.next_cursor of the previous page |
{ "name": "kadu_executions_list", "arguments": { "status": "failed", "limit": 50 } }
The result carries the usual envelope:
{
"data": [ /* ... */ ],
"meta": { "next_cursor": "eyJpZCI6IjJmMWMi…", "limit": 50 }
}
Repeat the call with cursor set to next_cursor until it comes back null.
The cursor is opaque: do not build or interpret it. An invalid cursor returns
VALIDATION_ERROR.
:::note Lists without a cursor
Some listings return a fixed set, and the matching tool offers neither
cursor nor limit: webhook deliveries (kadu_webhook_deliveries_list, the
50 most recent), the organization's members (kadu_users_list, up to 100),
system events (kadu_system_events_list, the 100 most recent) and the
execution search (kadu_executions_search). An execution's events, logs and
pending items come whole and in order; to read only the new ones, pass
after_sequence (kadu_executions_events_list) or after_id
(kadu_executions_logs_list). This is intentional: a tool that announced
cursor on a route that ignores it would make the model page forever through a
list that does not move.
:::
Sorting​
| Argument | Values | Default |
|---|---|---|
sort_by | created_at, updated_at or a filterable field of the resource | created_at |
sort_order | asc or desc | desc |
{ "name": "kadu_executions_list", "arguments": { "sort_by": "created_at", "sort_order": "asc" } }
A sort_by the resource does not sort by returns VALIDATION_ERROR, as in the
API. A sort_order that is neither asc nor desc is refused before reaching
the route, with VALIDATION_ERROR and the message Invalid tool arguments..
kadu_operation_approvals_list does not sort: approvals always come newest
first.
Filters​
Each listing tool declares the resource's filters as named arguments — its
inputSchema says which. They become the API filters:
| Argument shape | Example | Becomes |
|---|---|---|
| One value | status: "failed" | status=failed |
| A list (up to 100) | status: ["failed", "cancelled"] | status[in]=failed,cancelled |
<field>_gte / <field>_lte | reference_date_gte: "2026-10-01" | reference_date[gte]=2026-10-01 |
{ "name": "kadu_executions_list",
"arguments": { "status": ["failed", "cancelled"], "reference_date_gte": "2026-10-01", "limit": 50 } }
An argument the tool does not declare is dropped before the call — the page size, for example, cannot get past 100 inside a filter.
Data contract​
What holds for the v1 API holds here, because it is the same code (see Conventions):
snake_caseeverywhere, arguments and responses.- Dates in ISO 8601 in UTC; reference dates as
YYYY-MM-DD. - Cost in dollars in the
_usdfields; price in reais in the_brlfields. - Secret values are never returned, by any tool.
- Writes accept
idempotency_key— see Idempotency.