Spreadsheets

Read a range

Reads one A1 range: values, formulas and formatting.

GET /v1/spreadsheets/:id/values/:range

Permission

The key must be granted sheets.values.read

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

computed costs a pass over the whole workbook rather than over your range, because a formula in it can depend on a cell far outside it, so a bulk export should not ask for one it does not need. It is never cached and always current, and answers 503 when no formula engine is running — where omitting the parameter still works.

Path parameters

Field Type Description
id required string The spreadsheet to read.
range required A1 range A1 notation: A1, A1:D20, Sheet1!A1:D20, 'Q1 2026'!A1, A:C for whole columns, 2:5 for whole rows. No sheet prefix means the first tab. Corners may be given in either order, $ is accepted and ignored, and an unbounded range is clamped to the populated extent.

Query parameters

Field Type Description
value_render string stored returns what is in the cell, so a formula comes back as its text. computed evaluates it and returns the result. storedcomputed Defaults to stored

Request

curl https://api.veruapis.com/v1/spreadsheets/:id/values/:range?value_render=computed \
  -H "Authorization: Bearer vak_live_..."

Response

Field Type Description
range A1 range The range, resolved: a sheet-less or unbounded range comes back fully qualified.
values array[][] Rows of cells, always rectangular. An empty cell comes back as an empty string, so you need not bounds-check each row.
{
  "data": {
  "range": "Sheet1!A1:B2",
  "values": [["Region", "Revenue"], ["North", "15"]]
},
  "meta": { "request_id": "req_01j8z9...", "timestamp": "2026-09-02T10:00:00Z" }
}
Worth knowing

Reads stored inputs by default, so a formula comes back as "=SUM(B2:B9)". value_render=computed evaluates it instead, which costs a pass over the whole workbook and can answer 503 if no engine is running — omit it and you always get an answer.

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/values/:range

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