---
title: "Lists rows in a data table with optional filtering, sorting, and pagination."
method: GET
path: "/datatables/{tableId}/rows"
tags: ["DataTables"]
---

# Lists rows in a data table with optional filtering, sorting, and pagination.

`GET /datatables/{tableId}/rows`

## Path parameters

- `tableId` string, required

## Query parameters

- `filter` string
- `sort` string
- `sortDir` string
- `pageSize` integer
- `continuationToken` string
- `fields` string

## Response `200`

OK

- RowListResponse
  - `data` DataTableRowModel[], nullable
    - `id` string, nullable
    - `sortOrder` integer
    - `data` object, nullable — Stored row data as a JSON object keyed by column `key`. Values follow each column's `ColumnType` rules: STRING/RICHTEXT/HIDDEN/SELECT/URL/DATE/TIME are JSON strings, NUMBER is a JSON number, BOOLEAN is JSON true/false, and MEDIA is always a normalized object `{ url, thumbnailUrl, name, mimeType, mediaId? }` (id and id-object input forms are expanded server-side at write time).
    - `updatedAt` string, date-time
    - `eTag` string, nullable — Optimistic concurrency token. To ensure the row hasn't changed since you read it, send this value back as the `If-Match` request header on the REST `updateDataTableRow` (HTTP `PUT`) call, or as the `eTag` input field on the GraphQL `updateDataTableRow` mutation. A stale token results in `409 Conflict` (REST) or a mutation error (GraphQL). Note: the REST endpoint does not read an `eTag` body property — it uses the `If-Match` header.
  - `totalCount` integer
  - `continuationToken` string, nullable

## Other responses

- `404` — Not Found

---

[API](https://skmtc.net/reveldigital/apis/revel-digital-rest-api.md) · [All operations](https://skmtc.net/reveldigital/apis/revel-digital-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reveldigital/revel-digital-rest-api/versions/f23a94aea621/schema)
