Query records
method_query_recordsQuery any table (Customer, Contacts, Activity, Invoice, Estimate, Item, Users, custom tables ...). Always pass select. filter uses OData-style syntax: strings in single quotes, dates as '2026-05-26T00:00:00Z' with Z or an offset, operators eq ne lt gt le ge and or not, functions contains(Name,'x') startswith() endswith(); e.g. "BalanceRemaining gt 0 and DueDate lt '2026-10-01T00:00:00Z'". apply runs server-side aggregation instead of listing rows, e.g. "aggregate(BalanceRemaining with sum as Outstanding)" or "groupby((Customer), aggregate(Amount with sum as Total))". Default order is RecordID ascending (stable paging); page with next_skip. GET /api/v1/tables/{table}.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Rows per page, 1-100 (default 25). | |
| skip | No | Rows to skip (default 0). Pass the previous reply's next_skip. | |
| apply | No | Aggregation, e.g. "aggregate($count as Total)"; ignores paging. | |
| table | Yes | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. | |
| filter | No | Filter expression, e.g. "IsLeadStatusOnly eq true and contains(Name,'Smith')". | |
| select | No | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. | |
| orderby | No | Sort, e.g. "RecordID desc" or "TotalBalance desc,RecordID". |