{"formatVersion":"1","kind":"dock_integration","slug":"google-sheets","title":"Google Sheets","summary":"Import a Harbor-safe Google Sheets starter set for reading spreadsheet data and appending or updating rows.","description":"A Dock-hosted Google Sheets starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe action set covering spreadsheet metadata reads, range reads, and bounded write actions for rows and ranges.","version":"0.2.0","publisher":{"slug":"google","name":"Google","websiteUrl":"https://developers.google.com/sheets/api"},"category":"Productivity","tags":["google","sheets","spreadsheets","productivity","data"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Spreadsheet-scoped templates use `input.path` values at execution time."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Google Sheets API","description":"Google Sheets API connection managed locally through Harbor.","baseUrl":"https://sheets.googleapis.com/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"get-spreadsheet","label":"Get Spreadsheet","description":"Fetch spreadsheet metadata including all sheet names, properties, and named ranges for a given spreadsheet ID.","method":"GET","path":"/v4/spreadsheets/{spreadsheetId}","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"includeGridData","in":"query","schema":{"type":"boolean"},"description":"Whether to include full grid data."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"batch-read-ranges","label":"Batch Read Ranges","description":"Read values from multiple ranges in one spreadsheet using explicit spreadsheet identifiers and typed query controls.","method":"GET","path":"/v4/spreadsheets/{spreadsheetId}/values:batchGet","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"ranges","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1},"description":"One or more A1 notation ranges to fetch."},{"name":"majorDimension","in":"query","schema":{"type":"string","enum":["ROWS","COLUMNS"]},"description":"Returned value orientation."},{"name":"valueRenderOption","in":"query","schema":{"type":"string","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"]},"description":"How values should be rendered."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"read-range","label":"Read Range","description":"Read cell values from a named range in a spreadsheet with typed render controls.","method":"GET","path":"/v4/spreadsheets/{spreadsheetId}/values/{range}","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"range","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"A1 notation range."},{"name":"majorDimension","in":"query","schema":{"type":"string","enum":["ROWS","COLUMNS"]},"description":"Returned value orientation."},{"name":"valueRenderOption","in":"query","schema":{"type":"string","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"]},"description":"How values should be rendered."},{"name":"dateTimeRenderOption","in":"query","schema":{"type":"string","enum":["SERIAL_NUMBER","FORMATTED_STRING"]},"description":"How date and time values should be rendered."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"batch-update-values","label":"Batch Update Values","description":"Update multiple ranges of cell values in one request using an explicit spreadsheet ID and a bounded JSON request body.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/values:batchUpdate","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."}],"staticQuery":{"valueInputOption":"USER_ENTERED"}},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"append-row","label":"Append Row","description":"Append one or more rows after the last row with data in the specified range using a bounded JSON payload.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/values/{range}:append","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"range","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"A1 notation range."}],"staticQuery":{"valueInputOption":"USER_ENTERED","insertDataOption":"INSERT_ROWS"}},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-range","label":"Update Range","description":"Overwrite cell values in the specified range using a bounded JSON payload with a valueInputOption of USER_ENTERED.","method":"PUT","path":"/v4/spreadsheets/{spreadsheetId}/values/{range}","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"range","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"A1 notation range."}],"staticQuery":{"valueInputOption":"USER_ENTERED"}},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"clear-range","label":"Clear Range","description":"Clear all values from the specified range while preserving formatting.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/values/{range}:clear","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."},{"name":"range","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"A1 notation range."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"batch-clear-values","label":"Batch Clear Values","description":"Clear values from multiple ranges in one spreadsheet using an explicit spreadsheet ID and a bounded JSON request body.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/values:batchClear","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"create-spreadsheet","label":"Create Spreadsheet","description":"Create a new Google Sheets spreadsheet using a bounded JSON request body.","method":"POST","path":"/v4/spreadsheets","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"copy-sheet-to-spreadsheet","label":"Copy Sheet To Spreadsheet","description":"Copy a sheet to another spreadsheet using explicit source spreadsheet and sheet identifiers with a bounded JSON request body.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Source spreadsheet ID."},{"name":"sheetId","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Source sheet ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"search-developer-metadata","label":"Search Developer Metadata","description":"Search developer metadata in a spreadsheet using an explicit spreadsheet ID and a bounded JSON request body.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}/developerMetadata:search","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."}]},"approvalMode":"automatic","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"batch-update","label":"Batch Update Spreadsheet","description":"Apply one or more spreadsheet updates such as adding sheets, setting formatting, or merging cells using a bounded JSON request.","method":"POST","path":"/v4/spreadsheets/{spreadsheetId}:batchUpdate","inputs":{"parameters":[{"name":"spreadsheetId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Spreadsheet ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"}],"workflowTemplates":[{"slug":"log-to-sheet","title":"Log to Sheet","summary":"Future workflow template for appending structured data to a tracking spreadsheet."}],"helpText":"Import to Harbor, configure local auth, then use the starter Sheets actions. Pass spreadsheet IDs and ranges under `input.path`, optional render controls under `input.query`, and keep append, update, clear, and batch-update approval-friendly unless your local policy explicitly allows them.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Every action here uses Harbor's Action Model, with required spreadsheet and range values in `input.path` and JSON write payloads in `input.body`."}