next_cursor back as cursor. When has_more is false, next_cursor is null and you have everything.
/accounts is the one list that does not page. It returns every account in one response and accepts neither limit nor cursor, but keeps the envelope above with has_more set to false, so code written for the paged endpoints works on it unchanged.Parameters
Keep the filters identical between pages. A cursor is only valid for the query that produced it, and reusing it with different filters returns
400 invalid_cursor.
Ordering
Each resource has one fixed order. There is nosort parameter.
Categories are the exception. They come back as the product’s own category screen reads: inflows before outflows, each root immediately followed by its children, siblings in
position order. Keep the rows in the order you received them and the tree renders correctly without sorting.
Why cursors
Bank syncs insert transactions while you page. Offset pagination would skip or repeat rows in that case. The cursor is anchored to the last row you received, so a page never overlaps the previous one.Counts
There is nototal_count in the envelope. To count rows, page to the end. For aggregates, use the reporting features of ThinkOut itself.