{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"dataSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"calculatedColumns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"formula": {
"type": "string",
"description": "The formula of the calculated column."
},
"reference": {
"type": "object",
"description": "An unique identifier that references a data source column."
}
}
},
"description": "All calculated columns in the data source."
},
"dataSourceId": {
"type": "string",
"description": "The spreadsheet-scoped unique ID that identifies the data source. Example: 1080547365."
},
"sheetId": {
"type": "integer",
"format": "int32",
"description": "The ID of the Sheet connected with the data source. The field cannot be changed once set. When creating a data source, an associated DATA_SOURCE sheet is also created, if the field is not specified, the ID of the created sheet will be randomly generated."
},
"spec": {
"type": "object",
"description": "This specifies the details of the data source. For example, for BigQuery, this specifies information about the BigQuery source."
}
}
},
"description": "A list of external data sources connected with the spreadsheet."
},
"dataSourceSchedules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"dailySchedule": {
"type": "object",
"description": "A schedule for data to refresh every day in a given time interval."
},
"enabled": {
"type": "boolean",
"description": "True if the refresh schedule is enabled, or false otherwise."
},
"monthlySchedule": {
"type": "object",
"description": "A monthly schedule for data to refresh on specific days in the month in a given time interval."
},
"nextRun": {
"type": "object",
"description": "Represents a time interval, encoded as a Timestamp start (inclusive) and a Timestamp end (exclusive). The start must be less than or equal to the end. When the start equals the end, the interval is empty (matches no time). When both start and end are unspecified, the interval matches any time."
},
"refreshScope": {
"type": "string",
"enum": [
"DATA_SOURCE_REFRESH_SCOPE_UNSPECIFIED",
"ALL_DATA_SOURCES"
],
"description": "The scope of the refresh. Must be ALL_DATA_SOURCES."
},
"weeklySchedule": {
"type": "object",
"description": "A weekly schedule for data to refresh on specific days in a given time interval."
}
}
},
"description": "Output only. A list of data source refresh schedules."
},
"developerMetadata": {
"type": "array",
"items": {
"type": "object",
"properties": {
"location": {
"type": "object",
"description": "A location where metadata may be associated in a spreadsheet."
},
"metadataId": {
"type": "integer",
"format": "int32",
"description": "The spreadsheet-scoped unique ID that identifies the metadata. IDs may be specified when metadata is created, otherwise one will be randomly generated and assigned. Must be positive."
},
"metadataKey": {
"type": "string",
"description": "The metadata key. There may be multiple metadata in a spreadsheet with the same key. Developer metadata must always have a key specified."
},
"metadataValue": {
"type": "string",
"description": "Data associated with the metadata's key."
},
"visibility": {
"type": "string",
"enum": [
"DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED",
"DOCUMENT",
"PROJECT"
],
"description": "The metadata visibility. Developer metadata must always have a visibility specified."
}
}
},
"description": "The developer metadata associated with a spreadsheet."
},
"namedRanges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the named range."
},
"namedRangeId": {
"type": "string",
"description": "The ID of the named range."
},
"range": {
"type": "object",
"description": "A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. the start index is inclusive and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on that side. For example, if `\"Sheet1\"` is sheet ID 123456, then: `Sheet1!A1:A1 == sheet_id: 123456, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1` `Sheet1!A3:B4 == sheet_id: 123456, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 123456, start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 123456, start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == sheet_id: 123456` The start index must always be less than or equal to the end index. If the start index equals the end index, then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as `#REF!`."
}
}
},
"description": "The named ranges defined in a spreadsheet."
},
"properties": {
"type": "object",
"description": "Properties of a spreadsheet.",
"properties": {
"autoRecalc": {
"type": "string",
"description": "The amount of time to wait before volatile functions are recalculated.",
"enum": [
"RECALCULATION_INTERVAL_UNSPECIFIED",
"ON_CHANGE",
"MINUTE",
"HOUR"
]
},
"defaultFormat": {
"type": "object",
"description": "The format of a cell."
},
"iterativeCalculationSettings": {
"type": "object",
"description": "Settings to control how circular dependencies are resolved with iterative calculation."
},
"locale": {
"type": "string",
"description": "The locale of the spreadsheet in one of the following formats: * an ISO 639-1 language code such as `en` * an ISO 639-2 language code such as `fil`, if no 639-1 code exists * a combination of the ISO language code and country code, such as `en_US` Note: when updating this field, not all locales/languages are supported."
},
"spreadsheetTheme": {
"type": "object",
"description": "Represents spreadsheet theme"
},
"timeZone": {
"type": "string",
"description": "The time zone of the spreadsheet, in CLDR format such as `America/New_York`. If the time zone isn't recognized, this may be a custom time zone such as `GMT-07:00`."
},
"title": {
"type": "string",
"description": "The title of the spreadsheet."
}
}
},
"sheets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"bandedRanges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"bandedRangeId": {
"type": "integer",
"description": "The ID of the banded range."
},
"columnProperties": {
"type": "object",
"description": "Properties referring a single dimension (either row or column). If both BandedRange.row_properties and BandedRange.column_properties are set, the fill colors are applied to cells according to the following rules: * header_color and footer_color take priority over band colors. * first_band_color takes priority over second_band_color. * row_properties takes priority over column_properties. For example, the first row color takes priority over the first column color, but the first column color takes priority over the second row color. Similarly, the row header takes priority over the column header in the top left cell, but the column header takes priority over the first row color if the row header is not set."
},
"range": {
"type": "object",
"description": "A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. the start index is inclusive and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on that side. For example, if `\"Sheet1\"` is sheet ID 123456, then: `Sheet1!A1:A1 == sheet_id: 123456, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1` `Sheet1!A3:B4 == sheet_id: 123456, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 123456, start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 123456, start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == sheet_id: 123456` The start index must always be less than or equal to the end index. If the start index equals the end index, then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as `#REF!`."
},
"rowProperties": {
"type": "object",
"description": "Properties referring a single dimension (either row or column). If both BandedRange.row_properties and BandedRange.column_properties are set, the fill colors are applied to cells according to the following rules: * header_color and footer_color take priority over band colors. * first_band_color takes priority over second_band_color. * row_properties takes priority over column_properties. For example, the first row color takes priority over the first column color, but the first column color takes priority over the second row color. Similarly, the row header takes priority over the column header in the top left cell, but the column header takes priority over the first row color if the row header is not set."
}
}
},
"description": "The banded (alternating colors) ranges on this sheet."
},
"basicFilter": {
"type": "object",
"description": "The default filter associated with a sheet."
},
"charts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"border": {
"type": "object",
"description": "A border along an embedded object."
},
"chartId": {
"type": "integer",
"description": "The ID of the chart."
},
"position": {
"type": "object",
"description": "The position of an embedded object such as a chart."
},
"spec": {
"type": "object",
"description": "The specifications of a chart."
}
}
},
"description": "The specifications of every chart on this sheet."
},
"columnGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"collapsed": {
"type": "boolean",
"description": "This field is true if this group is collapsed. A collapsed group remains collapsed if an overlapping group at a shallower depth is expanded. A true value does not imply that all dimensions within the group are hidden, since a dimension's visibility can change independently from this group property. However, when this property is updated, all dimensions within it are set to hidden if this field is true, or set to visible if this field is false."
},
"depth": {
"type": "integer",
"description": "The depth of the group, representing how many groups have a range that wholly contains the range of this group."
},
"range": {
"type": "object",
"description": "A range along a single dimension on a sheet. All indexes are zero-based. Indexes are half open: the start index is inclusive and the end index is exclusive. Missing indexes indicate the range is unbounded on that side."
}
}
},
"description": "All column groups on this sheet, ordered by increasing range start index, then by group depth."
},
"conditionalFormats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"booleanRule": {
"type": "object",
"description": "A rule that may or may not match, depending on the condition."
},
"gradientRule": {
"type": "object",
"description": "A rule that applies a gradient color scale format, based on the interpolation points listed. The format of a cell will vary based on its contents as compared to the values of the interpolation points."
},
"ranges": {
"type": "array",
"description": "The ranges that are formatted if the condition is true. All the ranges must be on the same grid."
}
}
},
"description": "The conditional format rules in this sheet."
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"columnMetadata": {
"type": "array",
"description": "Metadata about the requested columns in the grid, starting with the column in start_column."
},
"rowData": {
"type": "array",
"description": "The data in the grid, one entry per row, starting with the row in startRow. The values in RowData will correspond to columns starting at start_column."
},
"rowMetadata": {
"type": "array",
"description": "Metadata about the requested rows in the grid, starting with the row in start_row."
},
"startColumn": {
"type": "integer",
"description": "The first column this GridData refers to, zero-based."
},
"startRow": {
"type": "integer",
"description": "The first row this GridData refers to, zero-based."
}
}
},
"description": "Data in the grid, if this is a grid sheet. The number of GridData objects returned is dependent on the number of ranges requested on this sheet. For example, if this is representing `Sheet1`, and the spreadsheet was requested with ranges `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a startRow/startColumn of `0`, while the second one will have `startRow 14` (zero-based row 15), and `startColumn 3` (zero-based column D). For a DATA_SOURCE sheet, you can not request a specific range, the GridData contains all the values."
},
"developerMetadata": {
"type": "array",
"items": {
"type": "object",
"properties": {
"location": {
"type": "object",
"description": "A location where metadata may be associated in a spreadsheet."
},
"metadataId": {
"type": "integer",
"description": "The spreadsheet-scoped unique ID that identifies the metadata. IDs may be specified when metadata is created, otherwise one will be randomly generated and assigned. Must be positive."
},
"metadataKey": {
"type": "string",
"description": "The metadata key. There may be multiple metadata in a spreadsheet with the same key. Developer metadata must always have a key specified."
},
"metadataValue": {
"type": "string",
"description": "Data associated with the metadata's key."
},
"visibility": {
"type": "string",
"description": "The metadata visibility. Developer metadata must always have a visibility specified."
}
}
},
"description": "The developer metadata associated with a sheet."
},
"filterViews": {
"type": "array",
"items": {
"type": "object",
"properties": {
"criteria": {
"type": "object",
"description": "The criteria for showing/hiding values per column. The map's key is the column index, and the value is the criteria for that column. This field is deprecated in favor of filter_specs."
},
"filterSpecs": {
"type": "array",
"description": "The filter criteria for showing/hiding values per column. Both criteria and filter_specs are populated in responses. If both fields are specified in an update request, this field takes precedence."
},
"filterViewId": {
"type": "integer",
"description": "The ID of the filter view."
},
"namedRangeId": {
"type": "string",
"description": "The named range this filter view is backed by, if any. When writing, only one of range or named_range_id may be set."
},
"range": {
"type": "object",
"description": "A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. the start index is inclusive and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on that side. For example, if `\"Sheet1\"` is sheet ID 123456, then: `Sheet1!A1:A1 == sheet_id: 123456, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1` `Sheet1!A3:B4 == sheet_id: 123456, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 123456, start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 123456, start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == sheet_id: 123456` The start index must always be less than or equal to the end index. If the start index equals the end index, then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as `#REF!`."
},
"sortSpecs": {
"type": "array",
"description": "The sort order per column. Later specifications are used when values are equal in the earlier specifications."
},
"title": {
"type": "string",
"description": "The name of the filter view."
}
}
},
"description": "The filter views in this sheet."
},
"merges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"endColumnIndex": {
"type": "integer",
"description": "The end column (exclusive) of the range, or not set if unbounded."
},
"endRowIndex": {
"type": "integer",
"description": "The end row (exclusive) of the range, or not set if unbounded."
},
"sheetId": {
"type": "integer",
"description": "The sheet this range is on."
},
"startColumnIndex": {
"type": "integer",
"description": "The start column (inclusive) of the range, or not set if unbounded."
},
"startRowIndex": {
"type": "integer",
"description": "The start row (inclusive) of the range, or not set if unbounded."
}
}
},
"description": "The ranges that are merged together."
},
"properties": {
"type": "object",
"description": "Properties of a sheet."
},
"protectedRanges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "The description of this protected range."
},
"editors": {
"type": "object",
"description": "The editors of a protected range."
},
"namedRangeId": {
"type": "string",
"description": "The named range this protected range is backed by, if any. When writing, only one of range or named_range_id may be set."
},
"protectedRangeId": {
"type": "integer",
"description": "The ID of the protected range. This field is read-only."
},
"range": {
"type": "object",
"description": "A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. the start index is inclusive and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on that side. For example, if `\"Sheet1\"` is sheet ID 123456, then: `Sheet1!A1:A1 == sheet_id: 123456, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1` `Sheet1!A3:B4 == sheet_id: 123456, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 123456, start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 123456, start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == sheet_id: 123456` The start index must always be less than or equal to the end index. If the start index equals the end index, then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as `#REF!`."
},
"requestingUserCanEdit": {
"type": "boolean",
"description": "True if the user who requested this protected range can edit the protected area. This field is read-only."
},
"unprotectedRanges": {
"type": "array",
"description": "The list of unprotected ranges within a protected sheet. Unprotected ranges are only supported on protected sheets."
},
"warningOnly": {
"type": "boolean",
"description": "True if this protected range will show a warning when editing. Warning-based protection means that every user can edit data in the protected range, except editing will prompt a warning asking the user to confirm the edit. When writing: if this field is true, then editors are ignored. Additionally, if this field is changed from true to false and the `editors` field is not set (nor included in the field mask), then the editors will be set to all the editors in the document."
}
}
},
"description": "The protected ranges in this sheet."
},
"rowGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"collapsed": {
"type": "boolean",
"description": "This field is true if this group is collapsed. A collapsed group remains collapsed if an overlapping group at a shallower depth is expanded. A true value does not imply that all dimensions within the group are hidden, since a dimension's visibility can change independently from this group property. However, when this property is updated, all dimensions within it are set to hidden if this field is true, or set to visible if this field is false."
},
"depth": {
"type": "integer",
"description": "The depth of the group, representing how many groups have a range that wholly contains the range of this group."
},
"range": {
"type": "object",
"description": "A range along a single dimension on a sheet. All indexes are zero-based. Indexes are half open: the start index is inclusive and the end index is exclusive. Missing indexes indicate the range is unbounded on that side."
}
}
},
"description": "All row groups on this sheet, ordered by increasing range start index, then by group depth."
},
"slicers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "object",
"description": "The position of an embedded object such as a chart."
},
"slicerId": {
"type": "integer",
"description": "The ID of the slicer."
},
"spec": {
"type": "object",
"description": "The specifications of a slicer."
}
}
},
"description": "The slicers on this sheet."
}
}
},
"description": "The sheets that are part of a spreadsheet."
},
"spreadsheetId": {
"type": "string",
"description": "The ID of the spreadsheet. This field is read-only."
},
"spreadsheetUrl": {
"type": "string",
"description": "The url of the spreadsheet. This field is read-only."
}
},
"required": [
"PCID"
]
}