SheetgoDevelopers

Developers › REST API › Forms & Integrations

REST API · 3 endpoints

webhook

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

Python recipes. API client helper.

A webhook is a private URL that lets external systems push data into a workflow over HTTP. Your app sends a JSON payload and Sheetgo lands it in the workflow — optionally triggering a full run — with no Google APIs or OAuth to manage on your side.

Use this endpoint to POST data to a workflow's webhook source.

Operations

GET/rest/beta/automations/{automation_id}/webhookRetrieve an automation's webhook

Returns the webhook bound to this automation's webhook source — most importantly its url, which is the address an external system POSTs data to.

A webhook is minted automatically when an automation is created with a webhook source; there is no endpoint to create one separately, and no way to rotate it. Deleting the automation deletes the webhook with it. Automations without a webhook source return 404.

Parameters
NameInTypeDescription
automation_idpathstringrequiredAutomation id
Responses
StatusMeaningBody
200The automation's webhookWebhookOut
401Authentication failed or token is invalid—
404Automation has no webhook—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/automations/AUTOMATION_ID/webhook" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
POST/rest/beta/webhook/{public_id}Push values to a webhook and trigger its bound automation

Sends rows into a workflow through an automation's webhook source, and starts a run.

Answers 202 Accepted as soon as the data is stored and the run is queued — the run itself happens asynchronously, so a 202 means accepted, not finished. Poll GET /rest/beta/automations/{automation_id}/run for the outcome.

Safe retries. Send an Idempotency-Key header (any unique string, 1-255 printable characters) and reuse it when you retry the same push. Sheetgo then runs the automation once and answers the retry with the first response plus Idempotent-Replayed: true, for 24 hours. A server error (5xx) is not remembered, so retrying it runs again.

Get the public_id from GET /rest/beta/automations/{automation_id}/webhook. Treat it as a secret.

Parameters
NameInTypeDescription
public_idpathstringrequiredThe webhook's public identifier, from the automation's webhook endpoint.
Idempotency-KeyheaderstringoptionalOptional. Reuse the same value when retrying a push so it is processed only once.
Request body (required)

application/json · 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
Responses
StatusMeaningBody
202Accepted; dispatch startedany
400Malformed body, invalid Idempotency-Key, or webhook not bound to a webhook-source automation—
401Auth failed—
404Webhook not found or not owned by caller—
409A request with the same Idempotency-Key is still being processed (idempotency_in_progress)—
413Values exceed row/byte cap—
422Invalid request body (FastAPI validation error), or the Idempotency-Key was already used with a different body (idempotency_key_reused)—
Example request
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/webhook/PUBLIC_ID" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
GET/rest/beta/workflows/{workflow_id}/webhooksList a workflow's webhooks

Lists every webhook across the workflow's automations, so you can find the right url without knowing which automation owns it. Paginated with the standard page / per_page envelope. A workflow with no webhook sources returns an empty list, not a 404.

Parameters
NameInTypeDescription
workflow_idpathstringrequiredWorkflow id
pagequeryintegeroptionalPage number, 1-based.
Default: 1 · Min: 1
per_pagequeryintegeroptionalWebhooks per page (1-100).
Default: 50 · Min: 1 · Max: 100
Responses
StatusMeaningBody
200Webhooks in the workflowany
401Authentication failed or token is invalid—
422Validation ErrorHTTPValidationError
Example request
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/webhooks" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"

Models used on this page

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

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

ValidationError

FieldTypeDescription
locarray of string or integerrequired
msgstringrequired
typestringrequired

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