---
title: "Get triggers"
method: GET
path: "/v1/automations/triggers"
tags: ["Automations"]
---

# Get triggers

`GET /v1/automations/triggers`

Unified trigger read. Omit `triggerEventId` to LIST every trigger the brand has under `{ data, pagination }` — `provider: "brew_api"` for API-created customs and `provider: "clerk" | "stripe" | …` for integration-provisioned triggers. Pass `?triggerEventId=` to fetch ONE — returns `{ data: [row] }` (no `pagination`), `404 TRIGGER_NOT_FOUND` on an unknown / cross-brand id.

## Query parameters

- `triggerEventId` string
- `limit` integer
- `cursor` string

## Response `200`

A page of trigger rows (list mode), or `{ data: [row] }` (detail mode).

- TriggersListResponse
  - `data` object[], required
    - `triggerEventId` string, required
    - `title` string, required
    - `description` string
    - `provider` 'brew_api' | 'clerk' | 'stripe' | 'shopify' | 'stytch' | 'supabase' | 'workos' | 'revenuecat' | 'custom', required
    - `providerEventKey` string
    - `payloadSchema` object, required
      - `type` 'object', required
      - `fields` object[], required
        - `key` string, required — Variable name used by emails and automations, e.g. email or firstName. Prefer self-descriptive keys; this column has no separate description field.
        - `type` 'string' | 'int' | 'boolean', required
        - `required` boolean, required
        - `fallbackValue` union — Substitution value when the inbound payload is missing this field. Also used as the email agent's `e.g. {{ key | fallback }}` example.
          - string
          - number
          - boolean
        - `pii` 'none' | 'low' | 'high' — PII classification for redaction. "high" auto-redacts the value in execution logs and the inbound log. "low" (default when omitted) preserves the value. "none" is an explicit marker that the field is non-personal.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `pagination` object
    - `limit` integer, required
    - `cursor` string, nullable, required
    - `hasMore` boolean, required

## Other responses

- `400` — The request body or query string was invalid (unknown key, wrong type, or missing required field). Strict schemas reject unknown keys — including `brandId`, which is always resolved from the API key.
- `401` — The API key was missing, invalid, or revoked.
- `403` — The caller does not have the required `automations` permission.
- `404` — Trigger not found in the API-key brand. Cross-brand ids intentionally surface as 404 (never 403) so the API does not leak cross-brand existence.
- `429` — The request hit the rolling rate limit window.
- `500` — Unexpected internal error.

---

[API](https://skmtc.net/brew/apis/brew-public-api-v1.md) · [All operations](https://skmtc.net/brew/apis/brew-public-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/brew/brew-public-api-v1/versions/db96cfedc6c5/schema)
