# Triggers · REST API

> A trigger defines what makes a workflow run automatically, so you set it once instead of running the workflow by hand.

HTML version: https://developers.sheetgo.com/api/triggers/

[Developers](/index.md) › [REST API](/api.md) › [Workflows & Automations](/api.md#api-endpoints)

REST API · 3 endpoints

## Triggers

**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](#models), so you do not need another page to build a request. Base URL `https://api.sheetgo.com`; paths are complete, version included (`/rest/beta/…`): append them to the base URL exactly as shown; send `Authorization: Bearer sg_…`. Also in the API's own docs: <https://api.sheetgo.com/rest/reference/triggers> ([Markdown](https://api.sheetgo.com/rest/reference/triggers.md)).

**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: [REST API › Errors](/api.md#api-errors).

**Python recipes.** [API client helper](/examples.md#recipe-sheetgo-api).

A **trigger** defines what makes a workflow run **automatically**, so you set it once instead of running the workflow by hand. A trigger can be a recurring **schedule** (e.g. every 15 minutes, or every weekday at 09:00) or the **completion of another workflow** (chaining one run after another). Each workflow has at most **one** active trigger.

Use these endpoints to **read**, **set or replace**, and **remove** a workflow's trigger. All endpoints are under `/rest/beta` and require auth via session JWT or `sg_…` API key Bearer token.

#### Endpoints

| Method | Path | Purpose |
| --- | --- | --- |
| `GET` | `/rest/beta/workflows/{id}/trigger` | Read the current trigger configuration |
| `PUT` | `/rest/beta/workflows/{id}/trigger` | Set or replace the trigger (idempotent) |
| `DELETE` | `/rest/beta/workflows/{id}/trigger` | Turn the trigger off |

#### Trigger type: `time` (schedule)

Run the workflow on a recurring schedule. Use **friendly fields** (recommended) or a **raw cron expression** — the two forms are mutually exclusive; supplying both returns `422`.

##### Friendly fields

```
{ "type": "time", "frequency": "daily", "time": "09:00", "timezone": "Europe/Berlin" }
```

| Field | Required for | Allowed values |
| --- | --- | --- |
| `frequency` | always | `minutes`, `hourly`, `daily`, `weekly`, `monthly` |
| `every` | `minutes`, `hourly` | `minutes`: `15` or `30`; `hourly`: `1`, `2`, `4`, `6`, `8`, `12` |
| `time` | `daily`, `weekly`, `monthly` | `"HH:MM"` — **minute is always coerced to `:00`** |
| `weekday` | `weekly` | a day name (`sunday` … `saturday`) **or a list** of day names for multiple days, e.g. `["monday","thursday"]` |
| `day_of_month` | `monthly` | `1`–`31` or `"last"` |
| `timezone` | optional | IANA name (e.g. `"America/New_York"`). Defaults to the workflow's current timezone. |

> **`HH:00` constraint:** The minute component of `time` is always silently coerced to `00`. Schedules run at the top of the hour. `"09:45"` is stored and executed as `"09:00"`.

##### Friendly → cron mapping

| Friendly input | Generated cron |
| --- | --- |
| `minutes`, every `15` | `*/15 * * * *` |
| `minutes`, every `30` | `*/30 * * * *` |
| `hourly`, every `N` (1, 2, 4, 6, 8, 12) | `0 0-23/N * * *` |
| `daily` at hour H | `0 H * * *` |
| `weekly` at hour H on weekday(s) D | `0 H * * D` (sunday=0 … saturday=6; multiple days → `0 H * * 1,2,4,5`) |
| `monthly` at hour H on day DOM | `0 H DOM * *` (`"last"` → `L`) |

##### Reading a trigger (GET) — `cron` is authoritative

`cron` is always the source of truth. The friendly fields (`frequency`, `every`, `time`, `weekday`, `day_of_month`) are a **convenience** filled in only when the schedule maps cleanly to the table above:

- A `weekly` schedule with one day returns `weekday` as a string; with several days it returns a list (cron day lists like `1,2,4,5` and ranges like `1-5` are both parsed).
- **Advanced / compound schedules are not expressed in the friendly fields.** Schedules created in the Sheetgo dashboard can combine things the friendly syntax does not model — an hour window, an hour step, and a weekday restriction together (e.g. `0 6-18/2 * * 1,2,3,4,5` = every 2 hours from 06:00–18:00, Monday–Friday). For these, every friendly field is `null` and only `cron` is populated. Read `cron` to get the exact schedule.

##### Raw cron expression (power-user escape hatch)

```
{ "type": "time", "cron": "0 9 * * *", "timezone": "UTC" }
```

- Provide `cron` instead of friendly fields. The two forms are mutually exclusive.
- The **minute field** must be `0`, `*/15`, or `*/30`. Any other value returns `422 invalid_trigger`.

#### Trigger type: `workflow_finished` (chained execution)

Run this workflow immediately after another workflow completes.

```
{ "type": "workflow_finished", "after_workflow_id": "abc123" }
```

- `after_workflow_id` is the **parent** workflow whose completion fires this trigger.
- Requires workflow **ownership** (not just edit permission) — see `not_workflow_owner` below.
- Returns `409 circular_trigger` if the relationship would create a trigger loop.

#### Response shape

GET and PUT return the full read model; DELETE returns the disabled state.

```
{
  "active": true,
  "type": "time",
  "frequency": "daily",
  "every": null,
  "time": "09:00",
  "weekday": null,
  "day_of_month": null,
  "cron": "0 9 * * *",
  "timezone": "Europe/Berlin",
  "after_workflow_id": null
}
```

An inactive / never-set trigger returns `{ "active": false, "type": null, ... }` with all other fields `null`.

#### curl examples

**Daily time trigger:**

```
curl -X PUT /rest/beta/workflows/{id}/trigger \
  -H "Authorization: Bearer sg_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"time","frequency":"daily","time":"09:00","timezone":"Europe/Berlin"}'
```

**15-minute interval:**

```
curl -X PUT /rest/beta/workflows/{id}/trigger \
  -H "Authorization: Bearer sg_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"time","frequency":"minutes","every":15}'
```

**workflow\_finished trigger:**

```
curl -X PUT /rest/beta/workflows/{id}/trigger \
  -H "Authorization: Bearer sg_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"workflow_finished","after_workflow_id":"parent-workflow-id"}'
```

**Turn off a trigger:**

```
curl -X DELETE /rest/beta/workflows/{id}/trigger \
  -H "Authorization: Bearer sg_..."
```

#### Error codes

All errors return `{ "code": "...", "detail": "..." }`.

| HTTP | `code` | When |
| --- | --- | --- |
| 422 | `invalid_trigger` | Bad/missing fields, both `cron` and friendly fields supplied, or raw-cron minute not `0`, `*/15`, `*/30`. |
| 403 | `permission_denied` | Caller lacks edit or disable permission on the workflow. |
| 403 | `not_workflow_owner` | `workflow_finished` requires workflow ownership. |
| 403 | `plan_upgrade_required` | The account plan does not include this trigger type or feature. |
| 409 | `circular_trigger` | The chosen parent would create a trigger loop. |
| 404 | `workflow_not_found` | The workflow (or parent) does not exist or is not accessible. |
| 500 | — | `{ "status": 0, "error": "internal" }` |

## Operations

#### GET `/rest/beta/workflows/{id}/trigger` — Get a workflow's automation trigger

Returns the workflow's current trigger — what makes it run without anyone pressing a button.

Only the fields belonging to the active `type` are populated; the rest are null. A workflow with no trigger returns `{"active": false, "type": null}` with HTTP 200, not a 404.

##### Parameters

| Name | In | Type |  | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | required | Workflow id |

##### Responses

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | Current trigger configuration | [`TriggerOut`](#model-TriggerOut) |
| 401 | Authentication failed or token is invalid | — |
| 404 | Workflow not found | — |
| 422 | Validation Error | [`HTTPValidationError`](#model-HTTPValidationError) |

##### Example request

```
curl -s -X GET "https://api.sheetgo.com/rest/beta/workflows/ID/trigger" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
```

In the API's own docs: <https://api.sheetgo.com/rest/reference/triggers#get-rest-beta-workflows-id-trigger>

#### PUT `/rest/beta/workflows/{id}/trigger` — Set or replace a workflow's automation trigger

Sets the workflow's trigger, replacing any existing one — this is a full replacement, not a merge.

Pick one of three `type` values:

- `time` — run on a schedule. Use the friendly fields (`frequency`, `every`, `time`, `weekday`, `day_of_month`) **or** a raw `cron`, never both. Schedules run on the hour, so the cron minute must be `0`, `*/15` or `*/30`.
- `workflow_finished` — run when another workflow finishes, named by `after_workflow_id`. Chains that would form a loop are rejected with **409**.
- `form_submission` — run whenever a bound form receives a response.

The response echoes the stored trigger, including the resolved `cron`.

##### Parameters

| Name | In | Type |  | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | required | Workflow id |

##### Request body (required)

`application/json` · one of (chosen by `type`): `type: "form_submission"` → [`FormSubmissionTriggerIn`](#model-FormSubmissionTriggerIn), `type: "time"` → [`TimeTriggerIn`](#model-TimeTriggerIn), `type: "workflow_finished"` → [`WorkflowFinishedTriggerIn`](#model-WorkflowFinishedTriggerIn)

##### Responses

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | Trigger set | [`TriggerOut`](#model-TriggerOut) |
| 401 | Authentication failed or token is invalid | — |
| 403 | Permission / plan / owner restriction | — |
| 404 | Workflow (or parent) not found | — |
| 409 | Circular trigger | — |
| 422 | Invalid trigger configuration | — |

##### Example request

```
curl -s -X PUT "https://api.sheetgo.com/rest/beta/workflows/ID/trigger" \
  -H "Authorization: Bearer $SHEETGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
```

In the API's own docs: <https://api.sheetgo.com/rest/reference/triggers#put-rest-beta-workflows-id-trigger>

#### DELETE `/rest/beta/workflows/{id}/trigger` — Turn off a workflow's automation trigger

Disables the workflow's trigger, so it runs only on demand. Returns the trigger in its disabled state (`active: false`). Safe to call on a workflow that has no trigger.

##### Parameters

| Name | In | Type |  | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | required | Workflow id |

##### Responses

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | Trigger disabled | [`TriggerOut`](#model-TriggerOut) |
| 401 | Authentication failed or token is invalid | — |
| 403 | Permission restriction | — |
| 404 | Workflow not found | — |
| 422 | Validation Error | [`HTTPValidationError`](#model-HTTPValidationError) |

##### Example request

```
curl -s -X DELETE "https://api.sheetgo.com/rest/beta/workflows/ID/trigger" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
```

In the API's own docs: <https://api.sheetgo.com/rest/reference/triggers#delete-rest-beta-workflows-id-trigger>

## Models used on this page

Every request and response model referenced above, including nested ones (6). The full catalogue is on the [Models](/api/models.md) page.

#### `FormSubmissionTriggerIn`

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

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `form_id` | string | required | Id of a form attached to this workflow. |
| `type` | `"form_submission"` | required | Selects a **form\_submission** trigger: the workflow runs each time the form named by `form_id` receives a response. |

Used by: [PUT /rest/beta/workflows/{id}/trigger](/api/triggers.md#put-rest-beta-workflows-id-trigger)

#### `HTTPValidationError`

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `detail` | array of [`ValidationError`](#model-ValidationError) | optional |  |

Used by: [GET /rest/beta/workflows/](/api/workflows.md#get-rest-beta-workflows), [POST /rest/beta/workflows/](/api/workflows.md#post-rest-beta-workflows), [POST /rest/beta/workflows/run/{id}](/api/workflows.md#post-rest-beta-workflows-run-id), [GET /rest/beta/workflows/{id}](/api/workflows.md#get-rest-beta-workflows-id), [PATCH /rest/beta/workflows/{id}](/api/workflows.md#patch-rest-beta-workflows-id), [DELETE /rest/beta/workflows/{id}](/api/workflows.md#delete-rest-beta-workflows-id), [GET /rest/beta/workflows/{id}/collaborators](/api/workflows.md#get-rest-beta-workflows-id-collaborators), [POST /rest/beta/workflows/{id}/collaborators](/api/workflows.md#post-rest-beta-workflows-id-collaborators), [DELETE /rest/beta/workflows/{id}/collaborators](/api/workflows.md#delete-rest-beta-workflows-id-collaborators), [PATCH /rest/beta/workflows/{id}/collaborators/{email}](/api/workflows.md#patch-rest-beta-workflows-id-collaborators-email), [DELETE /rest/beta/workflows/{id}/collaborators/{email}](/api/workflows.md#delete-rest-beta-workflows-id-collaborators-email), [GET /rest/beta/workflows/{id}/destinations](/api/workflows.md#get-rest-beta-workflows-id-destinations), [GET /rest/beta/workflows/{id}/files](/api/workflows.md#get-rest-beta-workflows-id-files), [GET /rest/beta/workflows/{id}/general-access](/api/workflows.md#get-rest-beta-workflows-id-general-access), [PUT /rest/beta/workflows/{id}/general-access](/api/workflows.md#put-rest-beta-workflows-id-general-access), [DELETE /rest/beta/workflows/{id}/general-access](/api/workflows.md#delete-rest-beta-workflows-id-general-access), [POST /rest/beta/workflows/{id}/leave](/api/workflows.md#post-rest-beta-workflows-id-leave), [POST /rest/beta/workflows/{id}/request-access](/api/workflows.md#post-rest-beta-workflows-id-request-access), [GET /rest/beta/workflows/{id}/run](/api/workflows.md#get-rest-beta-workflows-id-run), [POST /rest/beta/workflows/{id}/run](/api/workflows.md#post-rest-beta-workflows-id-run), [GET /rest/beta/workflows/{id}/sources](/api/workflows.md#get-rest-beta-workflows-id-sources), [GET /rest/beta/automations/](/api/automations.md#get-rest-beta-automations), [POST /rest/beta/automations/run/{id}](/api/automations.md#post-rest-beta-automations-run-id), [GET /rest/beta/automations/{id}](/api/automations.md#get-rest-beta-automations-id), [DELETE /rest/beta/automations/{id}](/api/automations.md#delete-rest-beta-automations-id), [GET /rest/beta/automations/{id}/destinations](/api/automations.md#get-rest-beta-automations-id-destinations), [GET /rest/beta/automations/{id}/files](/api/automations.md#get-rest-beta-automations-id-files), [GET /rest/beta/automations/{id}/run](/api/automations.md#get-rest-beta-automations-id-run), [POST /rest/beta/automations/{id}/run](/api/automations.md#post-rest-beta-automations-id-run), [GET /rest/beta/automations/{id}/sources](/api/automations.md#get-rest-beta-automations-id-sources), [GET /rest/beta/workflows/{id}/trigger](/api/triggers.md#get-rest-beta-workflows-id-trigger), [DELETE /rest/beta/workflows/{id}/trigger](/api/triggers.md#delete-rest-beta-workflows-id-trigger), [GET /rest/beta/workflows/{id}/dashboard](/api/dashboards.md#get-rest-beta-workflows-id-dashboard), [DELETE /rest/beta/workflows/{id}/dashboard/elements/{element\_id}](/api/dashboards.md#delete-rest-beta-workflows-id-dashboard-elements-element-id), [GET /rest/beta/workflows/{id}/dashboard/elements/{element\_id}/data](/api/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data), [PUT /rest/beta/workflows/{id}/dashboard/publish](/api/dashboards.md#put-rest-beta-workflows-id-dashboard-publish), [GET /rest/beta/workflows/{workflow\_id}/forms/](/api/forms.md#get-rest-beta-workflows-workflow-id-forms), [POST /rest/beta/workflows/{workflow\_id}/forms/](/api/forms.md#post-rest-beta-workflows-workflow-id-forms), [GET /rest/beta/workflows/{workflow\_id}/forms/{form\_id}](/api/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id), [PATCH /rest/beta/workflows/{workflow\_id}/forms/{form\_id}](/api/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id), [DELETE /rest/beta/workflows/{workflow\_id}/forms/{form\_id}](/api/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id), [GET /rest/beta/workflows/{workflow\_id}/forms/{form\_id}/responses](/api/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses), [HEAD /rest/beta/workflows/{workflow\_id}/forms/{form\_id}/responses](/api/forms.md#head-rest-beta-workflows-workflow-id-forms-form-id-responses), [GET /rest/beta/automations/{automation\_id}/webhook](/api/webhook.md#get-rest-beta-automations-automation-id-webhook), [GET /rest/beta/workflows/{workflow\_id}/webhooks](/api/webhook.md#get-rest-beta-workflows-workflow-id-webhooks), [GET /rest/beta/api-destination/{public\_id}](/api/api-destination.md#get-rest-beta-api-destination-public-id), [HEAD /rest/beta/api-destination/{public\_id}](/api/api-destination.md#head-rest-beta-api-destination-public-id), [GET /rest/beta/integrations/{provider}/options](/api/integrations.md#get-rest-beta-integrations-provider-options), [GET /rest/beta/outlook/messages](/api/outlook.md#get-rest-beta-outlook-messages), [POST /rest/beta/outlook/messages/batch](/api/outlook.md#post-rest-beta-outlook-messages-batch), [GET /rest/beta/outlook/messages/{message\_id}](/api/outlook.md#get-rest-beta-outlook-messages-message-id), [GET /rest/beta/outlook/messages/{message\_id}/attachments/{attachment\_id}](/api/outlook.md#get-rest-beta-outlook-messages-message-id-attachments-attachment-id), [POST /rest/beta/outlook/send](/api/outlook.md#post-rest-beta-outlook-send), [GET /rest/beta/gmail/messages](/api/gmail.md#get-rest-beta-gmail-messages), [POST /rest/beta/gmail/messages/batch](/api/gmail.md#post-rest-beta-gmail-messages-batch), [GET /rest/beta/gmail/messages/{message\_id}](/api/gmail.md#get-rest-beta-gmail-messages-message-id), [GET /rest/beta/gmail/messages/{message\_id}/attachments/{attachment\_id}](/api/gmail.md#get-rest-beta-gmail-messages-message-id-attachments-attachment-id), [POST /rest/beta/gmail/send](/api/gmail.md#post-rest-beta-gmail-send), [GET /rest/beta/files/{provider}](/api/files.md#get-rest-beta-files-provider), [GET /rest/beta/files/{provider}/roots](/api/files.md#get-rest-beta-files-provider-roots), [GET /rest/beta/files/{provider}/search](/api/files.md#get-rest-beta-files-provider-search), [GET /rest/beta/files/{provider}/{file\_id}](/api/files.md#get-rest-beta-files-provider-file-id), [GET /rest/beta/bigquery/projects](/api/bigquery.md#get-rest-beta-bigquery-projects), [GET /rest/beta/bigquery/projects/{project}/datasets](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets), [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables), [GET /rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table), [POST /rest/beta/bigquery/projects/{project}/validate-query](/api/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query), [POST /rest/auth/refresh](/api/auth.md#post-rest-auth-refresh), [POST /rest/auth/token](/api/auth.md#post-rest-auth-token)

#### `TimeTriggerIn`

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

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `cron` | string | nullable | Power-user escape hatch. Mutually exclusive with friendly fields. |
| `day_of_month` | integer or string | nullable | monthly only: 1..31 or 'last' |
| `every` | integer | nullable | minutes: 15|30 ; hourly: 1|2|4|6|8|12 |
| `frequency` | one of `"minutes"`, `"hourly"`, `"daily"`, `"weekly"`, `"monthly"` | nullable | Schedule frequency |
| `time` | string | nullable | HH:MM for daily/weekly/monthly. Minute is coerced to :00. |
| `timezone` | string | nullable | IANA timezone; defaults to the workflow's current timezone. |
| `type` | `"time"` | required | Selects a **time** trigger: the workflow runs on a schedule. Set either the friendly fields below or `cron`, not both. |
| `weekday` | string or array of string | nullable | weekly only: a day name (sunday..saturday) or a list of names |

Used by: [PUT /rest/beta/workflows/{id}/trigger](/api/triggers.md#put-rest-beta-workflows-id-trigger)

#### `TriggerOut`

Read model echoed by GET and returned by PUT.

Only the fields belonging to the active trigger `type` are populated; all
others are `null`. When `active` is false, `type` is `null` too and every
other field is empty — that is the shape of a workflow with no trigger.

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `active` | boolean | optional | Whether a trigger is currently set and enabled. When false, every other field is null and the workflow runs only on demand. Default: `false` |
| `after_workflow_id` | string | nullable | workflow\_finished triggers only: the id of the parent workflow whose completion starts this one. |
| `cron` | string | nullable | time triggers only: the effective five-field cron expression the schedule resolved to. Always present for a time trigger, whether it was created from `cron` or from the friendly fields. |
| `day_of_month` | integer or string | nullable | time triggers, monthly only: the day of the month (1..31), or the string `last` for the final day of each month. |
| `every` | integer | nullable | time triggers only: the interval within `frequency` — minutes: 15 or 30; hourly: 1, 2, 4, 6, 8 or 12. |
| `form_id` | string | nullable | form\_submission triggers only: the id of the form whose new responses start this workflow. |
| `frequency` | string | nullable | time triggers only: `minutes`, `hourly`, `daily`, `weekly` or `monthly`. Null when the trigger was set with a raw `cron`. |
| `time` | string | nullable | time triggers only: `HH:MM` in `timezone`, for daily, weekly and monthly frequencies. The minute is always `:00`. |
| `timezone` | string | nullable | time triggers only: the IANA timezone the schedule is evaluated in (for example `Europe/Madrid`). |
| `type` | one of `"time"`, `"workflow_finished"`, `"form_submission"` | nullable | Which kind of trigger is set, and therefore which fields below are populated. Null when `active` is false. |
| `weekday` | string or array of string | nullable | time triggers, weekly only: a day name (`sunday`..`saturday`), or a list of them when the schedule repeats on several days. |

Used by: [GET /rest/beta/workflows/{id}/trigger](/api/triggers.md#get-rest-beta-workflows-id-trigger), [PUT /rest/beta/workflows/{id}/trigger](/api/triggers.md#put-rest-beta-workflows-id-trigger), [DELETE /rest/beta/workflows/{id}/trigger](/api/triggers.md#delete-rest-beta-workflows-id-trigger)

#### `ValidationError`

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `loc` | array of string or integer | required |  |
| `msg` | string | required |  |
| `type` | string | required |  |

#### `WorkflowFinishedTriggerIn`

Run this workflow when another workflow finishes.

| Field | Type |  | Description |
| --- | --- | --- | --- |
| `after_workflow_id` | string | required | Parent workflow whose completion triggers this one (named 'after\_' to distinguish it from the path {id}). |
| `type` | `"workflow_finished"` | required | Selects a **workflow\_finished** trigger: the workflow runs when the workflow named by `after_workflow_id` completes. |

Used by: [PUT /rest/beta/workflows/{id}/trigger](/api/triggers.md#put-rest-beta-workflows-id-trigger)
