SheetgoDevelopers

Developers › REST API › Workflows & Automations

REST API · 22 endpoints

workflows

Complete for this group. Each operation below lists its parameters, request body, responses and errors. Every model they use is documented under Models used on this page, so you do not need another page to build a request. Base URL https://dev-api.sheetgo.com; send Authorization: Bearer sg_…. Latest version: https://dev-api.sheetgo.com/rest/reference/workflows (Markdown).

Conventions for every endpoint. Lists take page (from 1) and per_page (1-100, default 50), and total counts pages, not items. Collection URLs end with /. POST …/run returns 200 when the run is queued; poll GET …/run. Google Sheets use provider: "drive"; column fields take letters ("E"). Error bodies and status codes: api.html#api-errors.

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.

Operations

GET/rest/beta/workflows/Get a paginated list of workflows

Return a list of workflows following the pagination parameters

Parameters
NameInTypeDescription
pagequeryintegeroptionalPage number, 1-based
Default: 1 · Min: 1
per_pagequeryintegeroptionalNumber 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
StatusMeaningBody
200A paginated list of workflowsPaginatedResponse_WorkflowModel_
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/workflows/Create a new workflow

Create a new workflow with the given arguments

Request body (optional)

application/json · WorkflowCreate

FieldTypeDescription
categorystringnullableWorkflow category
descriptionstringnullableWorkflow description
namestringoptionalName of the new workflow
Default: "Untitled workflow"
Responses
StatusMeaningBody
200The workflow model createdWorkflowModel
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
POST/rest/beta/workflows/run/{id}(Obsolete) Use /workflows/<id>/run instead

Deprecated. Do not use in new code.

This endpoint will be removed

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200Workflow was successfully enqueuedSuccessResponse
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/run/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}Get a single workflow

Given a workflow id, returns the workflow model data

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200The workflow model dataWorkflowModel
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
PATCH/rest/beta/workflows/{id}Update an existing workflow

Updates a workflow identified by id with the given arguments

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Request body (optional)

application/json · WorkflowPatch

FieldTypeDescription
categorystringnullableWorkflow category
descriptionstringnullableWorkflow description
namestringnullableName of the workflow
Responses
StatusMeaningBody
200The workflow model updatedWorkflowModel
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X PATCH "https://dev-api.sheetgo.com/rest/beta/workflows/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
DELETE/rest/beta/workflows/{id}Archive a workflow

Given a workflow id, archive the workflow

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Request body (required)

application/json · WorkflowArchive

FieldTypeDescription
delete_automationsbooleannullableAll automations for the workflow should also be archived
Default: false
Responses
StatusMeaningBody
200The workflow was successfully archivedSuccessResponse
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X DELETE "https://dev-api.sheetgo.com/rest/beta/workflows/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
POST/rest/beta/workflows/{id}/change-ownerTransfer workflow ownership

Transfer ownership to another Sheetgo user. Owner only; irreversible.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
confirmquerybooleanoptionalMust be true - this cannot be undone
Default: false
Request body (required)

application/json · ChangeOwnerIn

FieldTypeDescription
emailstring (email)requiredEmail of the collaborator to transfer ownership to. They must already be a collaborator on the workflow; the current owner becomes a manager.
Responses
StatusMeaningBody
200Ownership transferredany
400Missing confirmation—
401Authentication failed or token is invalid—
403Only the owner can transfer ownership—
404Not found—
422The new owner is not a Sheetgo user—
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/ID/change-owner" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
GET/rest/beta/workflows/{id}/collaboratorsList a workflow's collaborators

Members and their roles (owner included).

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200Workflow collaboratorsCollaboratorsOut
401Authentication failed or token is invalid—
404Workflow not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/collaborators" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/workflows/{id}/collaboratorsAdd collaborators to a workflow

Invite one or more collaborators. Sends an invitation email unless skip_invitation.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Request body (required)

application/json · CollaboratorsAdd

FieldTypeDescription
emailsarray of string (email)requiredEmails to invite
Min items: 1
file_accessone of "reader", "commenter", "writer"optionalFile permission when share_files is true
Default: "writer"
messagestringnullableOptional note included in the invitation
roleone of "collaborator", "manager"requiredcollaborator | manager
share_filesbooleanoptionalAlso grant access to the workflow's files
Default: false
skip_invitationbooleanoptionalAdd silently, without the invitation email
Default: false
Responses
StatusMeaningBody
200Updated collaboratorsCollaboratorsOut
401Authentication failed or token is invalid—
403Permission or plan restriction—
404Not found—
409Collaborator limit reached—
422Validation ErrorHTTPValidationError
429Daily invitation limit reached—
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/ID/collaborators" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
DELETE/rest/beta/workflows/{id}/collaboratorsRemove 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.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
confirmquerybooleanoptionalMust be true - removes every collaborator
Default: false
remove_file_accessquerybooleanoptionalAlso revoke their access to the files
Default: false
Responses
StatusMeaningBody
200Collaborators removed (owner kept)any
400Missing confirmation—
401Authentication failed or token is invalid—
403Permission restriction—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X DELETE "https://dev-api.sheetgo.com/rest/beta/workflows/ID/collaborators" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
PATCH/rest/beta/workflows/{id}/collaborators/{email}Change a collaborator's role

Promote or demote a collaborator (manager | collaborator).

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
emailpathstringrequiredCollaborator email
Request body (required)

application/json · CollaboratorRoleUpdate

FieldTypeDescription
roleone of "collaborator", "manager"requiredThe role to move this collaborator to: collaborator or manager. The owner's role cannot be changed here.
update_file_accessbooleanoptionalAlso grant/revoke file access to match the role
Default: false
Responses
StatusMeaningBody
200Updated collaboratorsCollaboratorsOut
401Authentication failed or token is invalid—
404Workflow or member not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X PATCH "https://dev-api.sheetgo.com/rest/beta/workflows/ID/collaborators/EMAIL" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
DELETE/rest/beta/workflows/{id}/collaborators/{email}Remove a collaborator

Remove a collaborator, optionally revoking their file permissions.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
emailpathstringrequiredCollaborator email
remove_file_accessquerybooleanoptionalAlso revoke their access to the files
Default: false
Responses
StatusMeaningBody
200Updated collaboratorsCollaboratorsOut
401Authentication failed or token is invalid—
404Workflow or member not found—
409The owner cannot be removed—
422Validation ErrorHTTPValidationError
Example request
curl -s -X DELETE "https://dev-api.sheetgo.com/rest/beta/workflows/ID/collaborators/EMAIL" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}/destinationsGet 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).

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200File destinations per automationany
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/destinations" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}/filesGet 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).

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200File sources and destinations per automationany
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/files" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}/general-accessGet a workflow's general (domain/team) access

Whether the workflow is restricted, domain-wide, or team-wide.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200Domain/team accessGeneralAccessOut
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/general-access" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
PUT/rest/beta/workflows/{id}/general-accessSet a workflow's general (domain/team) access

restrict clears domain/team; domain/team are derived from the owner's account.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Request body (required)

application/json · GeneralAccessSet

FieldTypeDescription
access_typeone of "restrict", "domain", "team"requiredWho gets access beyond the named collaborators: restrict (nobody), domain (anyone in the owner's email domain) or team (the owner's Sheetgo team).
roleone of "collaborator", "manager"nullableRole to grant them — collaborator or manager. Ignored when access_type is restrict.
Responses
StatusMeaningBody
200Updated accessGeneralAccessOut
401Authentication failed or token is invalid—
403Permission or plan restriction—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X PUT "https://dev-api.sheetgo.com/rest/beta/workflows/ID/general-access" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
DELETE/rest/beta/workflows/{id}/general-accessRevoke 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.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200General access reset to restrictGeneralAccessOut
401Authentication failed or token is invalid—
403Permission restriction—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X DELETE "https://dev-api.sheetgo.com/rest/beta/workflows/ID/general-access" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/workflows/{id}/leaveLeave a shared workflow

Remove yourself from a workflow shared with you.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200You left the workflowany
401Authentication failed or token is invalid—
404Not found—
409The owner cannot leave—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/ID/leave" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/workflows/{id}/request-accessAsk a workflow's owner for access

Email the owner an access request. Approval happens in the Sheetgo app.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
202Access request sent to the ownerany
401Authentication failed or token is invalid—
404Workflow not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/ID/request-access" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}/runGet 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).

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200Workflow last-run statusWorkflowRunStatus
401Authentication failed or token is invalid—
404Workflow not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/run" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/workflows/{id}/runRun a single workflow

Given a workflow id, the workflow will start its execution

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200Workflow was successfully enqueuedSuccessResponse
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/ID/run" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/workflows/{id}/sourcesGet 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.

Parameters
NameInTypeDescription
idpathstringrequiredWorkflow identification
Responses
StatusMeaningBody
200File sources per automationany
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/ID/sources" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"

Models used on this page

Every request and response model referenced above, including nested ones (64). The full catalogue is on api-models.html.

AutomationRunStatus

The outcome of an automation's LAST run. There is no run history.

FieldTypeDescription
automation_idstringrequiredId of the automation this status belongs to.
docs_linkstringnullableURL of the help article for this error, when one exists. Null unless result is error.
duration_secondsnumbernullableHow long the last run took, in seconds. Null before the first run completes.
error_countintegernullableNumber of individual errors recorded during the run (a run can fail on several rows or files). Null when not tracked.
executionstringrequiredLive phase: running while the run is enqueued, executing or cancelling; completed once it has stopped. Poll until this is completed before trusting result.
messagestringnullableHuman-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.
resultstringrequiredOutcome 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_codeintegeroptionalSheetgo 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

Used by: GET /rest/beta/automations/{id}/run

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".

FieldTypeDescription
fieldstringnullableColumn to partition by. It must exist in the transferred data -- check with GET /rest/beta/bigquery/.../tables/{table}. Omit for ingestion-time partitioning.
granularityBigQueryPartitionGranularityoptionalPartition size: HOUR, DAY, MONTH or YEAR.
Default: "DAY"
require_filterbooleanoptionalRequire queries against the table to filter on the partition column. Applied only when the table is created.
Default: false

BigQueryPartitionGranularity

Type: one of "HOUR", "DAY", "MONTH", "YEAR"

BigQueryWriteMode

What happens to data already in the destination table.

Read by BigQueryManager.merge_temporary_to_destination.

Type: one of "append", "truncate", "recreate"

ChangeOwnerIn

FieldTypeDescription
emailstring (email)requiredEmail 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

CollaboratorOut

FieldTypeDescription
emailstringrequiredThe collaborator's email address, which identifies them everywhere in this API.
is_ownerbooleanoptionalTrue for the workflow's owner. The owner cannot be removed or have their role changed — transfer ownership instead.
Default: false
rolestringrequiredowner | manager | collaborator

CollaboratorRoleUpdate

FieldTypeDescription
roleone of "collaborator", "manager"requiredThe role to move this collaborator to: collaborator or manager. The owner's role cannot be changed here.
update_file_accessbooleanoptionalAlso grant/revoke file access to match the role
Default: false

Used by: PATCH /rest/beta/workflows/{id}/collaborators/{email}

CollaboratorsAdd

FieldTypeDescription
emailsarray of string (email)requiredEmails to invite
Min items: 1
file_accessone of "reader", "commenter", "writer"optionalFile permission when share_files is true
Default: "writer"
messagestringnullableOptional note included in the invitation
roleone of "collaborator", "manager"requiredcollaborator | manager
share_filesbooleanoptionalAlso grant access to the workflow's files
Default: false
skip_invitationbooleanoptionalAdd silently, without the invitation email
Default: false

Used by: POST /rest/beta/workflows/{id}/collaborators

ContentType

What a folder source reads: spreadsheets, or documents for AI extraction.

Type: one of "spreadsheets", "documents"

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.

FieldTypeDescription
appendbooleanoptionalAdd 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_idstringnullableRead-only. Assigned by Sheetgo when the automation is created; ignored if you send it.
type"api"requiredPublishes the rows as a read-only JSON API endpoint hosted by Sheetgo.
urlstringnullableRead-only. Where to fetch the published data. Requires an API key with the api-destination scope.

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.

FieldTypeDescription
datasetstringrequiredExisting BigQuery dataset id. Sheetgo does not create datasets.
partitionBigQueryPartitionnullableOmit for an unpartitioned table.
projectstringrequiredGCP project id
schema_evolutionbooleanoptionalAdd 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
tablestringrequiredTable id. Created on the first run if it does not exist.
type"bigquery"requiredWrites the rows into a BigQuery table. Must be the only destination.
write_modeBigQueryWriteModeoptionalappend adds rows; truncate clears the data but keeps the schema and partitioning; recreate drops and rebuilds the table from the transferred data.
Default: "append"

DestinationDocument

Generate one Google Docs file per row from a template (docs-merge).

FieldTypeDescription
file_namestringrequiredName 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.
folder_namestringnullableName of a new folder to create instead of using an existing one. Provide this or id.
generator_controllerbooleanoptionalAdd a column to the source data holding a link to each generated document.
Default: true
generator_controller_prefixstringnullablePrefix for the control column's header. Defaults to the automation name.
idstringnullableId of an existing folder to write into. Provide this or folder_name.
markdown_formattingbooleanoptionalRender markdown found in cell values as formatted text in the document.
Default: false
parent_idstringnullableFolder to create folder_name inside. Defaults to the drive root. Only valid together with folder_name.
provider"drive"optionalStorage provider. Generated documents and PDFs are Google Drive only.
Default: "drive"
template_idstringrequiredId 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.
type"document"requiredGenerates a Google Docs document per row from a template (docs-merge).
unused_fieldsUnusedFieldsoptionalWhat to do when a {{Tag}} in the template matches no source column: error fails the run, ignore leaves it blank.
Default: "error"

DestinationFile

FieldTypeDescription
appendbooleannullableData will be added under previous entries to track historical changes
Default: false
enforce_header_matchbooleanoptionalDocuments folder source only: line documents' columns up by position instead of by name. Ignored with one_tab_per_document.
Default: false
file_typeFileTyperequiredThe file type
idstringrequiredId of the destination file or folder
identify_dataIdentifyDataTypenullableIt 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.
lock_destination_tabbooleannullableLock the destination tab and clear added columns with each transfer
Default: true
one_tab_per_documentbooleanoptionalDocuments folder source only: one tab per document (up to 100) instead of all documents in one tab.
Default: false
parse_databooleannullableConvert text to numbers, dates, and formulas
Default: true
providerProviderrequiredThe storage provider that hosts the file or folder
sheet_namestringnullableThe sheet name
type"file"requiredWrites the result into an existing file.
write_summary_tabbooleanoptionalDocuments folder source only: add a Files tab listing each document read, its status and row count.
Default: false

DestinationFolder

FieldTypeDescription
appendbooleannullableData will be added under previous entries to track historical changes
Default: false
enforce_header_matchbooleanoptionalDocuments folder source only: line documents' columns up by position instead of by name. Ignored with one_tab_per_document.
Default: false
file_type"folder"optionalAlways folder. Fixed by the destination type; present so folder and file destinations share one shape.
Default: "folder"
folder_namestringnullableOutlook 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.
idstringnullableId of an existing folder. Provide this or folder_name.
identify_dataIdentifyDataTypenullableIt 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.
lock_destination_tabbooleannullableLock the destination tab and clear added columns with each transfer
Default: true
one_tab_per_documentbooleanoptionalDocuments folder source only: one tab per document (up to 100) instead of all documents in one tab.
Default: false
parent_idstringnullableFolder to create folder_name inside. Defaults to the provider's root. Only valid with folder_name.
parse_databooleannullableConvert text to numbers, dates, and formulas
Default: true
providerProviderrequiredThe storage provider that hosts the file or folder
sheet_namestringnullableThe sheet name
type"folder"requiredWrites into a folder: new files per split value, or the files an Outlook source saves.
write_summary_tabbooleanoptionalDocuments folder source only: add a Files tab listing each document read, its status and row count.
Default: false

DestinationMailMerge

Send one personalized email per row, rendered from body.

FieldTypeDescription
bccarray of string (email) or stringnullableBcc recipients. Same forms as to.
bodystringrequiredEmail body template as plain text. Each line becomes one paragraph. {{Column}} smart tags are replaced per row.
ccarray of string (email) or stringnullableCc recipients. Same forms as to.
generator_controllerbooleanoptionalAdd a column to the source data tracking each email sent.
Default: true
generator_controller_prefixstringnullablePrefix for the control column's header. Defaults to the automation name.
markdown_formattingbooleanoptionalRender markdown found in cell values as formatted text.
Default: false
multiple_email_splitbooleanoptionalSend a separate email per address when a column holds several.
Default: false
remove_sheetgo_layoutbooleanoptionalSend without the Sheetgo email layout.
Default: false
reply_tostringnullableReply-To: one address, or a "{{Header}}" reference.
send_fromSendFromoptionalWhich 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"
subjectstringrequiredEmail subject. Supports {{Column}} smart tags.
toarray of string (email) or stringrequiredRecipients: a list of addresses, one address, or a "{{Header}}" reference to read the address from a column.
track_clickbooleanoptionalTrack when a recipient clicks a link.
Default: false
track_openbooleanoptionalTrack when a recipient opens the email.
Default: false
type"mail_merge"requiredSends one personalized email per row (mail merge).
unused_fieldsUnusedFieldsoptionalWhat to do when a {{Tag}} matches no source column: error fails the run, ignore leaves it blank.
Default: "error"
use_plain_textbooleanoptionalSend the body as plain text instead of formatted HTML.
Default: false

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.

FieldTypeDescription
folder_namestringnullableName of a new folder to create instead of using an existing one. Provide this or id.
idstringnullableId of an existing folder to write into. Provide this or folder_name.
merge_filesbooleanoptionalCombine every generated PDF into a single file.
Default: false
page_orientationPageOrientationoptionalPage orientation of the generated PDF.
Default: "portrait"
paper_sizePaperSizeoptionalPage size of the generated PDF.
Default: "letter"
parent_idstringnullableFolder to create folder_name inside. Defaults to the drive root. Only valid together with folder_name.
provider"drive"optionalStorage provider. Generated documents and PDFs are Google Drive only.
Default: "drive"
scaleone of 1, 2, 3, 4optionalFit-to-page scaling: 1 normal, 2 fit to width, 3 fit to height, 4 fit to page.
Default: 1
type"pdf"requiredGenerates a PDF per row, by converting the merged document.

DestinationShare

Email the files this automation produced.

FieldTypeDescription
bccarray of string (email) or stringnullableBcc recipients. Same forms as to.
bodystringnullableEmail body as plain text. Each line becomes one paragraph. Supports {{Column}} smart tags.
ccarray of string (email) or stringnullableCc recipients. Same forms as to.
file_access_roleFileAccessRoleoptionalAccess granted by a shared link. Ignored for attachments.
Default: "writer"
file_sending_methodFileSendingMethodoptionalSend the files as shared links or as attachments.
Default: "shared_link"
group_files_by_recipientbooleanoptionalSend one email per recipient covering all their files, instead of one email per file.
Default: true
multiple_email_splitbooleanoptionalSend a separate email per address when a column holds several.
Default: false
remove_sheetgo_layoutbooleanoptionalSend without the Sheetgo email layout.
Default: false
reply_tostringnullableReply-To: one address, or a "{{Header}}" reference.
send_fromSendFromoptionalAlpha — 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"
subjectstringrequiredEmail subject. Supports {{Column}} smart tags.
toarray of string (email) or stringrequiredRecipients: a list of addresses, one address, or a "{{Header}}" reference to read the address from a column.
track_clickbooleanoptionalTrack when a recipient clicks a link.
Default: false
track_openbooleanoptionalTrack when a recipient opens the email.
Default: false
type"share"requiredEmails the automation's output as an attachment or link.
use_plain_textbooleanoptionalSend the body as plain text instead of formatted HTML.
Default: false

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.

FieldTypeDescription
bodystringoptionalBody 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}}"
endpointstringrequiredURL that receives the request.
headersobject (map of string → string)nullableHTTP headers sent with the request. Write-only — never returned by a read, and a PUT that omits it clears it.
methodone of "post", "put", "patch", "delete"optionalHTTP method used to send the data.
Default: "post"
type"webhook"requiredPOSTs the resulting rows to your endpoint (outgoing webhook). Must be the only destination.

EmailFilter-Output

Which emails an Outlook source reads. Groups nest (at most 3 deep).

FieldTypeDescription
condition_typeone of "and", "or"optionaland: every rule must match; or: any rule.
Default: "and"
rulesarray of EmailFilter-Output or EmailFilterRulerequiredConditions or nested groups.
Min items: 1

EmailFilterRule

One condition of an Outlook source's email_filter.

FieldTypeDescription
fieldone of "subject", "sender", "to", "cc", "attachment_name", "attachment_size", "has_attachment"requiredsubject, sender (from address), to, cc (addresses), attachment_name, attachment_size (MB) or has_attachment.
operatorstringrequiredText 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.
valueboolean or integer or number or stringnullableText for text fields (omit for is_empty / is_not_empty); a number of MB for attachment_size; true or false for has_attachment.

FileAccessRole

Type: one of "reader", "writer"

FileFilter-Output

Which files inside a folder source are read. Groups nest.

FieldTypeDescription
condition_typeone of "and", "or"optionaland: every rule must match; or: any rule.
Default: "and"
rulesarray of FileFilter-Output or FileFilterRulerequiredConditions or nested groups.
Min items: 1

FileFilterRule

One condition of a folder source's file_filter.

FieldTypeDescription
fieldone of "file_name", "file_type", "date_modified", "content"requiredWhat to test: file_name, file_type, date_modified or content (an emptiness check by size, not a text search).
operatorstringrequiredfile_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.
valuestringnullableText 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_tostringnullableEnd date (YYYY-MM-DD) for between only.

FileSendingMethod

How the files reach the recipient. Wire values use a hyphen.

Type: one of "shared_link", "attachment"

FileType

Type: one of "gsheets", "xlsx", "csv", "tsv", "folder"

GeneralAccessSet

FieldTypeDescription
access_typeone of "restrict", "domain", "team"requiredWho gets access beyond the named collaborators: restrict (nobody), domain (anyone in the owner's email domain) or team (the owner's Sheetgo team).
roleone of "collaborator", "manager"nullableRole to grant them — collaborator or manager. Ignored when access_type is restrict.

Used by: PUT /rest/beta/workflows/{id}/general-access

HTTPValidationError

FieldTypeDescription
detailarray of ValidationErroroptional

Used by: GET /rest/beta/workflows/, POST /rest/beta/workflows/, POST /rest/beta/workflows/run/{id}, GET /rest/beta/workflows/{id}, PATCH /rest/beta/workflows/{id}, DELETE /rest/beta/workflows/{id}, GET /rest/beta/workflows/{id}/collaborators, POST /rest/beta/workflows/{id}/collaborators, DELETE /rest/beta/workflows/{id}/collaborators, PATCH /rest/beta/workflows/{id}/collaborators/{email}, DELETE /rest/beta/workflows/{id}/collaborators/{email}, GET /rest/beta/workflows/{id}/destinations, GET /rest/beta/workflows/{id}/files, GET /rest/beta/workflows/{id}/general-access, PUT /rest/beta/workflows/{id}/general-access, DELETE /rest/beta/workflows/{id}/general-access, POST /rest/beta/workflows/{id}/leave, POST /rest/beta/workflows/{id}/request-access, GET /rest/beta/workflows/{id}/run, POST /rest/beta/workflows/{id}/run, GET /rest/beta/workflows/{id}/sources, GET /rest/beta/automations/, POST /rest/beta/automations/run/{id}, GET /rest/beta/automations/{id}, DELETE /rest/beta/automations/{id}, GET /rest/beta/automations/{id}/destinations, GET /rest/beta/automations/{id}/files, GET /rest/beta/automations/{id}/run, POST /rest/beta/automations/{id}/run, GET /rest/beta/automations/{id}/sources, GET /rest/beta/workflows/{id}/trigger, DELETE /rest/beta/workflows/{id}/trigger, GET /rest/beta/workflows/{id}/dashboard, DELETE /rest/beta/workflows/{id}/dashboard/elements/{element_id}, GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data, PUT /rest/beta/workflows/{id}/dashboard/publish, GET /rest/beta/workflows/{workflow_id}/forms/, POST /rest/beta/workflows/{workflow_id}/forms/, GET /rest/beta/workflows/{workflow_id}/forms/{form_id}, PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}, DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}, GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses, HEAD /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses, GET /rest/beta/automations/{automation_id}/webhook, GET /rest/beta/workflows/{workflow_id}/webhooks, GET /rest/beta/api-destination/{public_id}, HEAD /rest/beta/api-destination/{public_id}, GET /rest/beta/integrations/{provider}/options, GET /rest/beta/outlook/messages, POST /rest/beta/outlook/messages/batch, GET /rest/beta/outlook/messages/{message_id}, GET /rest/beta/outlook/messages/{message_id}/attachments/{attachment_id}, POST /rest/beta/outlook/send, POST /rest/beta/gmail/send, GET /rest/beta/files/{provider}, GET /rest/beta/files/{provider}/roots, GET /rest/beta/files/{provider}/search, GET /rest/beta/files/{provider}/{file_id}, GET /rest/beta/bigquery/projects, GET /rest/beta/bigquery/projects/{project}/datasets, GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables, GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}, POST /rest/beta/bigquery/projects/{project}/validate-query, POST /rest/auth/refresh, POST /rest/auth/token

IdentifyDataType

Type: one of "source_file_location", "source_file_name", "source_file_creation_date", "source_file_update_date", "source_tab_name", "destination_file_transfer_datetime"

ImportMode

Which files a folder source imports, ordered by modified time.

Type: one of "all_newest_first", "all_oldest_first", "newest_file", "oldest_file"

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:<shop>), which is what makes core-lib's load_provider_manager pick the provider-specific request manager.

Type: one of "shopify", "quickbooks"

Used by: GET /rest/beta/integrations/{provider}/options

OutlookAccount

Which connected Microsoft account reads the mailbox.

Type: one of "personal", "work"

OutlookExtract

Type: one of "attachments", "body"

OutlookMailbox

The mailbox folder to read — the three the web app offers.

Type: one of "inbox", "archive", "sent_items"

PageOrientation

Type: one of "portrait", "landscape"

PaginatedResponse_WorkflowModel_

FieldTypeDescription
pageintegernullablePage number
Default: 1
per_pageintegernullableNumber of items per page
Default: 50
resultsarray of WorkflowModeloptionalList of results
totalintegernullableTotal number of pages
Default: 0

Used by: GET /rest/beta/workflows/

PaginationCursor

Follow a cursor until the response says there is no more.

FieldTypeDescription
cursor_paramstringoptionalRequest parameter carrying the cursor.
Default: "cursor"
has_more_keystringoptionalResponse key holding the more-pages flag.
Default: "has_more"
limitintegernullableStop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out.
next_cursor_keystringoptionalResponse key holding the next cursor.
Default: "next_cursor"
rate_limitstringnullablePause 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".
scopeone of "query", "body"optionalWhere the paging parameters are placed: the query string or the JSON body.
Default: "query"
type"cursor"requiredSelects cursor pagination: the response carries an opaque cursor that is sent back to fetch the next page.

PaginationOffset

Advance an offset by the limit until a short page comes back.

FieldTypeDescription
limitintegernullableStop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out.
limit_paramstringoptionalRequest parameter carrying the page size.
Default: "limit"
offset_paramstringoptionalRequest parameter carrying the offset.
Default: "offset"
rate_limitstringnullablePause 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".
scopeone of "query", "body"optionalWhere the paging parameters are placed: the query string or the JSON body.
Default: "query"
type"offset"requiredSelects offset pagination: a row offset is advanced by the page size on each request.

PaginationPage

Increment a page number until a short page comes back.

FieldTypeDescription
limitintegernullableStop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out.
page_paramstringoptionalRequest parameter carrying the page number.
Default: "page"
per_page_paramstringoptionalRequest parameter carrying the page size.
Default: "per_page"
rate_limitstringnullablePause 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".
scopeone of "query", "body"optionalWhere the paging parameters are placed: the query string or the JSON body.
Default: "query"
type"page"requiredSelects page-number pagination: a page counter is incremented until the response runs out of rows.

PaginationQueryOffset

Rewrite offset/limit keywords inside a SQL-like query parameter.

FieldTypeDescription
limitintegernullableStop once this many items have been collected. Omit (or 0) to keep going until the endpoint runs out.
query_keystringoptionalRequest parameter holding the query string.
Default: "query"
query_limit_keystringoptionalKeyword inside the query that sets the page size.
Default: "limit"
query_offset_keystringoptionalKeyword inside the query that sets the offset.
Default: "offset"
rate_limitstringnullablePause 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"query-offset"requiredSelects query-offset pagination: the offset travels in the query string of the request URL.

PaperSize

Type: one of "letter", "tabloid", "legal", "statement", "executive", "folio", "A3", "A4", "A5", "B4", "B5"

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: one of "gmail", "outlook_personal", "outlook_work"

SourceAllTabs

Type: one of "all_tabs"

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.

FieldTypeDescription
authSourceAuthnullableOAuth2 token refresh. Write-only — never returned by a read, and a PUT that omits it clears it.
bodystringnullableRequest 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_rootstringnullableDotted path to the list of records inside the response, e.g. data.orders. Omit to let Sheetgo detect it.
endpointstringrequiredURL to request. Supports {{Tab!Ref}} cell references — see the Cell References section.
header_rootstringnullableDotted path to a list of column names inside the response, used as the header row.
headersobject (map of string → string)nullableHTTP 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.
methodone of "get", "post"optionalHTTP method. Only GET and POST can read data.
Default: "get"
namestringnullableLabel for this source. Also used as the destination tab name when several sources are transferred without a merge. Defaults to API.
paginationone of (chosen by type): type: "cursor" → PaginationCursor, type: "header-link" → PaginationHeaderLink, type: "link" → PaginationLink, type: "offset" → PaginationOffset, type: "page" → PaginationPage, type: "query-offset" → PaginationQueryOffsetnullableHow to walk a paginated endpoint. Omit for a single request.
type"api"requiredMarks 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.

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.

FieldTypeDescription
auth_method"oauth2"requiredOnly oauth2 is supported. The engine refreshes the token on a 401/403 and retries.
auth_typestringoptionalScheme used in the Authorization header after a refresh, e.g. Bearer.
Default: "Bearer"
refresh_headersobject (map of string → string)nullableExtra headers sent with the refresh request.
refresh_paramsobject (map of string → string)nullableForm body of the refresh request, e.g. client_id, client_secret, refresh_token. Write-only: never returned by a read.
refresh_urlstringrequiredToken endpoint called to refresh.

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.

FieldTypeDescription
datasetstringrequiredBigQuery dataset id
namestringnullableLabel for this source. Also used as the destination tab name. Defaults to the table name.
projectstringrequiredGCP project id. List them with GET /rest/beta/bigquery/projects.
querystringnullableStandard-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.
tablestringrequiredBigQuery table id
type"bigquery"requiredMarks this source as BigQuery. Only one BigQuery source per automation, and it cannot be mixed with other source kinds.

SourceFile

FieldTypeDescription
data_rangesstringnullableThe data range
date_formatstringnullableFormat for date fields
Default: "#month/day/YEAR"
file_typeFileTyperequiredThe file type
idstringrequiredId of the source file or folder
offset_headerintegernullableThe header position
Default: 1
providerProviderrequiredThe storage provider that hosts the file or folder
sheet_tabsstring or SourceAllTabs or array of stringnullableOne or more sheet tab names or all_tabs
type"file"requiredMarks this source as a single file — one spreadsheet, CSV, TSV or Excel workbook.

SourceFolder-Output

FieldTypeDescription
content_typeContentTypeoptionalspreadsheets 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"
data_rangesstringnullableThe data range
date_formatstringnullableFormat for date fields
Default: "#month/day/YEAR"
file_filterFileFilter-OutputnullableOnly read the files that match these conditions.
file_type"folder"requiredAlways folder. Fixed by the source type; present so folder and file sources share one shape.
idstringrequiredId of the source file or folder
importImportModeoptionalWhich 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"
include_subfoldersbooleanoptionalAlso read files inside subfolders.
Default: false
offset_headerintegernullableThe header position
Default: 1
process_oncebooleanoptionalDocuments only: skip files already read by an earlier run (new or changed files are read again). Ignored for spreadsheets.
Default: true
providerProviderrequiredThe storage provider that hosts the file or folder
sheet_tabsstring or SourceAllTabs or array of stringnullableOne or more sheet tab names or all_tabs
type"folder"requiredMarks this source as a folder: every matching file inside it is read.

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.

FieldTypeDescription
accountstringnullableWhich 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_sourcestringrequiredWhich data to pull, e.g. get_products. Get the list from GET /rest/beta/integrations/{provider}/options.
namestringnullableLabel 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.
parametersobject (map of string → string)nullableValues for the parameters that data source declares. Only QuickBooks reports declare any; sending parameters to anything else is a 422.
providerIntegrationProviderrequiredThe integration to read from. List them with GET /rest/beta/integrations.
type"integration"requiredMarks this source as a pre-configured integration (Shopify, QuickBooks). URL, auth and pagination are managed by Sheetgo.

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.

FieldTypeDescription
accountOutlookAccountoptionalpersonal (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"
email_filterEmailFilter-OutputnullableOnly read the emails that match these conditions. Omit to read every email (each run scans at most 1000).
extractOutlookExtractoptionalattachments saves each email's file attachments; body saves each email's body as <subject>.html.
Default: "attachments"
mailboxOutlookMailboxoptionalinbox, archive or sent_items.
Default: "inbox"
namestringnullableLabel for the source. Defaults to Outlook.
process_oncebooleanoptionalSkip emails already saved by an earlier run.
Default: true
type"outlook"requiredMarks this source as Outlook: emails from a mailbox folder, saved as files into a folder destination.

SourceWebhook

FieldTypeDescription
namestringnullableOptional label for the webhook source
type"webhook"requiredMarks this source as a webhook: your system pushes data in, rather than Sheetgo pulling it.

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.

FieldTypeDescription
codeintegeroptionalResult code. 1 means the operation succeeded.
Default: 1
messagestringoptionalHuman-readable confirmation of what happened.
Default: "OK"
typestringoptionalKind of result — success for this envelope.
Default: "success"

Used by: POST /rest/beta/workflows/run/{id}, DELETE /rest/beta/workflows/{id}, POST /rest/beta/workflows/{id}/run, POST /rest/beta/automations/run/{id}, DELETE /rest/beta/automations/{id}, POST /rest/beta/automations/{id}/run, DELETE /rest/beta/workflows/{workflow_id}/forms/{form_id}

UnusedFields

What happens to a {{Tag}} in the template that no source column matches.

Type: one of "ignore", "error"

ValidationError

FieldTypeDescription
locarray of string or integerrequired
msgstringrequired
typestringrequired

WorkflowArchive

Workflow archive

FieldTypeDescription
delete_automationsbooleannullableAll automations for the workflow should also be archived
Default: false

Used by: DELETE /rest/beta/workflows/{id}

WorkflowAutomationModel

FieldTypeDescription
destinationsarray of one of (chosen by type): type: "api" → DestinationApiPublish, type: "bigquery" → DestinationBigQuery-Output, type: "document" → DestinationDocument, type: "file" → DestinationFile, type: "folder" → DestinationFolder, type: "mail_merge" → DestinationMailMerge, type: "pdf" → DestinationPDF, type: "share" → DestinationShare, type: "webhook" → DestinationWebhook or one of (chosen by type): type: "api" → DestinationApiPublish, type: "bigquery" → DestinationBigQuery-Output, type: "document" → DestinationDocument, type: "file" → DestinationFile, type: "folder" → DestinationFolder, type: "mail_merge" → DestinationMailMerge, type: "pdf" → DestinationPDF, type: "share" → DestinationShare, type: "webhook" → DestinationWebhooknullableDestinations of the automation
idstringrequiredId of the automation
input_countintegernullableNumber of inputs of the automation
Default: 0
last_updating_userstringnullableLast updated user of the automation
namestringnullableName of the automation
output_countintegernullableNumber of outputs of the automation
Default: 0
ownerstringrequiredOwner of the automation
sourcesarray of SourceFile or SourceFolder-Output or SourceWebhook or SourceAPI or SourceIntegration or SourceBigQuery or SourceOutlook-OutputoptionalSource files/folders of the automation
statusintegernullableExecution status of the automation
Default: 1

WorkflowCreate

New workflow creation

FieldTypeDescription
categorystringnullableWorkflow category
descriptionstringnullableWorkflow description
namestringoptionalName of the new workflow
Default: "Untitled workflow"

Used by: POST /rest/beta/workflows/

WorkflowModel

Data presentation model for Workflow

FieldTypeDescription
automationsobject (map of string → WorkflowAutomationModel)requiredAutomations present in this workflow
categorystringnullableCategory of the workflow
descriptionstringrequiredDescription of the workflow
formsarray of stringrequiredForms present in this workflow
idstringrequiredWorkflow identification
namestringrequiredName of the workflow
ownerstringrequiredOwner of the workflow
runningbooleannullableTrue if workflow is running
Default: false
scheduledbooleannullableTrue if workflow is scheduled
Default: false
sharedbooleanoptionalTrue if workflow is shared
Default: false
usersarray of stringrequiredList of users in this workflow

Used by: POST /rest/beta/workflows/, GET /rest/beta/workflows/{id}, PATCH /rest/beta/workflows/{id}

WorkflowPatch

Workflow patch

FieldTypeDescription
categorystringnullableWorkflow category
descriptionstringnullableWorkflow description
namestringnullableName of the workflow

Used by: PATCH /rest/beta/workflows/{id}

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.

FieldTypeDescription
automationsarray of AutomationRunStatusoptionalPer-automation breakdown of the same run, one entry per automation in the workflow.
docs_linkstringnullableURL of the help article for this error, when one exists.
duration_secondsnumbernullableHow long the last run took, in seconds. When derived from automations, this is the longest automation duration.
executionstringrequiredLive phase: running if the workflow or any of its automations is still executing, otherwise completed.
last_failed_automation_idstringnullableId of the automation that failed, so you can go straight to it without scanning automations. Null when nothing failed.
messagestringnullableHuman-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.
resultstringrequiredOutcome of the last finished run: never_run, success or error. error if ANY automation failed.
started_atstringnullableWhen 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.
workflow_idstringrequiredId of the workflow this status belongs to.

Used by: GET /rest/beta/workflows/{id}/run