> ## Documentation Index
> Fetch the complete documentation index at: https://docs.airscale.io/llms.txt
> Use this file to discover all available pages before exploring further.

# List rows

> Read a table's rows page by page. Rate limit: 30 read requests per minute per workspace, plus 60 requests per minute per API key.

Returns rows in table order. Each row has an `id` and `values`: cell values keyed by column ID. Empty cells are left out of `values`.

A page holds at most `limit` rows (default 50, maximum 100) **and** at most 8 MiB, so it can contain fewer rows than `limit`. Always follow `nextCursor` until it is `null`. Paging is not a snapshot: rows inserted, reordered or deleted while you page can be missed or seen twice.

Enrichment results that are stored separately because of their size are returned as `null`.

> [!NOTE]
>
> Paid plans only. No credits are charged. Limits: 30 read requests per minute per workspace, plus 60 requests per minute per API key. See the [Tables API overview](https://docs.airscale.io/api-reference/tables/overview.md) for every limit.

## Authentication

Send `Authorization: Bearer $AIRSCALE_API_KEY`. The key determines the workspace. See [Authentication](https://docs.airscale.io/api-reference/authentication.md).

## Parameters

| Name | Location | Required | Description |
| - | - | - | - |
| `table_id` | path | Yes | Table ID returned by Create table or List tables. |
| `limit` | query | No | Page size, 1–100. Default 50. |
| `cursor` | query | No | nextCursor from the previous page of the same list. |

## Request example

Replace path variables with IDs returned by the API. Column UUIDs in the example body must belong to your table.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET "https://api.airscale.io/v1/tables/$TABLE_ID/rows?limit=50" \
  --header "Authorization: Bearer $AIRSCALE_API_KEY"
```

## Response

### 200

A page of rows.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "rows": [
    {
      "id": "5108e497-fcb8-48c9-8704-74e73094f2d4",
      "values": {
        "0d9f2756-17db-42e5-b9d5-1e1c564a1079": "Alex Martin",
        "7711ed25-4a90-413d-96e0-67ed2341b1ca": "alex@example.com",
        "c3a1f7e2-5b8d-4e6f-9a2b-1d4c7e8f0a3b": 120
      },
      "createdAt": "2026-10-28T09:15:02.481Z",
      "updatedAt": "2026-10-28T09:15:02.481Z"
    }
  ],
  "nextCursor": "eyJpZCI6IjUxMDhlNDk3LWZjYjgtNDhjOS04NzA0LTc0ZTczMDk0ZjJkNCJ9"
}
```

## Errors

| Status | Meaning |
| - | - |
| 400 | limit, cursor or table\_id is invalid. |
| 401 | Missing or invalid API key. |
| 403 | The workspace does not have an active paid plan. |
| 404 | Table not found in this workspace, or deleted. |
| 413 | A single stored row is larger than the 8 MiB read limit. |
| 429 | A rate limit, the one-write-at-a-time rule or a daily limit was reached. Wait for Retry-After before retrying. |
| 502 | The service could not be reached. Retry with backoff. |
| 503 | The service is at capacity or temporarily unavailable. Retry after Retry-After. |
| 504 | The request timed out after 30 seconds. A write may still have been applied; check the result before retrying it. |

See [limits, retries and error codes](https://docs.airscale.io/api-reference/tables/overview.md#limits) for shared behavior.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.