# Sheets capabilities 76 operations, all REST methods. ⚠️ marks destructive operations (MCP `destructiveHint`): removals, sends, and standing side effects. | Operation | Source | Description | | --- | --- | --- | | [`get_spreadsheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/get) | REST Method | Get a spreadsheet by id: its properties (title, locale, time zone), the properties of every sheet (tab), and each sheet's basic filter, filter views (with IDs), protected ranges (with IDs; editor lists where the caller has edit access), conditional format rules in index order, banded ranges (with IDs or references), ordered row and column groups, slicers (with IDs), and merged ranges; the discovery read for filter, rule, protection, banding, grouping, slicer, and merge operations. Cell values are read with the values operations. | | [`create_spreadsheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/create) | REST Method | Create a spreadsheet with a title and optionally named sheets (tabs); returns the new spreadsheet and its id. | | [`update_spreadsheet_properties`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSpreadsheetPropertiesRequest) | REST Method | Update a spreadsheet's own properties: its title, locale, time zone, or recalculation cadence; only the properties provided change. | | [`get_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/get) | REST Method | Read a range of values from a spreadsheet as a 2D array, addressed in A1 notation. | | [`update_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/update) | REST Method | Write a 2D array of values into a range, overwriting what is there; valueInputOption controls whether values are stored raw or parsed as if typed. | | [`append_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append) | REST Method | Append rows of values after the logical table found at a range; the range is searched for a table, and the data lands after its last row. | | [`clear_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/clear) ⚠️ | REST Method | Clear the values in a range, irreversibly; formatting and data validation are kept. | | [`batch_get_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchGet) | REST Method | Read multiple ranges of values from a spreadsheet in one call; results come back in request order. | | [`batch_update_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate) | REST Method | Write values into multiple ranges of a spreadsheet in one call; one ValueRange per target range. | | [`batch_clear_values`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchClear) ⚠️ | REST Method | Clear the values in multiple ranges in one call, irreversibly; formatting and data validation are kept. | | [`batch_get_values_by_data_filter`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchGetByDataFilter) | REST Method | Read the ranges of values matched by data filters (A1 ranges, grid ranges, or developer-metadata lookups), with the filters that matched each range. | | [`batch_update_values_by_data_filter`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdateByDataFilter) | REST Method | Write values into the ranges matched by data filters; when a filter matches multiple ranges, the values apply to all of them. | | [`batch_clear_values_by_data_filter`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchClearByDataFilter) ⚠️ | REST Method | Clear the values in every range matched by data filters, irreversibly; formatting and data validation are kept. | | [`get_developer_metadata`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.developerMetadata/get) | REST Method | Get one developer metadata entry by its spreadsheet-scoped id. | | [`search_developer_metadata`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.developerMetadata/search) | REST Method | Search developer metadata by lookup criteria or by spreadsheet location (A1 or grid range). | | [`create_developer_metadata`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#CreateDeveloperMetadataRequest) | REST Method | Attach developer metadata to a spreadsheet, sheet, row, or column and return it with its assigned ID; the association follows rows and columns as they move, and DOCUMENT visibility exposes it to any developer project with document access. | | [`update_developer_metadata`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDeveloperMetadataRequest) | REST Method | Update the key, value, location, or visibility of every developer metadata entry matching any dataFilter; only provided fields change, and the reply lists every updated entry. | | [`delete_developer_metadata`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDeveloperMetadataRequest) ⚠️ | REST Method | Irreversibly delete every developer metadata entry matching one dataFilter and return the deleted entries; an empty developerMetadataLookup matches all metadata visible to the requesting project and deletes every visible entry, while attached rows, columns, sheets, and cell values are not deleted. | | [`copy_sheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.sheets/copyTo) | REST Method | Copy a single sheet (tab) from a spreadsheet to another spreadsheet (or the same one); returns the properties of the new sheet. | | [`add_sheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddSheetRequest) | REST Method | Add a new sheet (tab) to a spreadsheet, optionally naming, positioning, coloring, and sizing it; returns the properties of the new sheet. | | [`delete_sheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteSheetRequest) ⚠️ | REST Method | Permanently delete a sheet (tab) and all of its data from a spreadsheet; removing the last remaining sheet is refused. | | [`duplicate_sheet`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateSheetRequest) | REST Method | Duplicate a sheet (tab) within its spreadsheet, optionally naming and positioning the duplicate; returns the properties of the new sheet. | | [`update_sheet_properties`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSheetPropertiesRequest) ⚠️ | REST Method | Update a sheet (tab)'s properties: rename it, move it, hide or show it, color its tab, or resize and freeze its grid; only the properties provided change. Shrinking rowCount or columnCount permanently discards the cells beyond the new bounds. | | [`insert_dimension`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#InsertDimensionRequest) | REST Method | Insert empty rows or columns into a sheet at a position, shifting existing ones over; formulas and formats adjust as if inserted in the UI. | | [`delete_dimension`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionRequest) ⚠️ | REST Method | Permanently delete rows or columns from a sheet, including their data; later rows or columns shift into the deleted range. | | [`auto_resize_dimensions`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AutoResizeDimensionsRequest) | REST Method | Resize rows or columns to fit their contents, as the UI's "Fit to data" does; a later content change does not re-trigger it. | | [`update_dimension_properties`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDimensionPropertiesRequest) | REST Method | Set exact row heights or column widths in pixels, or explicitly hide or reveal rows or columns; only the provided properties change across the selected dimensions, and cell content is untouched. | | [`move_dimension`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#MoveDimensionRequest) | REST Method | Move complete rows or columns to a destination index measured before removal; their data and properties move with them, surrounding dimensions shift to make room, and repeating the same index-addressed call can move different content. | | [`append_dimension`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AppendDimensionRequest) | REST Method | Append empty rows or columns to the end of a sheet, increasing its grid size without changing existing cells; repeating the call appends another set. | | [`add_dimension_group`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddDimensionGroupRequest) | REST Method | Group a row or column range for collapse and expansion; overlapping groups can be resized or moved to deeper nesting, cell content is untouched, and the reply returns all groups for that dimension. | | [`update_dimension_group`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDimensionGroupRequest) | REST Method | Collapse or expand a dimension group selected by its range and depth; collapsing hides every row or column in the group, expanding reveals every row or column in it, and independently hidden dimensions are therefore changed too. | | [`delete_dimension_group`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionGroupRequest) ⚠️ | REST Method | Delete grouping over a row or column range by decrementing its group depth; overlapping groups can be split or resized, the grouping change is not automatically reversible, and cell content is untouched. | | [`add_named_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddNamedRangeRequest) | REST Method | Define a named range in a spreadsheet, so formulas can say =REVENUE instead of =INPUTS!B38 and reads can pass the name where a range is expected; returns the named range with its assigned ID. | | [`update_named_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateNamedRangeRequest) | REST Method | Rename or retarget a named range by ID behind a derived field mask; renaming updates syntactic cell and range references to the name but does not rewrite string references such as INDIRECT("name"), while retargeting changes the cells those syntactic references calculate from. | | [`delete_named_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteNamedRangeRequest) ⚠️ | REST Method | Delete a named range from a spreadsheet by its ID; the cells it covered are untouched, but formulas referencing the name break. | | [`repeat_cell`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#RepeatCellRequest) | REST Method | Apply a cell format (number, currency, or percent rendering, fill color, text format, alignment, wrap) to every cell in a range; values are untouched and only the format fields provided change. | | [`update_borders`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBordersRequest) | REST Method | Update the borders of a range: any of the range's top, bottom, left, right, and inner horizontal or vertical borders; borders not provided are untouched. | | [`add_banding`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddBandingRequest) | REST Method | Add alternating row or column colors over a range and return the banded range with its stable ID; when row and column banding overlap, headers and footers outrank band colors, first bands outrank second bands, and row properties then outrank column properties, while cell values remain untouched. | | [`update_banding`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBandingRequest) | REST Method | Update a banded range by ID, changing its covered range or selected row and column colors; only the provided fields change, moving the range removes that banding outside the new range, and cell values remain untouched. | | [`delete_banding`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteBandingRequest) ⚠️ | REST Method | Permanently remove a banded range by ID, removing its alternating-color rule while leaving cell values and unrelated formatting untouched. | | [`update_cells`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateCellsRequest) ⚠️ | REST Method | Write cell content (values, notes, formats, rich text runs with per-run color, emphasis, or hyperlinks) cell by cell from a start coordinate or over a range; the written fields are the union of what the cells provide, and a written field a cell omits is cleared in that cell, as is the uncovered remainder of an explicit range. | | [`merge_cells`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#MergeCellsRequest) ⚠️ | REST Method | Merge a range of cells into one (MERGE_ALL), one merge per column (MERGE_COLUMNS), or one merge per row (MERGE_ROWS); only the upper-left value of each merge is kept. | | [`unmerge_cells`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UnmergeCellsRequest) ⚠️ | REST Method | Unmerge every merge in a range; the values that survived the original merges are untouched, and the range must not cut through any merge. | | [`sort_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#SortRangeRequest) | REST Method | Sort the rows in a range by one or more columns, with later sort specifications breaking ties; only cells inside the range move, so a column-bounded range reorders its slice while columns outside it stay fixed. Include every column of the records to keep rows aligned. | | [`set_basic_filter`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#SetBasicFilterRequest) | REST Method | Set the basic filter on a sheet range, including optional row visibility criteria and sort specifications; get_spreadsheet reads it back as basicFilter. | | [`clear_basic_filter`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#ClearBasicFilterRequest) ⚠️ | REST Method | Remove the basic filter from a sheet, if one exists. | | [`add_filter_view`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddFilterViewRequest) | REST Method | Add a named filter view over a range or named range, optionally with sorts and per-column criteria; returns its stable filterViewId. | | [`update_filter_view`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateFilterViewRequest) | REST Method | Update a filter view by filterViewId; only provided fields change, except that providing range or namedRangeId selects that backing and detaches the other. Range fields are masked per subkey, while sortSpecs or filterSpecs replace their complete respective lists. | | [`duplicate_filter_view`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateFilterViewRequest) | REST Method | Duplicate a filter view by filterId (the view's stable filterViewId) and return the new view and its new ID. | | [`delete_filter_view`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteFilterViewRequest) ⚠️ | REST Method | Delete a filter view by filterId (the view's stable filterViewId). | | [`find_replace`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#FindReplaceRequest) | REST Method | Find and replace text over exactly one range, sheet, or whole spreadsheet, optionally including formula source; returns changed cell, row, sheet, and occurrence counts. | | [`delete_duplicates`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDuplicatesRequest) ⚠️ | REST Method | Remove duplicate rows from a range, keeping the first occurrence and optionally comparing only selected columns; hidden duplicate rows are removed too. Only cells inside the range shift, so a column-bounded range misaligns against columns outside it; include every column of the records. | | [`trim_whitespace`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#TrimWhitespaceRequest) ⚠️ | REST Method | Remove leading and trailing whitespace from cells in a range, collapse each internal whitespace run to one space, and return the number of cells changed. | | [`text_to_columns`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#TextToColumnsRequest) ⚠️ | REST Method | Split each cell in a one-column source range into columns using a standard, custom, or autodetected delimiter; output can overwrite adjacent cells. | | [`auto_fill`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AutoFillRequest) ⚠️ | REST Method | Extend detected source data through a range or an explicit source-and-destination area; generated values overwrite the destination cells. | | [`copy_paste`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#CopyPasteRequest) ⚠️ | REST Method | Copy selected data from one grid range to another, optionally transposed; the paste overwrites destination fields and can extend beyond a smaller destination range. | | [`cut_paste`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#CutPasteRequest) ⚠️ | REST Method | Cut all data from a source range and paste the selected data type at a destination coordinate; the source is cleared and destination fields are overwritten. | | [`insert_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#InsertRangeRequest) | REST Method | Insert blank cells into a range, shifting existing cells down or right within the current sheet boundaries. | | [`delete_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteRangeRequest) ⚠️ | REST Method | Delete cells from a range and shift remaining cells upward or left into the deleted area. | | [`randomize_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#RandomizeRangeRequest) | REST Method | Randomize the order of row slices in a range without discarding cell content; the original order is discarded and cannot be recovered through this surface. | | [`add_conditional_format_rule`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddConditionalFormatRuleRequest) | REST Method | Add a conditional format rule to a spreadsheet: a boolean rule formats cells matching a condition, and a gradient rule paints a continuous color scale (a heat map) across a range; either recalculates as values change. | | [`update_conditional_format_rule`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateConditionalFormatRuleRequest) | REST Method | Replace the conditional format rule at an index with a new rule; the whole rule is replaced, so send the complete rule, and use move_conditional_format_rule to reorder instead. | | [`move_conditional_format_rule`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateConditionalFormatRuleRequest) | REST Method | Move the conditional format rule at an index to a new index in its sheet, changing its precedence; earlier rules take precedence where rules overlap. | | [`delete_conditional_format_rule`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteConditionalFormatRuleRequest) ⚠️ | REST Method | Delete the conditional format rule at an index in a sheet; rules after it shift up by one. | | [`set_data_validation`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#SetDataValidationRequest) | REST Method | Set a data validation rule on every cell in a range (filtered-out rows only when filteredRowsIncluded), replacing any validation already there: a dropdown (ONE_OF_LIST or ONE_OF_RANGE with showCustomUi), a constraint (number, date, or text conditions), or a checkbox (BOOLEAN); strict rules reject invalid input. | | [`clear_data_validation`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#SetDataValidationRequest) ⚠️ | REST Method | Remove all data validation rules from every cell in a range (filtered-out rows only when filteredRowsIncluded); the cell values are untouched. | | [`add_protected_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddProtectedRangeRequest) ⚠️ | REST Method | Protect a range, a named range, or a whole sheet so only the granted editors (listed users and groups, or the whole domain with domainUsersCanEdit) can change it, or (with warningOnly) so every edit prompts a confirmation warning; returns the protected range with its assigned ID. | | [`update_protected_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateProtectedRangeRequest) | REST Method | Update a protected range by ID: move it, redescribe it, switch it between warning-only and editor-restricted, or change its editors and unprotected ranges; only the fields provided change, except that turning warningOnly off without also providing editors resets the editors to all the editors in the document. | | [`delete_protected_range`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteProtectedRangeRequest) ⚠️ | REST Method | Delete a protected range by ID, removing that protection from its cells; the cell values are untouched, and any overlapping protection or document permission still applies. | | [`add_chart`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddChartRequest) | REST Method | Add a chart to a spreadsheet, floating over the grid or on its own sheet; the chart renders in the UI and in xlsx and pdf exports, and the returned ID addresses later spec updates and deletion. | | [`update_chart_spec`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateChartSpecRequest) | REST Method | Replace a chart's complete specification across the basic, pie, bubble, candlestick, org, histogram, waterfall, treemap, or scorecard family; omitted spec fields are cleared, while the chart keeps its ID and position. | | [`update_embedded_object_position`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateEmbeddedObjectPositionRequest) | REST Method | Move or resize an embedded chart, image, or slicer by object ID, or move it to a new object sheet with an explicit or generated ID; overlay updates change only the provided anchor, offsets, width, or height, and cells beneath the object are untouched. | | [`update_embedded_object_border`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateEmbeddedObjectBorderRequest) | REST Method | Set the border color of an embedded chart, image, or slicer by object ID; only the object border changes, while its position, content, and underlying cells remain untouched. | | [`delete_embedded_object`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#DeleteEmbeddedObjectRequest) ⚠️ | REST Method | Permanently delete an embedded chart, image, or slicer from a spreadsheet by its ID; underlying cells and source values are unchanged. | | [`add_slicer`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#AddSlicerRequest) | REST Method | Add a slicer floating on an existing sheet and return it with its assigned ID; its criteria can change what charts and, by default, pivot tables display, but source cell values are not modified. | | [`update_slicer_spec`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSlicerSpecRequest) | REST Method | Update selected slicer spec fields by ID behind a derived mask; criteria changes can alter what charts and pivot tables display, source cells are unchanged, and the slicer is not moved or resized. |