Development — entry 034 of 100
Google Sheets
The Google Sheets API is a REST interface for reading and writing spreadsheet data, formatting cells, and managing Connected Sheets, addressing ranges with either A1 (`Sheet1!A1:B2`) or R1C1 notation. It authenticates via OAuth 2.0 (or a service account for server-to-server access) and is widely used to drive spreadsheets as a lightweight database or reporting backend from external apps and scripts. Standard use is free under per-project and per-user Google Cloud quotas.
GreatAPIs Score
Auth quickstart
- Register an app / run the OAuth flow to obtain a bearer token.
- Send it as an Authorization header
Authorization: Bearer <token>
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
spreadsheets17
POST/v4/spreadsheets
application/json — Spreadsheet
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Spreadsheet |
GET/v4/spreadsheets/{spreadsheetId}
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
includeGridData | query | no | boolean |
ranges | query | no | array |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Spreadsheet |
GET/v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
metadataId | path | yes | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | DeveloperMetadata |
POST/v4/spreadsheets/{spreadsheetId}/developerMetadata:search
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — SearchDeveloperMetadataRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | SearchDeveloperMetadataResponse |
POST/v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
sheetId | path | yes | integer |
application/json — CopySheetToAnotherSpreadsheetRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | SheetProperties |
GET/v4/spreadsheets/{spreadsheetId}/values/{range}
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
range | path | yes | string |
dateTimeRenderOption | query | no | string |
majorDimension | query | no | string |
valueRenderOption | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | ValueRange |
PUT/v4/spreadsheets/{spreadsheetId}/values/{range}
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
range | path | yes | string |
includeValuesInResponse | query | no | boolean |
responseDateTimeRenderOption | query | no | string |
responseValueRenderOption | query | no | string |
valueInputOption | query | no | string |
application/json — ValueRange
| Status | Description | Schema |
|---|---|---|
200 | Successful response | UpdateValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values/{range}:append
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
range | path | yes | string |
includeValuesInResponse | query | no | boolean |
insertDataOption | query | no | string |
responseDateTimeRenderOption | query | no | string |
responseValueRenderOption | query | no | string |
valueInputOption | query | no | string |
application/json — ValueRange
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AppendValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values/{range}:clear
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
range | path | yes | string |
application/json — ClearValuesRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | ClearValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values:batchClear
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchClearValuesRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchClearValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchClearValuesByDataFilterRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchClearValuesByDataFilterResponse |
GET/v4/spreadsheets/{spreadsheetId}/values:batchGet
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
dateTimeRenderOption | query | no | string |
majorDimension | query | no | string |
ranges | query | no | array |
valueRenderOption | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchGetValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchGetValuesByDataFilterRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchGetValuesByDataFilterResponse |
POST/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchUpdateValuesRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchUpdateValuesResponse |
POST/v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchUpdateValuesByDataFilterRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchUpdateValuesByDataFilterResponse |
POST/v4/spreadsheets/{spreadsheetId}:batchUpdate
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — BatchUpdateSpreadsheetRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BatchUpdateSpreadsheetResponse |
POST/v4/spreadsheets/{spreadsheetId}:getByDataFilter
| Name | In | Required | Type |
|---|---|---|---|
spreadsheetId | path | yes | string |
application/json — GetSpreadsheetByDataFilterRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Spreadsheet |
Try it
Developer reference
https://sheets.googleapis.comGoogle's Sheets API limits docs (developers.google.com/workspace/sheets/api/limits) publish flat per-minute quotas rather than a quota-unit system: Read requests are capped at 300/minute/project and 60/minute/user/project, and Write requests at 300/minute/project and 60/minute/user/project. Exceeding a limit returns a 429 (Too many requests) HTTP status; Google recommends an exponential backoff before retrying. There's no daily cap as long as the per-minute quotas are respected, and standard use is free under these Google Cloud project quotas.
- POST/v4/spreadsheets
- GET/v4/spreadsheets/{spreadsheetId}
- GET/v4/spreadsheets/{spreadsheetId}/values/{range}
- PUT/v4/spreadsheets/{spreadsheetId}/values/{range}
- POST/v4/spreadsheets/{spreadsheetId}/values/{range}:append