SheetgoDevelopers

Developers › REST API › Models

REST API · 147 models

All models

Every request and response model of the REST API, field by field, grouped by the endpoints that use it. A model appears once, under the group whose endpoints use it most directly (for example the destination types are under automations); models used by three or more groups are under Common. "Used by" under each model lists every operation that references it. Types link to other models on this page. Fields marked required must be sent; for a "one of", the type field says which variant to use.

Used by workflows

Models used by the workflows endpoints, including nested ones. That page also lists every model its operations use.

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

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

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/

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

Used by automations

Models used by the automations endpoints, including nested ones. That page also lists every model its operations use.

AIProcessor

FieldTypeDescription
modelstringnullableOpenAI 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.
model_settingsModelSettingsnullableModel parameters. Same OpenAI-account requirement as model.
on_processing_errorOnProcessingErrornullableDocuments folder only: continue (default) keeps going when a document cannot be read; stop fails the run.
promptstringrequiredThe 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.

AnonymizeMethod

The web app's masking methods (core-lib v1/dataframe/anonymizer.py).

Type: one of "salted_hash", "hash", "nullify", "redact", "partial_email", "partial_start", "partial_end", "generalization"

AnonymizeMode

automatic: Google DLP (Sheetgo's project) detects personal data and hashes it. custom: a masking method per column.

Type: one of "automatic", "custom"

AnonymizeProcessor

Mask personal data before it reaches the destination (the web app's Anonymize step).

FieldTypeDescription
columnsobject (map of string → AnonymizeMethod)nullableCustom 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).
modeAnonymizeModeoptionalautomatic: 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"

AutomationCreate

FieldTypeDescription
aiAIProcessornullableAI step options
anonymizeAnonymizeProcessornullableAnonymize step options. Not combinable today with ai, filter or remove_duplicates (features incompatible in the engine) — see Processor combinations.
destinationsarray of one of (chosen by type): type: "api" → DestinationApiPublish, type: "bigquery" → DestinationBigQuery-Input, 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-Input, type: "document" → DestinationDocument, type: "file" → DestinationFile, type: "folder" → DestinationFolder, type: "mail_merge" → DestinationMailMerge, type: "pdf" → DestinationPDF, type: "share" → DestinationShare, type: "webhook" → DestinationWebhooknullableDestinations to connect to
filterFilterCondition-Input or FilterColumn or FilterQuerynullableFilter 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.
left_joinLeftJoinProcessornullableLeft join step options
mergeMergeProcessornullableMerge step options
namestringrequiredName of the automation
number_formatbooleannullableNumber format
Default: false
remove_duplicatesRemoveDuplicatesProcessornullableRemove duplicate rows. Not combinable today with ai, filter or anonymize (features incompatible in the engine) — see Processor combinations.
sourcesarray of SourceFile or SourceFolder-Input or SourceWebhook or SourceAPI or SourceIntegration or SourceBigQuery or SourceOutlook-InputrequiredList of sources to connect to
splitSplitnullableSplit step options
transfer_formatbooleannullableTransfer format
Default: false
workflow_idstringrequiredId of the workflow this automation belongs to

Used by: POST /rest/beta/automations/

AutomationModel

FieldTypeDescription
aiAIProcessornullableThe AI step, when the automation has one.
anonymizeAnonymizeProcessornullableThe Anonymize step, when the automation has one.
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
executionExecutionStatusnullableExecution status of the automation
Default: "completed"
filterFilterCondition-Output or FilterColumn or FilterQuerynullableThe 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).
idstringrequiredId of the automation
input_countintegernullableNumber of inputs of the automation
Default: 0
last_updating_userstringnullableLast updated user of the automation
left_joinLeftJoinProcessornullableThe Left join step, when the automation has one.
mergeMergeProcessornullableThe Merge step, when the automation has one.
namestringrequiredName of the automation
output_countintegernullableNumber of outputs of the automation
Default: 0
ownerstringrequiredOwner of the automation
remove_duplicatesRemoveDuplicatesProcessornullableThe Remove duplicates step, when the automation has one.
sourcesarray of SourceFile or SourceFolder-Output or SourceWebhook or SourceAPI or SourceIntegration or SourceBigQuery or SourceOutlook-OutputoptionalSources of the automation
splitSplitnullableThe Split step, when the automation has one.
statusintegernullableExecution result code: 0 = never executed, 1 = executed successfully, > 1 = error (inspect status_message / status_docs_link).
Default: 0
status_docs_linkstringnullableDocumentation link for the error when status > 1.
status_messagestringnullableHuman-readable error description when status > 1.

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

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.

FieldTypeDescription
namestringrequiredNew name of the automation
Min length: 1

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

AutomationReplace

FieldTypeDescription
aiAIProcessornullableAI step options
anonymizeAnonymizeProcessornullableAnonymize step options. Not combinable today with ai, filter or remove_duplicates (features incompatible in the engine) — see Processor combinations.
destinationsarray of one of (chosen by type): type: "api" → DestinationApiPublish, type: "bigquery" → DestinationBigQuery-Input, 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-Input, type: "document" → DestinationDocument, type: "file" → DestinationFile, type: "folder" → DestinationFolder, type: "mail_merge" → DestinationMailMerge, type: "pdf" → DestinationPDF, type: "share" → DestinationShare, type: "webhook" → DestinationWebhooknullableDestinations to connect to
filterFilterCondition-Input or FilterColumn or FilterQuerynullableFilter 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.
idstringrequiredId of the automation
left_joinLeftJoinProcessornullableLeft join step options
mergeMergeProcessornullableMerge step options
namestringrequiredName of the automation
number_formatbooleannullableNumber format
Default: false
remove_duplicatesRemoveDuplicatesProcessornullableRemove duplicate rows. Not combinable today with ai, filter or anonymize (features incompatible in the engine) — see Processor combinations.
sourcesarray of SourceFile or SourceFolder-Input or SourceWebhook or SourceAPI or SourceIntegration or SourceBigQuery or SourceOutlook-InputrequiredList of sources to connect to
splitSplitnullableSplit step options
transfer_formatbooleannullableTransfer format
Default: false
workflow_idstringrequiredId of the workflow this automation belongs to

Used by: PUT /rest/beta/automations/{id}

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"

ConditionExpression

FieldTypeDescription
columnstringoptionalSpreadsheet 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.
Example: "D"
criteriaExpressionCriteriaoptionalThe criteria
valuenumber or integer or stringnullableThe value

ConditionType

Type: one of "and", "or"

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

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"

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-Input

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-Input or EmailFilterRulerequiredConditions or nested groups.
Min items: 1

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.

ExecutionStatus

Type: one of "completed", "running"

ExpressionCriteria

Type: 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"

FileAccessRole

Type: one of "reader", "writer"

FileFilter-Input

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-Input or FileFilterRulerequiredConditions or nested groups.
Min items: 1

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"

FilterColumn

FieldTypeDescription
columnsarray of stringoptionalThe 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.
Example: ["A", "C"]
type"column"requiredA column filter: choose which columns are carried through.

FilterCondition-Input

FieldTypeDescription
columnsarray of stringnullableThe 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.
Example: ["A", "C"]
condition_typeConditionTypenullableThe filter condition type
expressionsarray of ConditionExpressionnullableThe filter expression
type"condition"requiredA condition filter: keep rows where a column matches a comparison.

FilterCondition-Output

FieldTypeDescription
columnsarray of stringnullableThe 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.
Example: ["A", "C"]
condition_typeConditionTypenullableThe filter condition type
expressionsarray of ConditionExpressionnullableThe filter expression
type"condition"requiredA condition filter: keep rows where a column matches a comparison.

FilterQuery

FieldTypeDescription
querystringrequiredThe filter query string
type"query"requiredA query filter: keep rows matching an sgql expression.

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"

KeepDuplicateType

Type: one of "first", "last"

LeftJoinProcessor

FieldTypeDescription
columnstringoptionalSpreadsheet 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.
Example: "A"

MergeProcessor

FieldTypeDescription
offset_headerintegeroptionalThe header position
Default: 1
remove_headerbooleanoptionalRemove header during the merge process
Default: false

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

FieldTypeDescription
frequency_penaltynumbernullable
max_completion_tokensintegernullable
presence_penaltynumbernullable
reasoning_effortone of "low", "medium", "high"nullableApplied by the engine only to models whose id starts with o.
temperaturenumbernullable
top_pnumbernullable

OnProcessingError

What a documents run does when one document cannot be read.

Type: one of "continue", "stop"

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_AutomationModel_

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

Used by: GET /rest/beta/automations/

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"

RemoveDuplicatesProcessor

FieldTypeDescription
columnsarray of stringoptionalThe 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.
Example: ["A", "C"]
keepKeepDuplicateTypeoptionalKeep duplicated rows
Default: "first"

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-Input

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

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

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

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.

Split

FieldTypeDescription
columnstringoptionalSpreadsheet 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.
Example: "C"

UnusedFields

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

Type: one of "ignore", "error"

Used by triggers

Models used by the triggers endpoints, including nested ones. That page also lists every model its operations use.

FormSubmissionTriggerIn

Run this workflow whenever a bound Sheetgo form receives a new response.

FieldTypeDescription
form_idstringrequiredId of a form attached to this workflow.
type"form_submission"requiredSelects a form_submission trigger: the workflow runs each time the form named by form_id receives a response.

Used by: PUT /rest/beta/workflows/{id}/trigger

TimeTriggerIn

Time/smart schedule. Either friendly fields OR a raw cron, not both.

FieldTypeDescription
cronstringnullablePower-user escape hatch. Mutually exclusive with friendly fields.
day_of_monthinteger or stringnullablemonthly only: 1..31 or 'last'
everyintegernullableminutes: 15|30 ; hourly: 1|2|4|6|8|12
frequencyone of "minutes", "hourly", "daily", "weekly", "monthly"nullableSchedule frequency
timestringnullableHH:MM for daily/weekly/monthly. Minute is coerced to :00.
timezonestringnullableIANA timezone; defaults to the workflow's current timezone.
type"time"requiredSelects a time trigger: the workflow runs on a schedule. Set either the friendly fields below or cron, not both.
weekdaystring or array of stringnullableweekly only: a day name (sunday..saturday) or a list of names

Used by: PUT /rest/beta/workflows/{id}/trigger

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.

FieldTypeDescription
activebooleanoptionalWhether a trigger is currently set and enabled. When false, every other field is null and the workflow runs only on demand.
Default: false
after_workflow_idstringnullableworkflow_finished triggers only: the id of the parent workflow whose completion starts this one.
cronstringnullabletime 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.
day_of_monthinteger or stringnullabletime triggers, monthly only: the day of the month (1..31), or the string last for the final day of each month.
everyintegernullabletime triggers only: the interval within frequency — minutes: 15 or 30; hourly: 1, 2, 4, 6, 8 or 12.
form_idstringnullableform_submission triggers only: the id of the form whose new responses start this workflow.
frequencystringnullabletime triggers only: minutes, hourly, daily, weekly or monthly. Null when the trigger was set with a raw cron.
timestringnullabletime triggers only: HH:MM in timezone, for daily, weekly and monthly frequencies. The minute is always :00.
timezonestringnullabletime triggers only: the IANA timezone the schedule is evaluated in (for example Europe/Madrid).
typeone of "time", "workflow_finished", "form_submission"nullableWhich kind of trigger is set, and therefore which fields below are populated. Null when active is false.
weekdaystring or array of stringnullabletime triggers, weekly only: a day name (sunday..saturday), or a list of them when the schedule repeats on several days.

Used by: GET /rest/beta/workflows/{id}/trigger, PUT /rest/beta/workflows/{id}/trigger, DELETE /rest/beta/workflows/{id}/trigger

WorkflowFinishedTriggerIn

Run this workflow when another workflow finishes.

FieldTypeDescription
after_workflow_idstringrequiredParent workflow whose completion triggers this one (named 'after_' to distinguish it from the path {id}).
type"workflow_finished"requiredSelects a workflow_finished trigger: the workflow runs when the workflow named by after_workflow_id completes.

Used by: PUT /rest/beta/workflows/{id}/trigger

Used by dashboards

Models used by the dashboards endpoints, including nested ones. That page also lists every model its operations use.

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.

FieldTypeDescription
domainbooleanrequiredRestrict to the workflow owner's email domain

Used by: PUT /rest/beta/workflows/{id}/dashboard/publish

DashboardOut

A workflow's single dashboard: its elements and its publication state.

FieldTypeDescription
elementsarray of ElementOutoptionalEvery element on the dashboard, in stored order. Empty for a workflow whose dashboard has not been built yet.
publishPublishOutrequiredWhether the dashboard is published, and under what access restrictions.

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

ElementDataOut

One element's current values.

page/per_page/total are populated for table only; the other types have nothing to paginate.

FieldTypeDescription
dataanyoptionalThe 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.
idstringrequiredId of the element these values belong to.
pageintegernullableCurrent page of rows, 1-based. Populated for table only.
per_pageintegernullableRows per page in this response. Populated for table only.
totalintegernullableTotal rows, for table elements
typeElementTyperequiredThe element's kind, which determines the shape of data.

Used by: GET /rest/beta/workflows/{id}/dashboard/elements/{element_id}/data

ElementOut

One stored element, in public vocabulary.

FieldTypeDescription
added_bystringnullableEmail of the user who added the element.
added_onstringnullableWhen the element was added, ISO 8601.
chart_idintegernullableNumeric id of the referenced chart. Set for chart elements only; get it from GET /files/{provider}/{file_id}/structure.
errorstringnullableStored 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.
file_idstringnullableId of the Google Sheets file the element reads from.
idstringrequiredElement id. Use it for delete and data reads.
rangestringnullableA1 range the element reads, without the tab name (for example B2:D50). Set for indicator and table; null for chart.
stored_rolestringnullableInternal role, echoed when type is other
stored_typestringnullableInternal type, echoed when type is other
tab_idintegernullableNumeric id of the tab the element reads from. Null for chart elements, which point at a chart rather than a tab.
tab_namestringnullableName of that tab at the time the element was stored. Null for chart elements. Renaming the tab does not update this.
titlestringnullableLabel shown above the element on the dashboard.
typeElementTyperequiredElement 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.

Used by: POST /rest/beta/workflows/{id}/dashboard/elements

PublishOut

The dashboard's current publication state.

FieldTypeDescription
auth_configobjectnullableThe access restriction applied when require_auth is true — {"domain": true} limits viewers to the owner's email domain. Null when unrestricted.
public_idstringnullableStable public identifier minted at first publish; it forms the url. Null until the dashboard has been published once.
require_authbooleanoptionalWhether a viewer must be signed in to open the dashboard. Only meaningful while shared is public.
Default: false
sharedstringrequiredpublic if the dashboard is published and reachable at url, private if it is not.
urlstringnullableViewer URL; null while private and never published

Used by: PUT /rest/beta/workflows/{id}/dashboard/publish

Used by forms

Models used by the forms endpoints, including nested ones. That page also lists every model its operations use.

FormCreate

Form creation data

FieldTypeDescription
confirmation_messagestringnullableConfirmation message
descriptionstringnullableForm description
include_headerbooleannullableTrue if include header
Default: false
limit_responsesbooleannullableTrue if should limit responses
Default: false
require_authbooleannullableTrue if it requires authentication
Default: false
sourceFormFilerequiredForm fields source file
targetFormFilerequiredResponse destination file
titlestringoptionalTitle for the form
Default: "Untitled form"

Used by: POST /rest/beta/workflows/{workflow_id}/forms/

FormFile

Used in form creation and update

FieldTypeDescription
file_typeFileTyperequiredType of the file
idstringrequiredId of the file
namestringrequiredName of the file
providerProviderrequiredService origin of the file
tab_idintegerrequiredTab id of the file
tab_namestringrequiredTab name of the file

FormFileModel

For displaying data

FieldTypeDescription
file_typeFileTypenullableType of the file
idstringrequiredId of the file
namestringnullableName of the file
providerProvidernullableService origin of the file
tab_idintegernullableTab id of the file
tab_namestringnullableTab name of the file

FormModel

For displaying data

FieldTypeDescription
confirmation_messagestringnullableConfirmation message
descriptionstringnullableForm description
idstringoptionalForm identification
include_headerbooleannullableTrue if include header
Default: false
limit_responsesbooleannullableTrue if should limit responses
Default: false
require_authbooleannullableTrue if it requires authentication
Default: false
sourceFormFileModelnullableForm fields source file
targetFormFileModelnullableResponse destination file
titlestringoptionalTitle for the form
Default: "Untitled form"

Used by: 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}

FormPatch

Form update data

FieldTypeDescription
confirmation_messagestringnullableConfirmation message
descriptionstringnullableForm description
limit_responsesbooleannullableLimit each respondent to one response. Must be sent together with require_auth — identifying the respondent is how the limit is enforced.
require_authbooleannullableRequire 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.
sourceFormFilenullableForm fields source file
sync_fields_after_submissionbooleannullableTrue it should sync fields after submission
targetFormFilenullableResponse destination file
titlestringnullableTitle for the form

Used by: PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}

PaginatedResponse_FormModel_

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

Used by: GET /rest/beta/workflows/{workflow_id}/forms/

Used by webhook

Models used by the webhook endpoints, including nested ones. That page also lists every model its operations use.

WebhookBody

FieldTypeDescription
async_dispatchbooleanoptionalDefault 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
run_workflowbooleanoptionalIf True, after this automation finishes, the parent workflow's other automations are re-run synchronously.
Default: false
valuesarray of array of stringrequiredTabular values to push (rows of strings)
Min items: 1

Used by: POST /rest/beta/webhook/{public_id}

WebhookOut

A webhook endpoint bound to one automation's webhook source.

FieldTypeDescription
activebooleanoptionalFalse once the webhook has been deleted. A deleted webhook stops accepting pushes; webhooks are removed with their automation, never on their own.
Default: true
automation_idstringnullableId of the automation this webhook feeds. Null only for a webhook that is not yet bound to one.
created_atstring (date-time)nullableWhen the webhook was minted, ISO 8601.
public_idstringrequiredThe 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.
urlstringrequiredFull URL to POST your JSON payload to. This is the value to configure in the external system that will push data.

Used by: GET /rest/beta/automations/{automation_id}/webhook

Used by integrations

Models used by the integrations endpoints, including nested ones. That page also lists every model its operations use.

DataSourceOut

One thing you can ask a provider for.

FieldTypeDescription
descriptionstringoptionalWhat it returns
Default: ""
idstringrequiredPass this back as sources[].data_source
kindstringrequiredquery for records, report for a report
namestringrequiredDisplay name
parametersobject (map of string → DataSourceParameter)optionalParameters this data source accepts, keyed by name. Empty for everything except QuickBooks reports.

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.

FieldTypeDescription
descriptionstringnullableWhat it controls
formatstringnullableExpected format when the type is date
namestringnullableDisplay name
optional_forarray of stringnullableAdvisory: supplying this parameter makes those alternatives unnecessary. Nothing is enforced as required.
optionsarray of stringnullableAccepted values. When present, the only accepted values.
typestringnullabledate or string

IntegrationAccount

One authorized account for a provider.

FieldTypeDescription
accountstringrequiredPass this back as sources[].account. The shop domain for Shopify, the realm (company) id for QuickBooks.
connected_atstring (date-time)nullableWhen the account was authorized
may_be_revokedbooleanoptionalTrue when the stored credentials are gone — the account must be re-authorized in the web app before it will run.
Default: false

IntegrationListResponse

Standard envelope. The provider list is fixed and short, so there are no paging query params -- same as GET /files/{provider}/roots.

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

Used by: GET /rest/beta/integrations

IntegrationOptionsResponse

Everything selectable for one provider.

FieldTypeDescription
data_sourcesarray of DataSourceOutoptionalEvery data source this provider exposes. Use a key from here as an integration source's data_source.
providerstringrequiredThe provider these options belong to, e.g. shopify or quickbooks.

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

IntegrationOut

One provider, with whatever the caller has authorized for it.

FieldTypeDescription
accountsarray of IntegrationAccountoptionalAuthorized accounts. Empty when not connected — authorization happens in the Sheetgo web app, not here.
connectedbooleanrequiredTrue when at least one account is authorized
namestringrequiredDisplay name
providerstringrequiredPass this back as sources[].provider

Used by outlook

Models used by the outlook endpoints, including nested ones. That page also lists every model its operations use.

AttachmentIn

FieldTypeDescription
content_base64stringrequiredThe file's bytes, base64-encoded. All attachments on one message must total no more than 3 MB decoded.
content_typestringrequiredMIME type of the attachment, e.g. application/pdf.
filenamestringrequiredFile name the recipient will see, including the extension.

BatchBody

Fetch several messages in one request, by id.

FieldTypeDescription
idsarray of stringrequiredMessage ids to fetch. At most 50, or 10 when include_attachments is true.
Min items: 1
include_attachmentsbooleanoptionalWhether 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

BodyContent

FieldTypeDescription
contentstringrequiredThe message body itself, in the format named by content_type.
content_typeone of "text", "html"optionalHow content should be interpreted: text for plain text, html for an HTML body.
Default: "text"

SendBody

One message to send through the authorized Outlook account.

FieldTypeDescription
attachmentsarray of AttachmentInoptionalFiles to attach: at most 10, totalling no more than 3 MB once decoded.
Default: []
bccarray of stringoptionalBlind-carbon-copy recipients, hidden from other recipients.
Default: []
bodyBodyContentrequiredThe message body and whether it is plain text or HTML.
ccarray of stringoptionalCarbon-copy recipients, visible to everyone.
Default: []
save_to_sent_itemsbooleanoptionalWhether to keep a copy in the account's Sent Items folder. Set false to send without recording it.
Default: true
subjectstringoptionalSubject line. Optional; defaults to an empty subject.
Default: ""
toarray of stringrequiredPrimary recipients. At least one is required; to, cc and bcc together may not exceed 50 addresses.
Min items: 1

Used by: POST /rest/beta/outlook/send

Used by gmail

Models used by the gmail endpoints, including nested ones. That page also lists every model its operations use.

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.

FieldTypeDescription
attachmentsarray of AttachmentInoptionalFiles to attach: at most 10, totalling no more than 3 MB once decoded.
Default: []
bccarray of stringoptionalBlind-carbon-copy recipients, hidden from other recipients.
Default: []
bodyBodyContentrequiredThe message body and whether it is plain text or HTML.
ccarray of stringoptionalCarbon-copy recipients, visible to everyone.
Default: []
subjectstringoptionalSubject line. Optional; defaults to an empty subject.
Default: ""
toarray of stringrequiredPrimary recipients. At least one is required; to, cc and bcc together may not exceed 50 addresses.
Min items: 1

Used by: POST /rest/beta/gmail/send

Used by files

Models used by the files endpoints, including nested ones. That page also lists every model its operations use.

ChartItem

One chart already drawn in the spreadsheet.

FieldTypeDescription
chart_idintegerrequiredNumeric chart id. Pass as chart_id when creating a dashboard element.
chart_typestringnullableNormalized chart type, e.g. column, line, pie
supportedbooleanoptionalFalse when Sheetgo cannot render this chart type on a dashboard
Default: true
tab_idintegernullableNumeric id of the tab the chart is drawn on.
tab_namestringnullableName of that tab.
titlestringnullableThe chart's title as set in the spreadsheet, when it has one.

ColumnItem

One column of a tab's header row.

FieldTypeDescription
headerstringnullableThe header cell exactly as stored (not trimmed — match it verbatim); null when the cell is empty.
indexintegerrequiredZero-based column position.
letterstringrequiredSpreadsheet column letter — the value automation column fields take (filter, split, remove_duplicates, left_join, anonymize).

FileItem

One file or folder, normalized across all four storage providers.

FieldTypeDescription
created_atstringnullableISO-8601 creation time as reported by the provider
file_typeFileTypeFilternullableAutomation file type; null when the item is outside the supported set
idstringrequiredProvider id. Usable as an automation source/destination id, and as parent when browsing.
is_folderbooleanoptionalTrue when the item can be used as a parent
Default: false
kindItemKindoptionalfile | folder | site | shared_drive | virtual
Default: "file"
mime_typestringnullableProvider mimetype
modified_atstringnullableISO-8601 last-modified time as reported by the provider
namestringnullableDisplay name
parent_idstringnullableContaining folder id, when the provider reports one
providerstringrequireddrive | onedrive | sharepoint | dropbox
sizeintegernullableSize in bytes; null or 0 for folders and for providers that omit it
supports_structurebooleanoptionalTrue 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
web_urlstringnullableLink to open the item in the provider UI; null when unavailable

Used by: GET /rest/beta/files/{provider}/{file_id}

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.

FieldTypeDescription
pageintegernullablePage number
Default: 1
per_pageintegernullableNumber of items per page
Default: 50
resultsarray of FileItemoptionalList of results
totalintegernullableTotal number of pages
Default: 0
truncatedbooleanoptionalTrue when the listing was capped
Default: false

Used by: GET /rest/beta/files/{provider}, GET /rest/beta/files/{provider}/roots, GET /rest/beta/files/{provider}/search

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.

FieldTypeDescription
file_idstringrequiredId of the file that was inspected.
file_typestringrequiredBody discriminator, e.g. spreadsheet
namestringnullableThe file's name.
providerstringrequiredStorage provider the file lives on.
resolved_fileResolvedFilenullableSet when file_id was a folder: the newest spreadsheet in it, whose structure is returned.
spreadsheetSpreadsheetStructurenullableThe 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

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: one of "gsheets", "xlsx", "csv", "tsv", "folder", "gdocs"

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: one of "file", "folder", "site", "shared_drive", "virtual"

NamedRangeItem

One named range.

FieldTypeDescription
idstringnullableProvider namedRangeId
namestringnullableThe name as defined in the spreadsheet
rangestringnullableA1 range the name resolves to
tab_idintegernullableNumeric id of the tab the named range lives on.
tab_namestringnullableName of that tab.

ResolvedFile

The spreadsheet a folder id resolved to.

FieldTypeDescription
idstringrequiredId of the spreadsheet that was read.
namestringnullableIts name.

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.

FieldTypeDescription
chartsarray of ChartItemnullableCharts already drawn in the spreadsheet. Each carries the chart_id a chart-reference dashboard element needs.
columns_truncatedbooleannullablePresent 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.
named_rangesarray of NamedRangeItemnullableNamed ranges defined in the spreadsheet.
tabsarray of TabItemnullableThe spreadsheet's tabs, in workbook order. Each carries the tab_id a dashboard element needs.

TabItem

One tab (sheet) of a spreadsheet.

FieldTypeDescription
colsintegernullableGrid column count
columnsarray of ColumnItemnullableLetter → header map of this tab, when include=columns read it. Null when not requested, or not read (see columns_truncated).
hiddenbooleanoptionalTrue when the tab is hidden in the UI
Default: false
idintegernullableNumeric Google sheetId (Google Sheets only; null for Excel/CSV, whose tabs are identified by name). Pass as tab_id when creating a dashboard element.
indexintegernullableZero-based position
namestringnullableTab title
rowsintegernullableGrid row count
typestringnullableProvider sheet type, e.g. GRID

Used by bigquery

Models used by the bigquery endpoints, including nested ones. That page also lists every model its operations use.

BigQueryDataset

FieldTypeDescription
idstringrequiredDataset id. Pass this back as dataset.
namestringnullableDisplay name

BigQueryDatasetListResponse

FieldTypeDescription
pageintegernullablePage number
Default: 1
per_pageintegernullableNumber of items per page
Default: 50
resultsarray of BigQueryDatasetoptionalList of results
totalintegernullableTotal number of pages
Default: 0
truncatedbooleanoptionalTrue when the listing hit BIGQUERY_DISCOVERY_MAX_ITEMS, so items past it are not reachable by paging.
Default: false

Used by: GET /rest/beta/bigquery/projects/{project}/datasets

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.

FieldTypeDescription
fieldstringnullablePartition column; null for ingestion-time partitioning
granularitystringnullableHOUR, DAY, MONTH or YEAR
is_ingestion_timebooleanoptionalTrue when partitioned by ingestion time
Default: false
typestringnullableThe column's BigQuery type

BigQueryProject

One GCP project visible to the authorized account.

FieldTypeDescription
idstringrequiredProject id. Pass this back as project in an automation source or destination.
namestringnullableDisplay name
numeric_idstringnullableThe project's numeric id. Accepted as project too, but the string id above is the readable form.

BigQueryProjectListResponse

FieldTypeDescription
pageintegernullablePage number
Default: 1
per_pageintegernullableNumber of items per page
Default: 50
resultsarray of BigQueryProjectoptionalList of results
totalintegernullableTotal number of pages
Default: 0
truncatedbooleanoptionalTrue when the listing hit BIGQUERY_DISCOVERY_MAX_ITEMS, so items past it are not reachable by paging.
Default: false

Used by: GET /rest/beta/bigquery/projects

BigQueryTable

FieldTypeDescription
idstringrequiredTable id. Pass this back as table.
namestringnullableDisplay name

BigQueryTableDetail

One table, with the typed schema a destination's partition.field needs.

FieldTypeDescription
datasetstringrequiredDataset the table belongs to.
num_bytesintegernullableSize in bytes
num_rowsintegernullableRow count as BigQuery reports it
partitioningBigQueryPartitioningInfonullableNull when the table is not partitioned
projectstringrequiredGoogle Cloud project the table belongs to.
schemaobject (map of string → string)optionalColumn 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.
tablestringrequiredThe table's own id, unqualified.

Used by: GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}

BigQueryTableListResponse

FieldTypeDescription
pageintegernullablePage number
Default: 1
per_pageintegernullableNumber of items per page
Default: 50
resultsarray of BigQueryTableoptionalList of results
totalintegernullableTotal number of pages
Default: 0
truncatedbooleanoptionalTrue when the listing hit BIGQUERY_DISCOVERY_MAX_ITEMS, so items past it are not reachable by paging.
Default: false

Used by: GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables

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.

FieldTypeDescription
errorstringnullableBigQuery's explanation when valid is false
schemaobject (map of string → string)nullableColumns the query would return, with their types
statement_typestringnullableSELECT, 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_processedintegernullableBytes the query would scan. Use it to size the cost of an uncapped source query before creating the automation.
validbooleanrequiredFalse when BigQuery rejected the SQL

Used by: POST /rest/beta/bigquery/projects/{project}/validate-query

Used by auth

Models used by the auth endpoints, including nested ones. That page also lists every model its operations use.

Body_auth_token_rest_auth_token_post

FieldTypeDescription
client_idstringrequiredYour application's client id.
client_secretstringrequiredYour application's client secret. Never expose it in a browser or mobile client.
codestringrequiredThe single-use authorization code returned to your redirect URI by the authorize step.
grant_typestringrequiredOAuth2 grant type. Must be authorization_code.
redirect_uristringrequiredThe same redirect URI that was used to obtain code. It must match your application's registered URI exactly.

Used by: POST /rest/auth/token

ExchangedToken

The token pair returned by the OAuth2 token and refresh endpoints.

FieldTypeDescription
access_tokenstringrequiredShort-lived bearer token. Send it as Authorization: Bearer <access_token> on API calls.
refresh_tokenstringrequiredLong-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, POST /rest/auth/token

RefreshTokenRequest

The parameters used when refreshing a token

FieldTypeDescription
client_idstringrequiredYour application's client id.
client_secretstringrequiredYour application's client secret. Never expose it in a browser or mobile client.
grant_typestringoptionalOAuth2 grant type. Must be refresh_token for this endpoint.
Default: "refresh_token"
refresh_tokenstringrequiredThe refresh token previously issued by POST /rest/auth/token.

Used by: POST /rest/auth/refresh

Common (used by 3 or more groups)

FileType

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

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

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

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}

ValidationError

FieldTypeDescription
locarray of string or integerrequired
msgstringrequired
typestringrequired