---
title: "List the net-effect of a Sheet's unflushed WAL."
method: GET
path: "/v1/sheets/{id}/rows/pending"
tags: ["sheets"]
---

# List the net-effect of a Sheet's unflushed WAL.

`GET /v1/sheets/{id}/rows/pending`

## Request

- Base URL: `http://localhost:8080`
- URL: `http://localhost:8080/v1/sheets/{id}/rows/pending`
- Auth: one of:
  - API key in cookie `dvt_session`
  - HTTP bearer

Returns the collapsed (last-writer-wins) view of the sheet's unflushed WAL: one
entry per distinct `rowUid`, reflecting the most recent upsert or tombstone.
Payload values are not returned — the engine is the sole decryptor (ADR-0012).
Responses are now bounded: use `limit` (default 1000, max 1000) and `after`
(a `rowUid` UUID for keyset continuation) to page through large pending sets.
`count` reflects the number of rows in this page, not the total pending set.
Requires `sheet:read`.

## Query parameters

- `limit` integer
- `after` string, uuid

## Response `200`

The pending row net-effect (metadata only; no payload values).

- object
  - `data` SheetPendingRows, required: Net-effect view of a sheet's unflushed WAL (GET /v1/sheets/{id}/rows/pending). One entry per distinct rowUid, last-writer-wins by highest seq. Payload values are not returned — the engine is the sole decryptor (ADR-0012).
    - `rows` object[], required
      - `rowUid` string, uuid, required
      - `op` 'upsert' | 'tombstone', required
      - `seq` integer, required: The winning WAL seq for this row.
    - `count` integer, required: Number of distinct pending rows in this page (use limit/after for subsequent pages).
    - `hasMore` boolean, required: True when more pending rows exist beyond this page.
  - `meta` Meta, required: Response metadata.
    - `requestId` string, required: Correlates with the X-Request-Id header.
    - `total` integer: Item count, present on collection responses.
    - `nextCursor` string, nullable: Opaque keyset-pagination cursor, present on paginated responses (e.g. GET /v1/dashboards) when more rows exist beyond this page. Pass it back as the `cursor` query param to fetch the next page; absent or null on the last page.
    - `roleResolveDegraded` boolean: Snowflake mode only (DVT-2260), on GET /v1/dashboards: present and true when the caller's live Snowflake role resolution failed or was unavailable — role-shared dashboards may be missing from this page. Omitted (not merely false) whenever resolution succeeded or the role-share arm does not apply (off snowflake mode, an org admin/owner, or off the ingress listener).

## Other responses

- `400`: Malformed request.
- `401`: Missing, invalid, or expired session.
- `403`: The caller's role does not permit this action.
- `404`: Resource does not exist.
- `503`: Sheet row writeback is not configured on this deployment.

---

[API](https://skmtc.dev/dvt/apis/dvt-rest-api.md) · [All operations](https://skmtc.dev/dvt/apis/dvt-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dvt/apis/dvt-rest-api/revisions/00016f504165?raw)
