Read a range
Reads one A1 range: values, formulas and formatting.
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" }
}
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.
Every failure uses the same shape, with a stable string code you can branch on. See the error reference.
Related
- POST Append rows
- POST Read several ranges
- POST Change a spreadsheet's structure
- POST Write several ranges
- POST Clear a range
- GET List the sheets in a spreadsheet
- GET Get the current state
- PUT Write a range