GET /api/v2/tables/{tableId}/rows returns a
table’s rows with support for filtering, sorting, cursor pagination, and CSV
export. Reads are free.
Basic request
total (the
filtered row count for the whole query, across all pages). Each row is a typed
object keyed by column slug.
Typed vs flat cells
Cells are polymorphic by default:scalar for input columns, value (with run
metadata where present) for enrichments, and sequence for outreach columns.
For the simpler v1-style { slug: value } rows, pass ?cells=flat.
Pagination
Pagination is cursor-based. Read the first page, then pass itsnextCursor back
as the cursor parameter to get the next one. Stop when nextCursor is null.
limit defaults to 50. This endpoint allows up to 200 rows per page (most
other list endpoints cap at 100). There is no page or pageSize.
Filtering
Pass a JSON-encoded array of filter objects in thefilters parameter. Each
filter uses a column slug, an operator, and a value.
contains, not_contains, equals, not_equals,
is_empty, is_not_empty, greater_than, greater_than_or_equal,
less_than, less_than_or_equal. An unknown column slug returns
UNKNOWN_COLUMN.
Sorting
Pass a JSON-encoded sort object with a column slug anddirection.
Bypassing saved defaults
By default the API applies the table’s saved filters and sort order. Setdefaults=false to read all rows unfiltered, in insertion order.
CSV export
Setformat=csv to stream the (flat) rows as a CSV file instead of JSON —
column names as headers, ready for a spreadsheet.
Reading a single row or cell
To read one row, useGET /api/v2/tables/{tableId}/rows/{rowId}. To read
a single cell — with its run metadata — use
GET /api/v2/tables/{tableId}/rows/{rowId}/cells/{columnId}.
This page covers the v2 read endpoint. The deprecated v1
GET /tables/{tableId}/rows
(offset pagination, flat rows) still works — see the
migration guide.