FileType
Type: one of "gsheets", "xlsx", "csv", "tsv", "folder"
Developers › REST API › Forms & Integrations
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/forms (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 · Read every page of a list.
A Sheetgo form collects data straight into a workflow. Its fields come from your spreadsheet's columns, and every submission is appended as a new row — a simple way to feed a workflow from people instead of another system.
Use these endpoints to list a workflow's forms and read their configuration.
/rest/beta/workflows/{workflow_id}/forms/Get a paginated list of formsReturn a list of forms following the pagination parameters
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
page | query | integer | optional | Page number, 1-based Default: 1 · Min: 1 |
per_page | query | integer | optional | Number of items per page (1-100; values above 100 are clamped to 100 and the effective size is echoed in the response) Default: 50 · Min: 1 |
| Status | Meaning | Body |
|---|---|---|
| 200 | A paginated list of forms | PaginatedResponse_FormModel_ |
| 401 | Authentication failed or token is invalid | — |
| 404 | Not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/" \
-H "Authorization: Bearer $SHEETGO_API_KEY"Latest version: https://dev-api.sheetgo.com/rest/reference/forms#get-rest-beta-workflows-workflow-id-forms
/rest/beta/workflows/{workflow_id}/forms/Create a new formCreate a new form
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
application/json · FormCreate
| Field | Type | Description | |
|---|---|---|---|
confirmation_message | string | nullable | Confirmation message |
description | string | nullable | Form description |
include_header | boolean | nullable | True if include header Default: false |
limit_responses | boolean | nullable | True if should limit responses Default: false |
require_auth | boolean | nullable | True if it requires authentication Default: false |
source | FormFile | required | Form fields source file |
target | FormFile | required | Response destination file |
title | string | optional | Title for the form Default: "Untitled form" |
| Status | Meaning | Body |
|---|---|---|
| 200 | The form model created | FormModel |
| 401 | Authentication failed or token is invalid | — |
| 404 | Not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X POST "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/" \
-H "Authorization: Bearer $SHEETGO_API_KEY" \
-H "Content-Type: application/json" \
-d @body.jsonLatest version: https://dev-api.sheetgo.com/rest/reference/forms#post-rest-beta-workflows-workflow-id-forms
/rest/beta/workflows/{workflow_id}/forms/{form_id}Get a formReturns the form model data
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
form_id | path | string | required | Form identification |
| Status | Meaning | Body |
|---|---|---|
| 200 | The form model data | FormModel |
| 401 | Authentication failed or token is invalid | — |
| 404 | Not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/FORM_ID" \
-H "Authorization: Bearer $SHEETGO_API_KEY"Latest version: https://dev-api.sheetgo.com/rest/reference/forms#get-rest-beta-workflows-workflow-id-forms-form-id
/rest/beta/workflows/{workflow_id}/forms/{form_id}Update an existing formPatches form data
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
form_id | path | string | required | Form identification |
application/json · FormPatch
| Field | Type | Description | |
|---|---|---|---|
confirmation_message | string | nullable | Confirmation message |
description | string | nullable | Form description |
limit_responses | boolean | nullable | Limit each respondent to one response. Must be sent together with require_auth — identifying the respondent is how the limit is enforced. |
require_auth | boolean | nullable | Require respondents to authenticate. SG-14657 — must be sent together with limit_responses; sending one alone is a 422. Setting limit_responses true forces this on. |
source | FormFile | nullable | Form fields source file |
sync_fields_after_submission | boolean | nullable | True it should sync fields after submission |
target | FormFile | nullable | Response destination file |
title | string | nullable | Title for the form |
| Status | Meaning | Body |
|---|---|---|
| 200 | The form model patched | FormModel |
| 401 | Authentication failed or token is invalid | — |
| 404 | Not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X PATCH "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/FORM_ID" \
-H "Authorization: Bearer $SHEETGO_API_KEY" \
-H "Content-Type: application/json" \
-d @body.jsonLatest version: https://dev-api.sheetgo.com/rest/reference/forms#patch-rest-beta-workflows-workflow-id-forms-form-id
/rest/beta/workflows/{workflow_id}/forms/{form_id}Delete a formDeletes a form
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
form_id | path | string | required | Form identification |
| Status | Meaning | Body |
|---|---|---|
| 200 | The form was successfully deleted | SuccessResponse |
| 401 | Authentication failed or token is invalid | — |
| 404 | Not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X DELETE "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/FORM_ID" \
-H "Authorization: Bearer $SHEETGO_API_KEY"Latest version: https://dev-api.sheetgo.com/rest/reference/forms#delete-rest-beta-workflows-workflow-id-forms-form-id
/rest/beta/workflows/{workflow_id}/forms/{form_id}/responsesGet a form's responses (paginated)Return the form's responses (from its first target spreadsheet), paginated.
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
form_id | path | string | required | Form identification |
page | query | integer | optional | Page number Default: 1 · Min: 1 |
per_page | query | integer | optional | Items per page Default: 50 · Min: 1 · Max: 100 |
strip_tags | query | boolean | optional | Strip trailing ' [config]' tags from response headers Default: false |
| Status | Meaning | Body |
|---|---|---|
| 200 | Paginated form responses | PaginatedResponse |
| 401 | Authentication failed or token is invalid | — |
| 404 | Form or workflow not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X GET "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/FORM_ID/responses" \
-H "Authorization: Bearer $SHEETGO_API_KEY"Latest version: https://dev-api.sheetgo.com/rest/reference/forms#get-rest-beta-workflows-workflow-id-forms-form-id-responses
/rest/beta/workflows/{workflow_id}/forms/{form_id}/responsesInspect a form's responses metadata without downloading themReturn response count / columns / last-modified in headers, no body.
| Name | In | Type | Description | |
|---|---|---|---|---|
workflow_id | path | string | required | Workflow identification |
form_id | path | string | required | Form identification |
strip_tags | query | boolean | optional | Strip trailing ' [config]' tags from response headers Default: false |
| Status | Meaning | Body |
|---|---|---|
| 200 | Response metadata in X-Sheetgo-* headers | any |
| 401 | Authentication failed or token is invalid | — |
| 404 | Form or workflow not found | — |
| 422 | Validation Error | HTTPValidationError |
curl -s -X HEAD "https://dev-api.sheetgo.com/rest/beta/workflows/WORKFLOW_ID/forms/FORM_ID/responses" \
-H "Authorization: Bearer $SHEETGO_API_KEY"Latest version: https://dev-api.sheetgo.com/rest/reference/forms#head-rest-beta-workflows-workflow-id-forms-form-id-responses
Every request and response model referenced above, including nested ones (12). The full catalogue is on api-models.html.
FileTypeType: one of "gsheets", "xlsx", "csv", "tsv", "folder"
FormCreateForm creation data
| Field | Type | Description | |
|---|---|---|---|
confirmation_message | string | nullable | Confirmation message |
description | string | nullable | Form description |
include_header | boolean | nullable | True if include header Default: false |
limit_responses | boolean | nullable | True if should limit responses Default: false |
require_auth | boolean | nullable | True if it requires authentication Default: false |
source | FormFile | required | Form fields source file |
target | FormFile | required | Response destination file |
title | string | optional | Title for the form Default: "Untitled form" |
FormFileUsed in form creation and update
FormFileModelFor displaying data
FormModelFor displaying data
| Field | Type | Description | |
|---|---|---|---|
confirmation_message | string | nullable | Confirmation message |
description | string | nullable | Form description |
id | string | optional | Form identification |
include_header | boolean | nullable | True if include header Default: false |
limit_responses | boolean | nullable | True if should limit responses Default: false |
require_auth | boolean | nullable | True if it requires authentication Default: false |
source | FormFileModel | nullable | Form fields source file |
target | FormFileModel | nullable | Response destination file |
title | string | optional | Title 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}
FormPatchForm update data
| Field | Type | Description | |
|---|---|---|---|
confirmation_message | string | nullable | Confirmation message |
description | string | nullable | Form description |
limit_responses | boolean | nullable | Limit each respondent to one response. Must be sent together with require_auth — identifying the respondent is how the limit is enforced. |
require_auth | boolean | nullable | Require respondents to authenticate. SG-14657 — must be sent together with limit_responses; sending one alone is a 422. Setting limit_responses true forces this on. |
source | FormFile | nullable | Form fields source file |
sync_fields_after_submission | boolean | nullable | True it should sync fields after submission |
target | FormFile | nullable | Response destination file |
title | string | nullable | Title for the form |
Used by: PATCH /rest/beta/workflows/{workflow_id}/forms/{form_id}
HTTPValidationError| Field | Type | Description | |
|---|---|---|---|
detail | array of ValidationError | optional |
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
PaginatedResponse| Field | Type | Description | |
|---|---|---|---|
page | integer | nullable | Page number Default: 1 |
per_page | integer | nullable | Number of items per page Default: 50 |
results | array | optional | List of results |
total | integer | nullable | Total number of pages Default: 0 |
Used by: GET /rest/beta/workflows/{workflow_id}/forms/{form_id}/responses
PaginatedResponse_FormModel_| Field | Type | Description | |
|---|---|---|---|
page | integer | nullable | Page number Default: 1 |
per_page | integer | nullable | Number of items per page Default: 50 |
results | array of FormModel | optional | List of results |
total | integer | nullable | Total number of pages Default: 0 |
ProviderType: one of "drive", "onedrive", "sharepoint", "dropbox"
Used by: 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/files/{provider}/{file_id}/structure
SuccessResponseThe 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.
| Field | Type | Description | |
|---|---|---|---|
code | integer | optional | Result code. 1 means the operation succeeded. Default: 1 |
message | string | optional | Human-readable confirmation of what happened. Default: "OK" |
type | string | optional | Kind 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| Field | Type | Description | |
|---|---|---|---|
loc | array of string or integer | required | |
msg | string | required | |
type | string | required |