Spreadsheets

List the sheets in a spreadsheet

Returns every sheet (tab) with its populated extent and merges, plus the workbook's named ranges, charts and validation. Read it first: it is where the sheet names and ids an A1 range needs come from.

GET /v1/spreadsheets/:id

Permission

The key must be granted sheets.values.read

A key without it gets 403 insufficient_scope, with the missing permission named in details.

This is how you list the sheets in a workbook: there is no separate call for tabs. Read it first to learn the sheet names and ids an A1 range needs, and the populated extent so you know where the data ends.

Path parameters

Field Type Description
id required string The spreadsheet to describe.

Request

curl https://api.veruapis.com/v1/spreadsheets/:id \
  -H "Authorization: Bearer vak_live_..."

Response

Field Type Description
document_id string
sheets object[] Every sheet (tab) in the workbook, in tab order. Its fields are below.

Each item in sheets

Field Type Description
id string Accepted anywhere a sheet name is, and stable when the tab is renamed.
name string The tab's name as it appears in the app. Use it as the prefix in an A1 range: 'Q1 2026'!A1:D20.
index integer Position among the tabs, from 0.
max_row integer The last populated row, zero-based. An empty sheet reports 0.
max_column integer The last populated column, zero-based.
range A1 range The populated extent, which is what an unbounded range like A:A is clamped to.
merges object[] Merged rectangles, zero-based and inclusive at both corners. Its fields are below.

Each item in merges

Field Type Description
id string
c0 integer First column.
r0 integer First row.
c1 integer Last column, inclusive.
r1 integer Last row, inclusive.
{
  "data": {
  "document_id": "0199a1c2-6f3e-7a41-b8d2-5e9f0c3a7b41",
  "sheets": [
    {
      "id": "s0199a1c2-6f3e-7a41-b8d2-5e9f0c3a7b42",
      "name": "Sheet1",
      "index": 0,
      "max_row": 19,
      "max_column": 3,
      "range": "A1:D20",
      "merges": [{ "id": "m0199a1c2...", "c0": 0, "r0": 0, "c1": 1, "r1": 1 }]
    }
  ]
},
  "meta": { "request_id": "req_01j8z9...", "timestamp": "2026-09-02T10:00:00Z" }
}
Worth knowing

The workbook's shape, not its contents. max_row and max_column are the populated extent, which is what an unbounded range like A:A is clamped to.

Errors

Every failure uses the same shape, with a stable string code you can branch on. See the error reference.

Related

GET /v1/spreadsheets/:id

id
Runs the real request against your own workspace. The key is used once and never stored.