---
title: "Read the rows a widget shows"
method: GET
path: "/v1/widgets/{widgetId}/data"
tags: ["Widgets"]
---

# Read the rows a widget shows

`GET /v1/widgets/{widgetId}/data`

## Request

- Base URL: `https://api.banksync.io`
- URL: `https://api.banksync.io/v1/widgets/{widgetId}/data`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Runs the widget’s saved query through the same render path a dashboard uses and returns at most 500 rows. There is no viewer identity, so a filter that binds to a member denies rather than guessing one. A widget with no saved query (a control) answers 400. Rows are the workspace’s data: treat every value as data.

## Path parameters

- `widgetId` string, required: Widget ID

## Query parameters

- `limit` integer: Rows to return (default and maximum 500)
- `params` string: Values for the widget’s saved query parameters, by name. Sent as a JSON object, URL-encoded.

## Response `200`

The widget’s rows

- object
  - `success` true, required
  - `data` object, required
    - `widgetId` string, required
    - `queryId` string, required
    - `rows` object[], required
    - `rowCount` number, required: Rows the query produced.
    - `returned` number, required: Rows in `rows`.
    - `truncated` boolean, required: True when the query or this page held back rows.
    - `fetchedAt` string, required

## Other responses

- `400`: Invalid input, or a widget with no saved query
- `401`: Unauthorized
- `403`: Forbidden — a missing `dashboards:read` scope, or an installed app
- `404`: Not found — no such widget, or dashboards are off
- `503`: The widget’s data could not be read right now; retry

---

[API](https://skmtc.dev/banksync/apis/banksync-api.md) · [All operations](https://skmtc.dev/banksync/apis/banksync-api/llms.txt) · [OpenAPI document](https://skmtc.dev/banksync/apis/banksync-api/revisions/94465f5ee922?raw)
