# Sheetgo API This is a summary. Before writing a request, fetch the group page of the endpoint and every model page it links. Do not guess fields that are not shown here. Start page (plain text): https://dev-api.sheetgo.com/rest/reference.md. Everything in one file: https://dev-api.sheetgo.com/rest/llms-full.txt. The group pages are listed under Endpoints below. ## What this API is The Sheetgo Public API manages your workflows, automations and forms and reads the data they produce. An automation moves data from sources (files, folders, APIs, email, BigQuery) to destinations (files, documents, PDFs, email, APIs), optionally through processors. Authenticate with an API key. Base URL: `https://dev-api.sheetgo.com`. Every endpoint below is under `/rest/`. Requests and responses are JSON. ## How to read these docs The start page lists every endpoint and links to the page that documents it. It is a summary, not the full reference. 1. Find your endpoint in the Endpoints list below and fetch the group page it belongs to. 2. A group page links each request and response body to a model page. Fetch the model page before you build a body. 3. Fetch a guide when an endpoint links to one (smart tags, cell references, rate limiting, and so on). 4. Do not guess fields that are not shown here. If a field, value or endpoint is not on these pages, it does not exist; fetch the page that should show it or say that you could not find it. Raw OpenAPI: https://dev-api.sheetgo.com/rest/openapi.json. ## Authentication Send an API key as a Bearer token on every request. Generate one on your Sheetgo **Account** page. Keys start with `sg_`. ``` Authorization: Bearer sg_your_api_key ``` OAuth2 (authorization code flow) is available for integrations: `/rest/auth/authorize`, `/rest/auth/token`, `/rest/auth/refresh`. The token request body is form-encoded, not JSON. A key can be limited to some actions and items. See [API Key Scopes](https://dev-api.sheetgo.com/rest/guides/api-key-scopes.md). ## Conventions - **Pagination.** List endpoints take `page` and `per_page` and answer `{"page", "per_page", "total", "results"}`. `total` is the number of **pages**, not the number of rows. - **Errors.** Validation errors answer `422` with `{"detail": [{"loc", "msg", "type"}]}`. Most other client errors answer `{"code": "", "detail": ""}`, sometimes with a `reason`; branch on `code`, not on the text. - **Rate limits.** Reads and writes have separate per-minute budgets. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`. A `429` carries `Retry-After` (seconds); wait that long before retrying. See [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). - **Column letters.** Every column field in a request is a spreadsheet letter (`A`, `B`, ...), not a header name. A header name answers `422 invalid_column`. To map letters to headers call `GET /rest/beta/files/{provider}/{file_id}/structure?include=columns`. - **Runs are asynchronous.** `POST .../run` answers `200` when the run is enqueued. Poll `GET .../run` until `execution` is not `running`. ## Quickstart Four calls take you from nothing to a finished run. Replace the placeholder ids (`WORKFLOW_ID`, `SOURCE_FILE_ID`, `DEST_FILE_ID`) with real ones. 1. `GET /rest/beta/workflows/` lists your workflows. Take the `id` of one. The envelope's `total` counts **pages**, not rows. 2. `POST /rest/beta/automations/` creates an automation (note the trailing slash). This one copies a tab of a Google Sheet into a tab of another: ```json { "workflow_id": "WORKFLOW_ID", "name": "Copy sales", "sources": [ { "type": "file", "provider": "drive", "id": "SOURCE_FILE_ID", "file_type": "gsheets", "sheet_tabs": [ "Sales" ] } ], "destinations": [ { "type": "file", "provider": "drive", "id": "DEST_FILE_ID", "file_type": "gsheets", "sheet_name": "Sales copy" } ] } ``` Details of every field: [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md). Column fields in a request are spreadsheet letters, never header names. 3. `POST /rest/beta/automations/{id}/run` starts a run. `200` means the run was **enqueued**, not finished. 4. `GET /rest/beta/automations/{id}/run` returns the last run. Repeat it until `execution` is not `running`; then read `result`. ## Endpoints ### workflows Page: https://dev-api.sheetgo.com/rest/reference/workflows.md - [`POST /rest/beta/workflows/run/{id}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-run-id) (deprecated): (Obsolete) Use /workflows//run instead - [`GET /rest/beta/workflows/{id}/run`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-run): Get a workflow's last-run status - [`POST /rest/beta/workflows/{id}/run`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-run): Run a single workflow - [`GET /rest/beta/workflows/{id}/files`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-files): Get file sources and destinations of all automations in a workflow - [`GET /rest/beta/workflows/{id}/sources`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-sources): Get file sources of all automations in a workflow - [`GET /rest/beta/workflows/{id}/destinations`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-destinations): Get file destinations of all automations in a workflow - [`GET /rest/beta/workflows/{id}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id): Get a single workflow - [`PATCH /rest/beta/workflows/{id}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id): Update an existing workflow - [`DELETE /rest/beta/workflows/{id}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id): Archive a workflow - [`GET /rest/beta/workflows/`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows): Get a paginated list of workflows - [`POST /rest/beta/workflows/`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows): Create a new workflow - [`GET /rest/beta/workflows/{id}/collaborators`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-collaborators): List a workflow's collaborators - [`POST /rest/beta/workflows/{id}/collaborators`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators): Add collaborators to a workflow - [`DELETE /rest/beta/workflows/{id}/collaborators`](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators): Remove all collaborators from a workflow - [`PATCH /rest/beta/workflows/{id}/collaborators/{email}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email): Change a collaborator's role - [`DELETE /rest/beta/workflows/{id}/collaborators/{email}`](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators-email): Remove a collaborator - [`GET /rest/beta/workflows/{id}/general-access`](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-general-access): Get a workflow's general (domain/team) access - [`PUT /rest/beta/workflows/{id}/general-access`](https://dev-api.sheetgo.com/rest/reference/workflows.md#put-rest-beta-workflows-id-general-access): Set a workflow's general (domain/team) access - [`DELETE /rest/beta/workflows/{id}/general-access`](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-general-access): Revoke a workflow's general (domain/team) access - [`POST /rest/beta/workflows/{id}/leave`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-leave): Leave a shared workflow - [`POST /rest/beta/workflows/{id}/request-access`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-request-access): Ask a workflow's owner for access - [`POST /rest/beta/workflows/{id}/change-owner`](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-change-owner): Transfer workflow ownership ### automations Page: https://dev-api.sheetgo.com/rest/reference/automations.md - [`POST /rest/beta/automations/run/{id}`](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-run-id) (deprecated): (Obsolete) Use /automations//run instead - [`GET /rest/beta/automations/{id}/run`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-run): Get an automation's last-run status - [`POST /rest/beta/automations/{id}/run`](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-id-run): Run an automation - [`GET /rest/beta/automations/{id}/files`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-files): Get file sources and destinations of an automation - [`GET /rest/beta/automations/{id}/sources`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-sources): Get file sources of an automation - [`GET /rest/beta/automations/{id}/destinations`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-destinations): Get file destinations of an automation - [`GET /rest/beta/automations/{id}`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id): Get a single automation - [`PUT /rest/beta/automations/{id}`](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id): Replace an existing automation entirely - [`PATCH /rest/beta/automations/{id}`](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id): Rename an automation - [`DELETE /rest/beta/automations/{id}`](https://dev-api.sheetgo.com/rest/reference/automations.md#delete-rest-beta-automations-id): Archive an automation - [`GET /rest/beta/automations/`](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations): Get a paginated list of automations - [`POST /rest/beta/automations/`](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations): Create a new automation ### triggers Page: https://dev-api.sheetgo.com/rest/reference/triggers.md - [`GET /rest/beta/workflows/{id}/trigger`](https://dev-api.sheetgo.com/rest/reference/triggers.md#get-rest-beta-workflows-id-trigger): Get a workflow's automation trigger - [`PUT /rest/beta/workflows/{id}/trigger`](https://dev-api.sheetgo.com/rest/reference/triggers.md#put-rest-beta-workflows-id-trigger): Set or replace a workflow's automation trigger - [`DELETE /rest/beta/workflows/{id}/trigger`](https://dev-api.sheetgo.com/rest/reference/triggers.md#delete-rest-beta-workflows-id-trigger): Turn off a workflow's automation trigger ### dashboards Page: https://dev-api.sheetgo.com/rest/reference/dashboards.md - [`GET /rest/beta/workflows/{id}/dashboard`](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard): Get a workflow's dashboard - [`GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data`](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data): Read one dashboard element's current values - [`POST /rest/beta/workflows/{id}/dashboard/elements`](https://dev-api.sheetgo.com/rest/reference/dashboards.md#post-rest-beta-workflows-id-dashboard-elements): Add elements to a workflow's dashboard - [`DELETE /rest/beta/workflows/{id}/dashboard/elements/{element_id}`](https://dev-api.sheetgo.com/rest/reference/dashboards.md#delete-rest-beta-workflows-id-dashboard-elements-element-id): Delete one dashboard element - [`PUT /rest/beta/workflows/{id}/dashboard/publish`](https://dev-api.sheetgo.com/rest/reference/dashboards.md#put-rest-beta-workflows-id-dashboard-publish): Publish or unpublish a workflow's dashboard ### forms Page: https://dev-api.sheetgo.com/rest/reference/forms.md - [`GET /rest/beta/workflows/{workflow_id}/forms/{form_id}`](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id): Get a form - [`PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}`](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id): Update an existing form - [`DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}`](https://dev-api.sheetgo.com/rest/reference/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id): Delete a form - [`GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses`](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses): Get a form's responses (paginated) - [`HEAD /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses`](https://dev-api.sheetgo.com/rest/reference/forms.md#head-rest-beta-workflows-workflow-id-forms-form-id-responses): Inspect a form's responses metadata without downloading them - [`GET /rest/beta/workflows/{workflow_id}/forms/`](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms): Get a paginated list of forms - [`POST /rest/beta/workflows/{workflow_id}/forms/`](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms): Create a new form ### webhook Page: https://dev-api.sheetgo.com/rest/reference/webhook.md - [`POST /rest/beta/webhook/{public_id}`](https://dev-api.sheetgo.com/rest/reference/webhook.md#post-rest-beta-webhook-public-id): Push values to a webhook and trigger its bound automation - [`GET /rest/beta/automations/{automation_id}/webhook`](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-automations-automation-id-webhook): Retrieve an automation's webhook - [`GET /rest/beta/workflows/{workflow_id}/webhooks`](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-workflows-workflow-id-webhooks): List a workflow's webhooks ### api-destination Page: https://dev-api.sheetgo.com/rest/reference/api-destination.md - [`GET /rest/beta/api-destination/{public_id}`](https://dev-api.sheetgo.com/rest/reference/api-destination.md#get-rest-beta-api-destination-public-id): Read data from an API-as-Destination endpoint - [`HEAD /rest/beta/api-destination/{public_id}`](https://dev-api.sheetgo.com/rest/reference/api-destination.md#head-rest-beta-api-destination-public-id): Inspect API-as-Destination metadata without downloading data ### integrations Page: https://dev-api.sheetgo.com/rest/reference/integrations.md - [`GET /rest/beta/integrations`](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations): List integrations and connected accounts - [`GET /rest/beta/integrations/{provider}/options`](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options): List a provider's data sources ### outlook Page: https://dev-api.sheetgo.com/rest/reference/outlook.md - [`POST /rest/beta/outlook/messages/batch`](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-messages-batch): Batch Messages - [`GET /rest/beta/outlook/messages`](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages): List Messages - [`GET /rest/beta/outlook/messages/{message_id}`](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id): Get Message - [`GET /rest/beta/outlook/messages/{message_id}/attachments/{attachment_id}`](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id-attachments-attachment-id): Get Attachment - [`POST /rest/beta/outlook/send`](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send): Send ### gmail Page: https://dev-api.sheetgo.com/rest/reference/gmail.md - [`POST /rest/beta/gmail/send`](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send): Send ### files Page: https://dev-api.sheetgo.com/rest/reference/files.md - [`GET /rest/beta/files/{provider}`](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider): Browse a folder - [`GET /rest/beta/files/{provider}/search`](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search): Search files and folders by name - [`GET /rest/beta/files/{provider}/roots`](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots): List browsable entry points - [`GET /rest/beta/files/{provider}/{file_id}`](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id): Get one file or folder - [`GET /rest/beta/files/{provider}/{file_id}/structure`](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure): Describe what is inside a file ### bigquery Page: https://dev-api.sheetgo.com/rest/reference/bigquery.md - [`GET /rest/beta/bigquery/projects`](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects): List BigQuery projects - [`GET /rest/beta/bigquery/projects/{project}/datasets`](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets): List a project's datasets - [`GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables`](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables): List a dataset's tables - [`GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}`](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table): Read one table's schema - [`POST /rest/beta/bigquery/projects/{project}/validate-query`](https://dev-api.sheetgo.com/rest/reference/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query): Validate a query without running it ### auth Page: https://dev-api.sheetgo.com/rest/reference/auth.md - [`POST /rest/auth/token`](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-token): Exchange authentication code for a access token and a refresh token - [`POST /rest/auth/refresh`](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-refresh): Creates a new access token from a refresh token ## Guides - [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md): To keep the platform fast and fair, the API limits how many requests each account can make in a... - [API Key Scopes](https://dev-api.sheetgo.com/rest/guides/api-key-scopes.md): Sheetgo API keys let apps, scripts, and AI agents act on your Sheetgo account. By default a key... - [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md): A **smart tag** is a `{{placeholder}}` that Sheetgo replaces with a value from your data while an... - [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md): A **cell reference** is a `{{Tab!Ref}}` placeholder you put inside an `api` source's request.... ## Models Model pages describe request and response bodies field by field. Fetch the one an endpoint links to. ### Used by automations - [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md) - [AnonymizeMethod](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeMethod.md) - [AnonymizeMode](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeMode.md) - [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [BigQueryPartition](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartition.md) - [BigQueryPartitionGranularity](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartitionGranularity.md) - [BigQueryWriteMode](https://dev-api.sheetgo.com/rest/reference/models/BigQueryWriteMode.md) - [ConditionExpression](https://dev-api.sheetgo.com/rest/reference/models/ConditionExpression.md) - [ConditionType](https://dev-api.sheetgo.com/rest/reference/models/ConditionType.md) - [ContentType](https://dev-api.sheetgo.com/rest/reference/models/ContentType.md) - [DestinationApiPublish](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) - [DestinationBigQuery-Input](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md) - [DestinationDocument](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) - [DestinationFile](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) - [DestinationFolder](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) - [DestinationMailMerge](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) - [DestinationPDF](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) - [DestinationShare](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) - [DestinationWebhook](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) - [EmailFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Input.md) - [EmailFilterRule](https://dev-api.sheetgo.com/rest/reference/models/EmailFilterRule.md) - [ExpressionCriteria](https://dev-api.sheetgo.com/rest/reference/models/ExpressionCriteria.md) - [FileAccessRole](https://dev-api.sheetgo.com/rest/reference/models/FileAccessRole.md) - [FileFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Input.md) - [FileFilterRule](https://dev-api.sheetgo.com/rest/reference/models/FileFilterRule.md) - [FileSendingMethod](https://dev-api.sheetgo.com/rest/reference/models/FileSendingMethod.md) - [FileType](https://dev-api.sheetgo.com/rest/reference/models/FileType.md) - [FilterColumn](https://dev-api.sheetgo.com/rest/reference/models/FilterColumn.md) - [FilterCondition-Input](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Input.md) - [FilterQuery](https://dev-api.sheetgo.com/rest/reference/models/FilterQuery.md) - [IdentifyDataType](https://dev-api.sheetgo.com/rest/reference/models/IdentifyDataType.md) - [ImportMode](https://dev-api.sheetgo.com/rest/reference/models/ImportMode.md) - [IntegrationProvider](https://dev-api.sheetgo.com/rest/reference/models/IntegrationProvider.md) - [KeepDuplicateType](https://dev-api.sheetgo.com/rest/reference/models/KeepDuplicateType.md) - [LeftJoinProcessor](https://dev-api.sheetgo.com/rest/reference/models/LeftJoinProcessor.md) - [MergeProcessor](https://dev-api.sheetgo.com/rest/reference/models/MergeProcessor.md) - [ModelSettings](https://dev-api.sheetgo.com/rest/reference/models/ModelSettings.md) - [OnProcessingError](https://dev-api.sheetgo.com/rest/reference/models/OnProcessingError.md) - [OutlookAccount](https://dev-api.sheetgo.com/rest/reference/models/OutlookAccount.md) - [OutlookExtract](https://dev-api.sheetgo.com/rest/reference/models/OutlookExtract.md) - [OutlookMailbox](https://dev-api.sheetgo.com/rest/reference/models/OutlookMailbox.md) - [PageOrientation](https://dev-api.sheetgo.com/rest/reference/models/PageOrientation.md) - [PaginationCursor](https://dev-api.sheetgo.com/rest/reference/models/PaginationCursor.md) - [PaginationHeaderLink](https://dev-api.sheetgo.com/rest/reference/models/PaginationHeaderLink.md) - [PaginationLink](https://dev-api.sheetgo.com/rest/reference/models/PaginationLink.md) - [PaginationOffset](https://dev-api.sheetgo.com/rest/reference/models/PaginationOffset.md) - [PaginationPage](https://dev-api.sheetgo.com/rest/reference/models/PaginationPage.md) - [PaginationQueryOffset](https://dev-api.sheetgo.com/rest/reference/models/PaginationQueryOffset.md) - [PaperSize](https://dev-api.sheetgo.com/rest/reference/models/PaperSize.md) - [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) - [RemoveDuplicatesProcessor](https://dev-api.sheetgo.com/rest/reference/models/RemoveDuplicatesProcessor.md) - [SendFrom](https://dev-api.sheetgo.com/rest/reference/models/SendFrom.md) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) - [SourceAllTabs](https://dev-api.sheetgo.com/rest/reference/models/SourceAllTabs.md) - [SourceAuth](https://dev-api.sheetgo.com/rest/reference/models/SourceAuth.md) - [SourceBigQuery](https://dev-api.sheetgo.com/rest/reference/models/SourceBigQuery.md) - [SourceFile](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) - [SourceIntegration](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) - [SourceOutlook-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) - [SourceWebhook](https://dev-api.sheetgo.com/rest/reference/models/SourceWebhook.md) - [Split](https://dev-api.sheetgo.com/rest/reference/models/Split.md) - [UnusedFields](https://dev-api.sheetgo.com/rest/reference/models/UnusedFields.md) ### Used by other requests - [AttachmentIn](https://dev-api.sheetgo.com/rest/reference/models/AttachmentIn.md) - [AuthConfigIn](https://dev-api.sheetgo.com/rest/reference/models/AuthConfigIn.md) - [AutomationPatch](https://dev-api.sheetgo.com/rest/reference/models/AutomationPatch.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [BatchBody](https://dev-api.sheetgo.com/rest/reference/models/BatchBody.md) - [BodyContent](https://dev-api.sheetgo.com/rest/reference/models/BodyContent.md) - [Body_auth_token_rest_auth_token_post](https://dev-api.sheetgo.com/rest/reference/models/Body_auth_token_rest_auth_token_post.md) - [ChangeOwnerIn](https://dev-api.sheetgo.com/rest/reference/models/ChangeOwnerIn.md) - [CollaboratorRoleUpdate](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorRoleUpdate.md) - [CollaboratorsAdd](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsAdd.md) - [ElementType](https://dev-api.sheetgo.com/rest/reference/models/ElementType.md) - [FormCreate](https://dev-api.sheetgo.com/rest/reference/models/FormCreate.md) - [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md) - [FormPatch](https://dev-api.sheetgo.com/rest/reference/models/FormPatch.md) - [FormSubmissionTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/FormSubmissionTriggerIn.md) - [GeneralAccessSet](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessSet.md) - [GmailSendBody](https://dev-api.sheetgo.com/rest/reference/models/GmailSendBody.md) - [RefreshTokenRequest](https://dev-api.sheetgo.com/rest/reference/models/RefreshTokenRequest.md) - [SendBody](https://dev-api.sheetgo.com/rest/reference/models/SendBody.md) - [TimeTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/TimeTriggerIn.md) - [ValidateQueryRequest](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryRequest.md) - [WebhookBody](https://dev-api.sheetgo.com/rest/reference/models/WebhookBody.md) - [WorkflowArchive](https://dev-api.sheetgo.com/rest/reference/models/WorkflowArchive.md) - [WorkflowCreate](https://dev-api.sheetgo.com/rest/reference/models/WorkflowCreate.md) - [WorkflowFinishedTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/WorkflowFinishedTriggerIn.md) - [WorkflowPatch](https://dev-api.sheetgo.com/rest/reference/models/WorkflowPatch.md) ### Responses - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationRunStatus](https://dev-api.sheetgo.com/rest/reference/models/AutomationRunStatus.md) - [BigQueryDataset](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDataset.md) - [BigQueryDatasetListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDatasetListResponse.md) - [BigQueryPartitioningInfo](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartitioningInfo.md) - [BigQueryProject](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProject.md) - [BigQueryProjectListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProjectListResponse.md) - [BigQueryTable](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTable.md) - [BigQueryTableDetail](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableDetail.md) - [BigQueryTableListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableListResponse.md) - [ChartItem](https://dev-api.sheetgo.com/rest/reference/models/ChartItem.md) - [CollaboratorOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorOut.md) - [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) - [ColumnItem](https://dev-api.sheetgo.com/rest/reference/models/ColumnItem.md) - [DashboardOut](https://dev-api.sheetgo.com/rest/reference/models/DashboardOut.md) - [DataSourceOut](https://dev-api.sheetgo.com/rest/reference/models/DataSourceOut.md) - [DataSourceParameter](https://dev-api.sheetgo.com/rest/reference/models/DataSourceParameter.md) - [DestinationBigQuery-Output](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md) - [ElementDataOut](https://dev-api.sheetgo.com/rest/reference/models/ElementDataOut.md) - [ElementOut](https://dev-api.sheetgo.com/rest/reference/models/ElementOut.md) - [EmailFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Output.md) - [ExchangedToken](https://dev-api.sheetgo.com/rest/reference/models/ExchangedToken.md) - [ExecutionStatus](https://dev-api.sheetgo.com/rest/reference/models/ExecutionStatus.md) - [FileFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Output.md) - [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md) - [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md) - [FileStructureResponse](https://dev-api.sheetgo.com/rest/reference/models/FileStructureResponse.md) - [FileTypeFilter](https://dev-api.sheetgo.com/rest/reference/models/FileTypeFilter.md) - [FilterCondition-Output](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Output.md) - [FormFileModel](https://dev-api.sheetgo.com/rest/reference/models/FormFileModel.md) - [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) - [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md) - [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) - [IntegrationAccount](https://dev-api.sheetgo.com/rest/reference/models/IntegrationAccount.md) - [IntegrationListResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationListResponse.md) - [IntegrationOptionsResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOptionsResponse.md) - [IntegrationOut](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOut.md) - [ItemKind](https://dev-api.sheetgo.com/rest/reference/models/ItemKind.md) - [NamedRangeItem](https://dev-api.sheetgo.com/rest/reference/models/NamedRangeItem.md) - [PaginatedResponse](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse.md) - [PaginatedResponse_AutomationModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_AutomationModel_.md) - [PaginatedResponse_FormModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_FormModel_.md) - [PaginatedResponse_WorkflowModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_WorkflowModel_.md) - [PublishOut](https://dev-api.sheetgo.com/rest/reference/models/PublishOut.md) - [ResolvedFile](https://dev-api.sheetgo.com/rest/reference/models/ResolvedFile.md) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) - [SourceOutlook-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) - [SpreadsheetStructure](https://dev-api.sheetgo.com/rest/reference/models/SpreadsheetStructure.md) - [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - [TabItem](https://dev-api.sheetgo.com/rest/reference/models/TabItem.md) - [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md) - [ValidateQueryResponse](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryResponse.md) - [ValidationError](https://dev-api.sheetgo.com/rest/reference/models/ValidationError.md) - [WebhookOut](https://dev-api.sheetgo.com/rest/reference/models/WebhookOut.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) - [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) - [WorkflowRunStatus](https://dev-api.sheetgo.com/rest/reference/models/WorkflowRunStatus.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # workflows A **workflow** is an automated process that connects your spreadsheets and files and moves data between them — on a schedule or on demand — so a task that would otherwise be manual runs by itself. It is the top-level container that holds automations, forms and triggers. Use these endpoints to **list, create, read, update, run and archive** workflows, and to inspect their combined **sources** and **destinations**. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/beta/workflows/run/{id} **(Obsolete) Use /workflows//run instead** Deprecated This endpoint will be removed Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Workflow was successfully enqueued. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md). ## GET /rest/beta/workflows/{id}/run **Get a workflow's last-run status** Last-run execution status of the workflow, with a per-automation breakdown. Reflects each automation's most recent execution (latest only — no history). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Workflow last-run status. Schema: [WorkflowRunStatus](https://dev-api.sheetgo.com/rest/reference/models/WorkflowRunStatus.md) - `404` Workflow not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [WorkflowRunStatus](https://dev-api.sheetgo.com/rest/reference/models/WorkflowRunStatus.md). ## POST /rest/beta/workflows/{id}/run **Run a single workflow** Given a workflow id, the workflow will start its execution Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Workflow was successfully enqueued. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md). ## GET /rest/beta/workflows/{id}/files **Get file sources and destinations of all automations in a workflow** Return the sources and destinations of each automation in a workflow. Every source type is included (file, folder, api, webhook, integration, bigquery, outlook); write-only fields such as an api source's headers are omitted. Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` File sources and destinations per automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{id}/sources **Get file sources of all automations in a workflow** Return the sources of each automation in a workflow. Every source type is included (file, folder, api, webhook, integration, bigquery, outlook); write-only fields such as an api source's headers are omitted. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` File sources per automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{id}/destinations **Get file destinations of all automations in a workflow** Return the file/folder destinations of each automation in a workflow. Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` File destinations per automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{id} **Get a single workflow** Given a workflow id, returns the workflow model data Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` The workflow model data. Schema: [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md). ## PATCH /rest/beta/workflows/{id} **Update an existing workflow** Updates a workflow identified by id with the given arguments Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Optional. Body: [WorkflowPatch](https://dev-api.sheetgo.com/rest/reference/models/WorkflowPatch.md) **Responses** - `200` The workflow model updated. Schema: [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md), [WorkflowPatch](https://dev-api.sheetgo.com/rest/reference/models/WorkflowPatch.md). ## DELETE /rest/beta/workflows/{id} **Archive a workflow** Given a workflow id, archive the workflow Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Required. Body: [WorkflowArchive](https://dev-api.sheetgo.com/rest/reference/models/WorkflowArchive.md) **Responses** - `200` The workflow was successfully archived. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md), [WorkflowArchive](https://dev-api.sheetgo.com/rest/reference/models/WorkflowArchive.md). ## GET /rest/beta/workflows/ **Get a paginated list of workflows** Return a list of workflows following the pagination parameters Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `page` | query | integer | no | Page number, 1-based | default: `1`; min: 1 | | `per_page` | query | integer | no | Number of items per page (1-100; values above 100 are clamped to 100 and the effective size is echoed in the response) | default: `50`; min: 1 | **Responses** - `200` A paginated list of workflows. Schema: [PaginatedResponse_WorkflowModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_WorkflowModel_.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [PaginatedResponse_WorkflowModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_WorkflowModel_.md). ## POST /rest/beta/workflows/ **Create a new workflow** Create a new workflow with the given arguments Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Request body** Content type `application/json`. Optional. Body: [WorkflowCreate](https://dev-api.sheetgo.com/rest/reference/models/WorkflowCreate.md) **Responses** - `200` The workflow model created. Schema: [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [WorkflowCreate](https://dev-api.sheetgo.com/rest/reference/models/WorkflowCreate.md), [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md). ## GET /rest/beta/workflows/{id}/collaborators **List a workflow's collaborators** Members and their roles (owner included). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Workflow collaborators. Schema: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) - `404` Workflow not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/workflows/{id}/collaborators **Add collaborators to a workflow** Invite one or more collaborators. Sends an invitation email unless skip_invitation. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Required. Body: [CollaboratorsAdd](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsAdd.md) **Responses** - `200` Updated collaborators. Schema: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` Permission or plan restriction - `409` Collaborator limit reached - `429` Daily invitation limit reached - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [CollaboratorsAdd](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsAdd.md), [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## DELETE /rest/beta/workflows/{id}/collaborators **Remove all collaborators from a workflow** Remove every collaborator at once. The owner is always kept. Reports per-email outcomes; a partial failure does not abort the rest. Does not change general (domain/team) access - use DELETE /general-access for that. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `confirm` | query | boolean | no | Must be true - removes every collaborator | default: `false` | | `remove_file_access` | query | boolean | no | Also revoke their access to the files | default: `false` | **Responses** - `200` Collaborators removed (owner kept) - `404` Not found - `401` Authentication failed or token is invalid - `400` Missing confirmation - `403` Permission restriction - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## PATCH /rest/beta/workflows/{id}/collaborators/{email} **Change a collaborator's role** Promote or demote a collaborator (manager | collaborator). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `email` | path | string | yes | Collaborator email | | **Request body** Content type `application/json`. Required. Body: [CollaboratorRoleUpdate](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorRoleUpdate.md) **Responses** - `200` Updated collaborators. Schema: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) - `404` Workflow or member not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [CollaboratorRoleUpdate](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorRoleUpdate.md), [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## DELETE /rest/beta/workflows/{id}/collaborators/{email} **Remove a collaborator** Remove a collaborator, optionally revoking their file permissions. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `email` | path | string | yes | Collaborator email | | | `remove_file_access` | query | boolean | no | Also revoke their access to the files | default: `false` | **Responses** - `200` Updated collaborators. Schema: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) - `404` Workflow or member not found - `401` Authentication failed or token is invalid - `409` The owner cannot be removed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{id}/general-access **Get a workflow's general (domain/team) access** Whether the workflow is restricted, domain-wide, or team-wide. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Domain/team access. Schema: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## PUT /rest/beta/workflows/{id}/general-access **Set a workflow's general (domain/team) access** restrict clears domain/team; domain/team are derived from the owner's account. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Required. Body: [GeneralAccessSet](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessSet.md) **Responses** - `200` Updated access. Schema: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` Permission or plan restriction - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md), [GeneralAccessSet](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessSet.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## DELETE /rest/beta/workflows/{id}/general-access **Revoke a workflow's general (domain/team) access** Reset general access to `restrict` - the same as PUT {"access_type": "restrict"}. Note: because scopes derive from the HTTP method, this requires workflows.delete while the equivalent PUT requires workflows.write. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` General access reset to restrict. Schema: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` Permission restriction - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [GeneralAccessOut](https://dev-api.sheetgo.com/rest/reference/models/GeneralAccessOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/workflows/{id}/leave **Leave a shared workflow** Remove yourself from a workflow shared with you. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` You left the workflow - `404` Not found - `401` Authentication failed or token is invalid - `409` The owner cannot leave - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/workflows/{id}/request-access **Ask a workflow's owner for access** Email the owner an access request. Approval happens in the Sheetgo app. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `202` Access request sent to the owner - `404` Workflow not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/workflows/{id}/change-owner **Transfer workflow ownership** Transfer ownership to another Sheetgo user. Owner only; irreversible. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `confirm` | query | boolean | no | Must be true - this cannot be undone | default: `false` | **Request body** Content type `application/json`. Required. Body: [ChangeOwnerIn](https://dev-api.sheetgo.com/rest/reference/models/ChangeOwnerIn.md) **Responses** - `200` Ownership transferred - `404` Not found - `401` Authentication failed or token is invalid - `400` Missing confirmation - `403` Only the owner can transfer ownership - `422` The new owner is not a Sheetgo user Read next: [ChangeOwnerIn](https://dev-api.sheetgo.com/rest/reference/models/ChangeOwnerIn.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # automations An **automation** (also called a *connection*) is a single data transfer inside a workflow: it pulls data from one or more **sources**, optionally consolidates, filters or merges it, and writes the result to one or more **destinations** — all without manual copy-paste. Use these endpoints to **list, create, read, replace, update, run and archive** automations, and to inspect their source and destination files. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Guide: [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md) Guide: [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/beta/automations/run/{id} **(Obsolete) Use /automations//run instead** Deprecated This endpoint will be removed Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` successful operation. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/{id}/run **Get an automation's last-run status** Last-run execution status of a single automation (latest only — no history). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` Automation last-run status. Schema: [AutomationRunStatus](https://dev-api.sheetgo.com/rest/reference/models/AutomationRunStatus.md) - `404` Automation not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [AutomationRunStatus](https://dev-api.sheetgo.com/rest/reference/models/AutomationRunStatus.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## POST /rest/beta/automations/{id}/run **Run an automation** Given an automation Id, the automation will start its execution Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` successful operation. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/{id}/files **Get file sources and destinations of an automation** Return the sources and destinations of an automation. Every source type is included (file, folder, api, webhook, integration, bigquery, outlook); write-only fields such as an api source's headers are omitted. Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` File sources and destinations of the automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/{id}/sources **Get file sources of an automation** Return the sources of an automation. Every source type is included (file, folder, api, webhook, integration, bigquery, outlook), in the shape `GET /automations/{id}` returns; write-only fields such as an api source's headers are omitted. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` File sources of the automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/{id}/destinations **Get file destinations of an automation** Return the file/folder destinations of an automation. Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template). Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` File destinations of the automation - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/{id} **Get a single automation** Given an automation id, returns the automation model data Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` The automation model data. Schema: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## PUT /rest/beta/automations/{id} **Replace an existing automation entirely** **Column letters.** Every column field — `filter` (`columns`, `expressions[].column`), `split.column`, `left_join.column`, `remove_duplicates.columns` and `anonymize.columns` keys — takes the spreadsheet column LETTER (`D`), not the header name (`Status`), because the engine addresses columns by position. A header name is rejected with 422 `invalid_column`. To find the letter, read the source file's header row first: 1. `GET /files/{provider}/{file_id}/structure?include=columns&tab=Orders&header_row=1` — use the source's `id` and `provider`, the tab you import and its `offset_header` as `header_row`. A folder id reads its newest spreadsheet. 2. Pick the letter from `tabs[].columns`, e.g. `{"letter": "D", "index": 3, "header": "Status"}`. 3. Use it in the automation: ```json "filter": {"type": "condition", "condition_type": "and", "expressions": [{"column": "D", "criteria": "text_is_exactly", "value": "open"}]} ``` The structure call works for Google Sheets, Excel, CSV and TSV on every provider. It reads the file, so call it once per source and reuse the result; repeat calls are cached until the file changes. **Processor combinations.** `ai`, `filter`, `remove_duplicates` and `anonymize` can each be used on their own, and `merge` / `left_join` combine with them. These combinations are **not allowed today because the features are incompatible** in the engine, and are rejected with 422 `invalid_processor_combination`: | Combination | Why | |---|---| | `ai` + `remove_duplicates` / `anonymize` | the engine runs the AI step or the transformers, never both — the transformer would be silently skipped | | `filter` + `remove_duplicates` / `anonymize` | the header row is lost and the first data row is corrupted | | `remove_duplicates` + `anonymize` | same — and a row could be left unmasked | Automations created before this rule keep running unchanged. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Request body** Content type `application/json`. Optional. Body: [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) **Responses** - `200` The automation model updated. Schema: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` The plan does not include this destination type - `422` Invalid destination combination, recipient format, api-source shape, integration source, endpoint, api destination or bigquery combination, documents automation (invalid_documents_automation), file_filter (invalid_file_filter), Outlook automation (invalid_outlook_automation), email_filter (invalid_email_filter), or a processor combination that is not allowed (invalid_processor_combination), or a column that is not a spreadsheet letter (invalid_column) - `412` `send_from` names an Outlook account that is not connected or cannot send mail (`outlook_not_connected`), or `ai.model` / `ai.model_settings` without your own OpenAI account (`openai_not_connected`), or an Outlook source whose account cannot read mail (`outlook_not_connected`, Mail.Read) Read next: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md), [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## PATCH /rest/beta/automations/{id} **Rename an automation** **Renames only.** The body is `{"name": "…"}`; any other field is rejected with 422. To change sources, destinations or processors (`filter`, `merge`, `ai`, `left_join`, `remove_duplicates`, `split`, `anonymize`), `GET` the automation, edit it and send it back with `PUT` — GET returns everything PUT accepts, so the rest of the automation is kept. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Request body** Content type `application/json`. Required. Body: [AutomationPatch](https://dev-api.sheetgo.com/rest/reference/models/AutomationPatch.md) **Responses** - `200` The automation model updated. Schema: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` `name` missing or empty, or a field other than `name` (PATCH only renames) Read next: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md), [AutomationPatch](https://dev-api.sheetgo.com/rest/reference/models/AutomationPatch.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## DELETE /rest/beta/automations/{id} **Archive an automation** Given a workflow id, archive the workflow Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Automation identification | | **Responses** - `200` The automation was successfully archived. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## GET /rest/beta/automations/ **Get a paginated list of automations** Return a list of automations following the pagination parameters Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `page` | query | integer | no | Page number, 1-based | default: `1`; min: 1 | | `per_page` | query | integer | no | Number of items per page (1-100; values above 100 are clamped to 100 and the effective size is echoed in the response) | default: `50`; min: 1 | **Responses** - `200` A paginated list of automations. Schema: [PaginatedResponse_AutomationModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_AutomationModel_.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [PaginatedResponse_AutomationModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_AutomationModel_.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). ## POST /rest/beta/automations/ **Create a new automation** **Column letters.** Every column field — `filter` (`columns`, `expressions[].column`), `split.column`, `left_join.column`, `remove_duplicates.columns` and `anonymize.columns` keys — takes the spreadsheet column LETTER (`D`), not the header name (`Status`), because the engine addresses columns by position. A header name is rejected with 422 `invalid_column`. To find the letter, read the source file's header row first: 1. `GET /files/{provider}/{file_id}/structure?include=columns&tab=Orders&header_row=1` — use the source's `id` and `provider`, the tab you import and its `offset_header` as `header_row`. A folder id reads its newest spreadsheet. 2. Pick the letter from `tabs[].columns`, e.g. `{"letter": "D", "index": 3, "header": "Status"}`. 3. Use it in the automation: ```json "filter": {"type": "condition", "condition_type": "and", "expressions": [{"column": "D", "criteria": "text_is_exactly", "value": "open"}]} ``` The structure call works for Google Sheets, Excel, CSV and TSV on every provider. It reads the file, so call it once per source and reuse the result; repeat calls are cached until the file changes. **Processor combinations.** `ai`, `filter`, `remove_duplicates` and `anonymize` can each be used on their own, and `merge` / `left_join` combine with them. These combinations are **not allowed today because the features are incompatible** in the engine, and are rejected with 422 `invalid_processor_combination`: | Combination | Why | |---|---| | `ai` + `remove_duplicates` / `anonymize` | the engine runs the AI step or the transformers, never both — the transformer would be silently skipped | | `filter` + `remove_duplicates` / `anonymize` | the header row is lost and the first data row is corrupted | | `remove_duplicates` + `anonymize` | same — and a row could be left unmasked | Automations created before this rule keep running unchanged. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `x-run` | header | boolean, nullable | no | Set to true to run the automation immediately after creating it. The run is queued, so the response returns before it finishes — poll `GET /rest/beta/automations/{id}/run` for the outcome. | default: `false` | **Request body** Content type `application/json`. Optional. Body: [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) **Responses** - `200` The automation model created. Schema: [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` The plan does not include this destination type - `422` Invalid destination combination, recipient format, api-source shape, integration source, endpoint, api destination or bigquery combination, documents automation (invalid_documents_automation), file_filter (invalid_file_filter), Outlook automation (invalid_outlook_automation), email_filter (invalid_email_filter), or a processor combination that is not allowed (invalid_processor_combination), or a column that is not a spreadsheet letter (invalid_column) - `412` `send_from` names an Outlook account that is not connected or cannot send mail (`outlook_not_connected`), or `ai.model` / `ai.model_settings` without your own OpenAI account (`openai_not_connected`), or an Outlook source whose account cannot read mail (`outlook_not_connected`, Mail.Read) Read next: [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md), [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md), [Smart Tags](https://dev-api.sheetgo.com/rest/guides/smart-tags.md), [Cell References](https://dev-api.sheetgo.com/rest/guides/cell-references.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # triggers A **trigger** defines what makes a workflow run **automatically**, so you set it once instead of running the workflow by hand. A trigger can be a recurring **schedule** (e.g. every 15 minutes, or every weekday at 09:00) or the **completion of another workflow** (chaining one run after another). Each workflow has at most **one** active trigger. Use these endpoints to **read**, **set or replace**, and **remove** a workflow's trigger. All endpoints are under `/rest/beta` and require auth via session JWT or `sg_…` API key Bearer token. ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/rest/beta/workflows/{id}/trigger` | Read the current trigger configuration | | `PUT` | `/rest/beta/workflows/{id}/trigger` | Set or replace the trigger (idempotent) | | `DELETE` | `/rest/beta/workflows/{id}/trigger` | Turn the trigger off | ### Trigger type: `time` (schedule) Run the workflow on a recurring schedule. Use **friendly fields** (recommended) or a **raw cron expression** — the two forms are mutually exclusive; supplying both returns `422`. #### Friendly fields ```json { "type": "time", "frequency": "daily", "time": "09:00", "timezone": "Europe/Berlin" } ``` | Field | Required for | Allowed values | |---|---|---| | `frequency` | always | `minutes`, `hourly`, `daily`, `weekly`, `monthly` | | `every` | `minutes`, `hourly` | `minutes`: `15` or `30`; `hourly`: `1`, `2`, `4`, `6`, `8`, `12` | | `time` | `daily`, `weekly`, `monthly` | `"HH:MM"` — **minute is always coerced to `:00`** | | `weekday` | `weekly` | a day name (`sunday` … `saturday`) **or a list** of day names for multiple days, e.g. `["monday","thursday"]` | | `day_of_month` | `monthly` | `1`–`31` or `"last"` | | `timezone` | optional | IANA name (e.g. `"America/New_York"`). Defaults to the workflow's current timezone. | > **`HH:00` constraint:** The minute component of `time` is always silently coerced to `00`. Schedules run at the top of the hour. `"09:45"` is stored and executed as `"09:00"`. #### Friendly → cron mapping | Friendly input | Generated cron | |---|---| | `minutes`, every `15` | `*/15 * * * *` | | `minutes`, every `30` | `*/30 * * * *` | | `hourly`, every `N` (1, 2, 4, 6, 8, 12) | `0 0-23/N * * *` | | `daily` at hour H | `0 H * * *` | | `weekly` at hour H on weekday(s) D | `0 H * * D` (sunday=0 … saturday=6; multiple days → `0 H * * 1,2,4,5`) | | `monthly` at hour H on day DOM | `0 H DOM * *` (`"last"` → `L`) | #### Reading a trigger (GET) — `cron` is authoritative `cron` is always the source of truth. The friendly fields (`frequency`, `every`, `time`, `weekday`, `day_of_month`) are a **convenience** filled in only when the schedule maps cleanly to the table above: - A `weekly` schedule with one day returns `weekday` as a string; with several days it returns a list (cron day lists like `1,2,4,5` and ranges like `1-5` are both parsed). - **Advanced / compound schedules are not expressed in the friendly fields.** Schedules created in the Sheetgo dashboard can combine things the friendly syntax does not model — an hour window, an hour step, and a weekday restriction together (e.g. `0 6-18/2 * * 1,2,3,4,5` = every 2 hours from 06:00–18:00, Monday–Friday). For these, every friendly field is `null` and only `cron` is populated. Read `cron` to get the exact schedule. #### Raw cron expression (power-user escape hatch) ```json { "type": "time", "cron": "0 9 * * *", "timezone": "UTC" } ``` - Provide `cron` instead of friendly fields. The two forms are mutually exclusive. - The **minute field** must be `0`, `*/15`, or `*/30`. Any other value returns `422 invalid_trigger`. ### Trigger type: `workflow_finished` (chained execution) Run this workflow immediately after another workflow completes. ```json { "type": "workflow_finished", "after_workflow_id": "abc123" } ``` - `after_workflow_id` is the **parent** workflow whose completion fires this trigger. - Requires workflow **ownership** (not just edit permission) — see `not_workflow_owner` below. - Returns `409 circular_trigger` if the relationship would create a trigger loop. ### Response shape GET and PUT return the full read model; DELETE returns the disabled state. ```json { "active": true, "type": "time", "frequency": "daily", "every": null, "time": "09:00", "weekday": null, "day_of_month": null, "cron": "0 9 * * *", "timezone": "Europe/Berlin", "after_workflow_id": null } ``` An inactive / never-set trigger returns `{ "active": false, "type": null, ... }` with all other fields `null`. ### curl examples **Daily time trigger:** ```bash curl -X PUT /rest/beta/workflows/{id}/trigger \ -H "Authorization: Bearer sg_..." \ -H "Content-Type: application/json" \ -d '{"type":"time","frequency":"daily","time":"09:00","timezone":"Europe/Berlin"}' ``` **15-minute interval:** ```bash curl -X PUT /rest/beta/workflows/{id}/trigger \ -H "Authorization: Bearer sg_..." \ -H "Content-Type: application/json" \ -d '{"type":"time","frequency":"minutes","every":15}' ``` **workflow_finished trigger:** ```bash curl -X PUT /rest/beta/workflows/{id}/trigger \ -H "Authorization: Bearer sg_..." \ -H "Content-Type: application/json" \ -d '{"type":"workflow_finished","after_workflow_id":"parent-workflow-id"}' ``` **Turn off a trigger:** ```bash curl -X DELETE /rest/beta/workflows/{id}/trigger \ -H "Authorization: Bearer sg_..." ``` ### Error codes All errors return `{ "code": "...", "detail": "..." }`. | HTTP | `code` | When | |---|---|---| | 422 | `invalid_trigger` | Bad/missing fields, both `cron` and friendly fields supplied, or raw-cron minute not `0`, `*/15`, `*/30`. | | 403 | `permission_denied` | Caller lacks edit or disable permission on the workflow. | | 403 | `not_workflow_owner` | `workflow_finished` requires workflow ownership. | | 403 | `plan_upgrade_required` | The account plan does not include this trigger type or feature. | | 409 | `circular_trigger` | The chosen parent would create a trigger loop. | | 404 | `workflow_not_found` | The workflow (or parent) does not exist or is not accessible. | | 500 | — | `{ "status": 0, "error": "internal" }` | Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/workflows/{id}/trigger **Get a workflow's automation trigger** Returns the workflow's current trigger — what makes it run without anyone pressing a button. Only the fields belonging to the active `type` are populated; the rest are null. A workflow with no trigger returns `{"active": false, "type": null}` with HTTP 200, not a 404. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow id | | **Responses** - `200` Current trigger configuration. Schema: [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md) - `401` Authentication failed or token is invalid - `404` Workflow not found - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md). ## PUT /rest/beta/workflows/{id}/trigger **Set or replace a workflow's automation trigger** Sets the workflow's trigger, replacing any existing one — this is a full replacement, not a merge. Pick one of three `type` values: * `time` — run on a schedule. Use the friendly fields (`frequency`, `every`, `time`, `weekday`, `day_of_month`) **or** a raw `cron`, never both. Schedules run on the hour, so the cron minute must be `0`, `*/15` or `*/30`. * `workflow_finished` — run when another workflow finishes, named by `after_workflow_id`. Chains that would form a loop are rejected with **409**. * `form_submission` — run whenever a bound form receives a response. The response echoes the stored trigger, including the resolved `cron`. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow id | | **Request body** Content type `application/json`. Required. One of three trigger types, discriminated by `type`: `time`, `workflow_finished` or `form_submission`. Body: [TimeTriggerIn (type = "time")](https://dev-api.sheetgo.com/rest/reference/models/TimeTriggerIn.md) or [WorkflowFinishedTriggerIn (type = "workflow_finished")](https://dev-api.sheetgo.com/rest/reference/models/WorkflowFinishedTriggerIn.md) or [FormSubmissionTriggerIn (type = "form_submission")](https://dev-api.sheetgo.com/rest/reference/models/FormSubmissionTriggerIn.md) **Responses** - `200` Trigger set. Schema: [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md) - `401` Authentication failed or token is invalid - `403` Permission / plan / owner restriction - `404` Workflow (or parent) not found - `409` Circular trigger - `422` Invalid trigger configuration Read next: [FormSubmissionTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/FormSubmissionTriggerIn.md), [TimeTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/TimeTriggerIn.md), [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md), [WorkflowFinishedTriggerIn](https://dev-api.sheetgo.com/rest/reference/models/WorkflowFinishedTriggerIn.md). ## DELETE /rest/beta/workflows/{id}/trigger **Turn off a workflow's automation trigger** Disables the workflow's trigger, so it runs only on demand. Returns the trigger in its disabled state (`active: false`). Safe to call on a workflow that has no trigger. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow id | | **Responses** - `200` Trigger disabled. Schema: [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md) - `401` Authentication failed or token is invalid - `403` Permission restriction - `404` Workflow not found - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [TriggerOut](https://dev-api.sheetgo.com/rest/reference/models/TriggerOut.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # dashboards **Dashboards** turn a workflow's data into shareable visual summaries. Each workflow has a single dashboard; add indicator, table and chart-reference elements to it, read an element's live values, and publish the dashboard to get a viewer URL. Elements point at a spreadsheet's tabs and charts by id — get those from `GET /files/{provider}/{file_id}/structure`. Google Sheets on Google Drive only. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/workflows/{id}/dashboard **Get a workflow's dashboard** Elements and publish state in one call. Two Mongo reads, no Sheets access. `elements[].error` is usually null even for a broken element: render errors are written during a build and not persisted (workflow/controller.py:759). Read an element's `/data` to be certain it renders. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Responses** - `200` Elements and publish state. Schema: [DashboardOut](https://dev-api.sheetgo.com/rest/reference/models/DashboardOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` Not a member of the workflow - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [DashboardOut](https://dev-api.sheetgo.com/rest/reference/models/DashboardOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data **Read one dashboard element's current values** Build and return one element's values. Bounded to a single element: `get_workflow_dashboard` filters `dashboard['data']` down to the requested id, so this is one or two Sheets calls regardless of dashboard size. The element's `controlKey` is read from storage, never taken from the caller — `get_chart_instance` matches on it (workflow/dashboard/utils.py:20) and would find nothing without it. `page`/`per_page` apply to `table` elements only. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `element_id` | path | string | yes | Element identification | | | `page` | query | integer | no | Table elements only | default: `1`; min: 1 | | `per_page` | query | integer | no | Table elements only | default: `50`; min: 1; max: 500 | **Responses** - `200` The element's current values. Schema: [ElementDataOut](https://dev-api.sheetgo.com/rest/reference/models/ElementDataOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `403` Not a member of the workflow - `502` The values could not be read - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [ElementDataOut](https://dev-api.sheetgo.com/rest/reference/models/ElementDataOut.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/workflows/{id}/dashboard/elements **Add elements to a workflow's dashboard** Create one or more dashboard elements, atomically. The dashboard itself needs no creating — `add_charts` brings it into being with the first element (workflow/models.py:1806). Every element is validated against the real spreadsheet before anything is written, and a single failure rejects the whole batch: a partial write would leave the caller diffing what landed. Validation uses the workflow owner's credentials, since those are what render the dashboard later. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Required. One or more elements to create. Body: array of object **Responses** - `201` The created elements. Schema: array of [ElementOut](https://dev-api.sheetgo.com/rest/reference/models/ElementOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `400` Malformed element - `403` Requires manager or owner - `409` Chart limit reached - `422` Source could not be validated Read next: [ElementOut](https://dev-api.sheetgo.com/rest/reference/models/ElementOut.md), [ElementType](https://dev-api.sheetgo.com/rest/reference/models/ElementType.md). ## DELETE /rest/beta/workflows/{id}/dashboard/elements/{element_id} **Delete one dashboard element** Remove one element. Deleting the LAST element removes the dashboard and takes it offline: `remove_chart` sets `workflow.dashboard = None` and marks the publishing record deleted (workflow/models.py:1920, :1932). Adding an element later revives it with the same `public_id`, so the viewer URL survives. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | | `element_id` | path | string | yes | Element identification | | **Responses** - `204` Deleted - `404` Not found - `401` Authentication failed or token is invalid - `403` Requires manager or owner - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## PUT /rest/beta/workflows/{id}/dashboard/publish **Publish or unpublish a workflow's dashboard** Set `shared`, `require_auth` and `auth_config.domain`. `specific_users` and `visual_schema` are rejected. The internal PUT emails every address in `authConfig.specificUsers` via SendGrid (dashboard/models.py:190); refusing the field is what keeps an API key from mailing arbitrary recipients. Both remain editable in the Sheetgo UI. Stricter than the internal route, which requires only workflow access (workflow/views.py:936) and so lets a collaborator publish publicly. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Required. Publish settings. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `shared` | string | yes | public \| private | | | `require_auth` | boolean | no | Require a signed-in viewer | default: `false` | | `auth_config` | [AuthConfigIn](https://dev-api.sheetgo.com/rest/reference/models/AuthConfigIn.md), nullable | no | | | **Responses** - `200` Publish state. Schema: [PublishOut](https://dev-api.sheetgo.com/rest/reference/models/PublishOut.md) - `404` Not found - `401` Authentication failed or token is invalid - `400` Malformed or unsupported field - `403` Requires manager or owner, or plan upgrade - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [AuthConfigIn](https://dev-api.sheetgo.com/rest/reference/models/AuthConfigIn.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [PublishOut](https://dev-api.sheetgo.com/rest/reference/models/PublishOut.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # forms A **Sheetgo form** collects data straight into a workflow. Its fields come from your spreadsheet's columns, and every submission is appended as a new row — a simple way to feed a workflow from people instead of another system. Use these endpoints to **list** a workflow's forms and **read** their configuration. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/workflows/{workflow_id}/forms/{form_id} **Get a form** Returns the form model data Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `form_id` | path | string | yes | Form identification | | **Responses** - `200` The form model data. Schema: [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id} **Update an existing form** Patches form data Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `form_id` | path | string | yes | Form identification | | **Request body** Content type `application/json`. Optional. Body: [FormPatch](https://dev-api.sheetgo.com/rest/reference/models/FormPatch.md) **Responses** - `200` The form model patched. Schema: [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md), [FormPatch](https://dev-api.sheetgo.com/rest/reference/models/FormPatch.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id} **Delete a form** Deletes a form Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `form_id` | path | string | yes | Form identification | | **Responses** - `200` The form was successfully deleted. Schema: [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SuccessResponse](https://dev-api.sheetgo.com/rest/reference/models/SuccessResponse.md). ## GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses **Get a form's responses (paginated)** Return the form's responses (from its first target spreadsheet), paginated. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `form_id` | path | string | yes | Form identification | | | `page` | query | integer | no | Page number | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page | default: `50`; min: 1; max: 100 | | `strip_tags` | query | boolean | no | Strip trailing ' [config]' tags from response headers | default: `false` | **Responses** - `200` Paginated form responses. Schema: [PaginatedResponse](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse.md) - `404` Form or workflow not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [PaginatedResponse](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse.md). ## HEAD /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses **Inspect a form's responses metadata without downloading them** Return response count / columns / last-modified in headers, no body. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `form_id` | path | string | yes | Form identification | | | `strip_tags` | query | boolean | no | Strip trailing ' [config]' tags from response headers | default: `false` | **Responses** - `200` Response metadata in X-Sheetgo-* headers - `404` Form or workflow not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/workflows/{workflow_id}/forms/ **Get a paginated list of forms** Return a list of forms following the pagination parameters Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | | `page` | query | integer | no | Page number, 1-based | default: `1`; min: 1 | | `per_page` | query | integer | no | Number of items per page (1-100; values above 100 are clamped to 100 and the effective size is echoed in the response) | default: `50`; min: 1 | **Responses** - `200` A paginated list of forms. Schema: [PaginatedResponse_FormModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_FormModel_.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [PaginatedResponse_FormModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_FormModel_.md). ## POST /rest/beta/workflows/{workflow_id}/forms/ **Create a new form** Create a new form Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow identification | | **Request body** Content type `application/json`. Optional. Body: [FormCreate](https://dev-api.sheetgo.com/rest/reference/models/FormCreate.md) **Responses** - `200` The form model created. Schema: [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) - `404` Not found - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FormCreate](https://dev-api.sheetgo.com/rest/reference/models/FormCreate.md), [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # webhook A **webhook** is a private URL that lets external systems push data into a workflow over HTTP. Your app sends a JSON payload and Sheetgo lands it in the workflow — optionally triggering a full run — with no Google APIs or OAuth to manage on your side. Use this endpoint to **POST** data to a workflow's webhook source. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/beta/webhook/{public_id} **Push values to a webhook and trigger its bound automation** Sends rows into a workflow through an automation's webhook source, and starts a run. Answers **202 Accepted** as soon as the data is stored and the run is queued — the run itself happens asynchronously, so a 202 means *accepted*, not *finished*. Poll `GET /rest/beta/automations/{automation_id}/run` for the outcome. **Safe retries.** Send an `Idempotency-Key` header (any unique string, 1-255 printable characters) and reuse it when you retry the same push. Sheetgo then runs the automation once and answers the retry with the first response plus `Idempotent-Replayed: true`, for 24 hours. A server error (5xx) is not remembered, so retrying it runs again. Get the `public_id` from `GET /rest/beta/automations/{automation_id}/webhook`. Treat it as a secret. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `public_id` | path | string | yes | The webhook's public identifier, from the automation's webhook endpoint. | | | `Idempotency-Key` | header | string, nullable | no | Optional. Reuse the same value when retrying a push so it is processed only once. | | **Request body** Content type `application/json`. Required. Body: [WebhookBody](https://dev-api.sheetgo.com/rest/reference/models/WebhookBody.md) **Responses** - `202` Accepted; dispatch started - `404` Webhook not found or not owned by caller - `400` Malformed body, invalid `Idempotency-Key`, or webhook not bound to a webhook-source automation - `401` Auth failed - `409` A request with the same `Idempotency-Key` is still being processed (`idempotency_in_progress`) - `413` Values exceed row/byte cap - `422` Invalid request body (FastAPI validation error), or the `Idempotency-Key` was already used with a different body (`idempotency_key_reused`) Read next: [WebhookBody](https://dev-api.sheetgo.com/rest/reference/models/WebhookBody.md). ## GET /rest/beta/automations/{automation_id}/webhook **Retrieve an automation's webhook** Returns the webhook bound to this automation's webhook source — most importantly its `url`, which is the address an external system POSTs data to. A webhook is minted automatically when an automation is created with a `webhook` source; there is no endpoint to create one separately, and no way to rotate it. Deleting the automation deletes the webhook with it. Automations without a webhook source return **404**. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `automation_id` | path | string | yes | Automation id | | **Responses** - `200` The automation's webhook. Schema: [WebhookOut](https://dev-api.sheetgo.com/rest/reference/models/WebhookOut.md) - `401` Authentication failed or token is invalid - `404` Automation has no webhook - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [WebhookOut](https://dev-api.sheetgo.com/rest/reference/models/WebhookOut.md). ## GET /rest/beta/workflows/{workflow_id}/webhooks **List a workflow's webhooks** Lists every webhook across the workflow's automations, so you can find the right `url` without knowing which automation owns it. Paginated with the standard `page` / `per_page` envelope. A workflow with no webhook sources returns an empty list, not a 404. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `workflow_id` | path | string | yes | Workflow id | | | `page` | query | integer | no | Page number, 1-based. | default: `1`; min: 1 | | `per_page` | query | integer | no | Webhooks per page (1-100). | default: `50`; min: 1; max: 100 | **Responses** - `200` Webhooks in the workflow - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # api-destination **API as a destination** turns a workflow's output into a live, read-only JSON feed at a private URL. Each workflow run refreshes the data; consumers fetch it on demand with an API key, with pagination, sorting and conditional (ETag) requests. Use these endpoints to **read** the published data (`GET`) or **inspect** its metadata without downloading it (`HEAD`). > **`filter` is reserved and does not work yet.** The `GET` endpoint accepts a `filter` query parameter, but it is a placeholder for a future version: the value is ignored and the **full, unfiltered** dataset is returned, with no error and no warning. It exists so a future filter-aware client can call today's server without failing outright. Until filtering ships, narrow the data in the automation itself or filter client-side — never rely on `filter` to scope what a caller receives. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/api-destination/{public_id} **Read data from an API-as-Destination endpoint** Reads the rows a workflow published through its `api` destination. Each workflow run refreshes the data; this endpoint serves whatever the last run produced. Supports pagination (`page`, `page_size`), sorting (`order_by`, `direction`), a single-tab filter (`tab`) and two output shapes (`format`). Responses carry `ETag` and `Last-Modified`, so a conditional request with `If-None-Match` gets a **304** and no body — use it when polling. Before the workflow's first run the endpoint exists but has no data, and answers 200 with an empty result rather than a 404. Requires an API key with **both** the `automations` and `api-destination` scopes. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `public_id` | path | string | yes | The destination's public identifier, returned when the automation's `api` destination was created. It is stable across updates to the automation. | | | `format` | query | string | no | Response format: 'dict' or 'array' | default: `"dict"` | | `page` | query | integer | no | Page number (1-based) | default: `1`; min: 1 | | `page_size` | query | integer | no | Rows per page (1–1000; > 1000 is clamped to 1000) | default: `100` | | `order_by` | query | string, nullable | no | Column name to sort by | | | `direction` | query | string | no | Sort direction | one of: `"asc"`, `"desc"`; default: `"asc"` | | `filter` | query | string, nullable | no | **Reserved for a future version — NOT IMPLEMENTED today.** The parameter is accepted so that a future filter-aware client can call this endpoint without a hard failure, but it has no effect: the value is ignored and the **full, unfiltered** dataset is returned. Do not use it to scope a response — filter client-side, or narrow the data in the automation itself. This description will change when filtering ships. | | | `tab` | query | string, nullable | no | Return only this source tab (by name); omit for all tabs | | **Responses** - `200` Data served (or empty-state pre-publish) - `404` Destination missing / deleted / unbound - `304` Not modified — ETag or Last-Modified matched - `400` Invalid query params - `401` Auth failed - `500` Internal error - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## HEAD /rest/beta/api-destination/{public_id} **Inspect API-as-Destination metadata without downloading data** Same as the `GET`, but returns headers only — use it to check whether the data changed before paying for the body. Carries the same `ETag` and `Last-Modified` as the `GET`, plus `X-Sheetgo-*` headers describing the row count and columns. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `public_id` | path | string | yes | The destination's public identifier, returned when the automation's `api` destination was created. It is stable across updates to the automation. | | **Responses** - `200` Headers populated (or empty-state if pre-publish) - `404` Destination missing / deleted / unbound - `401` Auth failed - `500` Internal error - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # integrations **Integrations** are pre-configured sources for third-party services — currently Shopify and QuickBooks. Instead of describing an HTTP request yourself, you pick a *data source* from a menu and Sheetgo supplies the URL, credentials, pagination and response parsing for the account you authorized. Use `GET /integrations` to see which providers you have connected and under which accounts, and `GET /integrations/{provider}/options` to list the data sources you can pull and the parameters each accepts. Then create an automation with an `integration` source. Authorizing a provider is a browser sign-in in the Sheetgo web app and cannot be done through the API — these endpoints report the result. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/integrations **List integrations and connected accounts** Every integration, whether or not you have authorized it. `accounts[].account` is what an automation's `sources[].account` expects. With exactly one account for a provider you can omit that field and Sheetgo resolves it; with several, naming one is required. Authorization itself happens in the Sheetgo web app — it is a browser OAuth flow and cannot be driven from an API key. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Responses** - `200` Providers and your authorized accounts. Schema: [IntegrationListResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationListResponse.md) - `401` Authentication failed or token is invalid Read next: [IntegrationListResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationListResponse.md). ## GET /rest/beta/integrations/{provider}/options **List a provider's data sources** What you can ask this provider for. Static per provider and identical for every account, so this answers even before you have authorized one — useful for exploring first. `id` is what `sources[].data_source` expects; `parameters` is what `sources[].parameters` accepts, and only QuickBooks reports declare any. Retired data sources are omitted: they would raise mid-run rather than return data. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [IntegrationProvider](https://dev-api.sheetgo.com/rest/reference/models/IntegrationProvider.md) | yes | Integration provider: shopify or quickbooks | | **Responses** - `200` Selectable data sources. Schema: [IntegrationOptionsResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOptionsResponse.md) - `401` Authentication failed or token is invalid - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [IntegrationOptionsResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOptionsResponse.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # outlook Integration endpoints used by the Sheetgo add-in for Microsoft Outlook to connect mailbox data to workflows. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/beta/outlook/messages/batch **Batch Messages** Resolve a list of message ids to message bodies in one shot. Missing or cross-owner ids come back as ``{id, error: "message_not_found"}`` entries inside ``values.messages`` rather than failing the whole call. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Request body** Content type `application/json`. Required. Body: [BatchBody](https://dev-api.sheetgo.com/rest/reference/models/BatchBody.md) **Responses** - `200` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [BatchBody](https://dev-api.sheetgo.com/rest/reference/models/BatchBody.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/outlook/messages **List Messages** Page through messages in a folder. `folder` is a snake-case name (e.g. "inbox") mapped to a well-known mail folder; unknown values return 400. `limit` is bounded to [1, 100]; a value outside the range returns 400 before any upstream call is made. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `folder` | query | string | no | Well-known mail folder to read, snake_case (for example `inbox`, `sent_items`, `drafts`). An unknown name returns 400. | default: `"inbox"` | | `limit` | query | integer | no | Messages per page, 1-100. Outside that range returns 400 before any call to Microsoft is made. | default: `25` | | `page_token` | query | string, nullable | no | Opaque token from a previous response's paging cursor. Omit for the first page. | | **Responses** - `200` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/outlook/messages/{message_id} **Get Message** Fetch one message by id. ``include_attachments=true`` opts the response into the ``$expand=attachments`` Graph path; the controller enforces the 25 MB total cap and raises 413 ``AttachmentsTooLarge`` if exceeded. For larger attachments, fall back to the per-attachment binary endpoint below. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `message_id` | path | string | yes | Id of the message to fetch. | | | `include_attachments` | query | boolean | no | Include each attachment's content in the response. Capped at 25 MB in total — a larger message returns 413, so fetch those attachments one at a time instead. | default: `false` | **Responses** - `200` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/outlook/messages/{message_id}/attachments/{attachment_id} **Get Attachment** Stream a single attachment as its native bytes (NOT base64-wrapped). Returns ``application/`` with a ``Content-Disposition: attachment; filename="..."`` header. Filenames are escaped for the ``"`` delimiter — a malicious upload couldn't smuggle extra header fields via a crafted name. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `message_id` | path | string | yes | Id of the message the attachment belongs to. | | | `attachment_id` | path | string | yes | Id of the attachment to download. | | **Responses** - `200` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/outlook/send **Send** Send a message through the connected Microsoft account. Body validation (recipient count, attachment count, attachment total size) runs before this handler; invalid input returns 422 with the field-level reason. An address rejected upstream returns 400. Defaults: ``save_to_sent_items=True``. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Request body** Content type `application/json`. Required. Body: [SendBody](https://dev-api.sheetgo.com/rest/reference/models/SendBody.md) **Responses** - `202` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [SendBody](https://dev-api.sheetgo.com/rest/reference/models/SendBody.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # gmail Send email through a connected Google account. Mirrors the Outlook send contract. Gmail always stores sent mail in SENT, so there is no `save_to_sent_items` option. Read endpoints (list/get/attachments) are not available: Sheetgo's Google grant carries only the `gmail.send` scope. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/beta/gmail/send **Send** Send a message through the connected Google account. Gmail always stores the sent message in SENT — there is no ``save_to_sent_items`` equivalent. Total attachment bytes are capped at 3 MB and recipients at 50, matching the Outlook contract. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Request body** Content type `application/json`. Required. Body: [GmailSendBody](https://dev-api.sheetgo.com/rest/reference/models/GmailSendBody.md) **Responses** - `202` Successful Response - `401` Auth failed - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [GmailSendBody](https://dev-api.sheetgo.com/rest/reference/models/GmailSendBody.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # files Browse and search the storage providers connected to your account — **Google Drive**, **OneDrive**, **SharePoint** and **Dropbox** — to find the ids you need when building an automation. Every result carries `id`, `provider` and `file_type`, which is exactly what a source or destination needs, so a result can be used in an automation payload without translation. Folders are returned alongside files; filter with `type=folder` when you only want containers. Start at `/files/{provider}/roots` to discover where browsing can begin: SharePoint sites, Drive shared drives and virtual containers such as *Shared with me* are only reachable from there. These endpoints are **read-only** — files are created through the automation payload. **Google Docs are not returned by default.** Pass `type=gdocs` to find a Google Docs file for a `document` destination's `template_id` — it is the one type omitted from an unfiltered listing, and it exists on Google Drive only. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/files/{provider} **Browse a folder** List the direct contents of one folder, files and folders interleaved. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Storage provider: drive, onedrive, sharepoint or dropbox | | | `parent` | query | string | no | Folder id to list. Defaults to the provider root. Use `/files/{provider}/roots` to discover valid starting points (SharePoint sites, Drive shared drives, Shared with me). | default: `"root"` | | `type` | query | string, nullable | no | Comma-separated list of file types to include: `gsheets`, `xlsx`, `csv`, `tsv`, `folder`, `gdocs`. Omit for every supported type **except** `gdocs`: Google Docs are not returned by default, so request `type=gdocs` to find a document template (Google Drive only). | | | `page` | query | integer | no | Page number, 1-based | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page | default: `50`; min: 1; max: 100 | **Responses** - `200` Folder contents. Schema: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md) - `401` Authentication failed or token is invalid - `412` Provider account not connected - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/files/{provider}/search **Search files and folders by name** Search the whole connected account by name. Results keep the provider's relevance order rather than being sorted alphabetically, so the best match stays on the first page. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Storage provider: drive, onedrive, sharepoint or dropbox | | | `q` | query | string | yes | Name to search for, across the whole connected account. Drive and SharePoint also accept a pasted file URL and resolve it to that exact item. | min length: 1 | | `type` | query | string, nullable | no | Comma-separated list of file types to include: `gsheets`, `xlsx`, `csv`, `tsv`, `folder`, `gdocs`. Omit for every supported type **except** `gdocs`: Google Docs are not returned by default, so request `type=gdocs` to find a document template (Google Drive only). | | | `page` | query | integer | no | Page number, 1-based | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page | default: `50`; min: 1; max: 100 | **Responses** - `200` Search results. Schema: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md) - `401` Authentication failed or token is invalid - `412` Provider account not connected - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/files/{provider}/roots **List browsable entry points** Where browsing can start for this provider. SharePoint ids are site-qualified, so its sites are only reachable through this endpoint. Drive adds its shared drives and virtual containers here. Each entry's `id` can be passed straight back as `parent`. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Storage provider: drive, onedrive, sharepoint or dropbox | | **Responses** - `200` Entry points. Schema: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md) - `401` Authentication failed or token is invalid - `412` Provider account not connected - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/files/{provider}/{file_id} **Get one file or folder** Resolve a single id — useful to validate one before building an automation. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Storage provider: drive, onedrive, sharepoint or dropbox | | | `file_id` | path | string | yes | Provider file or folder id | | **Responses** - `200` Item metadata. Schema: [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md) - `401` Authentication failed or token is invalid - `404` Item not found or not accessible - `412` Provider account not connected - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/files/{provider}/{file_id}/structure **Describe what is inside a file** Tabs, column letters, named ranges and charts of a spreadsheet. `include=columns` returns, per tab, the letter → header map that automation column fields (`filter`, `split`, `remove_duplicates`, `left_join`, `anonymize`) need: they take the LETTER (`D`), not the header (`Status`). Cost: this reads the file. Google Sheets and Excel on SharePoint cost a provider read per call; other files (CSV/TSV, and Excel on Drive, Dropbox or OneDrive) are downloaded and parsed, and the first read of a large file takes seconds. Pass `tab=` and reuse the result: repeat reads of the same file, `header_row` and tabs are answered from a cache without reopening the file, until it changes. The ids returned are what a dashboard element needs: `tabs[].id` is the numeric `tab_id` (Google Sheets only), `charts[].chart_id` the `chart_id`. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `provider` | path | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Storage provider: drive, onedrive, sharepoint or dropbox | | | `file_id` | path | string | yes | Provider file id, or a folder id (its newest spreadsheet is read) | | | `include` | query | string | no | Comma-separated sections: `tabs`, `columns`, `named_ranges`, `charts`. Default: `tabs,named_ranges,charts` for Google Sheets, `tabs` for Excel/CSV/TSV. `columns` (the letter → header map automation column fields need) is never in the default and implies `tabs`. `named_ranges` and `charts` exist only in Google Sheets. | | | `tab` | query | string | no | `columns` for this tab only (by name). Cannot be combined with `all_tabs`. | | | `all_tabs` | query | boolean | no | `columns` for every tab. Without it and without `tab`, only the first 10 tabs are read and `columns_truncated` is true. | default: `false` | | `header_row` | query | integer | no | Row holding the headers (1-based). Must match the source's `offset_header`. | default: `1` | **Responses** - `200` What is inside the file. Schema: [FileStructureResponse](https://dev-api.sheetgo.com/rest/reference/models/FileStructureResponse.md) - `401` Authentication failed or token is invalid - `400` Unknown include value, or invalid tab / all_tabs / header_row - `404` File, folder content or tab not found - `412` Provider account not connected - `422` Not a spreadsheet (unsupported_file_type), a section the file cannot have (section_not_available), or a downloaded file above the size limit (file_too_large) Read next: [FileStructureResponse](https://dev-api.sheetgo.com/rest/reference/models/FileStructureResponse.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # bigquery **BigQuery** can be both a source and a destination for an automation: read a table or a query's results into a spreadsheet, or load a spreadsheet's rows into a BigQuery table. These endpoints are the discovery half — list the **projects**, **datasets** and **tables** the authorized Google account can see, read one table's **typed schema**, and **dry-run a query** to check it parses and see what it would cost before you create the automation. All of it is read-only: `validate-query` runs nothing. Authorizing BigQuery is a Google consent screen in the Sheetgo web app and cannot be driven from an API key. Until it is granted, these endpoints answer `412`. Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## GET /rest/beta/bigquery/projects **List BigQuery projects** Every GCP project the authorized Google account can see. `id` is the string project id — the value an automation's `project` field expects. `numeric_id` is the same project's numeric form, accepted too. An empty list means the account genuinely has no BigQuery projects. A missing authorization is a `412`, never an empty list. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `page` | query | integer | no | 1-based page number | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page, max 100 | default: `50`; min: 1; max: 100 | **Responses** - `200` Projects visible to the account. Schema: [BigQueryProjectListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProjectListResponse.md) - `401` Authentication failed or token is invalid - `412` BigQuery is not authorized for this account - `403` The account lacks BigQuery permission - `502` BigQuery could not complete the request - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [BigQueryProjectListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProjectListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/bigquery/projects/{project}/datasets **List a project's datasets** Datasets in one project. `id` is what an automation's `dataset` expects. A `bigquery` destination writes into an existing dataset — Sheetgo creates the *table* if it is missing, but never the dataset. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `project` | path | string | yes | Project id, as returned by GET /bigquery/projects | | | `page` | query | integer | no | 1-based page number | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page, max 100 | default: `50`; min: 1; max: 100 | **Responses** - `200` Datasets in the project. Schema: [BigQueryDatasetListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDatasetListResponse.md) - `401` Authentication failed or token is invalid - `412` BigQuery is not authorized for this account - `403` The account lacks BigQuery permission - `502` BigQuery could not complete the request - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [BigQueryDatasetListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDatasetListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables **List a dataset's tables** Tables in one dataset. `id` is what an automation's `table` expects. A destination may also name a table that does not exist yet — it is created on the first run — so this listing is a convenience, not a constraint. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `project` | path | string | yes | Project id, as returned by GET /bigquery/projects | | | `dataset` | path | string | yes | Dataset id | | | `page` | query | integer | no | 1-based page number | default: `1`; min: 1 | | `per_page` | query | integer | no | Items per page, max 100 | default: `50`; min: 1; max: 100 | **Responses** - `200` Tables in the dataset. Schema: [BigQueryTableListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableListResponse.md) - `401` Authentication failed or token is invalid - `412` BigQuery is not authorized for this account - `403` The account lacks BigQuery permission - `502` BigQuery could not complete the request - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [BigQueryTableListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableListResponse.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table} **Read one table's schema** One table's column types, row and byte counts, and partitioning. The types matter for a `bigquery` destination: `partition.field` must name a column, and BigQuery infers the partition type from that column rather than taking it from the payload. `partitioning` describes the table as it exists today. An existing table keeps its own partitioning no matter what a destination payload asks for — only `write_mode: "recreate"` replaces it. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `project` | path | string | yes | Project id, as returned by GET /bigquery/projects | | | `dataset` | path | string | yes | Dataset id | | | `table` | path | string | yes | Table id | | **Responses** - `200` The table's typed schema and stats. Schema: [BigQueryTableDetail](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableDetail.md) - `401` Authentication failed or token is invalid - `412` BigQuery is not authorized for this account - `403` The account lacks BigQuery permission - `502` BigQuery could not complete the request - `404` No such table - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [BigQueryTableDetail](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableDetail.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/beta/bigquery/projects/{project}/validate-query **Validate a query without running it** Dry-run a query: check it parses, see what it would return and cost. Nothing is scanned and nothing can be mutated, so this is safe to call freely — which is why it needs only the `bigquery.read` scope despite being a POST. **Invalid SQL answers `200` with `valid: false`**, not a 4xx: "is this query valid?" has *no* as a legitimate answer. A `4xx`/`5xx` here means the request could not be answered at all — missing authorization, no permission, or BigQuery being unreachable. Use `total_bytes_processed` to size an uncapped source query before creating the automation. A `bigquery` source's generated SQL has no `LIMIT`, so this is how you find out what a full scan will cost. Authentication, any one of: `default`; `Developer Access`; `sheetgo-api-key`. **Parameters** | Name | In | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | --- | | `project` | path | string | yes | Project id, as returned by GET /bigquery/projects | | **Request body** Content type `application/json`. Required. Body: [ValidateQueryRequest](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryRequest.md) **Responses** - `200` The dry run's verdict. Schema: [ValidateQueryResponse](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryResponse.md) - `401` Authentication failed or token is invalid - `412` BigQuery is not authorized for this account - `403` The account lacks BigQuery permission - `502` BigQuery could not complete the request - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [ValidateQueryRequest](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryRequest.md), [ValidateQueryResponse](https://dev-api.sheetgo.com/rest/reference/models/ValidateQueryResponse.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # auth OAuth2 authorization endpoints — exchange a `Client ID` / `Client Secret` for an access token, for developer and customer integrations. For most use cases an **API key** generated on your Account page is simpler (see *Authentication* above). Base URL: `https://dev-api.sheetgo.com`. Start page: https://dev-api.sheetgo.com/rest/reference.md This page documents every endpoint of the group. Request and response shapes link to model pages; fetch the model pages an endpoint links before building a body. Guide: [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md) Every endpoint is rate limited; see the guide [Rate Limiting](https://dev-api.sheetgo.com/rest/guides/rate-limiting.md). ## POST /rest/auth/token **Exchange authentication code for a access token and a refresh token** Second leg of the OAuth2 authorization-code flow: trades the one-time `code` your redirect URI received for an access token and a refresh token. The body is **form-encoded** (`application/x-www-form-urlencoded`), not JSON. `grant_type` must be `authorization_code`, and `redirect_uri` must match the one used to obtain the code. Codes are single-use and short-lived. Bad credentials, a reused code or a mismatched redirect URI all answer **401**. Authentication: see the start page. **Request body** Content type `application/x-www-form-urlencoded`. Required. Body: [Body_auth_token_rest_auth_token_post](https://dev-api.sheetgo.com/rest/reference/models/Body_auth_token_rest_auth_token_post.md) **Responses** - `200` Access and refresh token. Schema: [ExchangedToken](https://dev-api.sheetgo.com/rest/reference/models/ExchangedToken.md) - `404` Not found - `401` Invalid code, client credentials or redirect_uri - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [Body_auth_token_rest_auth_token_post](https://dev-api.sheetgo.com/rest/reference/models/Body_auth_token_rest_auth_token_post.md), [ExchangedToken](https://dev-api.sheetgo.com/rest/reference/models/ExchangedToken.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md). ## POST /rest/auth/refresh **Creates a new access token from a refresh token** Exchanges a refresh token for a fresh access token, so a long-running integration never has to send the user back through the authorize screen. `grant_type` must be `refresh_token`. A token that has expired, been revoked or is unknown answers **401** — restart the authorization-code flow from the beginning. `client_id` and `client_secret` are verified: a refresh token alone is not sufficient. A deleted or disabled application is refused. Authentication: see the start page. **Request body** Content type `application/json`. Required. Body: [RefreshTokenRequest](https://dev-api.sheetgo.com/rest/reference/models/RefreshTokenRequest.md) **Responses** - `200` A new access token. Schema: [ExchangedToken](https://dev-api.sheetgo.com/rest/reference/models/ExchangedToken.md) - `404` Not found - `401` Refresh token expired, revoked or unknown - `422` Validation Error. Schema: [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) Read next: [ExchangedToken](https://dev-api.sheetgo.com/rest/reference/models/ExchangedToken.md), [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md), [RefreshTokenRequest](https://dev-api.sheetgo.com/rest/reference/models/RefreshTokenRequest.md). --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AIProcessor Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `prompt` | string | yes | The AI prompt: what the AI step should do with the data. For a documents folder source it says what to extract, and its wording is the column contract. | | | `on_processing_error` | [OnProcessingError](https://dev-api.sheetgo.com/rest/reference/models/OnProcessingError.md), nullable | no | Documents folder only: `continue` (default) keeps going when a document cannot be read; `stop` fails the run. | | | `model` | string, nullable | no | OpenAI model id (e.g. `gpt-5.2`) or Assistant id (`asst_…`). Needs your own OpenAI account connected in the Sheetgo web app (412 `openai_not_connected` otherwise). Without it, a connected key still runs Sheetgo's default model. | min length: 1 | | `model_settings` | [ModelSettings](https://dev-api.sheetgo.com/rest/reference/models/ModelSettings.md), nullable | no | Model parameters. Same OpenAI-account requirement as `model`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AnonymizeMethod The web app's masking methods (core-lib v1/dataframe/anonymizer.py). Type: string - one of: `"salted_hash"`, `"hash"`, `"nullify"`, `"redact"`, `"partial_email"`, `"partial_start"`, `"partial_end"`, `"generalization"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AnonymizeMode `automatic`: Google DLP (Sheetgo's project) detects personal data and hashes it. `custom`: a masking method per column. Type: string - one of: `"automatic"`, `"custom"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AnonymizeProcessor Mask personal data before it reaches the destination (the web app's Anonymize step). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `mode` | [AnonymizeMode](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeMode.md) | no | `automatic`: personal data is detected (Google DLP, on Sheetgo's account) and hashed. `custom`: you choose a method per column. Not combinable today with `ai`, `filter` or `remove_duplicates` (features incompatible in the engine) — see Processor combinations. | default: `"custom"` | | `columns` | object with values of [AnonymizeMethod](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeMethod.md), nullable | no | Custom mode only: column LETTER (`A`, `B`, …) → method: salted_hash, hash, nullify, redact, partial_email, partial_start (first 2 characters + ***), partial_end (*** + last 4), generalization (numbers grouped into ranges). | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AttachmentIn Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `filename` | string | yes | File name the recipient will see, including the extension. | | | `content_type` | string | yes | MIME type of the attachment, e.g. `application/pdf`. | | | `content_base64` | string | yes | The file's bytes, base64-encoded. All attachments on one message must total no more than 3 MB decoded. | | ## Used by - [POST /rest/beta/gmail/send](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send) - [POST /rest/beta/outlook/send](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send) - [GmailSendBody](https://dev-api.sheetgo.com/rest/reference/models/GmailSendBody.md) - [SendBody](https://dev-api.sheetgo.com/rest/reference/models/SendBody.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AuthConfigIn Access restriction. Only domain restriction is exposed. `specificUsers` is deliberately absent: the internal PUT emails every address in it via SendGrid (dashboard/models.py:190), which would let an API key mail arbitrary recipients. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `domain` | boolean | yes | Restrict to the workflow owner's email domain | | ## Used by - [PUT /rest/beta/workflows/{id}/dashboard/publish](https://dev-api.sheetgo.com/rest/reference/dashboards.md#put-rest-beta-workflows-id-dashboard-publish) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AutomationCreate Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `workflow_id` | string | yes | Id of the workflow this automation belongs to | | | `name` | string | yes | Name of the automation | | | `sources` | array of [SourceFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) or [SourceFolder-Input (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) or [SourceWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/SourceWebhook.md) or [SourceAPI (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) or [SourceIntegration (type = "integration")](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) or [SourceBigQuery (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/SourceBigQuery.md) or [SourceOutlook-Input (type = "outlook")](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) | yes | List of sources to connect to | | | `merge` | [MergeProcessor](https://dev-api.sheetgo.com/rest/reference/models/MergeProcessor.md), nullable | no | Merge step options | | | `filter` | [FilterCondition-Input (type = "condition")](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Input.md) or [FilterColumn (type = "column")](https://dev-api.sheetgo.com/rest/reference/models/FilterColumn.md) or [FilterQuery (type = "query")](https://dev-api.sheetgo.com/rest/reference/models/FilterQuery.md), nullable | no | Filter step options. Columns are spreadsheet LETTERS — get them from `GET /files/{provider}/{file_id}/structure?include=columns` on the source file (see Column letters). Not combinable today with `remove_duplicates` or `anonymize` (features incompatible in the engine) — see Processor combinations. | | | `ai` | [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md), nullable | no | AI step options | | | `left_join` | [LeftJoinProcessor](https://dev-api.sheetgo.com/rest/reference/models/LeftJoinProcessor.md), nullable | no | Left join step options | | | `destinations` | array of [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Input (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md) or [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Input (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md), nullable | no | Destinations to connect to | | | `number_format` | boolean, nullable | no | Number format | default: `false` | | `transfer_format` | boolean, nullable | no | Transfer format | default: `false` | | `remove_duplicates` | [RemoveDuplicatesProcessor](https://dev-api.sheetgo.com/rest/reference/models/RemoveDuplicatesProcessor.md), nullable | no | Remove duplicate rows. Not combinable today with `ai`, `filter` or `anonymize` (features incompatible in the engine) — see Processor combinations. | | | `anonymize` | [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md), nullable | no | Anonymize step options. Not combinable today with `ai`, `filter` or `remove_duplicates` (features incompatible in the engine) — see Processor combinations. | | | `split` | [Split](https://dev-api.sheetgo.com/rest/reference/models/Split.md), nullable | no | Split step options | | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AutomationModel Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the automation | | | `name` | string | yes | Name of the automation | | | `owner` | string | yes | Owner of the automation | | | `status` | integer, nullable | no | Execution result code: 0 = never executed, 1 = executed successfully, > 1 = error (inspect status_message / status_docs_link). | default: `0` | | `status_message` | string, nullable | no | Human-readable error description when status > 1. | | | `status_docs_link` | string, nullable | no | Documentation link for the error when status > 1. | | | `last_updating_user` | string, nullable | no | Last updated user of the automation | | | `execution` | [ExecutionStatus](https://dev-api.sheetgo.com/rest/reference/models/ExecutionStatus.md), nullable | no | Execution status of the automation | default: `"completed"` | | `input_count` | integer, nullable | no | Number of inputs of the automation | default: `0` | | `output_count` | integer, nullable | no | Number of outputs of the automation | default: `0` | | `sources` | array of [SourceFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) or [SourceFolder-Output (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) or [SourceWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/SourceWebhook.md) or [SourceAPI (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) or [SourceIntegration (type = "integration")](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) or [SourceBigQuery (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/SourceBigQuery.md) or [SourceOutlook-Output (type = "outlook")](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) | no | Sources of the automation | | | `destinations` | array of [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Output (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md) or [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Output (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md), nullable | no | Destinations of the automation | | | `ai` | [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md), nullable | no | The AI step, when the automation has one. | | | `anonymize` | [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md), nullable | no | The Anonymize step, when the automation has one. | | | `merge` | [MergeProcessor](https://dev-api.sheetgo.com/rest/reference/models/MergeProcessor.md), nullable | no | The Merge step, when the automation has one. | | | `filter` | [FilterCondition-Output (type = "condition")](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Output.md) or [FilterColumn (type = "column")](https://dev-api.sheetgo.com/rest/reference/models/FilterColumn.md) or [FilterQuery (type = "query")](https://dev-api.sheetgo.com/rest/reference/models/FilterQuery.md), nullable | no | The Filter step, when the automation has one the API can represent (nested groups, colour filters and conditions combined with a column selection read back as null). | | | `left_join` | [LeftJoinProcessor](https://dev-api.sheetgo.com/rest/reference/models/LeftJoinProcessor.md), nullable | no | The Left join step, when the automation has one. | | | `remove_duplicates` | [RemoveDuplicatesProcessor](https://dev-api.sheetgo.com/rest/reference/models/RemoveDuplicatesProcessor.md), nullable | no | The Remove duplicates step, when the automation has one. | | | `split` | [Split](https://dev-api.sheetgo.com/rest/reference/models/Split.md), nullable | no | The Split step, when the automation has one. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [PaginatedResponse_AutomationModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_AutomationModel_.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AutomationPatch Rename only. Unknown fields are rejected (SG-14706): they used to be dropped with a 200, and a missing `name` was saved as null, blanking the automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `name` | string | yes | New name of the automation | min length: 1 | ## Used by - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AutomationReplace Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `workflow_id` | string | yes | Id of the workflow this automation belongs to | | | `name` | string | yes | Name of the automation | | | `sources` | array of [SourceFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) or [SourceFolder-Input (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) or [SourceWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/SourceWebhook.md) or [SourceAPI (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) or [SourceIntegration (type = "integration")](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) or [SourceBigQuery (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/SourceBigQuery.md) or [SourceOutlook-Input (type = "outlook")](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) | yes | List of sources to connect to | | | `merge` | [MergeProcessor](https://dev-api.sheetgo.com/rest/reference/models/MergeProcessor.md), nullable | no | Merge step options | | | `filter` | [FilterCondition-Input (type = "condition")](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Input.md) or [FilterColumn (type = "column")](https://dev-api.sheetgo.com/rest/reference/models/FilterColumn.md) or [FilterQuery (type = "query")](https://dev-api.sheetgo.com/rest/reference/models/FilterQuery.md), nullable | no | Filter step options. Columns are spreadsheet LETTERS — get them from `GET /files/{provider}/{file_id}/structure?include=columns` on the source file (see Column letters). Not combinable today with `remove_duplicates` or `anonymize` (features incompatible in the engine) — see Processor combinations. | | | `ai` | [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md), nullable | no | AI step options | | | `left_join` | [LeftJoinProcessor](https://dev-api.sheetgo.com/rest/reference/models/LeftJoinProcessor.md), nullable | no | Left join step options | | | `destinations` | array of [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Input (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md) or [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Input (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md), nullable | no | Destinations to connect to | | | `number_format` | boolean, nullable | no | Number format | default: `false` | | `transfer_format` | boolean, nullable | no | Transfer format | default: `false` | | `remove_duplicates` | [RemoveDuplicatesProcessor](https://dev-api.sheetgo.com/rest/reference/models/RemoveDuplicatesProcessor.md), nullable | no | Remove duplicate rows. Not combinable today with `ai`, `filter` or `anonymize` (features incompatible in the engine) — see Processor combinations. | | | `anonymize` | [AnonymizeProcessor](https://dev-api.sheetgo.com/rest/reference/models/AnonymizeProcessor.md), nullable | no | Anonymize step options. Not combinable today with `ai`, `filter` or `remove_duplicates` (features incompatible in the engine) — see Processor combinations. | | | `split` | [Split](https://dev-api.sheetgo.com/rest/reference/models/Split.md), nullable | no | Split step options | | | `id` | string | yes | Id of the automation | | ## Used by - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # AutomationRunStatus The outcome of an automation's LAST run. There is no run history. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `automation_id` | string | yes | Id of the automation this status belongs to. | | | `execution` | string | yes | Live phase: `running` while the run is enqueued, executing or cancelling; `completed` once it has stopped. Poll until this is `completed` before trusting `result`. | | | `result` | string | yes | Outcome of the last finished run: `never_run` (it has not run yet), `success`, or `error`. While `execution` is `running`, this still describes the PREVIOUS run. | | | `status_code` | integer | no | Sheetgo result code behind `result`: 0 = never run, 1 = success, anything greater = the specific error. Useful when you want to branch on the exact failure. | default: `0` | | `message` | string, nullable | no | Human-readable explanation of the run's outcome — the stored run message when there is one, otherwise the standard description for `status_code`. Null on success and before the first run. | | | `docs_link` | string, nullable | no | URL of the help article for this error, when one exists. Null unless `result` is `error`. | | | `error_count` | integer, nullable | no | Number of individual errors recorded during the run (a run can fail on several rows or files). Null when not tracked. | | | `duration_seconds` | number, nullable | no | How long the last run took, in seconds. Null before the first run completes. | | ## Used by - [GET /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-run) - [GET /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-run) - [WorkflowRunStatus](https://dev-api.sheetgo.com/rest/reference/models/WorkflowRunStatus.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BatchBody Fetch several messages in one request, by id. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `ids` | array of string | yes | Message ids to fetch. At most 50, or 10 when `include_attachments` is true. | min items: 1 | | `include_attachments` | boolean | no | Whether to return each message's attachment content as well as its metadata. Lowers the batch cap to 10. | default: `false` | ## Used by - [POST /rest/beta/outlook/messages/batch](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-messages-batch) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryDataset Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Dataset id. Pass this back as `dataset`. | | | `name` | string, nullable | no | Display name | | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets) - [BigQueryDatasetListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDatasetListResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryDatasetListResponse Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `truncated` | boolean | no | True when the listing hit `BIGQUERY_DISCOVERY_MAX_ITEMS`, so items past it are not reachable by paging. | default: `false` | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [BigQueryDataset](https://dev-api.sheetgo.com/rest/reference/models/BigQueryDataset.md) | no | List of results | | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryPartition Partitioning for a table Sheetgo creates. Omit `field` for ingestion-time partitioning; name a column for field-based. There is no third setting: BigQuery infers the partition column's *type* from the table schema, so presence of `field` is the whole distinction. Only applied when the table is created. An existing table keeps its own partitioning, so change it with `write_mode: "recreate"`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `field` | string, nullable | no | Column to partition by. It must exist in the transferred data -- check with `GET /rest/beta/bigquery/.../tables/{table}`. Omit for ingestion-time partitioning. | | | `granularity` | [BigQueryPartitionGranularity](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartitionGranularity.md) | no | Partition size: HOUR, DAY, MONTH or YEAR. | default: `"DAY"` | | `require_filter` | boolean | no | Require queries against the table to filter on the partition column. Applied only when the table is created. | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationBigQuery-Input](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md) - [DestinationBigQuery-Output](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryPartitionGranularity Type: string - one of: `"HOUR"`, `"DAY"`, `"MONTH"`, `"YEAR"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [BigQueryPartition](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartition.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryPartitioningInfo How an existing table is partitioned. An existing table keeps its own partitioning regardless of what a destination payload asks for, so this is what a destination will actually write into. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `field` | string, nullable | no | Partition column; null for ingestion-time partitioning | | | `type` | string, nullable | no | The column's BigQuery type | | | `granularity` | string, nullable | no | HOUR, DAY, MONTH or YEAR | | | `is_ingestion_time` | boolean | no | True when partitioned by ingestion time | default: `false` | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table) - [BigQueryTableDetail](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableDetail.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryProject One GCP project visible to the authorized account. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Project id. Pass this back as `project` in an automation source or destination. | | | `numeric_id` | string, nullable | no | The project's numeric id. Accepted as `project` too, but the string id above is the readable form. | | | `name` | string, nullable | no | Display name | | ## Used by - [GET /rest/beta/bigquery/projects](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects) - [BigQueryProjectListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProjectListResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryProjectListResponse Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `truncated` | boolean | no | True when the listing hit `BIGQUERY_DISCOVERY_MAX_ITEMS`, so items past it are not reachable by paging. | default: `false` | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [BigQueryProject](https://dev-api.sheetgo.com/rest/reference/models/BigQueryProject.md) | no | List of results | | ## Used by - [GET /rest/beta/bigquery/projects](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryTable Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Table id. Pass this back as `table`. | | | `name` | string, nullable | no | Display name | | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables) - [BigQueryTableListResponse](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTableListResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryTableDetail One table, with the typed schema a destination's `partition.field` needs. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `project` | string | yes | Google Cloud project the table belongs to. | | | `dataset` | string | yes | Dataset the table belongs to. | | | `table` | string | yes | The table's own id, unqualified. | | | `schema` | object with values of string | no | Column name to BigQuery type, e.g. `{"Rank": "INTEGER", "created_at": "TIMESTAMP"}`. A destination's `partition.field` must name one of these, and its type is inferred from here. | | | `num_rows` | integer, nullable | no | Row count as BigQuery reports it | | | `num_bytes` | integer, nullable | no | Size in bytes | | | `partitioning` | [BigQueryPartitioningInfo](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartitioningInfo.md), nullable | no | Null when the table is not partitioned | | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryTableListResponse Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `truncated` | boolean | no | True when the listing hit `BIGQUERY_DISCOVERY_MAX_ITEMS`, so items past it are not reachable by paging. | default: `false` | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [BigQueryTable](https://dev-api.sheetgo.com/rest/reference/models/BigQueryTable.md) | no | List of results | | ## Used by - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BigQueryWriteMode What happens to data already in the destination table. Read by ``BigQueryManager.merge_temporary_to_destination``. Type: string - one of: `"append"`, `"truncate"`, `"recreate"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationBigQuery-Input](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Input.md) - [DestinationBigQuery-Output](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # BodyContent Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `content_type` | string | no | How `content` should be interpreted: `text` for plain text, `html` for an HTML body. | one of: `"text"`, `"html"`; default: `"text"` | | `content` | string | yes | The message body itself, in the format named by `content_type`. | | ## Used by - [POST /rest/beta/gmail/send](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send) - [POST /rest/beta/outlook/send](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send) - [GmailSendBody](https://dev-api.sheetgo.com/rest/reference/models/GmailSendBody.md) - [SendBody](https://dev-api.sheetgo.com/rest/reference/models/SendBody.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Body_auth_token_rest_auth_token_post Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `grant_type` | string | yes | OAuth2 grant type. Must be `authorization_code`. | | | `code` | string | yes | The single-use authorization code returned to your redirect URI by the authorize step. | | | `redirect_uri` | string | yes | The same redirect URI that was used to obtain `code`. It must match your application's registered URI exactly. | | | `client_id` | string | yes | Your application's client id. | | | `client_secret` | string | yes | Your application's client secret. Never expose it in a browser or mobile client. | | ## Used by - [POST /rest/auth/token](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-token) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ChangeOwnerIn Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `email` | string (email) | yes | Email of the collaborator to transfer ownership to. They must already be a collaborator on the workflow; the current owner becomes a manager. | | ## Used by - [POST /rest/beta/workflows/{id}/change-owner](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-change-owner) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ChartItem One chart already drawn in the spreadsheet. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `chart_id` | integer | yes | Numeric chart id. Pass as `chart_id` when creating a dashboard element. | | | `title` | string, nullable | no | The chart's title as set in the spreadsheet, when it has one. | | | `chart_type` | string, nullable | no | Normalized chart type, e.g. column, line, pie | | | `tab_id` | integer, nullable | no | Numeric id of the tab the chart is drawn on. | | | `tab_name` | string, nullable | no | Name of that tab. | | | `supported` | boolean | no | False when Sheetgo cannot render this chart type on a dashboard | default: `true` | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [SpreadsheetStructure](https://dev-api.sheetgo.com/rest/reference/models/SpreadsheetStructure.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # CollaboratorOut Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `email` | string | yes | The collaborator's email address, which identifies them everywhere in this API. | | | `role` | string | yes | owner \| manager \| collaborator | | | `is_owner` | boolean | no | True for the workflow's owner. The owner cannot be removed or have their role changed — transfer ownership instead. | default: `false` | ## Used by - [DELETE /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators-email) - [GET /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-collaborators) - [PATCH /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email) - [POST /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators) - [CollaboratorsOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorsOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # CollaboratorRoleUpdate Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `role` | string | yes | The role to move this collaborator to: `collaborator` or `manager`. The owner's role cannot be changed here. | one of: `"collaborator"`, `"manager"` | | `update_file_access` | boolean | no | Also grant/revoke file access to match the role | default: `false` | ## Used by - [PATCH /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # CollaboratorsAdd Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `emails` | array of string (email) | yes | Emails to invite | min items: 1 | | `role` | string | yes | collaborator \| manager | one of: `"collaborator"`, `"manager"` | | `skip_invitation` | boolean | no | Add silently, without the invitation email | default: `false` | | `share_files` | boolean | no | Also grant access to the workflow's files | default: `false` | | `file_access` | string | no | File permission when share_files is true | one of: `"reader"`, `"commenter"`, `"writer"`; default: `"writer"` | | `message` | string, nullable | no | Optional note included in the invitation | | ## Used by - [POST /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # CollaboratorsOut Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `owner` | string, nullable | no | Email of the workflow's owner. | | | `collaborators` | array of [CollaboratorOut](https://dev-api.sheetgo.com/rest/reference/models/CollaboratorOut.md) | no | Everyone with access to the workflow, the owner included. | | ## Used by - [DELETE /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators-email) - [GET /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-collaborators) - [PATCH /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email) - [POST /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ColumnItem One column of a tab's header row. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `letter` | string | yes | Spreadsheet column letter — the value automation column fields take (`filter`, `split`, `remove_duplicates`, `left_join`, `anonymize`). | | | `index` | integer | yes | Zero-based column position. | | | `header` | string, nullable | no | The header cell exactly as stored (not trimmed — match it verbatim); null when the cell is empty. | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [TabItem](https://dev-api.sheetgo.com/rest/reference/models/TabItem.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ConditionExpression Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `column` | string | no | Spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | | `criteria` | [ExpressionCriteria](https://dev-api.sheetgo.com/rest/reference/models/ExpressionCriteria.md) | no | The criteria | | | `value` | number or integer or string, nullable | no | The value | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [FilterCondition-Input](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Input.md) - [FilterCondition-Output](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ConditionType Type: string - one of: `"and"`, `"or"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [FilterCondition-Input](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Input.md) - [FilterCondition-Output](https://dev-api.sheetgo.com/rest/reference/models/FilterCondition-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ContentType What a folder source reads: spreadsheets, or documents for AI extraction. Type: string - one of: `"spreadsheets"`, `"documents"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DashboardOut A workflow's single dashboard: its elements and its publication state. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `elements` | array of [ElementOut](https://dev-api.sheetgo.com/rest/reference/models/ElementOut.md) | no | Every element on the dashboard, in stored order. Empty for a workflow whose dashboard has not been built yet. | | | `publish` | [PublishOut](https://dev-api.sheetgo.com/rest/reference/models/PublishOut.md) | yes | Whether the dashboard is published, and under what access restrictions. | | ## Used by - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DataSourceOut One thing you can ask a provider for. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Pass this back as `sources[].data_source` | | | `name` | string | yes | Display name | | | `description` | string | no | What it returns | default: `""` | | `kind` | string | yes | `query` for records, `report` for a report | | | `parameters` | object with values of [DataSourceParameter](https://dev-api.sheetgo.com/rest/reference/models/DataSourceParameter.md) | no | Parameters this data source accepts, keyed by name. Empty for everything except QuickBooks reports. | | ## Used by - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) - [IntegrationOptionsResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOptionsResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DataSourceParameter One parameter a data source accepts. When `options` is present it is the authority: `date_macro` declares `type: date` but its options are macro strings like "Last Month", so a value is checked against `options` first and against `type` only when no options are declared. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `name` | string, nullable | no | Display name | | | `description` | string, nullable | no | What it controls | | | `type` | string, nullable | no | `date` or `string` | | | `format` | string, nullable | no | Expected format when the type is `date` | | | `options` | array of string, nullable | no | Accepted values. When present, the only accepted values. | | | `optional_for` | array of string, nullable | no | Advisory: supplying this parameter makes those alternatives unnecessary. Nothing is enforced as required. | | ## Used by - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) - [DataSourceOut](https://dev-api.sheetgo.com/rest/reference/models/DataSourceOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationApiPublish Publish the automation's rows to a Sheetgo-hosted endpoint you can poll. Read it back with `GET /rest/beta/api-destination/{public_id}`, which needs an API key carrying the `api-destination` scope. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Publishes the rows as a read-only JSON **API endpoint** hosted by Sheetgo. | const: `"api"` | | `append` | boolean | no | Add each run's rows under the previous ones instead of replacing them. The column headers must match the existing ones or the run fails. | default: `false` | | `public_id` | string, nullable | no | Read-only. Assigned by Sheetgo when the automation is created; ignored if you send it. | | | `url` | string, nullable | no | Read-only. Where to fetch the published data. Requires an API key with the `api-destination` scope. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationBigQuery-Input Load the automation's rows into a BigQuery table. The table is created on the first run if it does not exist; the **dataset** is not, and must already exist. Must be the automation's only destination, and at most one per automation -- see validate_bigquery_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Writes the rows into a **BigQuery** table. Must be the only destination. | const: `"bigquery"` | | `project` | string | yes | GCP project id | | | `dataset` | string | yes | Existing BigQuery dataset id. Sheetgo does not create datasets. | | | `table` | string | yes | Table id. Created on the first run if it does not exist. | | | `write_mode` | [BigQueryWriteMode](https://dev-api.sheetgo.com/rest/reference/models/BigQueryWriteMode.md) | no | `append` adds rows; `truncate` clears the data but keeps the schema and partitioning; `recreate` drops and rebuilds the table from the transferred data. | default: `"append"` | | `schema_evolution` | boolean | no | Add columns to the destination table when the transferred data has new ones. With the default `false`, extra columns fail the run instead. Only ever adds -- never removes, renames or retypes. | default: `false` | | `partition` | [BigQueryPartition](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartition.md), nullable | no | Omit for an unpartitioned table. | | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationBigQuery-Output Load the automation's rows into a BigQuery table. The table is created on the first run if it does not exist; the **dataset** is not, and must already exist. Must be the automation's only destination, and at most one per automation -- see validate_bigquery_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Writes the rows into a **BigQuery** table. Must be the only destination. | const: `"bigquery"` | | `project` | string | yes | GCP project id | | | `dataset` | string | yes | Existing BigQuery dataset id. Sheetgo does not create datasets. | | | `table` | string | yes | Table id. Created on the first run if it does not exist. | | | `write_mode` | [BigQueryWriteMode](https://dev-api.sheetgo.com/rest/reference/models/BigQueryWriteMode.md) | no | `append` adds rows; `truncate` clears the data but keeps the schema and partitioning; `recreate` drops and rebuilds the table from the transferred data. | default: `"append"` | | `schema_evolution` | boolean | no | Add columns to the destination table when the transferred data has new ones. With the default `false`, extra columns fail the run instead. Only ever adds -- never removes, renames or retypes. | default: `false` | | `partition` | [BigQueryPartition](https://dev-api.sheetgo.com/rest/reference/models/BigQueryPartition.md), nullable | no | Omit for an unpartitioned table. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationDocument Generate one Google Docs file per row from a template (docs-merge). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Generates a Google **Docs document** per row from a template (docs-merge). | const: `"document"` | | `provider` | string | no | Storage provider. Generated documents and PDFs are Google Drive only. | const: `"drive"`; default: `"drive"` | | `id` | string, nullable | no | Id of an existing folder to write into. Provide this or `folder_name`. | | | `folder_name` | string, nullable | no | Name of a new folder to create instead of using an existing one. Provide this or `id`. | | | `parent_id` | string, nullable | no | Folder to create `folder_name` inside. Defaults to the drive root. Only valid together with `folder_name`. | | | `template_id` | string | yes | Id of the Google Docs file used as the template. Google Drive only. Google Docs are **not returned by default** by the file endpoints — find one with `GET /rest/beta/files/drive?type=gdocs`. | | | `file_name` | string | yes | Name pattern for each generated document. Supports {{Column}} smart tags, which are replaced with that row's value — e.g. "Invoice {{Customer}} {{Month}}". See the Smart Tags section. | | | `unused_fields` | [UnusedFields](https://dev-api.sheetgo.com/rest/reference/models/UnusedFields.md) | no | What to do when a {{Tag}} in the template matches no source column: `error` fails the run, `ignore` leaves it blank. | default: `"error"` | | `generator_controller` | boolean | no | Add a column to the source data holding a link to each generated document. | default: `true` | | `generator_controller_prefix` | string, nullable | no | Prefix for the control column's header. Defaults to the automation name. | | | `markdown_formatting` | boolean | no | Render markdown found in cell values as formatted text in the document. | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationFile Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Writes the result into an existing **file**. | const: `"file"` | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | The storage provider that hosts the file or folder | | | `id` | string | yes | Id of the destination file or folder | | | `file_type` | [FileType](https://dev-api.sheetgo.com/rest/reference/models/FileType.md) | yes | The file type | | | `sheet_name` | string, nullable | no | The sheet name | | | `append` | boolean, nullable | no | Data will be added under previous entries to track historical changes | default: `false` | | `lock_destination_tab` | boolean, nullable | no | Lock the destination tab and clear added columns with each transfer | default: `true` | | `parse_data` | boolean, nullable | no | Convert text to numbers, dates, and formulas | default: `true` | | `identify_data` | [IdentifyDataType](https://dev-api.sheetgo.com/rest/reference/models/IdentifyDataType.md), nullable | no | It will create an extra column in the destination tab, identifying the latest transfers of your new sheet and/or the source file of each row of data, making data traceable when merging sources. | | | `one_tab_per_document` | boolean | no | Documents folder source only: one tab per document (up to 100) instead of all documents in one tab. | default: `false` | | `write_summary_tab` | boolean | no | Documents folder source only: add a `Files` tab listing each document read, its status and row count. | default: `false` | | `enforce_header_match` | boolean | no | Documents folder source only: line documents' columns up by position instead of by name. Ignored with `one_tab_per_document`. | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationFolder Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Writes into a **folder**: new files per split value, or the files an Outlook source saves. | const: `"folder"` | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | The storage provider that hosts the file or folder | | | `id` | string, nullable | no | Id of an existing folder. Provide this or `folder_name`. | | | `file_type` | string | no | Always `folder`. Fixed by the destination type; present so folder and file destinations share one shape. | const: `"folder"`; default: `"folder"` | | `sheet_name` | string, nullable | no | The sheet name | | | `append` | boolean, nullable | no | Data will be added under previous entries to track historical changes | default: `false` | | `lock_destination_tab` | boolean, nullable | no | Lock the destination tab and clear added columns with each transfer | default: `true` | | `parse_data` | boolean, nullable | no | Convert text to numbers, dates, and formulas | default: `true` | | `identify_data` | [IdentifyDataType](https://dev-api.sheetgo.com/rest/reference/models/IdentifyDataType.md), nullable | no | It will create an extra column in the destination tab, identifying the latest transfers of your new sheet and/or the source file of each row of data, making data traceable when merging sources. | | | `one_tab_per_document` | boolean | no | Documents folder source only: one tab per document (up to 100) instead of all documents in one tab. | default: `false` | | `write_summary_tab` | boolean | no | Documents folder source only: add a `Files` tab listing each document read, its status and row count. | default: `false` | | `enforce_header_match` | boolean | no | Documents folder source only: line documents' columns up by position instead of by name. Ignored with `one_tab_per_document`. | default: `false` | | `folder_name` | string, nullable | no | Outlook source only: name of a new folder Sheetgo creates when the automation is saved. Provide this or `id`. Each create makes a new folder (a repeated POST makes another); GET then returns its `id`. | | | `parent_id` | string, nullable | no | Folder to create `folder_name` inside. Defaults to the provider's root. Only valid with `folder_name`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationMailMerge Send one personalized email per row, rendered from `body`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Sends one personalized email per row (**mail merge**). | const: `"mail_merge"` | | `subject` | string | yes | Email subject. Supports {{Column}} smart tags. | | | `body` | string | yes | Email body template as plain text. Each line becomes one paragraph. {{Column}} smart tags are replaced per row. | | | `to` | array of string (email) or string | yes | Recipients: a list of addresses, one address, or a "{{Header}}" reference to read the address from a column. | | | `cc` | array of string (email) or string, nullable | no | Cc recipients. Same forms as `to`. | | | `bcc` | array of string (email) or string, nullable | no | Bcc recipients. Same forms as `to`. | | | `reply_to` | string, nullable | no | Reply-To: one address, or a "{{Header}}" reference. | | | `use_plain_text` | boolean | no | Send the body as plain text instead of formatted HTML. | default: `false` | | `track_open` | boolean | no | Track when a recipient opens the email. | default: `false` | | `track_click` | boolean | no | Track when a recipient clicks a link. | default: `false` | | `remove_sheetgo_layout` | boolean | no | Send without the Sheetgo email layout. | default: `false` | | `multiple_email_split` | boolean | no | Send a separate email per address when a column holds several. | default: `false` | | `send_from` | [SendFrom](https://dev-api.sheetgo.com/rest/reference/models/SendFrom.md) | no | Which mailbox sends the emails: `gmail` (default), `outlook_personal` (a personal Microsoft account) or `outlook_work` (a work or school Microsoft account). An Outlook account must be connected in Sheetgo with permission to send mail, or the request is rejected with 412 `outlook_not_connected`. | default: `"gmail"` | | `unused_fields` | [UnusedFields](https://dev-api.sheetgo.com/rest/reference/models/UnusedFields.md) | no | What to do when a {{Tag}} matches no source column: `error` fails the run, `ignore` leaves it blank. | default: `"error"` | | `generator_controller` | boolean | no | Add a column to the source data tracking each email sent. | default: `true` | | `generator_controller_prefix` | string, nullable | no | Prefix for the control column's header. Defaults to the automation name. | | | `markdown_formatting` | boolean | no | Render markdown found in cell values as formatted text. | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationPDF Export the automation's output to PDF into a Drive folder (converter). What gets converted depends on the automation's other destinations: with a `document` destination the generated documents are converted; with a file destination the file written by the automation is converted; with neither, the automation's source files are. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Generates a **PDF** per row, by converting the merged document. | const: `"pdf"` | | `provider` | string | no | Storage provider. Generated documents and PDFs are Google Drive only. | const: `"drive"`; default: `"drive"` | | `id` | string, nullable | no | Id of an existing folder to write into. Provide this or `folder_name`. | | | `folder_name` | string, nullable | no | Name of a new folder to create instead of using an existing one. Provide this or `id`. | | | `parent_id` | string, nullable | no | Folder to create `folder_name` inside. Defaults to the drive root. Only valid together with `folder_name`. | | | `paper_size` | [PaperSize](https://dev-api.sheetgo.com/rest/reference/models/PaperSize.md) | no | Page size of the generated PDF. | default: `"letter"` | | `page_orientation` | [PageOrientation](https://dev-api.sheetgo.com/rest/reference/models/PageOrientation.md) | no | Page orientation of the generated PDF. | default: `"portrait"` | | `scale` | integer | no | Fit-to-page scaling: 1 normal, 2 fit to width, 3 fit to height, 4 fit to page. | one of: `1`, `2`, `3`, `4`; default: `1` | | `merge_files` | boolean | no | Combine every generated PDF into a single file. | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationShare Email the files this automation produced. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | **Emails** the automation's output as an attachment or link. | const: `"share"` | | `subject` | string | yes | Email subject. Supports {{Column}} smart tags. | | | `body` | string, nullable | no | Email body as plain text. Each line becomes one paragraph. Supports {{Column}} smart tags. | | | `to` | array of string (email) or string | yes | Recipients: a list of addresses, one address, or a "{{Header}}" reference to read the address from a column. | | | `cc` | array of string (email) or string, nullable | no | Cc recipients. Same forms as `to`. | | | `bcc` | array of string (email) or string, nullable | no | Bcc recipients. Same forms as `to`. | | | `reply_to` | string, nullable | no | Reply-To: one address, or a "{{Header}}" reference. | | | `use_plain_text` | boolean | no | Send the body as plain text instead of formatted HTML. | default: `false` | | `track_open` | boolean | no | Track when a recipient opens the email. | default: `false` | | `track_click` | boolean | no | Track when a recipient clicks a link. | default: `false` | | `remove_sheetgo_layout` | boolean | no | Send without the Sheetgo email layout. | default: `false` | | `multiple_email_split` | boolean | no | Send a separate email per address when a column holds several. | default: `false` | | `send_from` | [SendFrom](https://dev-api.sheetgo.com/rest/reference/models/SendFrom.md) | no | Alpha — sending share emails from Outlook is not offered in the Sheetgo web app yet and may change. Which mailbox sends the emails: `gmail` (default), `outlook_personal` (a personal Microsoft account) or `outlook_work` (a work or school Microsoft account). An Outlook account must be connected in Sheetgo with permission to send mail, or the request is rejected with 412 `outlook_not_connected`. | default: `"gmail"` | | `file_sending_method` | [FileSendingMethod](https://dev-api.sheetgo.com/rest/reference/models/FileSendingMethod.md) | no | Send the files as shared links or as attachments. | default: `"shared_link"` | | `file_access_role` | [FileAccessRole](https://dev-api.sheetgo.com/rest/reference/models/FileAccessRole.md) | no | Access granted by a shared link. Ignored for attachments. | default: `"writer"` | | `group_files_by_recipient` | boolean | no | Send one email per recipient covering all their files, instead of one email per file. | default: `true` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # DestinationWebhook POST the automation's rows to an endpoint you own. Note the direction: as a **source**, `webhook` means Sheetgo mints a URL you POST *into*; as a **destination** it means Sheetgo POSTs *out* to a URL you own. Must be the automation's only destination — see validate_api_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | POSTs the resulting rows to **your endpoint** (outgoing webhook). Must be the only destination. | const: `"webhook"` | | `endpoint` | string | yes | URL that receives the request. | | | `method` | string | no | HTTP method used to send the data. | one of: `"post"`, `"put"`, `"patch"`, `"delete"`; default: `"post"` | | `headers` | object with values of string, nullable | no | HTTP headers sent with the request. **Write-only** — never returned by a read, and a PUT that omits it clears it. | | | `body` | string | no | Body template. `{{DATA}}` is every row including the header, `{{ROWS}}` is the rows as objects keyed by header; `{{for}}`, `{{if}}` and `{{except-last}}` are also available. This is a different syntax from smart tags and from cell references. | default: `"{{DATA}}"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ElementDataOut One element's current values. `page`/`per_page`/`total` are populated for `table` only; the other types have nothing to paginate. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the element these values belong to. | | | `type` | [ElementType](https://dev-api.sheetgo.com/rest/reference/models/ElementType.md) | yes | The element's kind, which determines the shape of `data`. | | | `data` | any | no | The element's current values, read live from the spreadsheet. A single value for `indicator`, a list of rows for `table`, and the chart's image or reference for `chart`. | | | `page` | integer, nullable | no | Current page of rows, 1-based. Populated for `table` only. | | | `per_page` | integer, nullable | no | Rows per page in this response. Populated for `table` only. | | | `total` | integer, nullable | no | Total rows, for table elements | | ## Used by - [GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ElementOut One stored element, in public vocabulary. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Element id. Use it for delete and data reads. | | | `type` | [ElementType](https://dev-api.sheetgo.com/rest/reference/models/ElementType.md) | yes | Element kind: `indicator` (a single value), `table` (a range of rows) or `chart` (a reference to a chart already in the spreadsheet). `other` means an element the web app created that this API does not model — see `stored_type`. | | | `title` | string, nullable | no | Label shown above the element on the dashboard. | | | `file_id` | string, nullable | no | Id of the Google Sheets file the element reads from. | | | `tab_id` | integer, nullable | no | Numeric id of the tab the element reads from. Null for `chart` elements, which point at a chart rather than a tab. | | | `tab_name` | string, nullable | no | Name of that tab at the time the element was stored. Null for `chart` elements. Renaming the tab does not update this. | | | `range` | string, nullable | no | A1 range the element reads, without the tab name (for example `B2:D50`). Set for `indicator` and `table`; null for `chart`. | | | `chart_id` | integer, nullable | no | Numeric id of the referenced chart. Set for `chart` elements only; get it from `GET /files/{provider}/{file_id}/structure`. | | | `added_by` | string, nullable | no | Email of the user who added the element. | | | `added_on` | string, nullable | no | When the element was added, ISO 8601. | | | `error` | string, nullable | no | Stored render error, when one was persisted. Usually null even for a broken element: errors are written during a build and not saved (workflow/controller.py:759). Read the element's /data to be sure. | | | `stored_type` | string, nullable | no | Internal type, echoed when `type` is `other` | | | `stored_role` | string, nullable | no | Internal role, echoed when `type` is `other` | | ## Used by - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) - [POST /rest/beta/workflows/{id}/dashboard/elements](https://dev-api.sheetgo.com/rest/reference/dashboards.md#post-rest-beta-workflows-id-dashboard-elements) - [DashboardOut](https://dev-api.sheetgo.com/rest/reference/models/DashboardOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ElementType Type: string - one of: `"indicator"`, `"table"`, `"chart"`, `"other"` ## Used by - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) - [GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data) - [POST /rest/beta/workflows/{id}/dashboard/elements](https://dev-api.sheetgo.com/rest/reference/dashboards.md#post-rest-beta-workflows-id-dashboard-elements) - [ElementDataOut](https://dev-api.sheetgo.com/rest/reference/models/ElementDataOut.md) - [ElementOut](https://dev-api.sheetgo.com/rest/reference/models/ElementOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # EmailFilter-Input Which emails an Outlook source reads. Groups nest (at most 3 deep). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `condition_type` | string | no | `and`: every rule must match; `or`: any rule. | one of: `"and"`, `"or"`; default: `"and"` | | `rules` | array of [EmailFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Input.md) or [EmailFilterRule](https://dev-api.sheetgo.com/rest/reference/models/EmailFilterRule.md) | yes | Conditions or nested groups. | min items: 1 | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceOutlook-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # EmailFilter-Output Which emails an Outlook source reads. Groups nest (at most 3 deep). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `condition_type` | string | no | `and`: every rule must match; `or`: any rule. | one of: `"and"`, `"or"`; default: `"and"` | | `rules` | array of [EmailFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Output.md) or [EmailFilterRule](https://dev-api.sheetgo.com/rest/reference/models/EmailFilterRule.md) | yes | Conditions or nested groups. | min items: 1 | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceOutlook-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # EmailFilterRule One condition of an Outlook source's `email_filter`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `field` | string | yes | `subject`, `sender` (from address), `to`, `cc` (addresses), `attachment_name`, `attachment_size` (MB) or `has_attachment`. | one of: `"subject"`, `"sender"`, `"to"`, `"cc"`, `"attachment_name"`, `"attachment_size"`, `"has_attachment"` | | `operator` | string | yes | Text fields: contains, not_contains, is, is_empty, is_not_empty. `attachment_size`: greater_than, greater_or_equal, less_than, less_or_equal, is_not. `has_attachment`: is. | | | `value` | boolean or integer or number or string, nullable | no | Text for text fields (omit for is_empty / is_not_empty); a number of MB for `attachment_size`; true or false for `has_attachment`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [EmailFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Input.md) - [EmailFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ExchangedToken The token pair returned by the OAuth2 token and refresh endpoints. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `access_token` | string | yes | Short-lived bearer token. Send it as `Authorization: Bearer ` on API calls. | | | `refresh_token` | string | yes | Long-lived token used to obtain a new access token from `POST /rest/auth/refresh` once the access token expires. Store it securely; it is as sensitive as a password. | | ## Used by - [POST /rest/auth/refresh](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-refresh) - [POST /rest/auth/token](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-token) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ExecutionStatus Type: string - one of: `"completed"`, `"running"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ExpressionCriteria Type: string - one of: `"number_gt"`, `"number_gte"`, `"number_lt"`, `"number_lte"`, `"number_eq"`, `"number_neq"`, `"date_is"`, `"date_is_before"`, `"date_is_after"`, `"text_contains"`, `"text_does_not_contain"`, `"text_is_exactly"`, `"is_empty"`, `"is_not_empty"`, `"is_true"`, `"is_false"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [ConditionExpression](https://dev-api.sheetgo.com/rest/reference/models/ConditionExpression.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileAccessRole Type: string - one of: `"reader"`, `"writer"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationShare](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileFilter-Input Which files inside a folder source are read. Groups nest. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `condition_type` | string | no | `and`: every rule must match; `or`: any rule. | one of: `"and"`, `"or"`; default: `"and"` | | `rules` | array of [FileFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Input.md) or [FileFilterRule](https://dev-api.sheetgo.com/rest/reference/models/FileFilterRule.md) | yes | Conditions or nested groups. | min items: 1 | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileFilter-Output Which files inside a folder source are read. Groups nest. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `condition_type` | string | no | `and`: every rule must match; `or`: any rule. | one of: `"and"`, `"or"`; default: `"and"` | | `rules` | array of [FileFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Output.md) or [FileFilterRule](https://dev-api.sheetgo.com/rest/reference/models/FileFilterRule.md) | yes | Conditions or nested groups. | min items: 1 | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileFilterRule One condition of a folder source's `file_filter`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `field` | string | yes | What to test: `file_name`, `file_type`, `date_modified` or `content` (an emptiness check by size, not a text search). | one of: `"file_name"`, `"file_type"`, `"date_modified"`, `"content"` | | `operator` | string | yes | `file_name`: contains, not_contains, starts_with, is. `file_type`: is, is_not. `date_modified`: within, before, after, between. `content`: is_empty, is_not_empty, is_near_empty, is_not_near_empty. | | | `value` | string, nullable | no | Text for `file_name`; a type for `file_type` (google_sheets, excel, csv, tsv, pdf, google_docs); `today`/`last_week`/`last_month` for `within`; a YYYY-MM-DD date for before / after / between. Omit for `content`. | | | `value_to` | string, nullable | no | End date (YYYY-MM-DD) for `between` only. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [FileFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Input.md) - [FileFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileItem One file or folder, normalized across all four storage providers. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Provider id. Usable as an automation source/destination id, and as `parent` when browsing. | | | `name` | string, nullable | no | Display name | | | `provider` | string | yes | drive \| onedrive \| sharepoint \| dropbox | | | `file_type` | [FileTypeFilter](https://dev-api.sheetgo.com/rest/reference/models/FileTypeFilter.md), nullable | no | Automation file type; null when the item is outside the supported set | | | `mime_type` | string, nullable | no | Provider mimetype | | | `is_folder` | boolean | no | True when the item can be used as a `parent` | default: `false` | | `parent_id` | string, nullable | no | Containing folder id, when the provider reports one | | | `size` | integer, nullable | no | Size in bytes; null or 0 for folders and for providers that omit it | | | `created_at` | string, nullable | no | ISO-8601 creation time as reported by the provider | | | `modified_at` | string, nullable | no | ISO-8601 last-modified time as reported by the provider | | | `web_url` | string, nullable | no | Link to open the item in the provider UI; null when unavailable | | | `kind` | [ItemKind](https://dev-api.sheetgo.com/rest/reference/models/ItemKind.md) | no | file \| folder \| site \| shared_drive \| virtual | default: `"file"` | | `supports_structure` | boolean | no | True when `GET /files/{provider}/{file_id}/structure` can describe this item (any spreadsheet: Google Sheets, Excel, CSV, TSV). Not a claim about reading its values. | default: `false` | ## Used by - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [FileListResponse](https://dev-api.sheetgo.com/rest/reference/models/FileListResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileListResponse Standard paginated envelope plus a truncation flag. ``truncated`` is true when the enumeration ceiling (``FILE_DISCOVERY_MAX_ITEMS``, or the internal byte ceiling) was reached, so items past it are not reachable by paging. Narrow with ``type`` or search. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md) | no | List of results | | | `truncated` | boolean | no | True when the listing was capped | default: `false` | ## Used by - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileSendingMethod How the files reach the recipient. Wire values use a hyphen. Type: string - one of: `"shared_link"`, `"attachment"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationShare](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileStructureResponse What is inside one file. Discriminated by `file_type`: the matching body key is populated and the others are absent. Today only `spreadsheet` exists; a future document variant adds `document` without changing this URL. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `file_id` | string | yes | Id of the file that was inspected. | | | `provider` | string | yes | Storage provider the file lives on. | | | `name` | string, nullable | no | The file's name. | | | `file_type` | string | yes | Body discriminator, e.g. `spreadsheet` | | | `resolved_file` | [ResolvedFile](https://dev-api.sheetgo.com/rest/reference/models/ResolvedFile.md), nullable | no | Set when `file_id` was a folder: the newest spreadsheet in it, whose structure is returned. | | | `spreadsheet` | [SpreadsheetStructure](https://dev-api.sheetgo.com/rest/reference/models/SpreadsheetStructure.md), nullable | no | The spreadsheet's tabs, named ranges and charts. Populated when `file_type` is `spreadsheet`, absent otherwise. | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileType Type: string - one of: `"gsheets"`, `"xlsx"`, `"csv"`, `"tsv"`, `"folder"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationFile](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) - [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md) - [FormFileModel](https://dev-api.sheetgo.com/rest/reference/models/FormFileModel.md) - [SourceFile](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FileTypeFilter Public ``type`` vocabulary. The spreadsheet and folder values mirror :class:`newapi.models.beta.connections.FileType`, so such a value can be handed straight back in an automation payload as ``file_type``. ``gdocs`` is the exception: it has no ``FileType`` counterpart because a Google Docs id is passed as the ``document`` destination's ``template_id``, a field that carries no file type. It is also the only value not returned by default -- ask for it explicitly. Type: string - one of: `"gsheets"`, `"xlsx"`, `"csv"`, `"tsv"`, `"folder"`, `"gdocs"` ## Used by - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FilterColumn Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | A **column** filter: choose which columns are carried through. | const: `"column"` | | `columns` | array of string | no | The selected columns. Each is a spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FilterCondition-Input Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | A **condition** filter: keep rows where a column matches a comparison. | const: `"condition"` | | `columns` | array of string, nullable | no | The selected columns. Each is a spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | | `condition_type` | [ConditionType](https://dev-api.sheetgo.com/rest/reference/models/ConditionType.md), nullable | no | The filter condition type | | | `expressions` | array of [ConditionExpression](https://dev-api.sheetgo.com/rest/reference/models/ConditionExpression.md), nullable | no | The filter expression | | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FilterCondition-Output Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | A **condition** filter: keep rows where a column matches a comparison. | const: `"condition"` | | `columns` | array of string, nullable | no | The selected columns. Each is a spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | | `condition_type` | [ConditionType](https://dev-api.sheetgo.com/rest/reference/models/ConditionType.md), nullable | no | The filter condition type | | | `expressions` | array of [ConditionExpression](https://dev-api.sheetgo.com/rest/reference/models/ConditionExpression.md), nullable | no | The filter expression | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FilterQuery Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | A **query** filter: keep rows matching an sgql expression. | const: `"query"` | | `query` | string | yes | The filter query string | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormCreate Form creation data Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `title` | string | no | Title for the form | default: `"Untitled form"` | | `description` | string, nullable | no | Form description | | | `confirmation_message` | string, nullable | no | Confirmation message | | | `include_header` | boolean, nullable | no | True if include header | default: `false` | | `limit_responses` | boolean, nullable | no | True if should limit responses | default: `false` | | `require_auth` | boolean, nullable | no | True if it requires authentication | default: `false` | | `source` | [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md) | yes | Form fields source file | | | `target` | [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md) | yes | Response destination file | | ## Used by - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormFile Used in form creation and update Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the file | | | `name` | string | yes | Name of the file | | | `file_type` | [FileType](https://dev-api.sheetgo.com/rest/reference/models/FileType.md) | yes | Type of the file | | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | Service origin of the file | | | `tab_id` | integer | yes | Tab id of the file | | | `tab_name` | string | yes | Tab name of the file | | ## Used by - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [FormCreate](https://dev-api.sheetgo.com/rest/reference/models/FormCreate.md) - [FormPatch](https://dev-api.sheetgo.com/rest/reference/models/FormPatch.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormFileModel For displaying data Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the file | | | `name` | string, nullable | no | Name of the file | | | `file_type` | [FileType](https://dev-api.sheetgo.com/rest/reference/models/FileType.md), nullable | no | Type of the file | | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md), nullable | no | Service origin of the file | | | `tab_id` | integer, nullable | no | Tab id of the file | | | `tab_name` | string, nullable | no | Tab name of the file | | ## Used by - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormModel For displaying data Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | no | Form identification | | | `title` | string | no | Title for the form | default: `"Untitled form"` | | `description` | string, nullable | no | Form description | | | `confirmation_message` | string, nullable | no | Confirmation message | | | `include_header` | boolean, nullable | no | True if include header | default: `false` | | `limit_responses` | boolean, nullable | no | True if should limit responses | default: `false` | | `require_auth` | boolean, nullable | no | True if it requires authentication | default: `false` | | `source` | [FormFileModel](https://dev-api.sheetgo.com/rest/reference/models/FormFileModel.md), nullable | no | Form fields source file | | | `target` | [FormFileModel](https://dev-api.sheetgo.com/rest/reference/models/FormFileModel.md), nullable | no | Response destination file | | ## Used by - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [PaginatedResponse_FormModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_FormModel_.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormPatch Form update data Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `title` | string, nullable | no | Title for the form | | | `description` | string, nullable | no | Form description | | | `confirmation_message` | string, nullable | no | Confirmation message | | | `sync_fields_after_submission` | boolean, nullable | no | True it should sync fields after submission | | | `require_auth` | boolean, nullable | no | Require respondents to authenticate. SG-14657 — must be sent together with `limit_responses`; sending one alone is a 422. Setting `limit_responses` true forces this on. | | | `limit_responses` | boolean, nullable | no | Limit each respondent to one response. Must be sent together with `require_auth` — identifying the respondent is how the limit is enforced. | | | `source` | [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md), nullable | no | Form fields source file | | | `target` | [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md), nullable | no | Response destination file | | ## Used by - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # FormSubmissionTriggerIn Run this workflow whenever a bound Sheetgo form receives a new response. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Selects a **form_submission** trigger: the workflow runs each time the form named by `form_id` receives a response. | const: `"form_submission"` | | `form_id` | string | yes | Id of a form attached to this workflow. | | ## Used by - [PUT /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#put-rest-beta-workflows-id-trigger) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # GeneralAccessOut Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `access_type` | string | yes | restrict \| domain \| team | | | `role` | string, nullable | no | The role granted to everyone covered by `access_type`. Null when `access_type` is `restrict`, where nobody is covered. | | ## Used by - [DELETE /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-general-access) - [GET /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-general-access) - [PUT /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#put-rest-beta-workflows-id-general-access) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # GeneralAccessSet Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `access_type` | string | yes | Who gets access beyond the named collaborators: `restrict` (nobody), `domain` (anyone in the owner's email domain) or `team` (the owner's Sheetgo team). | one of: `"restrict"`, `"domain"`, `"team"` | | `role` | string, nullable | no | Role to grant them — `collaborator` or `manager`. Ignored when `access_type` is `restrict`. | one of: `"collaborator"`, `"manager"` | ## Used by - [PUT /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#put-rest-beta-workflows-id-general-access) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # GmailSendBody One message to send through the authorized Gmail account. Gmail always stores a sent message in SENT, so there is no equivalent of Outlook's `save_to_sent_items`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `to` | array of string | yes | Primary recipients. At least one is required; `to`, `cc` and `bcc` together may not exceed 50 addresses. | min items: 1 | | `cc` | array of string | no | Carbon-copy recipients, visible to everyone. | default: `[]` | | `bcc` | array of string | no | Blind-carbon-copy recipients, hidden from other recipients. | default: `[]` | | `subject` | string | no | Subject line. Optional; defaults to an empty subject. | default: `""` | | `body` | [BodyContent](https://dev-api.sheetgo.com/rest/reference/models/BodyContent.md) | yes | The message body and whether it is plain text or HTML. | | | `attachments` | array of [AttachmentIn](https://dev-api.sheetgo.com/rest/reference/models/AttachmentIn.md) | no | Files to attach: at most 10, totalling no more than 3 MB once decoded. | default: `[]` | ## Used by - [POST /rest/beta/gmail/send](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # HTTPValidationError Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `detail` | array of [ValidationError](https://dev-api.sheetgo.com/rest/reference/models/ValidationError.md) | no | | | ## Used by - [DELETE /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#delete-rest-beta-automations-id) - [DELETE /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id) - [DELETE /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators) - [DELETE /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators-email) - [DELETE /rest/beta/workflows/{id}/dashboard/elements/{element_id}](https://dev-api.sheetgo.com/rest/reference/dashboards.md#delete-rest-beta-workflows-id-dashboard-elements-element-id) - [DELETE /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-general-access) - [DELETE /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#delete-rest-beta-workflows-id-trigger) - [DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id) - [GET /rest/beta/api-destination/{public_id}](https://dev-api.sheetgo.com/rest/reference/api-destination.md#get-rest-beta-api-destination-public-id) - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{automation_id}/webhook](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-automations-automation-id-webhook) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/automations/{id}/destinations](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-destinations) - [GET /rest/beta/automations/{id}/files](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-files) - [GET /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-run) - [GET /rest/beta/automations/{id}/sources](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-sources) - [GET /rest/beta/bigquery/projects](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects) - [GET /rest/beta/bigquery/projects/{project}/datasets](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets) - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables) - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table) - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) - [GET /rest/beta/outlook/messages](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages) - [GET /rest/beta/outlook/messages/{message_id}](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id) - [GET /rest/beta/outlook/messages/{message_id}/attachments/{attachment_id}](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id-attachments-attachment-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [GET /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-collaborators) - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) - [GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data) - [GET /rest/beta/workflows/{id}/destinations](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-destinations) - [GET /rest/beta/workflows/{id}/files](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-files) - [GET /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-general-access) - [GET /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-run) - [GET /rest/beta/workflows/{id}/sources](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-sources) - [GET /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#get-rest-beta-workflows-id-trigger) - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses) - [GET /rest/beta/workflows/{workflow_id}/webhooks](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-workflows-workflow-id-webhooks) - [HEAD /rest/beta/api-destination/{public_id}](https://dev-api.sheetgo.com/rest/reference/api-destination.md#head-rest-beta-api-destination-public-id) - [HEAD /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses](https://dev-api.sheetgo.com/rest/reference/forms.md#head-rest-beta-workflows-workflow-id-forms-form-id-responses) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/auth/refresh](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-refresh) - [POST /rest/auth/token](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-token) - [POST /rest/beta/automations/run/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-run-id) - [POST /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-id-run) - [POST /rest/beta/bigquery/projects/{project}/validate-query](https://dev-api.sheetgo.com/rest/reference/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query) - [POST /rest/beta/gmail/send](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send) - [POST /rest/beta/outlook/messages/batch](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-messages-batch) - [POST /rest/beta/outlook/send](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [POST /rest/beta/workflows/run/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-run-id) - [POST /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators) - [POST /rest/beta/workflows/{id}/leave](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-leave) - [POST /rest/beta/workflows/{id}/request-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-request-access) - [POST /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-run) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [PUT /rest/beta/workflows/{id}/dashboard/publish](https://dev-api.sheetgo.com/rest/reference/dashboards.md#put-rest-beta-workflows-id-dashboard-publish) - [PUT /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#put-rest-beta-workflows-id-general-access) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IdentifyDataType Type: string - one of: `"source_file_location"`, `"source_file_name"`, `"source_file_creation_date"`, `"source_file_update_date"`, `"source_tab_name"`, `"destination_file_transfer_datetime"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationFile](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) - [DestinationFolder](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ImportMode Which files a folder source imports, ordered by modified time. Type: string - one of: `"all_newest_first"`, `"all_oldest_first"`, `"newest_file"`, `"oldest_file"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IntegrationAccount One authorized account for a provider. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `account` | string | yes | Pass this back as `sources[].account`. The shop domain for Shopify, the realm (company) id for QuickBooks. | | | `connected_at` | string (date-time), nullable | no | When the account was authorized | | | `may_be_revoked` | boolean | no | True when the stored credentials are gone — the account must be re-authorized in the web app before it will run. | default: `false` | ## Used by - [GET /rest/beta/integrations](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations) - [IntegrationOut](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IntegrationListResponse Standard envelope. The provider list is fixed and short, so there are no paging query params -- same as `GET /files/{provider}/roots`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [IntegrationOut](https://dev-api.sheetgo.com/rest/reference/models/IntegrationOut.md) | no | List of results | | ## Used by - [GET /rest/beta/integrations](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IntegrationOptionsResponse Everything selectable for one provider. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `provider` | string | yes | The provider these options belong to, e.g. `shopify` or `quickbooks`. | | | `data_sources` | array of [DataSourceOut](https://dev-api.sheetgo.com/rest/reference/models/DataSourceOut.md) | no | Every data source this provider exposes. Use a `key` from here as an integration source's `data_source`. | | ## Used by - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IntegrationOut One provider, with whatever the caller has authorized for it. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `provider` | string | yes | Pass this back as `sources[].provider` | | | `name` | string | yes | Display name | | | `connected` | boolean | yes | True when at least one account is authorized | | | `accounts` | array of [IntegrationAccount](https://dev-api.sheetgo.com/rest/reference/models/IntegrationAccount.md) | no | Authorized accounts. Empty when not connected — authorization happens in the Sheetgo web app, not here. | | ## Used by - [GET /rest/beta/integrations](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations) - [IntegrationListResponse](https://dev-api.sheetgo.com/rest/reference/models/IntegrationListResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # IntegrationProvider Third-party services with a pre-configured, server-managed API source. Distinct from `Provider`, which lists storage backends. The value is also the prefix of the compound `service_origin` a compiled source carries (`shopify:`), which is what makes core-lib's load_provider_manager pick the provider-specific request manager. Type: string - one of: `"shopify"`, `"quickbooks"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceIntegration](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ItemKind What a result *is*, beyond its file type. ``site``, ``shared_drive`` and ``virtual`` are only ever emitted by the ``/roots`` endpoint; browse and search return ``file`` or ``folder``. Type: string - one of: `"file"`, `"folder"`, `"site"`, `"shared_drive"`, `"virtual"` ## Used by - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [FileItem](https://dev-api.sheetgo.com/rest/reference/models/FileItem.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # KeepDuplicateType Type: string - one of: `"first"`, `"last"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [RemoveDuplicatesProcessor](https://dev-api.sheetgo.com/rest/reference/models/RemoveDuplicatesProcessor.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # LeftJoinProcessor Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `column` | string | no | Spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # MergeProcessor Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `offset_header` | integer | no | The header position | default: `1` | | `remove_header` | boolean | no | Remove header during the merge process | default: `false` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ModelSettings OpenAI settings the AI step passes to the model. Honoured only with the user's own OpenAI key (core-lib ai_processor/processors.py). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `temperature` | number, nullable | no | | min: 0.0; max: 2.0 | | `top_p` | number, nullable | no | | min: 0.0; max: 1.0 | | `frequency_penalty` | number, nullable | no | | min: -2.0; max: 2.0 | | `presence_penalty` | number, nullable | no | | min: -2.0; max: 2.0 | | `max_completion_tokens` | integer, nullable | no | | exclusive min: 1.0 | | `reasoning_effort` | string, nullable | no | Applied by the engine only to models whose id starts with `o`. | one of: `"low"`, `"medium"`, `"high"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # NamedRangeItem One named range. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string, nullable | no | Provider namedRangeId | | | `name` | string, nullable | no | The name as defined in the spreadsheet | | | `tab_id` | integer, nullable | no | Numeric id of the tab the named range lives on. | | | `tab_name` | string, nullable | no | Name of that tab. | | | `range` | string, nullable | no | A1 range the name resolves to | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [SpreadsheetStructure](https://dev-api.sheetgo.com/rest/reference/models/SpreadsheetStructure.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # OnProcessingError What a documents run does when one document cannot be read. Type: string - one of: `"continue"`, `"stop"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AIProcessor](https://dev-api.sheetgo.com/rest/reference/models/AIProcessor.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # OutlookAccount Which connected Microsoft account reads the mailbox. Type: string - one of: `"personal"`, `"work"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceOutlook-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) - [SourceOutlook-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # OutlookExtract Type: string - one of: `"attachments"`, `"body"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceOutlook-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) - [SourceOutlook-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # OutlookMailbox The mailbox folder to read — the three the web app offers. Type: string - one of: `"inbox"`, `"archive"`, `"sent_items"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceOutlook-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Input.md) - [SourceOutlook-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PageOrientation Type: string - one of: `"portrait"`, `"landscape"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationPDF](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginatedResponse Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array | no | List of results | | ## Used by - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginatedResponse_AutomationModel_ Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) | no | List of results | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginatedResponse_FormModel_ Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [FormModel](https://dev-api.sheetgo.com/rest/reference/models/FormModel.md) | no | List of results | | ## Used by - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginatedResponse_WorkflowModel_ Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `page` | integer, nullable | no | Page number | default: `1` | | `per_page` | integer, nullable | no | Number of items per page | default: `50` | | `total` | integer, nullable | no | Total number of pages | default: `0` | | `results` | array of [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) | no | List of results | | ## Used by - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationCursor Follow a cursor until the response says there is no more. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `scope` | string | no | Where the paging parameters are placed: the query string or the JSON body. | one of: `"query"`, `"body"`; default: `"query"` | | `type` | string | yes | Selects **cursor** pagination: the response carries an opaque cursor that is sent back to fetch the next page. | const: `"cursor"` | | `cursor_param` | string | no | Request parameter carrying the cursor. | default: `"cursor"` | | `has_more_key` | string | no | Response key holding the more-pages flag. | default: `"has_more"` | | `next_cursor_key` | string | no | Response key holding the next cursor. | default: `"next_cursor"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationHeaderLink Follow a next-page link found in a response header (e.g. RFC 5988 Link). Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `type` | string | yes | Selects **header-link** pagination: the next page's URL is read from the response's `Link` header. | const: `"header-link"` | | `next_link_key` | string | no | Response header holding the next-page URL. | default: `"next"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationLink Follow a next-page link found in the response body. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `type` | string | yes | Selects **link** pagination: the next page's full URL is read out of the response body. | const: `"link"` | | `next_link_key` | string | no | Response key holding the next-page URL. | default: `"next"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationOffset Advance an offset by the limit until a short page comes back. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `scope` | string | no | Where the paging parameters are placed: the query string or the JSON body. | one of: `"query"`, `"body"`; default: `"query"` | | `type` | string | yes | Selects **offset** pagination: a row offset is advanced by the page size on each request. | const: `"offset"` | | `offset_param` | string | no | Request parameter carrying the offset. | default: `"offset"` | | `limit_param` | string | no | Request parameter carrying the page size. | default: `"limit"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationPage Increment a page number until a short page comes back. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `scope` | string | no | Where the paging parameters are placed: the query string or the JSON body. | one of: `"query"`, `"body"`; default: `"query"` | | `type` | string | yes | Selects **page-number** pagination: a page counter is incremented until the response runs out of rows. | const: `"page"` | | `page_param` | string | no | Request parameter carrying the page number. | default: `"page"` | | `per_page_param` | string | no | Request parameter carrying the page size. | default: `"per_page"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaginationQueryOffset Rewrite offset/limit keywords inside a SQL-like query parameter. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `limit` | integer, nullable | no | Stop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out. | min: 0.0 | | `rate_limit` | string, nullable | no | Pause between requests. Either "N/seconds" — e.g. "100/10" for 100 requests per 10 seconds — or a plain number of seconds, e.g. "0.5". | | | `type` | string | yes | Selects **query-offset** pagination: the offset travels in the query string of the request URL. | const: `"query-offset"` | | `query_key` | string | no | Request parameter holding the query string. | default: `"query"` | | `query_offset_key` | string | no | Keyword inside the query that sets the offset. | default: `"offset"` | | `query_limit_key` | string | no | Keyword inside the query that sets the page size. | default: `"limit"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PaperSize Type: string - one of: `"letter"`, `"tabloid"`, `"legal"`, `"statement"`, `"executive"`, `"folio"`, `"A3"`, `"A4"`, `"A5"`, `"B4"`, `"B5"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationPDF](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Provider Type: string - one of: `"drive"`, `"onedrive"`, `"sharepoint"`, `"dropbox"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationFile](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) - [DestinationFolder](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) - [FormFile](https://dev-api.sheetgo.com/rest/reference/models/FormFile.md) - [FormFileModel](https://dev-api.sheetgo.com/rest/reference/models/FormFileModel.md) - [SourceFile](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # PublishOut The dashboard's current publication state. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `shared` | string | yes | `public` if the dashboard is published and reachable at `url`, `private` if it is not. | | | `require_auth` | boolean | no | Whether a viewer must be signed in to open the dashboard. Only meaningful while `shared` is `public`. | default: `false` | | `auth_config` | object, nullable | no | The access restriction applied when `require_auth` is true — `{"domain": true}` limits viewers to the owner's email domain. Null when unrestricted. | | | `public_id` | string, nullable | no | Stable public identifier minted at first publish; it forms the `url`. Null until the dashboard has been published once. | | | `url` | string, nullable | no | Viewer URL; null while private and never published | | ## Used by - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) - [PUT /rest/beta/workflows/{id}/dashboard/publish](https://dev-api.sheetgo.com/rest/reference/dashboards.md#put-rest-beta-workflows-id-dashboard-publish) - [DashboardOut](https://dev-api.sheetgo.com/rest/reference/models/DashboardOut.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # RefreshTokenRequest The parameters used when refreshing a token Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `grant_type` | string | no | OAuth2 grant type. Must be `refresh_token` for this endpoint. | default: `"refresh_token"` | | `refresh_token` | string | yes | The refresh token previously issued by `POST /rest/auth/token`. | | | `client_id` | string | yes | Your application's client id. | | | `client_secret` | string | yes | Your application's client secret. Never expose it in a browser or mobile client. | | ## Used by - [POST /rest/auth/refresh](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-refresh) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # RemoveDuplicatesProcessor Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `columns` | array of string | no | The selected columns. Each is a spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | | `keep` | [KeepDuplicateType](https://dev-api.sheetgo.com/rest/reference/models/KeepDuplicateType.md) | no | Keep duplicated rows | default: `"first"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ResolvedFile The spreadsheet a folder id resolved to. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the spreadsheet that was read. | | | `name` | string, nullable | no | Its name. | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [FileStructureResponse](https://dev-api.sheetgo.com/rest/reference/models/FileStructureResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SendBody One message to send through the authorized Outlook account. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `to` | array of string | yes | Primary recipients. At least one is required; `to`, `cc` and `bcc` together may not exceed 50 addresses. | min items: 1 | | `cc` | array of string | no | Carbon-copy recipients, visible to everyone. | default: `[]` | | `bcc` | array of string | no | Blind-carbon-copy recipients, hidden from other recipients. | default: `[]` | | `subject` | string | no | Subject line. Optional; defaults to an empty subject. | default: `""` | | `body` | [BodyContent](https://dev-api.sheetgo.com/rest/reference/models/BodyContent.md) | yes | The message body and whether it is plain text or HTML. | | | `attachments` | array of [AttachmentIn](https://dev-api.sheetgo.com/rest/reference/models/AttachmentIn.md) | no | Files to attach: at most 10, totalling no more than 3 MB once decoded. | default: `[]` | | `save_to_sent_items` | boolean | no | Whether to keep a copy in the account's Sent Items folder. Set false to send without recording it. | default: `true` | ## Used by - [POST /rest/beta/outlook/send](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SendFrom Which mailbox sends an email destination's messages. Each value is one of the three (mimetype, service_origin) pairs Core API's validator accepts for an email interface (connection/utils.py _is_email_interface), which the share service reads to pick the sender (sheetgo-microservices/share/mail_provider.py). Mirrors the web app's EmailSendFrom (web-app/src/constants/Mail/index.js). Type: string - one of: `"gmail"`, `"outlook_personal"`, `"outlook_work"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationMailMerge](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) - [DestinationShare](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceAPI Request an HTTP endpoint and use the JSON it returns as source data. Cannot be combined with file, folder or webhook sources — see validate_api_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as an **API request**: Sheetgo calls your endpoint and turns the response into rows. Cannot be combined with file, folder or webhook sources. | const: `"api"` | | `endpoint` | string | yes | URL to request. Supports `{{Tab!Ref}}` cell references — see the Cell References section. | | | `method` | string | no | HTTP method. Only GET and POST can read data. | one of: `"get"`, `"post"`; default: `"get"` | | `headers` | object with values of string, nullable | no | HTTP headers sent with the request, e.g. `{"Authorization": "Bearer …"}`. Supports `{{Tab!Ref}}` cell references. **Write-only** — never returned by a read, and a PUT that omits it clears it. | | | `body` | string, nullable | no | Request body, sent as JSON when the endpoint expects it. Supports `{{Tab!Ref}}` cell references. Do not put credentials here — unlike `headers`, it is returned by reads. | | | `data_root` | string, nullable | no | Dotted path to the list of records inside the response, e.g. `data.orders`. Omit to let Sheetgo detect it. | | | `header_root` | string, nullable | no | Dotted path to a list of column names inside the response, used as the header row. | | | `pagination` | [PaginationCursor (type = "cursor")](https://dev-api.sheetgo.com/rest/reference/models/PaginationCursor.md) or [PaginationPage (type = "page")](https://dev-api.sheetgo.com/rest/reference/models/PaginationPage.md) or [PaginationOffset (type = "offset")](https://dev-api.sheetgo.com/rest/reference/models/PaginationOffset.md) or [PaginationQueryOffset (type = "query-offset")](https://dev-api.sheetgo.com/rest/reference/models/PaginationQueryOffset.md) or [PaginationLink (type = "link")](https://dev-api.sheetgo.com/rest/reference/models/PaginationLink.md) or [PaginationHeaderLink (type = "header-link")](https://dev-api.sheetgo.com/rest/reference/models/PaginationHeaderLink.md), nullable | no | How to walk a paginated endpoint. Omit for a single request. | | | `auth` | [SourceAuth](https://dev-api.sheetgo.com/rest/reference/models/SourceAuth.md), nullable | no | OAuth2 token refresh. **Write-only** — never returned by a read, and a PUT that omits it clears it. | | | `name` | string, nullable | no | Label for this source. Also used as the destination tab name when several sources are transferred without a merge. Defaults to `API`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceAllTabs Type: string - one of: `"all_tabs"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceFile](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) - [SourceFolder-Input](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Input.md) - [SourceFolder-Output](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceAuth OAuth2 refresh for an API source. ⚠️ `refresh_params` typically carries a client secret and a refresh token. Automation interface payloads are NOT encrypted at rest, and the engine ROTATES the refresh token in place after a successful refresh (sheetgo-microservices getvalues/service_api.py:71-77) — so the stored value can change without any API call. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `auth_method` | string | yes | Only `oauth2` is supported. The engine refreshes the token on a 401/403 and retries. | const: `"oauth2"` | | `auth_type` | string | no | Scheme used in the Authorization header after a refresh, e.g. `Bearer`. | default: `"Bearer"` | | `refresh_url` | string | yes | Token endpoint called to refresh. | | | `refresh_headers` | object with values of string, nullable | no | Extra headers sent with the refresh request. | | | `refresh_params` | object with values of string, nullable | no | Form body of the refresh request, e.g. `client_id`, `client_secret`, `refresh_token`. Write-only: never returned by a read. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [SourceAPI](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceBigQuery Read a BigQuery table, or the results of a query over it. `project` + `dataset` + `table` are always required -- they form the interface id the engine reads the project back out of, and they match the web app, where selecting a table is mandatory and the SQL is seeded from it. Cannot be combined with any other source, and at most one per automation -- see validate_bigquery_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as **BigQuery**. Only one BigQuery source per automation, and it cannot be mixed with other source kinds. | const: `"bigquery"` | | `project` | string | yes | GCP project id. List them with `GET /rest/beta/bigquery/projects`. | | | `dataset` | string | yes | BigQuery dataset id | | | `table` | string | yes | BigQuery table id | | | `query` | string, nullable | no | Standard-SQL query to run instead of reading the whole table. Validate it first with `POST /rest/beta/bigquery/projects/{project}/validate-query`. Omit it and Sheetgo reads every row of the table -- there is no implicit row limit, so add your own `LIMIT` here if you want one. | | | `name` | string, nullable | no | Label for this source. Also used as the destination tab name. Defaults to the table name. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceFile Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as a single **file** — one spreadsheet, CSV, TSV or Excel workbook. | const: `"file"` | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | The storage provider that hosts the file or folder | | | `id` | string | yes | Id of the source file or folder | | | `file_type` | [FileType](https://dev-api.sheetgo.com/rest/reference/models/FileType.md) | yes | The file type | | | `sheet_tabs` | string or [SourceAllTabs](https://dev-api.sheetgo.com/rest/reference/models/SourceAllTabs.md) or array of string, nullable | no | One or more sheet tab names or all_tabs | | | `data_ranges` | string, nullable | no | The data range | | | `offset_header` | integer, nullable | no | The header position | default: `1` | | `date_format` | string, nullable | no | Format for date fields | default: `"#month/day/YEAR"` | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceFolder-Input Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as a **folder**: every matching file inside it is read. | const: `"folder"` | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | The storage provider that hosts the file or folder | | | `id` | string | yes | Id of the source file or folder | | | `file_type` | string | yes | Always `folder`. Fixed by the source type; present so folder and file sources share one shape. | const: `"folder"` | | `sheet_tabs` | string or [SourceAllTabs](https://dev-api.sheetgo.com/rest/reference/models/SourceAllTabs.md) or array of string, nullable | no | One or more sheet tab names or all_tabs | | | `data_ranges` | string, nullable | no | The data range | | | `offset_header` | integer, nullable | no | The header position | default: `1` | | `date_format` | string, nullable | no | Format for date fields | default: `"#month/day/YEAR"` | | `content_type` | [ContentType](https://dev-api.sheetgo.com/rest/reference/models/ContentType.md) | no | `spreadsheets` reads Sheets / Excel / CSV / TSV files. `documents` reads Google Docs, PDF, Word (.docx) and text files through the AI step (`ai.prompt` required). | default: `"spreadsheets"` | | `include_subfolders` | boolean | no | Also read files inside subfolders. | default: `false` | | `import` | [ImportMode](https://dev-api.sheetgo.com/rest/reference/models/ImportMode.md) | no | Which files to import, by modified time: every file newest or oldest first, or only the newest / oldest one. Applied after `file_filter` and `process_once`. | default: `"all_newest_first"` | | `process_once` | boolean | no | Documents only: skip files already read by an earlier run (new or changed files are read again). Ignored for spreadsheets. | default: `true` | | `file_filter` | [FileFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Input.md), nullable | no | Only read the files that match these conditions. | | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceFolder-Output Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as a **folder**: every matching file inside it is read. | const: `"folder"` | | `provider` | [Provider](https://dev-api.sheetgo.com/rest/reference/models/Provider.md) | yes | The storage provider that hosts the file or folder | | | `id` | string | yes | Id of the source file or folder | | | `file_type` | string | yes | Always `folder`. Fixed by the source type; present so folder and file sources share one shape. | const: `"folder"` | | `sheet_tabs` | string or [SourceAllTabs](https://dev-api.sheetgo.com/rest/reference/models/SourceAllTabs.md) or array of string, nullable | no | One or more sheet tab names or all_tabs | | | `data_ranges` | string, nullable | no | The data range | | | `offset_header` | integer, nullable | no | The header position | default: `1` | | `date_format` | string, nullable | no | Format for date fields | default: `"#month/day/YEAR"` | | `content_type` | [ContentType](https://dev-api.sheetgo.com/rest/reference/models/ContentType.md) | no | `spreadsheets` reads Sheets / Excel / CSV / TSV files. `documents` reads Google Docs, PDF, Word (.docx) and text files through the AI step (`ai.prompt` required). | default: `"spreadsheets"` | | `include_subfolders` | boolean | no | Also read files inside subfolders. | default: `false` | | `import` | [ImportMode](https://dev-api.sheetgo.com/rest/reference/models/ImportMode.md) | no | Which files to import, by modified time: every file newest or oldest first, or only the newest / oldest one. Applied after `file_filter` and `process_once`. | default: `"all_newest_first"` | | `process_once` | boolean | no | Documents only: skip files already read by an earlier run (new or changed files are read again). Ignored for spreadsheets. | default: `true` | | `file_filter` | [FileFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/FileFilter-Output.md), nullable | no | Only read the files that match these conditions. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceIntegration A pre-configured third-party source (Shopify, QuickBooks). Everything an `api` source makes you supply -- URL, headers, token, pagination, response parsing -- is built server-side per provider from the authorized account's credentials, so only the choice of data source (and, for QuickBooks reports, its parameters) is yours. Unlike SourceAPI, this round-trips completely on a read: it holds no caller-supplied secret, so nothing has to be write-only. Counts as an api-like source for the no-mixing rule -- see validate_api_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as a pre-configured **integration** (Shopify, QuickBooks). URL, auth and pagination are managed by Sheetgo. | const: `"integration"` | | `provider` | [IntegrationProvider](https://dev-api.sheetgo.com/rest/reference/models/IntegrationProvider.md) | yes | The integration to read from. List them with `GET /rest/beta/integrations`. | | | `account` | string, nullable | no | Which authorized account to use — the shop domain for Shopify, the realm (company) id for QuickBooks. Optional: omit it and Sheetgo uses your only connection for that provider. With several connected, omitting it is a 422. | | | `data_source` | string | yes | Which data to pull, e.g. `get_products`. Get the list from `GET /rest/beta/integrations/{provider}/options`. | | | `parameters` | object with values of string, nullable | no | Values for the parameters that data source declares. Only QuickBooks reports declare any; sending parameters to anything else is a 422. | | | `name` | string, nullable | no | Label for this source. Also used as the destination tab name when several sources are transferred without a merge. Defaults to the provider's display name. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceOutlook-Input Read emails from an Outlook mailbox folder and save their file attachments (or bodies as HTML) into one existing folder destination. Must be the only source, with no processors and exactly one `folder` destination — see validate_outlook_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as **Outlook**: emails from a mailbox folder, saved as files into a folder destination. | const: `"outlook"` | | `account` | [OutlookAccount](https://dev-api.sheetgo.com/rest/reference/models/OutlookAccount.md) | no | `personal` (a personal Microsoft account) or `work` (work or school). It must be connected in Sheetgo with permission to read mail (412 `outlook_not_connected` otherwise). | default: `"personal"` | | `mailbox` | [OutlookMailbox](https://dev-api.sheetgo.com/rest/reference/models/OutlookMailbox.md) | no | `inbox`, `archive` or `sent_items`. | default: `"inbox"` | | `extract` | [OutlookExtract](https://dev-api.sheetgo.com/rest/reference/models/OutlookExtract.md) | no | `attachments` saves each email's file attachments; `body` saves each email's body as `.html`. | default: `"attachments"` | | `process_once` | boolean | no | Skip emails already saved by an earlier run. | default: `true` | | `email_filter` | [EmailFilter-Input](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Input.md), nullable | no | Only read the emails that match these conditions. Omit to read every email (each run scans at most 1000). | | | `name` | string, nullable | no | Label for the source. Defaults to `Outlook`. | | ## Used by - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceOutlook-Output Read emails from an Outlook mailbox folder and save their file attachments (or bodies as HTML) into one existing folder destination. Must be the only source, with no processors and exactly one `folder` destination — see validate_outlook_automation. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as **Outlook**: emails from a mailbox folder, saved as files into a folder destination. | const: `"outlook"` | | `account` | [OutlookAccount](https://dev-api.sheetgo.com/rest/reference/models/OutlookAccount.md) | no | `personal` (a personal Microsoft account) or `work` (work or school). It must be connected in Sheetgo with permission to read mail (412 `outlook_not_connected` otherwise). | default: `"personal"` | | `mailbox` | [OutlookMailbox](https://dev-api.sheetgo.com/rest/reference/models/OutlookMailbox.md) | no | `inbox`, `archive` or `sent_items`. | default: `"inbox"` | | `extract` | [OutlookExtract](https://dev-api.sheetgo.com/rest/reference/models/OutlookExtract.md) | no | `attachments` saves each email's file attachments; `body` saves each email's body as `.html`. | default: `"attachments"` | | `process_once` | boolean | no | Skip emails already saved by an earlier run. | default: `true` | | `email_filter` | [EmailFilter-Output](https://dev-api.sheetgo.com/rest/reference/models/EmailFilter-Output.md), nullable | no | Only read the emails that match these conditions. Omit to read every email (each run scans at most 1000). | | | `name` | string, nullable | no | Label for the source. Defaults to `Outlook`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SourceWebhook Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Marks this source as a **webhook**: your system pushes data in, rather than Sheetgo pulling it. | const: `"webhook"` | | `name` | string, nullable | no | Optional label for the webhook source | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) - [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Split Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `column` | string | no | Spreadsheet column letter (`A`, `B`, … `AA`), uppercase, as in the web app — not the header name. Find letters with `GET /files/{provider}/{file_id}/structure?include=columns`. | | ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [AutomationCreate](https://dev-api.sheetgo.com/rest/reference/models/AutomationCreate.md) - [AutomationModel](https://dev-api.sheetgo.com/rest/reference/models/AutomationModel.md) - [AutomationReplace](https://dev-api.sheetgo.com/rest/reference/models/AutomationReplace.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SpreadsheetStructure Spreadsheet body of a structure response. A section is null when it was not requested via `include`, and an empty list when it was requested and the spreadsheet has none. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `tabs` | array of [TabItem](https://dev-api.sheetgo.com/rest/reference/models/TabItem.md), nullable | no | The spreadsheet's tabs, in workbook order. Each carries the `tab_id` a dashboard element needs. | | | `named_ranges` | array of [NamedRangeItem](https://dev-api.sheetgo.com/rest/reference/models/NamedRangeItem.md), nullable | no | Named ranges defined in the spreadsheet. | | | `charts` | array of [ChartItem](https://dev-api.sheetgo.com/rest/reference/models/ChartItem.md), nullable | no | Charts already drawn in the spreadsheet. Each carries the `chart_id` a chart-reference dashboard element needs. | | | `columns_truncated` | boolean, nullable | no | Present when `include=columns` was requested. True when at least one tab's `columns` is null because only the first tabs are read by default (pass `all_tabs=true` or `tab=`) or the read ran out of time. | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [FileStructureResponse](https://dev-api.sheetgo.com/rest/reference/models/FileStructureResponse.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # SuccessResponse The legacy success envelope, returned by the pre-existing CRUD routes. It always carries HTTP 200; the outcome is in `code`/`type`, not the status line. Newer endpoints return the resource directly instead. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `code` | integer | no | Result code. 1 means the operation succeeded. | default: `1` | | `type` | string | no | Kind of result — `success` for this envelope. | default: `"success"` | | `message` | string | no | Human-readable confirmation of what happened. | default: `"OK"` | ## Used by - [DELETE /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#delete-rest-beta-automations-id) - [DELETE /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id) - [DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/beta/automations/run/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-run-id) - [POST /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-id-run) - [POST /rest/beta/workflows/run/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-run-id) - [POST /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-run) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # TabItem One tab (sheet) of a spreadsheet. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | integer, nullable | no | Numeric Google sheetId (Google Sheets only; null for Excel/CSV, whose tabs are identified by `name`). Pass as `tab_id` when creating a dashboard element. | | | `name` | string, nullable | no | Tab title | | | `index` | integer, nullable | no | Zero-based position | | | `rows` | integer, nullable | no | Grid row count | | | `cols` | integer, nullable | no | Grid column count | | | `hidden` | boolean | no | True when the tab is hidden in the UI | default: `false` | | `type` | string, nullable | no | Provider sheet type, e.g. GRID | | | `columns` | array of [ColumnItem](https://dev-api.sheetgo.com/rest/reference/models/ColumnItem.md), nullable | no | Letter → header map of this tab, when `include=columns` read it. Null when not requested, or not read (see `columns_truncated`). | | ## Used by - [GET /rest/beta/files/{provider}/{file_id}/structure](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id-structure) - [SpreadsheetStructure](https://dev-api.sheetgo.com/rest/reference/models/SpreadsheetStructure.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # TimeTriggerIn Time/smart schedule. Either friendly fields OR a raw cron, not both. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Selects a **time** trigger: the workflow runs on a schedule. Set either the friendly fields below or `cron`, not both. | const: `"time"` | | `frequency` | string, nullable | no | Schedule frequency | one of: `"minutes"`, `"hourly"`, `"daily"`, `"weekly"`, `"monthly"` | | `every` | integer, nullable | no | minutes: 15\|30 ; hourly: 1\|2\|4\|6\|8\|12 | | | `time` | string, nullable | no | HH:MM for daily/weekly/monthly. Minute is coerced to :00. | | | `weekday` | string or array of string, nullable | no | weekly only: a day name (sunday..saturday) or a list of names | | | `day_of_month` | integer or string, nullable | no | monthly only: 1..31 or 'last' | | | `cron` | string, nullable | no | Power-user escape hatch. Mutually exclusive with friendly fields. | | | `timezone` | string, nullable | no | IANA timezone; defaults to the workflow's current timezone. | | ## Used by - [PUT /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#put-rest-beta-workflows-id-trigger) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # TriggerOut Read model echoed by GET and returned by PUT. Only the fields belonging to the active trigger `type` are populated; all others are `null`. When `active` is false, `type` is `null` too and every other field is empty — that is the shape of a workflow with no trigger. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `active` | boolean | no | Whether a trigger is currently set and enabled. When false, every other field is null and the workflow runs only on demand. | default: `false` | | `type` | string, nullable | no | Which kind of trigger is set, and therefore which fields below are populated. Null when `active` is false. | one of: `"time"`, `"workflow_finished"`, `"form_submission"` | | `frequency` | string, nullable | no | time triggers only: `minutes`, `hourly`, `daily`, `weekly` or `monthly`. Null when the trigger was set with a raw `cron`. | | | `every` | integer, nullable | no | time triggers only: the interval within `frequency` — minutes: 15 or 30; hourly: 1, 2, 4, 6, 8 or 12. | | | `time` | string, nullable | no | time triggers only: `HH:MM` in `timezone`, for daily, weekly and monthly frequencies. The minute is always `:00`. | | | `weekday` | string or array of string, nullable | no | time triggers, weekly only: a day name (`sunday`..`saturday`), or a list of them when the schedule repeats on several days. | | | `day_of_month` | integer or string, nullable | no | time triggers, monthly only: the day of the month (1..31), or the string `last` for the final day of each month. | | | `cron` | string, nullable | no | time triggers only: the effective five-field cron expression the schedule resolved to. Always present for a time trigger, whether it was created from `cron` or from the friendly fields. | | | `timezone` | string, nullable | no | time triggers only: the IANA timezone the schedule is evaluated in (for example `Europe/Madrid`). | | | `after_workflow_id` | string, nullable | no | workflow_finished triggers only: the id of the parent workflow whose completion starts this one. | | | `form_id` | string, nullable | no | form_submission triggers only: the id of the form whose new responses start this workflow. | | ## Used by - [DELETE /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#delete-rest-beta-workflows-id-trigger) - [GET /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#get-rest-beta-workflows-id-trigger) - [PUT /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#put-rest-beta-workflows-id-trigger) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # UnusedFields What happens to a `{{Tag}}` in the template that no source column matches. Type: string - one of: `"ignore"`, `"error"` ## Used by - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#patch-rest-beta-automations-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PUT /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#put-rest-beta-automations-id) - [DestinationDocument](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) - [DestinationMailMerge](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ValidateQueryRequest Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `query` | string | yes | The SQL to check. Standard SQL; legacy SQL is not used. | | ## Used by - [POST /rest/beta/bigquery/projects/{project}/validate-query](https://dev-api.sheetgo.com/rest/reference/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ValidateQueryResponse The dry run's verdict. Nothing was scanned and nothing was mutated. A query that will not parse is a legitimate answer here, not an error: this endpoint returns `200` with `valid: false`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `valid` | boolean | yes | False when BigQuery rejected the SQL | | | `statement_type` | string, nullable | no | `SELECT`, `INSERT`, `DELETE`, … as BigQuery classifies it. Note a valid `DELETE` reports `valid: true` — this endpoint reports what the statement *is*, it does not refuse writes. | | | `total_bytes_processed` | integer, nullable | no | Bytes the query would scan. Use it to size the cost of an uncapped source query before creating the automation. | | | `schema` | object with values of string, nullable | no | Columns the query would return, with their types | | | `error` | string, nullable | no | BigQuery's explanation when `valid` is false | | ## Used by - [POST /rest/beta/bigquery/projects/{project}/validate-query](https://dev-api.sheetgo.com/rest/reference/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # ValidationError Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `loc` | array of string or integer | yes | | | | `msg` | string | yes | | | | `type` | string | yes | | | ## Used by - [DELETE /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#delete-rest-beta-automations-id) - [DELETE /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id) - [DELETE /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators) - [DELETE /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-collaborators-email) - [DELETE /rest/beta/workflows/{id}/dashboard/elements/{element_id}](https://dev-api.sheetgo.com/rest/reference/dashboards.md#delete-rest-beta-workflows-id-dashboard-elements-element-id) - [DELETE /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id-general-access) - [DELETE /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#delete-rest-beta-workflows-id-trigger) - [DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id) - [GET /rest/beta/api-destination/{public_id}](https://dev-api.sheetgo.com/rest/reference/api-destination.md#get-rest-beta-api-destination-public-id) - [GET /rest/beta/automations/](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations) - [GET /rest/beta/automations/{automation_id}/webhook](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-automations-automation-id-webhook) - [GET /rest/beta/automations/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id) - [GET /rest/beta/automations/{id}/destinations](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-destinations) - [GET /rest/beta/automations/{id}/files](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-files) - [GET /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-run) - [GET /rest/beta/automations/{id}/sources](https://dev-api.sheetgo.com/rest/reference/automations.md#get-rest-beta-automations-id-sources) - [GET /rest/beta/bigquery/projects](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects) - [GET /rest/beta/bigquery/projects/{project}/datasets](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets) - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables) - [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}](https://dev-api.sheetgo.com/rest/reference/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table) - [GET /rest/beta/files/{provider}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider) - [GET /rest/beta/files/{provider}/roots](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-roots) - [GET /rest/beta/files/{provider}/search](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-search) - [GET /rest/beta/files/{provider}/{file_id}](https://dev-api.sheetgo.com/rest/reference/files.md#get-rest-beta-files-provider-file-id) - [GET /rest/beta/integrations/{provider}/options](https://dev-api.sheetgo.com/rest/reference/integrations.md#get-rest-beta-integrations-provider-options) - [GET /rest/beta/outlook/messages](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages) - [GET /rest/beta/outlook/messages/{message_id}](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id) - [GET /rest/beta/outlook/messages/{message_id}/attachments/{attachment_id}](https://dev-api.sheetgo.com/rest/reference/outlook.md#get-rest-beta-outlook-messages-message-id-attachments-attachment-id) - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [GET /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-collaborators) - [GET /rest/beta/workflows/{id}/dashboard](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard) - [GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data](https://dev-api.sheetgo.com/rest/reference/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data) - [GET /rest/beta/workflows/{id}/destinations](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-destinations) - [GET /rest/beta/workflows/{id}/files](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-files) - [GET /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-general-access) - [GET /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-run) - [GET /rest/beta/workflows/{id}/sources](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-sources) - [GET /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#get-rest-beta-workflows-id-trigger) - [GET /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) - [GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses](https://dev-api.sheetgo.com/rest/reference/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses) - [GET /rest/beta/workflows/{workflow_id}/webhooks](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-workflows-workflow-id-webhooks) - [HEAD /rest/beta/api-destination/{public_id}](https://dev-api.sheetgo.com/rest/reference/api-destination.md#head-rest-beta-api-destination-public-id) - [HEAD /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses](https://dev-api.sheetgo.com/rest/reference/forms.md#head-rest-beta-workflows-workflow-id-forms-form-id-responses) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{id}/collaborators/{email}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id-collaborators-email) - [PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}](https://dev-api.sheetgo.com/rest/reference/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) - [POST /rest/auth/refresh](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-refresh) - [POST /rest/auth/token](https://dev-api.sheetgo.com/rest/reference/auth.md#post-rest-auth-token) - [POST /rest/beta/automations/run/{id}](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-run-id) - [POST /rest/beta/automations/{id}/run](https://dev-api.sheetgo.com/rest/reference/automations.md#post-rest-beta-automations-id-run) - [POST /rest/beta/bigquery/projects/{project}/validate-query](https://dev-api.sheetgo.com/rest/reference/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query) - [POST /rest/beta/gmail/send](https://dev-api.sheetgo.com/rest/reference/gmail.md#post-rest-beta-gmail-send) - [POST /rest/beta/outlook/messages/batch](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-messages-batch) - [POST /rest/beta/outlook/send](https://dev-api.sheetgo.com/rest/reference/outlook.md#post-rest-beta-outlook-send) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [POST /rest/beta/workflows/run/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-run-id) - [POST /rest/beta/workflows/{id}/collaborators](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-collaborators) - [POST /rest/beta/workflows/{id}/leave](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-leave) - [POST /rest/beta/workflows/{id}/request-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-request-access) - [POST /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows-id-run) - [POST /rest/beta/workflows/{workflow_id}/forms/](https://dev-api.sheetgo.com/rest/reference/forms.md#post-rest-beta-workflows-workflow-id-forms) - [PUT /rest/beta/workflows/{id}/dashboard/publish](https://dev-api.sheetgo.com/rest/reference/dashboards.md#put-rest-beta-workflows-id-dashboard-publish) - [PUT /rest/beta/workflows/{id}/general-access](https://dev-api.sheetgo.com/rest/reference/workflows.md#put-rest-beta-workflows-id-general-access) - [HTTPValidationError](https://dev-api.sheetgo.com/rest/reference/models/HTTPValidationError.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WebhookBody Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `values` | array of array of string | yes | Tabular values to push (rows of strings) | min items: 1 | | `run_workflow` | boolean | no | If True, after this automation finishes, the parent workflow's *other* automations are re-run synchronously. | default: `false` | | `async_dispatch` | boolean | no | Default False — the automation is dispatched synchronously and the 202 is returned once dispatch has started. Pass True to dispatch asynchronously and return 202 as soon as the request is accepted; useful for high-throughput producers. | default: `false` | ## Used by - [POST /rest/beta/webhook/{public_id}](https://dev-api.sheetgo.com/rest/reference/webhook.md#post-rest-beta-webhook-public-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WebhookOut A webhook endpoint bound to one automation's webhook source. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `automation_id` | string, nullable | no | Id of the automation this webhook feeds. Null only for a webhook that is not yet bound to one. | | | `public_id` | string | yes | The webhook's public identifier — the `{public_id}` path segment in `url`. Treat it as a secret: anyone holding it can push data to the automation. | | | `url` | string | yes | Full URL to POST your JSON payload to. This is the value to configure in the external system that will push data. | | | `created_at` | string (date-time), nullable | no | When the webhook was minted, ISO 8601. | | | `active` | boolean | no | False once the webhook has been deleted. A deleted webhook stops accepting pushes; webhooks are removed with their automation, never on their own. | default: `true` | ## Used by - [GET /rest/beta/automations/{automation_id}/webhook](https://dev-api.sheetgo.com/rest/reference/webhook.md#get-rest-beta-automations-automation-id-webhook) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowArchive Workflow archive Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `delete_automations` | boolean, nullable | no | All automations for the workflow should also be archived | default: `false` | ## Used by - [DELETE /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#delete-rest-beta-workflows-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowAutomationModel Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Id of the automation | | | `name` | string, nullable | no | Name of the automation | | | `owner` | string | yes | Owner of the automation | | | `status` | integer, nullable | no | Execution status of the automation | default: `1` | | `last_updating_user` | string, nullable | no | Last updated user of the automation | | | `input_count` | integer, nullable | no | Number of inputs of the automation | default: `0` | | `output_count` | integer, nullable | no | Number of outputs of the automation | default: `0` | | `sources` | array of [SourceFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/SourceFile.md) or [SourceFolder-Output (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/SourceFolder-Output.md) or [SourceWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/SourceWebhook.md) or [SourceAPI (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/SourceAPI.md) or [SourceIntegration (type = "integration")](https://dev-api.sheetgo.com/rest/reference/models/SourceIntegration.md) or [SourceBigQuery (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/SourceBigQuery.md) or [SourceOutlook-Output (type = "outlook")](https://dev-api.sheetgo.com/rest/reference/models/SourceOutlook-Output.md) | no | Source files/folders of the automation | | | `destinations` | array of [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Output (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md) or [DestinationFile (type = "file")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFile.md) or [DestinationFolder (type = "folder")](https://dev-api.sheetgo.com/rest/reference/models/DestinationFolder.md) or [DestinationDocument (type = "document")](https://dev-api.sheetgo.com/rest/reference/models/DestinationDocument.md) or [DestinationPDF (type = "pdf")](https://dev-api.sheetgo.com/rest/reference/models/DestinationPDF.md) or [DestinationShare (type = "share")](https://dev-api.sheetgo.com/rest/reference/models/DestinationShare.md) or [DestinationMailMerge (type = "mail_merge")](https://dev-api.sheetgo.com/rest/reference/models/DestinationMailMerge.md) or [DestinationWebhook (type = "webhook")](https://dev-api.sheetgo.com/rest/reference/models/DestinationWebhook.md) or [DestinationApiPublish (type = "api")](https://dev-api.sheetgo.com/rest/reference/models/DestinationApiPublish.md) or [DestinationBigQuery-Output (type = "bigquery")](https://dev-api.sheetgo.com/rest/reference/models/DestinationBigQuery-Output.md), nullable | no | Destinations of the automation | | ## Used by - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [WorkflowModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowModel.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowCreate New workflow creation Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `name` | string | no | Name of the new workflow | default: `"Untitled workflow"` | | `description` | string, nullable | no | Workflow description | | | `category` | string, nullable | no | Workflow category | | ## Used by - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowFinishedTriggerIn Run this workflow when another workflow finishes. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `type` | string | yes | Selects a **workflow_finished** trigger: the workflow runs when the workflow named by `after_workflow_id` completes. | const: `"workflow_finished"` | | `after_workflow_id` | string | yes | Parent workflow whose completion triggers this one (named 'after_' to distinguish it from the path {id}). | | ## Used by - [PUT /rest/beta/workflows/{id}/trigger](https://dev-api.sheetgo.com/rest/reference/triggers.md#put-rest-beta-workflows-id-trigger) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowModel Data presentation model for Workflow Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `id` | string | yes | Workflow identification | | | `name` | string | yes | Name of the workflow | | | `description` | string, nullable | yes | Description of the workflow | | | `category` | string, nullable | no | Category of the workflow | | | `owner` | string | yes | Owner of the workflow | | | `users` | array of string | yes | List of users in this workflow | | | `shared` | boolean | no | True if workflow is shared | default: `false` | | `automations` | object with values of [WorkflowAutomationModel](https://dev-api.sheetgo.com/rest/reference/models/WorkflowAutomationModel.md) | yes | Automations present in this workflow | | | `forms` | array of string | yes | Forms present in this workflow | | | `scheduled` | boolean, nullable | no | True if workflow is scheduled | default: `false` | | `running` | boolean, nullable | no | True if workflow is running | default: `false` | ## Used by - [GET /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows) - [GET /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id) - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) - [POST /rest/beta/workflows/](https://dev-api.sheetgo.com/rest/reference/workflows.md#post-rest-beta-workflows) - [PaginatedResponse_WorkflowModel_](https://dev-api.sheetgo.com/rest/reference/models/PaginatedResponse_WorkflowModel_.md) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowPatch Workflow patch Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `name` | string, nullable | no | Name of the workflow | | | `description` | string, nullable | no | Workflow description | | | `category` | string, nullable | no | Workflow category | | ## Used by - [PATCH /rest/beta/workflows/{id}](https://dev-api.sheetgo.com/rest/reference/workflows.md#patch-rest-beta-workflows-id) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # WorkflowRunStatus The outcome of a workflow's LAST run, plus one entry per automation. When the workflow itself has never been run as a whole but its automations have, the top-level `result`, `message` and `duration_seconds` are derived from `automations` — worst result wins, so a single failed automation makes the workflow `error`. Type: object Fields typed as another model are documented on that model's page; fetch it before filling the field. | Field | Type | Required | Description | Allowed values / default / constraints | | --- | --- | --- | --- | --- | | `workflow_id` | string | yes | Id of the workflow this status belongs to. | | | `execution` | string | yes | Live phase: `running` if the workflow or any of its automations is still executing, otherwise `completed`. | | | `result` | string | yes | Outcome of the last finished run: `never_run`, `success` or `error`. `error` if ANY automation failed. | | | `message` | string, nullable | no | Human-readable explanation of the outcome, from the workflow run when there is one, otherwise from the failing automation. Null on success and before the first run. | | | `docs_link` | string, nullable | no | URL of the help article for this error, when one exists. | | | `started_at` | string, nullable | no | When the last WORKFLOW run started. Null when the workflow has only ever been run one automation at a time — running a single automation records no workflow start time, and none is invented here. | | | `duration_seconds` | number, nullable | no | How long the last run took, in seconds. When derived from automations, this is the longest automation duration. | | | `last_failed_automation_id` | string, nullable | no | Id of the automation that failed, so you can go straight to it without scanning `automations`. Null when nothing failed. | | | `automations` | array of [AutomationRunStatus](https://dev-api.sheetgo.com/rest/reference/models/AutomationRunStatus.md) | no | Per-automation breakdown of the same run, one entry per automation in the workflow. | | ## Used by - [GET /rest/beta/workflows/{id}/run](https://dev-api.sheetgo.com/rest/reference/workflows.md#get-rest-beta-workflows-id-run) --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Rate Limiting To keep the platform fast and fair, the API limits how many requests each account can make in a short window. If you exceed the limit, further requests are temporarily rejected with **HTTP 429 (Too Many Requests)** until the window resets. Rate limits protect you too — they stop a runaway script from exhausting your account's capacity. ## How the limits work - **Per account.** Limits apply to your Sheetgo **user account**, across *all* of your API keys combined. Creating extra API keys does **not** add capacity — the budget is shared by the account. - **Two separate budgets:** - **Reads** — `GET` and `HEAD` requests (higher allowance). - **Writes** — `POST`, `PUT`, `PATCH`, `DELETE` requests (lower allowance). - **Per-minute window.** Each budget refills on a rolling one-minute basis. Current default limits (per account, per minute): **120** read, **30** write. Do **not** hard-code these numbers — some accounts have higher allowances and limits may change. Read the limit from the response headers instead. ## Response headers (on every response) | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Your current limit for that category (read or write). | | `X-RateLimit-Remaining` | Requests left in the current window. | | `X-RateLimit-Reset` | Seconds until the window resets. | When `X-RateLimit-Remaining` approaches `0`, slow down **before** you get blocked — the most effective way to avoid 429s. ## When you are throttled A `429` response includes a `Retry-After` header and a JSON body: ```json { "error": "rate_limit_exceeded", "message": "Rate limit exceeded: 120 read requests per minute. Retry after 37 seconds.", "retry_after": 37, "limit": 120, "remaining": 0, "reset": 37, "scope": "read" } ``` | Field | Meaning | |---|---| | `error` | Stable code: always `rate_limit_exceeded`. | | `message` | Human-readable explanation. | | `retry_after` | Seconds to wait before retrying (same as the `Retry-After` header). | | `limit` / `remaining` / `reset` | Your limit, requests left (`0`), seconds to reset. | | `scope` | Which budget you exhausted: `read` or `write`. | ## Consuming the API reliably 1. **Honor `Retry-After` on a 429** — wait at least that many seconds before retrying. 2. **Use exponential backoff with jitter** for other transient errors. 3. **Self-throttle** using `X-RateLimit-Remaining` — slow down proactively. 4. **Spread work out** with small delays rather than bursting. 5. **Cache and avoid redundant calls** — reads count even when data is unchanged. 6. **Treat 429 as normal** — catch it, wait, and retry transparently. Reference retry loop: ```python for attempt in range(max_retries): resp = call_api(...) if resp.status_code != 429: return resp wait = int(resp.headers.get("Retry-After", 2 ** attempt)) sleep(wait + random_jitter()) ``` ## Automated agents and LLM tools The response **body** carries everything needed to recover (`retry_after`, `scope`, and a plain-language `message`) — parse the body, not just the status code. Honor `retry_after` rather than retrying in a tight loop. Most HTTP client libraries already back off automatically on `429` + `Retry-After`; keep that on. ## Need higher limits? If your legitimate workload consistently approaches the limits, contact **Sheetgo support** to raise your account's capacity. A change takes effect automatically — and because you read the limit from `X-RateLimit-Limit`, your integration needs no code change. --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # API Key Scopes Sheetgo API keys let apps, scripts, and AI agents act on your Sheetgo account. By default a key can do **everything you can** — read, edit, run, and delete any workflow, automation, form, and more. **Scopes** let you narrow that down. You can limit a key to certain **actions** (view only, or edit, or delete) and to certain **items** (all of your workflows, or only a specific few). This is useful when you hand a key to an **AI agent or script** that should only read data, an **integration** that should touch only one or two workflows, or a **partner** who should have limited access. > **Scopes only limit the key — not you.** Restricting a key never changes what > you can do when you log in to Sheetgo yourself; it only limits requests made > with that key. ## The two things a scope controls A scope combines **what actions** are allowed with **which items** they apply to. ### Actions | Action | What it allows | |--------|----------------| | **View** (read) | See and list items — read a workflow, list automations, view a form or schedule. | | **Edit** (write) | Create, change, and **run** items — edit a workflow, **trigger a run**, set a schedule, submit a form. | | **Delete** | Remove items — archive/delete a workflow, delete a form, remove a trigger. | | **Full** | All of the above. | > **Running a workflow counts as "Edit", not "View."** A View-only key cannot > start runs — give it Edit if it needs to. ### Items For each action you can choose **all items** of that type (all workflows, all automations, …) or **only specific items** you pick. You can also apply a scope to **everything at once** (all resource types) — for example, "View everything." **Item types you can scope:** workflows, automations, forms, triggers (schedules), webhooks, Outlook, and API destinations. ## Setting scopes in your Account 1. Go to **Account → Services and account → Sheetgo API**. 2. **Create a new key**, or open an existing key to **edit** it. 3. Choose the access level: - **Full access** *(default)* — the key can do everything. - **All items, limited actions** — e.g. *View only* across everything. - **Custom** — pick actions per item type, and optionally restrict each to specific items. 4. **Save.** When creating a key, copy it **immediately** — it is shown only once. When editing, changes take effect right away; **you don't need to regenerate the key** — the same key keeps working with its new limits. ## Examples - **Read-only monitoring key** — *View → All items.* Lists and reads everything; cannot edit, run, or delete. - **Run/edit only two workflows** — *Workflows → Edit → "Monthly Report", "Sales Sync".* Can run and edit those two, nothing else. - **Read everything, edit one** — *View → All items* **plus** *Workflows → Edit → "Client Import".* A common "safe agent" setup. - **Partner access to one workflow** — *Workflows → Full → "Partner Feed".* View, edit, run, and delete that one workflow only. - **No restriction (default)** — *Full access.* ## Good to know - **Restricting to specific items means the key can't create new ones.** Limiting *Edit* to a specific list lets the key change those items but **not create brand-new ones**. Give *Edit → All items* to allow creation. - **Forms and schedules follow their workflow.** A form or trigger is reachable only if the key can also **view its workflow**. - **Lists respect the scope.** A key limited to specific workflows sees only those when it lists workflows. - **Keep keys secret.** A key is shown only once; if it leaks, delete it and create a new one. Scopes reduce the damage a leaked key can do but don't replace keeping it safe. - **Changing a scope doesn't rotate the key** — editing limits keeps the same key string working. --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Smart Tags A **smart tag** is a `{{placeholder}}` that Sheetgo replaces with a value from your data while an automation runs. They are used by the `document` destination — both inside the Google Docs template and in the destination's `file_name`. ## How a tag resolves A tag matches a **column header** in the data reaching the destination, and is replaced with that row's value. One document is generated per row. | Data header | Tag to write | Result | |---|---|---| | `Customer` | `{{Customer}}` | `Acme Ltd` | | `Invoice No` | `{{Invoice No}}` | `2026-0042` | Header names are matched as they appear in your data, spaces included. There is no mapping to configure: name the tag after the column. ## Where tags can be used * **In the template document** (`document` destination) — anywhere in the body, including headers, footers and tables. * **In `file_name`** (`document`) — so each generated document gets a distinct name, e.g. `"Invoice {{Invoice No}} - {{Customer}}"`. * **In `subject` and `body`** (`share`, `mail_merge`) — the email is rendered per row, so each recipient sees their own values. * **As a recipient** (`share`, `mail_merge`) — `to`, `cc`, `bcc` and `reply_to` accept a `"{{Header}}"` string instead of addresses, which reads the address from that column. The reference must be the whole value: `"{{Email}}"` works, `["{{Email}}"]` and `"cc: {{Email}}"` do not. ## When a tag has no matching column `unused_fields` decides: * `error` (default) — the run fails, so a template/data mismatch is visible. * `ignore` — the tag is replaced with an empty string and the run continues. ## Reserved tags | Tag | Meaning | |---|---| | `{{!group-start}}` … `{{!group-end}}` | Repeat the enclosed block once per row within a group, instead of generating one document per row. | | `{{image:Column}}` | Insert the image at the URL held in `Column`. `img:`, `picture:` and `pic:` are accepted as equivalents. | ## PDF settings The `pdf` destination has no smart tags — generated PDFs take their name from the file they were converted from. Its `paper_size`, `page_orientation`, `scale` and `merge_files` fields control the export. Note that `paper_size` values for ISO sizes are **uppercase**: `A3`, `A4`, `A5`, `B4`, `B5`. --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json. --- # Cell References A **cell reference** is a `{{Tab!Ref}}` placeholder you put inside an `api` source's request. When the automation runs, Sheetgo reads that cell from the automation's Google Sheets destination and substitutes the value before the request goes out — so the request changes as your sheet changes, with no API call needed. ``` GET https://api.example.com/events?since={{Log!A:last|date|fmt:iso_dt}} ``` ## Which `{{ }}` am I looking at? Three unrelated syntaxes share the double-brace shape. They are not interchangeable. | Syntax | Example | Where it works | |---|---|---| | **Cell reference** | `{{Sheet1!A1\|date\|fmt:iso_d}}` | `api` source — `endpoint`, `headers`, `body` | | **Smart tag** | `{{Customer}}` | `document`, `share`, `mail_merge` destinations | | **Body template** | `{{DATA}}`, `{{for row in ROWS}}` | `webhook` destination `body` | A cell reference always contains a `!`. A smart tag is a bare column name. The body template uses the reserved names `DATA` and `ROWS` and the block tags `{{for}}`, `{{if}}` and `{{except-last}}`. ## Grammar ``` {{ ! [|]* }} ``` * **``** — a tab in the destination spreadsheet. Quote it with single quotes if it contains a space, a special character, or starts with a digit: `{{'My Sheet'!A1}}`, `{{'2026 Sales'!A1}}`. Double an apostrophe inside a quoted name: `{{'O''Brien'!C3}}`. When in doubt, quote it — the quoted form always works. * **``** — a single cell (`A1`, `B7`, `AB42`) or `A:last`, the last non-empty cell in column A. Case-insensitive. Ranges (`A1:B5`), whole columns (`A:A`), whole rows, named ranges and formulas are **not** supported. * **`|`** — optional, chainable, applied left to right. ## Filters **Render mode** — must be the *first* filter if used. Default is `F`. | Filter | Value you get | Cell displaying `$1,234.50` | |---|---|---| | `F` *(default)* | the formatted display text | `"$1,234.50"` | | `U` | the raw underlying value | `1234.5` | `F` and `U` after another filter are invalid, and the placeholder is left as literal text. **String** — `trim` (strip whitespace), `upper`, `lower`. **Numeric** — `int`, `float`. Both **fail the run** on a non-numeric value. **Date input** — promote the value to a date, always doing work: | Filter | Behaviour | |---|---| | `date` | auto-detect, US-leaning on ambiguous input | | `date_us` | month first — `01/02/2026` is 2 January | | `date_eu` | day first — `01/02/2026` is 1 February | | `date_iso` | strict ISO 8601 only | Accepts strings, Sheets serial numbers, and existing dates. On its own a date filter renders ISO datetime; chain a `fmt:*` to change that. **Date output** — `fmt:*`, a **no-op unless a date input filter came first**: `fmt:day`, `fmt:month`, `fmt:year`, `fmt:timestamp` (Unix seconds), `fmt:timestamp_ms` (Unix milliseconds), `fmt:serial` (Sheets serial), `fmt:iso_dt`, `fmt:iso_d`, `fmt:us_dt`, `fmt:us_d`, `fmt:eu_dt`, `fmt:eu_d`. `_dt` includes the time, `_d` is date only. ## Where they go | Location | Substitution | |---|---| | `endpoint` | URL-encoded per component. Keep placeholders out of the scheme and host. | | `headers` | verbatim, with CR/LF stripped | | `body` | **verbatim, no escaping** — you are responsible for valid JSON. `"{{A1}}"` yields a quoted string; `{{A1\|U}}` unquoted yields a bare JSON value. | ## When something goes wrong | Situation | Behaviour | |---|---| | Invalid syntax, unknown filter, unbalanced braces | treated as **literal text** — your API receives the raw `{{...}}` | | Tab does not exist | run **fails**, naming the placeholder and its location | | Empty cell, out-of-bounds cell, `:last` on an empty column | substituted as `""`, warning logged, run continues | | Numeric or date conversion fails | run **fails** | | Network failure reading the sheet | retried 3× with backoff, then the run fails | ## ⚠️ Requires a Google Sheets destination Substitution reads from the automation's destination, so it only happens when that destination is a Google Sheets file. With any other destination the placeholders are sent to your API as literal text, with no warning. ## ⚠️ Never resolves alongside a `webhook` destination A `webhook` destination must be an automation's only destination, so such an automation has no Sheets destination to read from. Cell references in it will always be sent literally. Pair cell references with a `file` destination instead. --- More: start page https://dev-api.sheetgo.com/rest/reference.md, everything in one file https://dev-api.sheetgo.com/rest/llms-full.txt, OpenAPI https://dev-api.sheetgo.com/rest/openapi.json.