# List sync triggers

> List the triggers of a sync with their stored actions. A trigger whose stored action no longer exists is left out.

Source: https://docs.stacksync.com/api-reference/syncs/triggers/list_sync_triggers

`GET https://api.stacksync.com/v1/workspaces/{workspace_id}/bases/{base_id}/triggers`

- Operation: `list_sync_triggers`
- Resource: Sync triggers
- Access: read-only

## Authentication

- `Authorization: Bearer <key>`: A workspace API key (workspace_…, created by a workspace owner under Workspace settings > Stacksync API) acts with editor rights on that workspace only; a user API key (user_…, created under Profile > Stacksync API) acts as that user in every workspace they belong to. POST, PUT and PATCH requests must send Content-Type: application/json. Every authentication failure answers 403.

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `workspace_id` | integer | Yes | The workspace the resources belong to |
| `base_id` | string (uuid) | Yes | The sync (a sync is called a base in these paths) |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `region` | string (besg \| usnv) | Yes | Data region of the sync |

## Returns

### 200 The triggers of the sync

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `triggers` | array of object (SyncTrigger) | Yes | The triggers whose action still exists |
| `triggers[].id` | string (uuid) | Yes | The trigger |
| `triggers[].name` | string | Yes | The name of the trigger |
| `triggers[].trigger_type` | string (webhook \| db_query \| queue) | Yes | `webhook` calls a URL, `db_query` runs SQL on a database connection, `queue` adds a message to a queue |
| `triggers[].table` | string | Yes | The table whose changes fire the trigger, by its name in the `column_names_from_app` app (its id is accepted) |
| `triggers[].column_names_from_app` | string | Yes | The app whose column names the trigger uses: its app type as shown in Stacksync, or its `app_id` when both apps have the same type |
| `triggers[].operations` | array of string | Yes | The changes that fire the trigger, each once: `created`, `updated`, `deleted` |
| `triggers[].source` | array of string, at least 1 item, at most 2 items | Yes | The app or apps whose changes fire the trigger, by app type (or `app_id` when both apps have the same type); the sync must read changes from that app's table |
| `triggers[].columns_to_ignore` | array of string | Yes | Columns of the table left out of the record data the action receives (case sensitive, must exist in the table) |
| `triggers[].filters` | object (TriggerFilterGroup) | Yes | Conditions combined with `and` or `or`; a group may hold other groups. An empty `and` group matches every change |
| `triggers[].filters.type` | string (group) | Yes | `group` |
| `triggers[].filters.operator` | string (and \| or) | Yes | How the conditions combine |
| `triggers[].filters.conditions` | array of object (TriggerFilterCondition) \| object (TriggerFilterGroup) | Yes | A list (never a single object): each entry is a condition (TriggerFilterCondition) or a nested group (TriggerFilterGroup) |
| `triggers[].is_paused` | boolean | Yes | Whether the trigger is paused (a paused trigger never runs) |
| `triggers[].action` | object (TriggerStoredAction) | Yes | The stored action of a trigger, as the platform runs it |
| `triggers[].action.body` | string | Yes | `webhook`: the cURL parsed as JSON text (`url`, `method`, `headers`, `data`); `db_query`: the SQL; `queue`: the message |
| `triggers[].action.task_type` | string (http_request \| db_query \| queue) | Yes | `http_request` (webhook), `db_query` or `queue` |
| `triggers[].action.options` | object | No | The stored options of the action: `base_id`, `trigger_id`, and for `db_query` the connection and `app_type`, for `queue` the `workflow_app_queue_id` |
| `triggers[].action.created_time` | string | No | When the action was stored |
| `triggers[].action.task_name` | string \| null | No | The stored name of the action, when set |
| `triggers[].action.workspace_id` | integer \| null | No | The workspace, when stored |
| `triggers[].action.base_name` | string | No | The name of the sync |
| `triggers[].action.connection` | object (TriggerStoredConnection) | No | The connection a `db_query` trigger runs on |
| `triggers[].action.connection.connection_id` | string (uuid) | Yes | The connection |
| `triggers[].action.connection.connection_name` | string | Yes | Its name |
| `triggers[].action.connection.app_type` | string | Yes | Its app, as shown in Stacksync |
| `triggers[].action.queue_id` | string | No | `queue` triggers: the queue, when the stored action carries it |
| `triggers[].action.task_metadata_id` | string (uuid) | No | The id of the stored action; answered by the single read only |
| `msg` | string | Yes | `Triggers retrieved successfully` |

## Example request

```bash
curl -X GET "https://api.stacksync.com/v1/workspaces/{workspace_id}/bases/{base_id}/triggers?region=besg" \
  -H "Authorization: Bearer $STACKSYNC_API_KEY"
```

## Example response (200)

```json
{
  "triggers": [
    {
      "id": "0d1e2f3a-4b5c-4d6e-9f70-1a2b3c4d5e6f",
      "name": "Notify on new customer accounts",
      "trigger_type": "webhook",
      "table": "Account",
      "column_names_from_app": "salesforce",
      "operations": [
        "created",
        "updated"
      ],
      "source": [
        "salesforce"
      ],
      "columns_to_ignore": [
        "Website"
      ],
      "filters": {
        "type": "group",
        "operator": "and",
        "conditions": [
          {
            "type": "condition",
            "column": "Type",
            "operator": "eq",
            "value": "Customer"
          },
          {
            "type": "group",
            "operator": "or",
            "conditions": [
              {
                "type": "condition",
                "column": "Rating",
                "operator": "eq",
                "value": "Hot"
              },
              {
                "type": "condition",
                "column": "Website",
                "operator": "has_ch",
                "value": ""
              }
            ]
          }
        ]
      },
      "is_paused": false,
      "action": {
        "body": "{\"url\": \"https://hooks.example.com/accounts\", \"method\": \"POST\", \"headers\": [\"Content-Type: application/json\"], \"data\": {\"record\": \"<<data>>\", \"changes\": \"<<changes>>\"}}",
        "task_type": "http_request",
        "options": {
          "base_id": "3f6c1d2e-8a4b-4c7d-9e21-5b6f7a8c9d01",
          "trigger_id": "0d1e2f3a-4b5c-4d6e-9f70-1a2b3c4d5e6f"
        },
        "created_time": "Thu, 01 Oct 2026 09:12:44 GMT",
        "task_name": null,
        "workspace_id": 2790,
        "base_name": "Salesforce accounts to Postgres"
      }
    }
  ],
  "msg": "Triggers retrieved successfully"
}
```

## Errors

| Status | Meaning | Body |
| --- | --- | --- |
| 400 | The `region` is missing or not one of besg, usnv; `base_id` is not a UUID; no sync with this id exists in the workspace (`Base not found`, answered with 400) | `{ "error": string }` |
| 403 | Forbidden: invalid API key, API key of another workspace, insufficient scope, workspace unavailable, or a non-GET request without `Content-Type: application/json` | `{ "error": string }` |

## Related

- [API Reference overview](https://docs.stacksync.com/api-reference): base URLs, regions, pagination, idempotency and errors
- [Authentication](https://docs.stacksync.com/api-reference/authentication): API keys and the 403 answers
- OpenAPI document: https://docs.stacksync.com/openapi.json
- [Get a sync trigger](https://docs.stacksync.com/api-reference/syncs/triggers/get_sync_trigger)
- [Create a sync trigger](https://docs.stacksync.com/api-reference/syncs/triggers/create_sync_trigger)
- [Update a sync trigger](https://docs.stacksync.com/api-reference/syncs/triggers/update_sync_trigger)
- [Pause or resume a sync trigger](https://docs.stacksync.com/api-reference/syncs/triggers/update_sync_trigger_status)
- [Delete a sync trigger](https://docs.stacksync.com/api-reference/syncs/triggers/delete_sync_trigger)