> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brew.new/llms.txt
> Use this file to discover all available pages before exploring further.

# List automations

> Lists the brand’s automations under `{ data, pagination }` as LEAN rows: identity, `name`, `version`, `published`, `paused` and live-version state, `emailIds` and `updatedAt`; the graph is omitted.

**Use when** browsing automations or finding the `automationId` to update, run or inspect.

**Input** `limit` and `cursor` (an opaque native cursor).

**Returns** `200` with a page of lean automation rows.

**Errors** `400 INVALID_REQUEST` for an unknown query key or a malformed cursor.

**See also** `getAutomation` (with `include=graph,versions`), `createAutomation`, `listAutomationRuns`.



## OpenAPI

````yaml /api-reference/openapi-public-v1.yaml get /v1/automations
openapi: 3.1.0
info:
  title: Brew Public API v1
  version: 1.0.0
  description: >-
    Brew Public API v1. Generated from the app Zod contracts
    (`lib/<domain>/contracts.ts`): this document is the contract, and every
    operation documents exactly the error codes it can return.


    - Base URL `https://brew.new/api`; every path starts with `/v1`; JSON in and
    out. Request bodies and query strings are strict: an unknown key is `400
    INVALID_REQUEST` and `error.param` names it.

    - Identity is always in the path. `GET /v1/<collection>` lists (`{ data,
    pagination: { limit, cursor, hasMore } }`; page until `cursor` is `null`),
    and `GET /v1/<collection>/{id}` returns the bare resource, the same object a
    write returns. `?include=` expands relations on a detail read only, and is
    `400` on a list. There is no `?<idKey>=` read anywhere.

    - Writes carry identity in the path and return the bare resource: `POST
    /v1/<collection>` creates (`201`, or `202` when work continues
    asynchronously), `PATCH` and `DELETE /v1/<collection>/{id}` update or delete
    (`DELETE` answers `{ <idField>, deleted }` and is idempotent). Lifecycle
    state changes such as publishing ride `PATCH` as attributes. Two writes
    report more than the row and say so in their shape: `POST` and `PATCH
    /v1/contacts` are upserts that answer `{ contact, created | updated, … }`
    because whether a row was created, which fields changed, and which field
    definitions were minted are facts about the write, not about the contact.

    - Non-CRUD operations are explicit action sub-paths, for example `POST
    /v1/automations/{automationId}/test`, `POST /v1/domains/{domainId}/verify`,
    `POST /v1/sends/{sendId}/cancel` and `POST
    /v1/automations/triggers/{triggerEventId}/fire`.

    - Every resource has one root. Sends read and write at `/v1/sends`, fired
    triggers at `/v1/automations/trigger-instances`, and `/v1/analytics/*` holds
    only reports (aggregates over a window). Every endpoint answers in the same
    envelopes, with no exceptions.

    - Field names are camelCase; enum values are lowercase snake_case;
    timestamps are ISO 8601 UTC strings. Identifiers are opaque strings of at
    most 64 characters (`triggerEventId` up to 256); never parse a prefix.

    - Everything that runs shares one status vocabulary: `queued`, `scheduled`,
    `running`, `paused`, `completed`, `partially_completed`, `failed`,
    `canceled`. It covers sends, automation runs, manual audience runs, audience
    builds and inbox placement tests, so one status switch reads them all. A
    step inside a run is `running`, `completed`, `failed` or `skipped`.

    - Every error on every endpoint is `{ error: { code, type, message,
    suggestion, docs, param?, retryAfter?, details? } }`. Branch on `code`: the
    closed list is the `ApiErrorCode` component and every operation documents
    exactly the codes it can return. Non-fatal caveats arrive as `warnings: [{
    code, message, field? }]` on `2xx` bodies.

    - A credential is brand-scoped (the brand is implicit; send nothing) or
    organization-scoped (name the brand with the `X-Brand-Id` header on
    brand-scoped operations, else `400 BRAND_ID_REQUIRED`; there is no default
    brand). Only `POST /v1/api-keys` carries a `brandId` field, and only a
    signed-in organization admin session may call `/v1/api-keys`. A brand
    outside your reach surfaces as `404`, never `403`.

    - Send `Idempotency-Key` (up to 100 characters) on any POST you might
    repeat: the same key and body replays the original response for 24 hours;
    the same key with a different body is `409 IDEMPOTENCY_CONFLICT`. Rate
    limits are per credential and named policy (`X-RateLimit-*` headers; `429`
    carries `Retry-After`). Credit-metered operations advertise `402` and carry
    `x-brew-credited: true` in the spec.

    - Discovery without a key: `GET /v1/help` (JSON catalog with scopes, credits
    and rate limits per operation), `GET /v1/llms.txt` (this guide) and `GET
    /v1/health`. The OpenAPI document is served at `/openapi.json`.
  contact:
    name: Brew Support
    url: https://docs.brew.new
    email: support@brew.new
servers:
  - url: https://brew.new/api
    description: Production
  - url: http://localhost:3000/api
    description: Local development
security:
  - bearerAuth: []
  - apiKeyAuth: []
tags:
  - name: Emails
    description: >-
      Email designs and sending. Generate a design with the Brew email agent,
      edit, version, restore — then send it: `POST /v1/sends` delivers a design
      to a target (a saved audience, an inline list, or a single address) via a
      verified domain, and `POST /v1/sends` with `test: true` fires a one-off
      test. Sending is not campaign-specific. Send reads live under Sends
      (`/v1/sends`).
  - name: Sends
    description: >-
      The unit of delivery and analytics. `POST /v1/sends` delivers a design to
      a target; `GET /v1/sends` lists campaign sends (with lifetime stats) or,
      with a join filter, one automation’s per-recipient deliveries; `GET
      /v1/sends/{sendId}` reads one send and its events. Cancel, pause and
      resume are action sub-paths.
  - name: Brands
    description: >-
      Brand lifecycle for ORGANIZATION-scoped credentials: list the brands a
      credential can reach, read one, and create a new one (extraction runs
      asynchronously — poll `GET /v1/brands/{brandId}` until `status:
      completed`). These endpoints act on the organization, so they take no
      `X-Brand-Id`.
  - name: Analytics
    description: >-
      Read-only cross-resource reports: the brand overview, windowed automation
      performance and the unified event feed. Send rows (with lifetime stats)
      live at `/v1/sends`; fired triggers at
      `/v1/automations/trigger-instances`.
  - name: Automations
    description: >-
      Automation graphs — deterministic create from explicit `nodes` +
      `connections`, update, version, publish / unpublish, test. Includes
      trigger event definitions + the fire endpoint (`/v1/automations/triggers`)
      and run history (`/v1/automations/runs`).
  - name: Contacts
    description: Create, search, patch, and delete contacts. Email is the primary key.
  - name: Contact Fields
    description: List, create, and delete custom contact field definitions.
  - name: Audiences
    description: Saved contact filter sets — a recipient target for sends.
  - name: Domains
    description: 'Sending domains: add, read DNS records, verify, configure sender defaults.'
  - name: Templates
    description: Public template gallery (read-only) usable as generation references.
  - name: Brand
    description: The single brand bound to the API key.
  - name: Chats
    description: >-
      Read a brand-scoped digest of a Brew chat — referenced
      emails/automations/triggers + a trimmed transcript — so an external agent
      can resume the conversation.
  - name: Integrations
    description: >-
      Brand-scoped catalog of connectable providers plus which ones are already
      connected. Connect itself stays in Settings (`/integrations/{provider}`).
  - name: API Keys
    description: >-
      Mint, list, and revoke API keys through a signed-in Clerk session whose
      active organization role is exactly `org:admin`. API-key and OAuth actors
      receive `403`. `POST` body `brandId` is the new key's binding (the only v1
      body field named `brandId`).
  - name: Meta
    description: >-
      Public discovery surface (no auth): the machine-readable API catalog
      (`/v1/help`).
paths:
  /v1/automations:
    get:
      tags:
        - Automations
      summary: List automations
      description: >-
        Lists the brand’s automations under `{ data, pagination }` as LEAN rows:
        identity, `name`, `version`, `published`, `paused` and live-version
        state, `emailIds` and `updatedAt`; the graph is omitted.


        **Use when** browsing automations or finding the `automationId` to
        update, run or inspect.


        **Input** `limit` and `cursor` (an opaque native cursor).


        **Returns** `200` with a page of lean automation rows.


        **Errors** `400 INVALID_REQUEST` for an unknown query key or a malformed
        cursor.


        **See also** `getAutomation` (with `include=graph,versions`),
        `createAutomation`, `listAutomationRuns`.
      operationId: listAutomations
      parameters:
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            description: Page size (1-100). Defaults to 100.
            example: 50
          required: false
          description: Page size (1-100). Defaults to 100.
          name: limit
          in: query
          example: 50
        - schema:
            type: string
            minLength: 1
            maxLength: 512
          required: false
          name: cursor
          in: query
        - name: X-Brand-Id
          in: header
          required: false
          description: >-
            The brand this request acts on. REQUIRED for organization-scoped
            credentials (otherwise `400 BRAND_ID_REQUIRED` — there is no default
            brand); list ids with `GET /v1/brands`. Brand-scoped credentials may
            omit it, and sending a different brand returns `403
            BRAND_SCOPE_MISMATCH`. A brand outside your organization returns
            `404 BRAND_NOT_FOUND`.
          schema:
            type: string
            minLength: 1
            maxLength: 64
          example: kx7b3s7fapqz8mjm12ekz1kxdx87yceg
      responses:
        '200':
          description: A page of lean automation rows.
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
            X-RateLimit-Limit:
              schema:
                type: integer
                description: Requests allowed in the current rolling rate limit window.
                example: 100
              required: true
              description: Requests allowed in the current rolling rate limit window.
            X-RateLimit-Remaining:
              schema:
                type: integer
                description: Requests remaining in the current rolling rate limit window.
                example: 99
              required: true
              description: Requests remaining in the current rolling rate limit window.
            X-RateLimit-Reset:
              schema:
                type: integer
                description: >-
                  Unix timestamp in seconds for when the rolling window fully
                  resets.
                example: 1712592360
              required: true
              description: >-
                Unix timestamp in seconds for when the rolling window fully
                resets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationsListResponse'
              example:
                data:
                  - automationId: M3nRk8LqW2xT5vBp9YcZd
                    automationVersionId: Rt4Vw1KyPb6HZq7Lm2Nx8
                    triggerEventId: user_signed_up
                    name: Welcome flow
                    version: latest
                    published: true
                    emailIds:
                      - V1StGXR8_Z5jdHi6B-myT
                    updatedAt: '2026-04-08T12:00:00.000Z'
                pagination:
                  limit: 100
                  cursor: null
                  hasMore: false
        '400':
          description: >-
            `BRAND_ID_REQUIRED`: An organization-scoped credential called a
            brand-scoped operation without naming the brand.


            `INVALID_REQUEST`: The body or query failed validation: an unknown
            key, a wrong type, or a missing required field. `param` names the
            offender.
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                brandIdRequired:
                  summary: BRAND_ID_REQUIRED
                  value:
                    error:
                      code: BRAND_ID_REQUIRED
                      type: invalid_request
                      message: >-
                        An organization-scoped credential called a brand-scoped
                        operation without naming the brand.
                      suggestion: >-
                        List brands with GET /v1/brands, then name one with the
                        X-Brand-Id header. There is no default brand.
                      docs: https://docs.brew.new/api-reference/api/authentication
                invalidRequest:
                  summary: INVALID_REQUEST
                  value:
                    error:
                      code: INVALID_REQUEST
                      type: invalid_request
                      message: >-
                        The body or query failed validation: an unknown key, a
                        wrong type, or a missing required field. `param` names
                        the offender.
                      suggestion: Fix the field reported in `param` and retry.
                      docs: https://docs.brew.new/api-reference/api/errors
        '401':
          description: >-
            `API_KEY_REVOKED`: The API key was revoked.


            `AUTHENTICATION_REQUIRED`: No API key or session accompanied the
            request.


            `INVALID_API_KEY`: The API key is malformed or unknown.
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                apiKeyRevoked:
                  summary: API_KEY_REVOKED
                  value:
                    error:
                      code: API_KEY_REVOKED
                      type: authentication_error
                      message: The API key was revoked.
                      suggestion: Create a new active API key and retry.
                      docs: https://docs.brew.new/api-reference/api/authentication
                authenticationRequired:
                  summary: AUTHENTICATION_REQUIRED
                  value:
                    error:
                      code: AUTHENTICATION_REQUIRED
                      type: authentication_error
                      message: No API key or session accompanied the request.
                      suggestion: >-
                        Provide a valid API key or sign in with an organization
                        session.
                      docs: https://docs.brew.new/api-reference/api/authentication
                invalidApiKey:
                  summary: INVALID_API_KEY
                  value:
                    error:
                      code: INVALID_API_KEY
                      type: authentication_error
                      message: The API key is malformed or unknown.
                      suggestion: >-
                        Check the API key format and retry with a valid active
                        key.
                      docs: https://docs.brew.new/api-reference/api/authentication
        '403':
          description: >-
            `ACCOUNT_SUSPENDED`: The organization behind the credential is
            suspended.


            `BRAND_SCOPE_MISMATCH`: A brand-scoped credential named a brand
            other than the one it is bound to.


            `INSUFFICIENT_PERMISSIONS`: The credential lacks the permission
            scope the operation needs.


            `INSUFFICIENT_ROLE`: The caller lacks the access the operation
            needs: `param` names `member` (access to the brand) or `org_admin`
            (the organization role).
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                accountSuspended:
                  summary: ACCOUNT_SUSPENDED
                  value:
                    error:
                      code: ACCOUNT_SUSPENDED
                      type: authorization_error
                      message: The organization behind the credential is suspended.
                      suggestion: >-
                        The organization behind this credential is suspended.
                        Contact support@brew.new; do not retry.
                      docs: https://docs.brew.new/api-reference/api/authentication
                brandScopeMismatch:
                  summary: BRAND_SCOPE_MISMATCH
                  value:
                    error:
                      code: BRAND_SCOPE_MISMATCH
                      type: authorization_error
                      message: >-
                        A brand-scoped credential named a brand other than the
                        one it is bound to.
                      suggestion: >-
                        Omit the brand to use the one this credential is bound
                        to, or use an organization-scoped credential to reach
                        other brands.
                      docs: https://docs.brew.new/api-reference/api/authentication
                insufficientPermissions:
                  summary: INSUFFICIENT_PERMISSIONS
                  value:
                    error:
                      code: INSUFFICIENT_PERMISSIONS
                      type: authorization_error
                      message: >-
                        The credential lacks the permission scope the operation
                        needs.
                      suggestion: Use an API key or session with the required permission.
                      docs: https://docs.brew.new/api-reference/api/authentication
                insufficientRole:
                  summary: INSUFFICIENT_ROLE
                  value:
                    error:
                      code: INSUFFICIENT_ROLE
                      type: authorization_error
                      message: >-
                        The caller lacks the access the operation needs: `param`
                        names `member` (access to the brand) or `org_admin` (the
                        organization role).
                      suggestion: >-
                        Ask an organization admin to run this, to add you to the
                        brand, or to make you an admin.
                      docs: https://docs.brew.new/api-reference/api/authentication
        '404':
          description: >-
            `BRAND_NOT_FOUND`: The named or bound brand does not exist in this
            organization (unknown, deleting, or another organization).
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                brandNotFound:
                  summary: BRAND_NOT_FOUND
                  value:
                    error:
                      code: BRAND_NOT_FOUND
                      type: not_found
                      message: >-
                        The named or bound brand does not exist in this
                        organization (unknown, deleting, or another
                        organization).
                      suggestion: >-
                        List the brands this credential can reach with GET
                        /v1/brands.
                      docs: https://docs.brew.new/api-reference/api/errors
        '429':
          description: >-
            `RATE_LIMITED`: The credential exhausted the rolling window for this
            route policy; Retry-After says when it reopens.
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
            X-RateLimit-Limit:
              schema:
                type: integer
                description: Requests allowed in the current rolling rate limit window.
                example: 100
              required: true
              description: Requests allowed in the current rolling rate limit window.
            X-RateLimit-Remaining:
              schema:
                type: integer
                description: Requests remaining in the current rolling rate limit window.
                example: 99
              required: true
              description: Requests remaining in the current rolling rate limit window.
            X-RateLimit-Reset:
              schema:
                type: integer
                description: >-
                  Unix timestamp in seconds for when the rolling window fully
                  resets.
                example: 1712592360
              required: true
              description: >-
                Unix timestamp in seconds for when the rolling window fully
                resets.
            Retry-After:
              schema:
                type: integer
                description: Seconds to wait before retrying the request.
                example: 42
              required: true
              description: Seconds to wait before retrying the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                rateLimited:
                  summary: RATE_LIMITED
                  value:
                    error:
                      code: RATE_LIMITED
                      type: rate_limit
                      message: >-
                        The credential exhausted the rolling window for this
                        route policy; Retry-After says when it reopens.
                      suggestion: >-
                        Wait for the retry window before sending another
                        request.
                      docs: https://docs.brew.new/api-reference/api/rate-limits
                      retryAfter: 42
        '500':
          description: >-
            `INTERNAL_ERROR`: An unexpected failure; the x-request-id header
            identifies it.
          headers:
            x-request-id:
              schema:
                type: string
                description: >-
                  Unique request identifier. Share this with support when
                  debugging a request.
                example: req_8cac13fd94e6420cacdd75a1aa403a28
              required: true
              description: >-
                Unique request identifier. Share this with support when
                debugging a request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
              examples:
                internalError:
                  summary: INTERNAL_ERROR
                  value:
                    error:
                      code: INTERNAL_ERROR
                      type: internal_error
                      message: >-
                        An unexpected failure; the x-request-id header
                        identifies it.
                      suggestion: >-
                        Retry the request. If it keeps failing, contact support
                        with the x-request-id header.
                      docs: https://docs.brew.new/api-reference/api/errors
components:
  schemas:
    AutomationsListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              automationId:
                type: string
                minLength: 1
                maxLength: 64
              automationVersionId:
                type: string
                minLength: 1
                maxLength: 64
              triggerEventId:
                type: string
                minLength: 1
                maxLength: 256
              name:
                type: string
                minLength: 1
                maxLength: 120
              description:
                type: string
                maxLength: 2000
              version:
                anyOf:
                  - type: integer
                    minimum: 0
                  - type: string
                    enum:
                      - latest
              published:
                type: boolean
              isLive:
                type: boolean
              liveVersion:
                anyOf:
                  - type: integer
                    minimum: 0
                  - type: string
                    enum:
                      - latest
              liveAutomationVersionId:
                type: string
                minLength: 1
                maxLength: 64
              warnings:
                type: array
                items:
                  $ref: '#/components/schemas/ApiWarning'
              paused:
                type: boolean
              pausedAt:
                type: number
              nodes:
                type: array
                items:
                  oneOf:
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        label:
                          type: string
                          minLength: 1
                        description:
                          type: string
                        type:
                          type: string
                          enum:
                            - trigger
                        config:
                          anyOf:
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                eventName:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - event
                                triggerEventId:
                                  type: string
                              additionalProperties: false
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                eventName:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - manualAudience
                                audienceId:
                                  type: string
                              required:
                                - mode
                                - audienceId
                              additionalProperties: false
                      required:
                        - id
                        - label
                        - type
                        - config
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        label:
                          type: string
                          minLength: 1
                        description:
                          type: string
                        type:
                          type: string
                          enum:
                            - sendEmail
                        config:
                          type: object
                          properties:
                            actionType:
                              type: string
                            emailId:
                              type: string
                            emailVersionId:
                              type: string
                            emailTitle:
                              type: string
                            subject:
                              type: string
                            previewText:
                              type: string
                            fromName:
                              type: string
                            fromAddress:
                              type: string
                            domainId:
                              type: string
                            replyTo:
                              type: string
                            to: {}
                            html:
                              type: string
                            variables:
                              type: object
                              additionalProperties: {}
                      required:
                        - id
                        - label
                        - type
                        - config
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        label:
                          type: string
                          minLength: 1
                        description:
                          type: string
                        type:
                          type: string
                          enum:
                            - wait
                        config:
                          type: object
                          properties:
                            actionType:
                              type: string
                            duration:
                              type: number
                            unit:
                              type: string
                              enum:
                                - ms
                                - seconds
                                - minutes
                                - hours
                                - days
                                - weeks
                          required:
                            - duration
                            - unit
                      required:
                        - id
                        - label
                        - type
                        - config
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        label:
                          type: string
                          minLength: 1
                        description:
                          type: string
                        type:
                          type: string
                          enum:
                            - filter
                        config:
                          anyOf:
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - payload
                                logicalOperator:
                                  type: string
                                  enum:
                                    - AND
                                    - OR
                                conditions:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      field:
                                        type: string
                                      operator:
                                        type: string
                                      value:
                                        anyOf:
                                          - type: string
                                          - type: number
                                          - type: boolean
                                          - type: array
                                            items:
                                              anyOf:
                                                - type: string
                                                - type: number
                                      type:
                                        type: string
                                        enum:
                                          - string
                                          - number
                                          - date
                                          - bool
                                    required:
                                      - field
                                      - operator
                              required:
                                - logicalOperator
                                - conditions
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - engagement
                                sourceNodeId:
                                  type: string
                                window:
                                  type: object
                                  properties:
                                    duration:
                                      type: number
                                    unit:
                                      type: string
                                      enum:
                                        - ms
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                        - weeks
                                  required:
                                    - duration
                                    - unit
                                branches:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      id:
                                        type: string
                                      label:
                                        type: string
                                      condition:
                                        type: object
                                        properties:
                                          kind:
                                            type: string
                                            enum:
                                              - engaged
                                              - not_engaged
                                              - clicked_link
                                          events:
                                            type: string
                                            enum:
                                              - opened
                                              - clicked
                                              - opened_or_clicked
                                          url:
                                            type: string
                                          position:
                                            type: string
                                            enum:
                                              - any
                                              - first
                                              - last
                                        required:
                                          - kind
                                    required:
                                      - id
                                      - condition
                              required:
                                - mode
                                - sourceNodeId
                                - window
                                - branches
                      required:
                        - id
                        - label
                        - type
                        - config
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        label:
                          type: string
                          minLength: 1
                        description:
                          type: string
                        type:
                          type: string
                          enum:
                            - split
                        config:
                          oneOf:
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - percentage
                                leftLabel:
                                  type: string
                                rightLabel:
                                  type: string
                                leftPercentage:
                                  type: number
                                seed:
                                  type: string
                              required:
                                - mode
                                - leftLabel
                                - rightLabel
                                - leftPercentage
                            - type: object
                              properties:
                                actionType:
                                  type: string
                                mode:
                                  type: string
                                  enum:
                                    - condition
                                leftLabel:
                                  type: string
                                rightLabel:
                                  type: string
                                logicalOperator:
                                  type: string
                                  enum:
                                    - AND
                                    - OR
                                conditions:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      field:
                                        type: string
                                      operator:
                                        type: string
                                      value:
                                        anyOf:
                                          - type: string
                                          - type: number
                                          - type: boolean
                                          - type: array
                                            items:
                                              anyOf:
                                                - type: string
                                                - type: number
                                      type:
                                        type: string
                                        enum:
                                          - string
                                          - number
                                          - date
                                          - bool
                                    required:
                                      - field
                                      - operator
                              required:
                                - mode
                                - leftLabel
                                - rightLabel
                                - logicalOperator
                                - conditions
                      required:
                        - id
                        - label
                        - type
                        - config
              connections:
                type: array
                items:
                  type: object
                  properties:
                    from:
                      type: string
                      minLength: 1
                    to:
                      type: string
                      minLength: 1
                    branch:
                      type: string
                  required:
                    - from
                    - to
              emailIds:
                type: array
                items:
                  type: string
                  minLength: 1
                  maxLength: 64
              createdBy:
                type: string
              createdAt:
                type: string
                format: date-time
              updatedAt:
                type: string
                format: date-time
              publishedAt:
                type: string
                format: date-time
              versions:
                type: array
                items:
                  type: object
                  properties:
                    version:
                      anyOf:
                        - type: integer
                          minimum: 0
                        - type: string
                          enum:
                            - latest
                    automationVersionId:
                      type: string
                      minLength: 1
                      maxLength: 64
                  required:
                    - version
                    - automationVersionId
                  additionalProperties: false
            required:
              - automationId
              - automationVersionId
              - name
              - version
              - published
              - emailIds
            additionalProperties: false
        pagination:
          type: object
          properties:
            limit:
              type: integer
              minimum: 1
              maximum: 100
            cursor:
              type:
                - string
                - 'null'
            hasMore:
              type: boolean
          required:
            - limit
            - cursor
            - hasMore
          additionalProperties: false
      required:
        - data
        - pagination
      additionalProperties: false
    ApiErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              $ref: '#/components/schemas/ApiErrorCode'
            type:
              type: string
              enum:
                - authentication_error
                - authorization_error
                - invalid_request
                - not_found
                - not_implemented
                - conflict
                - rate_limit
                - payment_required
                - service_unavailable
                - internal_error
            message:
              type: string
              minLength: 1
            param:
              type: string
              minLength: 1
            suggestion:
              type: string
              minLength: 1
            docs:
              type: string
              format: uri
            retryAfter:
              type: integer
              minimum: 0
            details:
              type: object
              additionalProperties: {}
          required:
            - code
            - type
            - message
            - suggestion
            - docs
      required:
        - error
    ApiWarning:
      type: object
      properties:
        code:
          type: string
          enum:
            - DRAFT_SAVED_NOT_LIVE
            - ENFORCEMENT_LOOSENED_WHILE_PUBLISHED
            - REQUIRED_FIELD_SATISFIED_BY_FALLBACK
            - CONSENT_RECORD_MISSING
        message:
          type: string
        field:
          type: string
      required:
        - code
        - message
      additionalProperties: false
    ApiErrorCode:
      type: string
      enum:
        - ACCOUNT_SUSPENDED
        - API_KEY_REVOKED
        - AUDIENCE_BUILD_ACTIVE
        - AUDIENCE_BUILD_ALREADY_ACTIVE
        - AUDIENCE_EDIT_CONFLICT
        - AUDIENCE_NOT_FOUND
        - AUDIENCE_RUN_NOT_FOUND
        - AUTHENTICATION_REQUIRED
        - AUTOMATION_GRAPH_INVALID
        - AUTOMATION_NOT_FOUND
        - AUTOMATION_NOT_PAUSABLE
        - AUTOMATION_NOT_PUBLISHED
        - AUTOMATION_RUN_NOT_FOUND
        - AUTOMATION_VERSION_CONFLICT
        - AUTOMATION_VERSION_NOT_FOUND
        - BATCH_TOO_LARGE
        - BRAND_DOMAIN_CONFLICT
        - BRAND_ID_REQUIRED
        - BRAND_LIMIT_REACHED
        - BRAND_NOT_FOUND
        - BRAND_NOT_READY
        - BRAND_SCOPE_MISMATCH
        - CHAT_NOT_FOUND
        - CONSENT_REQUIRED
        - CONTACT_NOT_FOUND
        - CONTENT_OPERATION_FAILED
        - CONTRACT_LOCKED_BY_PUBLISHED_AUTOMATIONS
        - CORE_FIELD_IMMUTABLE
        - DOMAIN_ALREADY_EXISTS
        - DOMAIN_CLAIMED_ELSEWHERE
        - DOMAIN_NOT_FOUND
        - DOMAIN_NOT_READY
        - DOMAIN_OTHER_BRAND
        - DOMAIN_PROVIDER_ERROR
        - DOMAIN_PURPOSE_NOT_ALLOWED
        - DOMAIN_VERIFICATION_FAILED
        - DOMAIN_VERIFIED_ELSEWHERE
        - EMAIL_GENERATION_FAILED
        - EMAIL_GROUP_NAME_CONFLICT
        - EMAIL_GROUP_NOT_FOUND
        - EMAIL_IMPORT_FAILED
        - EMAIL_IN_PROGRESS
        - EMAIL_IN_USE_BY_AUTOMATION
        - EMAIL_NOT_FOUND
        - EMAIL_NOT_READY
        - EMAIL_TEMPLATE_INVALID
        - EMAIL_VERSION_NOT_FOUND
        - EXPORT_PROVIDER_ERROR
        - EXPORT_UNSUPPORTED
        - FIELD_NOT_FOUND
        - FIELD_TYPE_MISMATCH
        - FIGMA_ACCESS_DENIED
        - FIGMA_CONVERSION_FAILED
        - FIGMA_FRAME_NOT_FOUND
        - FIGMA_NOT_CONNECTED
        - FIGMA_UNAVAILABLE
        - FIGMA_URL_INVALID
        - FLOW_NOT_FOUND
        - IDEMPOTENCY_CONFLICT
        - IDEMPOTENCY_IN_PROGRESS
        - INSUFFICIENT_CREDITS
        - INSUFFICIENT_PERMISSIONS
        - INSUFFICIENT_ROLE
        - INTEGRATION_NOT_CONNECTED
        - INTERNAL_ERROR
        - INVALID_API_KEY
        - INVALID_EMAIL
        - INVALID_PAYLOAD
        - INVALID_REQUEST
        - LIQUID_RENDER_ERROR
        - METHOD_NOT_ALLOWED
        - MISSING_EMAIL
        - NO_PUBLISHED_AUTOMATION
        - NOT_FOUND
        - NOT_IMPLEMENTED
        - ORG_SCOPE_REQUIRED
        - PAYLOAD_SCHEMA_EMAIL_REQUIRED
        - PAYLOAD_TOO_LARGE
        - PUBLISH_VALIDATION_FAILED
        - RATE_LIMITED
        - RECIPIENT_UNSUBSCRIBED
        - REFERENCE_EMAIL_NOT_FOUND
        - RUN_IN_PROGRESS
        - RUN_NOT_CANCELLABLE
        - RUN_NOT_PAUSABLE
        - RUN_NOT_PAUSED
        - RUN_NOT_RESUMABLE
        - RUN_START_FAILED
        - RUN_STOP_FAILED
        - SEND_NOT_CANCELLABLE
        - SEND_NOT_FOUND
        - SEND_NOT_PAUSABLE
        - SEND_NOT_RESUMABLE
        - SEND_QUOTA_EXCEEDED
        - SERVICE_UNAVAILABLE
        - TRIGGER_ALREADY_EXISTS
        - TRIGGER_EVENT_NOT_FOUND
        - TRIGGER_HAS_DEPENDENT_AUTOMATIONS
        - TRIGGER_IMMUTABLE
        - TRIGGER_INSTANCE_NOT_FOUND
        - TRIGGER_LIMIT_REACHED
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: 'Send your Brew API key as `Authorization: Bearer brew_xxx`.'
      x-default: Bearer brew_your_api_key
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'Send your Brew API key as `X-API-Key: brew_xxx`.'
      x-default: brew_your_api_key

````