SheetgoDevelopers

Developers › REST API › Workflows & Automations

REST API · 12 endpoints

automations

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/automations (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.

An automation (also called a connection) is a single data transfer inside a workflow: it pulls data from one or more sources, optionally consolidates, filters or merges it, and writes the result to one or more destinations — all without manual copy-paste.

Use these endpoints to list, create, read, replace, update, run and archive automations, and to inspect their source and destination files.

Operations

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

Return a list of automations 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 automationsPaginatedResponse_AutomationModel_
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/automations/" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/automations/Create a new automation

Column letters. Every column field — filter (columns, expressions[].column), split.column, left_join.column, remove_duplicates.columns and anonymize.columns keys — takes the spreadsheet column LETTER (D), not the header name (Status), because the engine addresses columns by position. A header name is rejected with 422 invalid_column.

To find the letter, read the source file's header row first:

  1. GET /files/{provider}/{file_id}/structure?include=columns&tab=Orders&header_row=1 — use the source's id and provider, the tab you import and its offset_header as header_row. A folder id reads its newest spreadsheet.
  2. Pick the letter from tabs[].columns, e.g. {"letter": "D", "index": 3, "header": "Status"}.
  3. Use it in the automation:
"filter": {"type": "condition", "condition_type": "and",
           "expressions": [{"column": "D", "criteria": "text_is_exactly", "value": "open"}]}

The structure call works for Google Sheets, Excel, CSV and TSV on every provider. It reads the file, so call it once per source and reuse the result; repeat calls are cached until the file changes.

Processor combinations. ai, filter, remove_duplicates and anonymize can each be used on their own, and merge / left_join combine with them. These combinations are not allowed today because the features are incompatible in the engine, and are rejected with 422 invalid_processor_combination:

Combination Why
ai + remove_duplicates / anonymize the engine runs the AI step or the transformers, never both — the transformer would be silently skipped
filter + remove_duplicates / anonymize the header row is lost and the first data row is corrupted
remove_duplicates + anonymize same — and a row could be left unmasked

Automations created before this rule keep running unchanged.

Parameters
NameInTypeDescription
x-runheaderbooleanoptionalSet to true to run the automation immediately after creating it. The run is queued, so the response returns before it finishes — poll GET /rest/beta/automations/{id}/run for the outcome.
Default: false
Request body (optional)

application/json · 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
Responses
StatusMeaningBody
200The automation model createdAutomationModel
401Authentication failed or token is invalid—
403The plan does not include this destination type—
404Not found—
412send_from names an Outlook account that is not connected or cannot send mail (outlook_not_connected), or ai.model / ai.model_settings without your own OpenAI account (openai_not_connected), or an Outlook source whose account cannot read mail (outlook_not_connected, Mail.Read)—
422Invalid destination combination, recipient format, api-source shape, integration source, endpoint, api destination or bigquery combination, documents automation (invalid_documents_automation), file_filter (invalid_file_filter), Outlook automation (invalid_outlook_automation), email_filter (invalid_email_filter), or a processor combination that is not allowed (invalid_processor_combination), or a column that is not a spreadsheet letter (invalid_column)—
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/automations/" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
POST/rest/beta/automations/run/{id}(Obsolete) Use /automations/<id>/run instead

Deprecated. Do not use in new code.

This endpoint will be removed

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

Given an automation id, returns the automation model data

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

Column letters. Every column field — filter (columns, expressions[].column), split.column, left_join.column, remove_duplicates.columns and anonymize.columns keys — takes the spreadsheet column LETTER (D), not the header name (Status), because the engine addresses columns by position. A header name is rejected with 422 invalid_column.

To find the letter, read the source file's header row first:

  1. GET /files/{provider}/{file_id}/structure?include=columns&tab=Orders&header_row=1 — use the source's id and provider, the tab you import and its offset_header as header_row. A folder id reads its newest spreadsheet.
  2. Pick the letter from tabs[].columns, e.g. {"letter": "D", "index": 3, "header": "Status"}.
  3. Use it in the automation:
"filter": {"type": "condition", "condition_type": "and",
           "expressions": [{"column": "D", "criteria": "text_is_exactly", "value": "open"}]}

The structure call works for Google Sheets, Excel, CSV and TSV on every provider. It reads the file, so call it once per source and reuse the result; repeat calls are cached until the file changes.

Processor combinations. ai, filter, remove_duplicates and anonymize can each be used on their own, and merge / left_join combine with them. These combinations are not allowed today because the features are incompatible in the engine, and are rejected with 422 invalid_processor_combination:

Combination Why
ai + remove_duplicates / anonymize the engine runs the AI step or the transformers, never both — the transformer would be silently skipped
filter + remove_duplicates / anonymize the header row is lost and the first data row is corrupted
remove_duplicates + anonymize same — and a row could be left unmasked

Automations created before this rule keep running unchanged.

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Request body (optional)

application/json · 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
Responses
StatusMeaningBody
200The automation model updatedAutomationModel
401Authentication failed or token is invalid—
403The plan does not include this destination type—
404Not found—
412send_from names an Outlook account that is not connected or cannot send mail (outlook_not_connected), or ai.model / ai.model_settings without your own OpenAI account (openai_not_connected), or an Outlook source whose account cannot read mail (outlook_not_connected, Mail.Read)—
422Invalid destination combination, recipient format, api-source shape, integration source, endpoint, api destination or bigquery combination, documents automation (invalid_documents_automation), file_filter (invalid_file_filter), Outlook automation (invalid_outlook_automation), email_filter (invalid_email_filter), or a processor combination that is not allowed (invalid_processor_combination), or a column that is not a spreadsheet letter (invalid_column)—
Example request
curl -s -X PUT "https://dev-api.sheetgo.com/rest/beta/automations/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
PATCH/rest/beta/automations/{id}Rename an automation

Renames only. The body is {"name": "…"}; any other field is rejected with 422. To change sources, destinations or processors (filter, merge, ai, left_join, remove_duplicates, split, anonymize), GET the automation, edit it and send it back with PUT — GET returns everything PUT accepts, so the rest of the automation is kept.

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Request body (required)

application/json · AutomationPatch

FieldTypeDescription
namestringrequiredNew name of the automation
Min length: 1
Responses
StatusMeaningBody
200The automation model updatedAutomationModel
401Authentication failed or token is invalid—
404Not found—
422name missing or empty, or a field other than name (PATCH only renames)—
Example request
curl -s -X PATCH "https://dev-api.sheetgo.com/rest/beta/automations/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
DELETE/rest/beta/automations/{id}Archive an automation

Given a workflow id, archive the workflow

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Responses
StatusMeaningBody
200The automation 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/automations/ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/automations/{id}/destinationsGet file destinations of an automation

Return the file/folder destinations of an automation.

Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template).

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Responses
StatusMeaningBody
200File destinations of the automationany
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/automations/ID/destinations" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/automations/{id}/filesGet file sources and destinations of an automation

Return the sources and destinations of an automation.

Every source type is included (file, folder, api, webhook, integration, bigquery, outlook); write-only fields such as an api source's headers are omitted.

Destinations include generated-document and PDF destinations, which are backed by a Drive folder (and, for documents, the Docs template).

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Responses
StatusMeaningBody
200File sources and destinations of the automationany
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/automations/ID/files" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/automations/{id}/runGet an automation's last-run status

Last-run execution status of a single automation (latest only — no history).

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

Given an automation Id, the automation will start its execution

Parameters
NameInTypeDescription
idpathstringrequiredAutomation identification
Responses
StatusMeaningBody
200successful operationSuccessResponse
401Authentication failed or token is invalid—
404Not found—
422Validation ErrorHTTPValidationError
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/automations/ID/run" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
GET/rest/beta/automations/{id}/sourcesGet file sources of an automation

Return the sources of an automation.

Every source type is included (file, folder, api, webhook, integration, bigquery, outlook), in the shape GET /automations/{id} returns; write-only fields such as an api source's headers are omitted.

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

Models used on this page

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

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"

FileType

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

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.

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

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"

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