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

# Search workflows

> List the team's outreach campaigns - multichannel LinkedIn + email sequence containers. Filter by status; q = LIKE over name + description; include records_counts for the per-campaign enrolled/active funnel, sources for audiences, published_version for the live step graph (heavy - full steps JSON). counts.groups.status rides every response; page_size:0 = status dashboard. Default UI scope excludes archived (client-side). Who is enrolled / stuck where → workflow-records search.

Contract:
- MCP tool `search_workflows`, registry package `mcp.playtables/workflows`, mount `playtables.workflows`.
- Operation `search`, response envelope `search`.
- Flags: read only.



## OpenAPI

````yaml /api-reference/playtables/openapi.yaml post /api/workflows/search
openapi: 3.0.3
info:
  title: 'GetSales public contract: gs.service.playtables'
  description: >-
    The data platform and the outreach engine: tables of people and companies,
    their enrichment columns, cells and runs, the data sources that feed them,
    sender profiles, the stoplist, the activity feed, the credit ledger, and the
    multichannel workflows with their per-person journeys and tasks.


    GENERATED. This document is projected from the Zod MCP tool registry in
    `product/mcp/gs.mcp` (one tool per public endpoint, 1:1). Do not edit it by
    hand; edit the tool definition and regenerate with `pnpm openapi:public`.


    Surface: the public `/api` contract of `gs.service.playtables`, 142
    operations. This is the only OpenAPI document the platform publishes.
    Internal (`/internal`) and health endpoints are deliberately absent: they
    are not part of any contract, they can change without notice, and the
    service source is their only description.


    Conventions:

    - Auth is a bearer JWT, optionally narrowed by the `Team-SID` header.

    - Every success body is an MCP envelope: `success: true` plus one typed
    `operation` shape (`search`, `get`, `create`, `update`, `delete`, `metrics`,
    `group_by`, `action`), and a `meta` block with `trace_id` for support.

    - Every failure is the same `McpError` envelope with a code from a fixed
    16-code taxonomy, so a client maps errors once.

    - Lists page with `page_size` (0 to 500, default 50) plus an opaque forward
    `cursor`; `page_size: 0` returns counts only.

    - On `GET` and `DELETE`, object-valued query parameters (`filter`, `sort`)
    travel as JSON text and array-valued ones repeat as `name[]=value`.

    - The MCP-only `_meta` field (usage analytics) never reaches the backend and
    is not part of this contract.
  version: '1.0'
  contact:
    name: GetSales
    url: https://getsales.io
    email: support@getsales.io
  license:
    name: Proprietary
    url: https://getsales.io/terms
servers:
  - url: https://beta.getsales.io/playtables/v1
    description: >-
      Production (the gateway path on the beta ring; the origin is provisioned
      per DEPLOY_MAP.md)
security:
  - BearerJwt: []
    TeamSid: []
tags:
  - name: activities
    description: >-
      Registry package `mcp.playtables/activities`, served on MCP mount
      `playtables.journeys`.
  - name: activity_objects
    description: >-
      Registry package `mcp.playtables/activity_objects`, served on MCP mount
      `playtables.people`.
  - name: companies
    description: >-
      Registry package `mcp.playtables/companies`, served on MCP mount
      `playtables.people`.
  - name: credit_ledger_entries
    description: >-
      Registry package `mcp.playtables/credit_ledger_entries`, served on MCP
      mount `id.billing`.
  - name: data_source_items
    description: >-
      Registry package `mcp.playtables/data_source_items`, served on MCP mount
      `playtables.sources`.
  - name: data_sources
    description: >-
      Registry package `mcp.playtables/data_sources`, served on MCP mount
      `playtables.sources`.
  - name: notes
    description: >-
      Registry package `mcp.playtables/notes`, served on MCP mount
      `playtables.pipeline`.
  - name: people
    description: >-
      Registry package `mcp.playtables/people`, served on MCP mount
      `playtables.people`.
  - name: pipeline_stages
    description: >-
      Registry package `mcp.playtables/pipeline_stages`, served on MCP mount
      `playtables.pipeline`.
  - name: plays
    description: >-
      Registry package `mcp.playtables/plays`, served on MCP mount
      `playtables.pipeline`.
  - name: playtable_field_values
    description: >-
      Registry package `mcp.playtables/playtable_field_values`, served on MCP
      mount `playtables.columns`.
  - name: playtable_fields
    description: >-
      Registry package `mcp.playtables/playtable_fields`, served on MCP mount
      `playtables.columns`.
  - name: playtable_runs
    description: >-
      Registry package `mcp.playtables/playtable_runs`, served on MCP mount
      `playtables.columns`.
  - name: playtable_views
    description: >-
      Registry package `mcp.playtables/playtable_views`, served on MCP mount
      `playtables.tables`.
  - name: playtables
    description: >-
      Registry package `mcp.playtables/playtables`, served on MCP mount
      `playtables.tables`.
  - name: result_pages
    description: >-
      Registry package `mcp.playtables/result_pages`, served on MCP mount
      `playtables.tables`.
  - name: sender_profiles
    description: >-
      Registry package `mcp.playtables/sender_profiles`, served on MCP mount
      `playtables.sources`.
  - name: stoplist_entries
    description: >-
      Registry package `mcp.playtables/stoplist_entries`, served on MCP mount
      `playtables.stoplist`.
  - name: tags
    description: >-
      Registry package `mcp.playtables/tags`, served on MCP mount
      `playtables.pipeline`.
  - name: workflow_attachments
    description: >-
      Registry package `mcp.playtables/workflow_attachments`, served on MCP
      mount `playtables.workflows`.
  - name: workflow_records
    description: >-
      Registry package `mcp.playtables/workflow_records`, served on MCP mount
      `playtables.journeys`.
  - name: workflow_sources
    description: >-
      Registry package `mcp.playtables/workflow_sources`, served on MCP mount
      `playtables.workflows`.
  - name: workflow_tasks
    description: >-
      Registry package `mcp.playtables/workflow_tasks`, served on MCP mount
      `playtables.journeys`.
  - name: workflow_versions
    description: >-
      Registry package `mcp.playtables/workflow_versions`, served on MCP mount
      `playtables.workflows`.
  - name: workflows
    description: >-
      Registry package `mcp.playtables/workflows`, served on MCP mount
      `playtables.workflows`.
paths:
  /api/workflows/search:
    post:
      tags:
        - workflows
      summary: Search workflows
      description: >-
        List the team's outreach campaigns - multichannel LinkedIn + email
        sequence containers. Filter by status; q = LIKE over name + description;
        include records_counts for the per-campaign enrolled/active funnel,
        sources for audiences, published_version for the live step graph (heavy
        - full steps JSON). counts.groups.status rides every response;
        page_size:0 = status dashboard. Default UI scope excludes archived
        (client-side). Who is enrolled / stuck where → workflow-records search.


        Contract:

        - MCP tool `search_workflows`, registry package
        `mcp.playtables/workflows`, mount `playtables.workflows`.

        - Operation `search`, response envelope `search`.

        - Flags: read only.
      operationId: search_workflows
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchWorkflowsRequest'
      responses:
        '200':
          description: '`search` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchWorkflowsResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    SearchWorkflowsRequest:
      type: object
      description: Request body of `search_workflows`.
      properties:
        filter:
          type: object
          properties:
            playtable_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^pt_tb_
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^pt_tb_
              additionalProperties: false
              description: The home playtable.
            sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^wf_wf_
                  description: Workflow sid (wf_wf_…).
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^wf_wf_
                    description: Workflow sid (wf_wf_…).
              additionalProperties: false
              description: Prefix-validated wf_wf_ sid(s).
            status:
              type: object
              properties:
                eq:
                  type: string
                  enum:
                    - draft
                    - active
                    - paused
                    - archived
                ne:
                  type: string
                  enum:
                    - draft
                    - active
                    - paused
                    - archived
                in:
                  type: array
                  items:
                    type: string
                    enum:
                      - draft
                      - active
                      - paused
                      - archived
                nin:
                  type: array
                  items:
                    type: string
                    enum:
                      - draft
                      - active
                      - paused
                      - archived
              additionalProperties: false
              description: Default UI scope excludes archived client-side.
            published_version_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^wf_vr_
                is_null:
                  type: boolean
              additionalProperties: false
              description: is_null:true = never published.
            agent_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^ub_ag_
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^ub_ag_
                is_null:
                  type: boolean
              additionalProperties: false
              description: >-
                The AI SDR the workflow picked (ub_ag_…); is_null:true = the
                workflows on their table's pick.
            q:
              type: string
              maxLength: 128
              description: Free text over name + description (MySQL LIKE, prefix/infix).
            created_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
              description: ISO 8601 range; combine bounds in one object.
            updated_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
              description: '"Recently edited" scans; ISO 8601 range.'
            deleted_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                is_null:
                  type: boolean
              additionalProperties: false
              description: 'Default scope is { is_null: true } (live rows).'
          description: >-
            Field filters, ANDed: {field: {eq | ne | in | nin | gte | lte | gt |
            lt | is_null}}; q inside it is free text. Omit for every row.
        include:
          type: array
          items:
            type: string
            enum:
              - published_version
              - sources
              - records_counts
              - step_stats
              - forecast
          description: Relations to attach to every item; omit for the bare rows.
        sort:
          type: object
          properties:
            field:
              type: string
              enum:
                - created_at
                - updated_at
                - name
              description: The column to order by.
            direction:
              type: string
              enum:
                - asc
                - desc
              description: asc or desc; default desc.
          required:
            - field
          description: One column and its direction; omit for the default order.
        page_size:
          type: integer
          minimum: 0
          maximum: 500
          description: 0..500, default 50; 0 = counts only, 1 = the first row.
        cursor:
          type: string
          nullable: true
          description: pagination.next_cursor of the previous page.
    SearchWorkflowsResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        operation:
          type: string
          enum:
            - search
        items:
          type: array
          items:
            type: object
            properties:
              item:
                type: object
                properties:
                  sid:
                    type: string
                  team_sid:
                    type: string
                  name:
                    type: string
                  description:
                    type: string
                    nullable: true
                  status:
                    type: string
                    enum:
                      - draft
                      - active
                      - paused
                      - archived
                  published_version_sid:
                    type: string
                    nullable: true
                    description: >-
                      wf_vr_… [ro] - written ONLY by publish; null until first
                      publish. Old versions are never repointed back to (no
                      rollback verb - republish the old steps instead).
                  draft_steps:
                    type: array
                    items:
                      oneOf:
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_send_connection_request
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            message:
                              type: string
                              nullable: true
                              description: >-
                                Invite note - max 300 RENDERED chars
                                (server-checked); null/omitted = blank invite.
                                Template namespaces: {{people.*}} {{company.*}}
                                {{record.<slug>}} {{ai.<key>}}; per-variable
                                fallback {{record.slug|text}}.
                            required_fields:
                              type: object
                              nullable: true
                              properties:
                                refs:
                                  type: array
                                  items:
                                    type: string
                                    maxLength: 160
                                    pattern: >-
                                      ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                  maxItems: 20
                                  description: >-
                                    0..20 bare template refs required on top of
                                    the text's own variables (people.first_name,
                                    company.name, record.<slug>,
                                    company.record.<slug>, ai.<key>).
                                on_missing:
                                  type: string
                                  enum:
                                    - fail
                                    - skip
                                  description: >-
                                    fail | skip - what to do when a value the
                                    text needs is empty at task time; no policy
                                    (null) sends the text as it renders.
                              required:
                                - refs
                                - on_missing
                              additionalProperties: false
                          required:
                            - type
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_send_message
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            message:
                              type: string
                              minLength: 1
                              maxLength: 8000
                              description: >-
                                Message template (same namespaces as all
                                templates).
                            required_fields:
                              type: object
                              nullable: true
                              properties:
                                refs:
                                  type: array
                                  items:
                                    type: string
                                    maxLength: 160
                                    pattern: >-
                                      ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                  maxItems: 20
                                  description: >-
                                    0..20 bare template refs required on top of
                                    the text's own variables (people.first_name,
                                    company.name, record.<slug>,
                                    company.record.<slug>, ai.<key>).
                                on_missing:
                                  type: string
                                  enum:
                                    - fail
                                    - skip
                                  description: >-
                                    fail | skip - what to do when a value the
                                    text needs is empty at task time; no policy
                                    (null) sends the text as it renders.
                              required:
                                - refs
                                - on_missing
                              additionalProperties: false
                          required:
                            - type
                            - message
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_send_inmail
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            subject:
                              type: string
                              nullable: true
                              maxLength: 200
                            message:
                              type: string
                              minLength: 1
                              maxLength: 8000
                            required_fields:
                              type: object
                              nullable: true
                              properties:
                                refs:
                                  type: array
                                  items:
                                    type: string
                                    maxLength: 160
                                    pattern: >-
                                      ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                  maxItems: 20
                                  description: >-
                                    0..20 bare template refs required on top of
                                    the text's own variables (people.first_name,
                                    company.name, record.<slug>,
                                    company.record.<slug>, ai.<key>).
                                on_missing:
                                  type: string
                                  enum:
                                    - fail
                                    - skip
                                  description: >-
                                    fail | skip - what to do when a value the
                                    text needs is empty at task time; no policy
                                    (null) sends the text as it renders.
                              required:
                                - refs
                                - on_missing
                              additionalProperties: false
                          required:
                            - type
                            - message
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_visit_profile
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                          required:
                            - type
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_endorse_skills
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            skills_count:
                              type: integer
                              minimum: 1
                              maximum: 10
                              description: Endorse the person's top N listed skills, 1..10.
                          required:
                            - type
                            - skills_count
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_withdraw_connection_request
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                          required:
                            - type
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_like_latest_post
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                          required:
                            - type
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - linkedin_comment_latest_post
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            comment:
                              type: string
                              minLength: 1
                              maxLength: 1250
                              description: >-
                                Comment template on the person's latest post,
                                1..1250 rendered; same namespaces as message
                                templates.
                            required_fields:
                              type: object
                              nullable: true
                              properties:
                                refs:
                                  type: array
                                  items:
                                    type: string
                                    maxLength: 160
                                    pattern: >-
                                      ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                  maxItems: 20
                                  description: >-
                                    0..20 bare template refs required on top of
                                    the text's own variables (people.first_name,
                                    company.name, record.<slug>,
                                    company.record.<slug>, ai.<key>).
                                on_missing:
                                  type: string
                                  enum:
                                    - fail
                                    - skip
                                  description: >-
                                    fail | skip - what to do when a value the
                                    text needs is empty at task time; no policy
                                    (null) sends the text as it renders.
                              required:
                                - refs
                                - on_missing
                              additionalProperties: false
                          required:
                            - type
                            - comment
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - email_send
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            subject:
                              type: string
                              minLength: 1
                              maxLength: 255
                            body:
                              type: string
                              minLength: 1
                              maxLength: 100000
                              description: HTML body template.
                            required_fields:
                              type: object
                              nullable: true
                              properties:
                                refs:
                                  type: array
                                  items:
                                    type: string
                                    maxLength: 160
                                    pattern: >-
                                      ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                  maxItems: 20
                                  description: >-
                                    0..20 bare template refs required on top of
                                    the text's own variables (people.first_name,
                                    company.name, record.<slug>,
                                    company.record.<slug>, ai.<key>).
                                on_missing:
                                  type: string
                                  enum:
                                    - fail
                                    - skip
                                  description: >-
                                    fail | skip - what to do when a value the
                                    text needs is empty at task time; no policy
                                    (null) sends the text as it renders.
                              required:
                                - refs
                                - on_missing
                              additionalProperties: false
                            email_field:
                              type: string
                              nullable: true
                              description: >-
                                Which address the send uses: any | work_email |
                                personal_email; omitted or any = the best one.
                            cc:
                              type: array
                              nullable: true
                              items:
                                type: string
                                maxLength: 320
                                format: email
                              maxItems: 5
                              description: Up to 5 literal copy addresses.
                            bcc:
                              type: array
                              nullable: true
                              items:
                                type: string
                                maxLength: 320
                                format: email
                              maxItems: 5
                              description: Up to 5 literal blind-copy addresses.
                            attachments:
                              type: array
                              nullable: true
                              items:
                                type: object
                                properties:
                                  sid:
                                    type: string
                                    minLength: 18
                                    maxLength: 18
                                    pattern: ^wf_at_
                                  name:
                                    type: string
                                    minLength: 1
                                    maxLength: 255
                                required:
                                  - sid
                                  - name
                                additionalProperties: false
                              maxItems: 5
                              description: >-
                                Up to 5 library files ({sid: wf_at_…, name})
                                sent with the email.
                            reply_in_thread:
                              type: boolean
                              nullable: true
                            track_opens:
                              type: boolean
                              nullable: true
                            track_clicks:
                              type: boolean
                              nullable: true
                            unsubscribe_link:
                              type: boolean
                              nullable: true
                          required:
                            - type
                            - subject
                            - body
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - wait
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            for:
                              type: string
                              pattern: ^[1-9][0-9]*[mhd]$
                              description: >-
                                Duration string: ^[1-9][0-9]*(m|h|d)$ - e.g.
                                "45m", "12h", "14d". Publish lints the range
                                1m..365d.
                          required:
                            - type
                            - for
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - wait_for_event
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            event:
                              type: string
                              enum:
                                - linkedin_connection_request_accepted
                                - email_opened
                                - email_link_clicked
                              description: Event observed via the activities ingest.
                            timeout:
                              type: object
                              properties:
                                after:
                                  type: string
                                  pattern: ^[1-9][0-9]*[mhd]$
                                  description: >-
                                    Duration string: ^[1-9][0-9]*(m|h|d)$ - e.g.
                                    "45m", "12h", "14d". Publish lints the range
                                    1m..365d.
                                steps:
                                  type: object
                                  additionalProperties: {}
                                  description: >-
                                    Recursive node: the same object shape
                                    repeats here. A static OpenAPI document
                                    cannot express the cycle, so this level is
                                    documented as an open object.
                              required:
                                - after
                                - steps
                              additionalProperties: false
                              description: >-
                                Required since 2026-10-11: a wait always has a
                                time limit. Bundled: a timeout path cannot exist
                                without a duration.
                          required:
                            - type
                            - event
                            - timeout
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - condition
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            branches:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: integer
                                    minimum: 1
                                    description: >-
                                      Server-assigned - SAME id-space as step
                                      ids; omit on new branches, carry on kept
                                      ones. The fired branch id lands on the
                                      condition task result.
                                  label:
                                    type: string
                                    nullable: true
                                    maxLength: 255
                                    description: Editor caption.
                                  when:
                                    type: object
                                    additionalProperties: {}
                                    description: >-
                                      NON-nullable filter AST, LOOSE mode
                                      (predicate-only, never compiled to ES):
                                      leaf paths people.* / company.* /
                                      record.<slug> / ai.<output_key> /
                                      api.<output_key>.<path>; a path missing
                                      from the record's playtable makes the leaf
                                      false.
                                  steps:
                                    type: object
                                    additionalProperties: {}
                                    description: >-
                                      Recursive node: the same object shape
                                      repeats here. A static OpenAPI document
                                      cannot express the cycle, so this level is
                                      documented as an open object.
                                required:
                                  - when
                                  - steps
                                additionalProperties: false
                              minItems: 1
                              maxItems: 9
                              description: >-
                                1..9 branches, evaluated in order, first match
                                wins.
                            else:
                              type: object
                              additionalProperties: {}
                              description: >-
                                Recursive node: the same object shape repeats
                                here. A static OpenAPI document cannot express
                                the cycle, so this level is documented as an
                                open object.
                          required:
                            - type
                            - branches
                            - else
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - ab_test
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            branches:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: integer
                                    minimum: 1
                                    description: >-
                                      Server-assigned - SAME id-space as step
                                      ids; omit on new arms, carry on kept ones.
                                      The assigned arm id lands on the ab_test
                                      task result.
                                  label:
                                    type: string
                                    nullable: true
                                    maxLength: 255
                                    description: Editor caption ("Variant A").
                                  weight:
                                    type: integer
                                    minimum: 1
                                    description: >-
                                      Relative weight (int >= 1; need not sum to
                                      100). Record assigned by crc32(record.sid)
                                      mod sum(weights) - see
                                      workflow_versions.md ab_test algorithm.
                                  steps:
                                    type: object
                                    additionalProperties: {}
                                    description: >-
                                      Recursive node: the same object shape
                                      repeats here. A static OpenAPI document
                                      cannot express the cycle, so this level is
                                      documented as an open object.
                                required:
                                  - weight
                                  - steps
                                additionalProperties: false
                              minItems: 2
                              maxItems: 9
                              description: >-
                                2..9 weighted arms; the record is assigned
                                deterministically by hashing its sid into the
                                weight distribution. No `else`.
                          required:
                            - type
                            - branches
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - end
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                          required:
                            - type
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - api_call
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            method:
                              type: string
                              enum:
                                - GET
                                - POST
                                - PUT
                                - PATCH
                                - DELETE
                            url:
                              type: string
                              minLength: 1
                              maxLength: 2048
                              description: >-
                                https-only (publish check); a template -
                                variables may stand in the path and the query.
                            headers:
                              type: object
                              nullable: true
                              additionalProperties:
                                type: string
                                maxLength: 1024
                            query:
                              type: object
                              nullable: true
                              additionalProperties:
                                type: string
                                maxLength: 2048
                            body:
                              type: string
                              nullable: true
                              maxLength: 16000
                              description: >-
                                JSON body template, variables inside quotes;
                                null = the fixed payload; must be null on GET /
                                DELETE.
                            provider_connection_sid:
                              type: string
                              nullable: true
                              minLength: 18
                              maxLength: 18
                              pattern: ^in_cn_
                              description: >-
                                A `custom` provider connection whose auth the
                                integration platform injects at call time; null
                                = no auth.
                            timeout_secs:
                              type: integer
                              nullable: true
                              minimum: 1
                              maximum: 120
                            retry_on_error:
                              type: boolean
                              nullable: true
                            remove_empty_values:
                              type: boolean
                              nullable: true
                            output_key:
                              type: string
                              nullable: true
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                              description: >-
                                The answer's name for later steps (2026-10-11):
                                a slug, unique within the version with the
                                ask_ai keys; later steps read
                                {{api.<output_key>.<path>}} and condition leaves
                                filter on api.<output_key>.<path>; null = the
                                answer is not kept.
                          required:
                            - type
                            - method
                            - url
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - ask_ai
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            prompt:
                              type: string
                              minLength: 1
                              maxLength: 8000
                              description: Same variable namespaces as message templates.
                            output_key:
                              type: string
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                              description: >-
                                Slug, unique within the version (publish check)
                                - later steps read {{ai.<output_key>}} /
                                condition leaves on ai.<output_key>.
                            preset_sid:
                              type: string
                              nullable: true
                              description: >-
                                gtm-api preset for the AI call; null = team
                                default.
                          required:
                            - type
                            - prompt
                            - output_key
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - manual_task
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            title:
                              type: string
                              minLength: 1
                              maxLength: 255
                            instructions:
                              type: string
                              nullable: true
                              maxLength: 4000
                              description: >-
                                Rendered into the human todo; the journey waits
                                until the task is completed.
                          required:
                            - type
                            - title
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - move_to_workflow
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            target_workflow_sid:
                              type: string
                              minLength: 18
                              maxLength: 18
                              pattern: ^wf_wf_
                              description: >-
                                Enroll the person into this campaign (wf_wf_…);
                                reuses the existing record per the re-entry
                                policy. THIS record then completes -
                                terminal-for-this-record.
                            mode:
                              type: string
                              nullable: true
                              enum:
                                - from_start
                                - from_current
                              description: >-
                                Re-entry mode when the person is ALREADY in the
                                target (workflow_records.md, Re-entry):
                                from_start (default; reset to the entry step) |
                                from_current (resume the pinned step, else the
                                entry step). A re-entry is loop-guarded at
                                re_entered_count 10.
                          required:
                            - type
                            - target_workflow_sid
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - add_tag
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            tag_sids:
                              type: array
                              items:
                                type: string
                                minLength: 18
                                maxLength: 18
                                pattern: ^cr_tg_
                              minItems: 1
                              maxItems: 20
                              description: >-
                                1..20 CRM tags (cr_tg_…) attached to the person
                                mid-flow, then falls through.
                          required:
                            - type
                            - tag_sids
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - remove_tag
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            tag_sids:
                              type: array
                              items:
                                type: string
                                minLength: 18
                                maxLength: 18
                                pattern: ^cr_tg_
                              minItems: 1
                              maxItems: 20
                              description: >-
                                1..20 CRM tags (cr_tg_…) detached from the
                                person mid-flow, then falls through.
                          required:
                            - type
                            - tag_sids
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - set_field
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            field_slug:
                              type: string
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                              description: >-
                                Playtable field slug to write (pipeline_stage is
                                a scalar_select field).
                            value:
                              anyOf:
                                - type: string
                                - type: number
                                - type: boolean
                                - {}
                                - {}
                              description: >-
                                Scalar cell value (one cell; no arrays/objects);
                                null clears the field.
                          required:
                            - type
                            - field_slug
                            - value
                          additionalProperties: false
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - change_sender
                            id:
                              type: integer
                              minimum: 1
                              description: >-
                                Server-assigned (workflows.step_id_seq). OMIT on
                                new steps, CARRY verbatim on kept steps; always
                                present on read.
                            name:
                              type: string
                              nullable: true
                              maxLength: 255
                              description: Editor label.
                            sender_profile_sid:
                              type: string
                              nullable: true
                              minLength: 18
                              maxLength: 18
                              pattern: ^ub_sp_
                              description: >-
                                Explicit forward-only re-pin (ub_sp_…). Exactly
                                one of sender_profile_sid / rotation (publish
                                check). NOT a restart-from-top.
                            rotation:
                              type: string
                              nullable: true
                              enum:
                                - fair
                                - random
                                - new_sender
                                - prior_engagement
                              description: >-
                                Re-pick the sender from the workflow pool by
                                this strategy instead of a fixed sid. Exactly
                                one of sender_profile_sid / rotation (publish
                                check).
                          required:
                            - type
                          additionalProperties: false
                    description: >-
                      Working copy of the step document (chain-and-blocks v2);
                      step ids always present on read (server-assigned). Not
                      executable until published. Max 100 steps incl. nested /
                      512 KB.
                  schedule:
                    type: object
                    nullable: true
                    properties:
                      timeblocks:
                        type: array
                        items:
                          type: object
                          properties:
                            dow:
                              type: integer
                              minimum: 0
                              maximum: 6
                              description: >-
                                Day of week, 0=Sunday … 6=Saturday (legacy
                                Carbon dayOfWeek convention).
                            start_minute:
                              type: integer
                              minimum: 0
                              maximum: 1439
                              description: 'Minutes from local midnight (legacy key: min).'
                            end_minute:
                              type: integer
                              minimum: 1
                              maximum: 1440
                              description: >-
                                Minutes from local midnight; must be >
                                start_minute (server-validated). Legacy key:
                                max.
                          required:
                            - dow
                            - start_minute
                            - end_minute
                          additionalProperties: false
                      timezone:
                        type: string
                        description: IANA tz name - base timezone for the blocks.
                      use_people_timezone:
                        type: boolean
                        description: >-
                          Resolve blocks in the person's timezone when known,
                          falling back to `timezone`.
                    required:
                      - timeblocks
                      - timezone
                      - use_people_timezone
                    description: >-
                      The campaign's sending windows, the one send-window gate:
                      null = any time (gtm-api's per-account limits still pace
                      the sends). A sender profile carries no window of its own
                      (founder 2026-09-22).
                  on_reply:
                    type: string
                    enum:
                      - autopilot
                      - copilot
                      - stop
                      - continue
                    description: >-
                      What a reply does (default copilot): autopilot = the
                      records pause and the AI SDR answers within its caps;
                      copilot = the records pause and the AI SDR drafts for
                      approval; stop = the records pause and the thread is the
                      human's; continue = the records keep sending (nurture),
                      the agent stays out. Reply scope = all the person's live
                      records. Frozen onto each thread the workflow acts on as
                      its automation_ref mode (autopilot | copilot | off).
                  agent_sid:
                    type: string
                    nullable: true
                    description: >-
                      The AI SDR picked for this workflow (ub_ag_…, block 10
                      step 10.2): the agent that works the threads it starts,
                      every setting on the agent itself (update_agent). Null =
                      its home table's pick, else the team's default. The
                      campaign's own setup of before (ai_sdr_setup, 2026-10-12
                      to 2026-10-30) became an agent of its own in step 10.3.
                  sender_profile_sids:
                    type: array
                    items:
                      type: string
                    description: >-
                      ub_sp_… each - the sender pool; a record is pinned to ONE
                      sender at enrollment by rotation_strategy.
                  rotation_strategy:
                    type: string
                    enum:
                      - fair
                      - random
                      - new_sender
                      - prior_engagement
                  priority:
                    type: integer
                    description: >-
                      1..3 (low / medium / high) - the workflow's SHARE of a
                      sender profile it shares with other workflows (three
                      actions of high for one of low), never a rank (see
                      ./workflow_tasks.md).
                  created_by:
                    type: object
                    properties:
                      actor_type:
                        type: string
                        enum:
                          - user
                          - support
                          - api_key
                          - system
                          - agent
                      actor_sid:
                        type: string
                        nullable: true
                      team_sid:
                        type: string
                      actor_name:
                        type: string
                        nullable: true
                        description: >-
                          The OAuth client that acted ("Claude", "n8n"); null
                          for a user, an API key or a system job.
                      oauth_client_sid:
                        type: string
                        nullable: true
                        description: >-
                          The acting OAuth client (id_oc_*); null off the OAuth
                          path.
                      reason:
                        type: string
                        nullable: true
                        description: >-
                          Why a system actor wrote the row
                          (snapshot_capture_job, ...); null otherwise.
                      permissions:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Internal audit context: the grant set the actor held
                          at write time. Not a contract.
                      cluster_id:
                        type: integer
                        nullable: true
                        description: >-
                          Internal audit context: the cluster that served the
                          write.
                      trace_id:
                        type: string
                        nullable: true
                        description: >-
                          Internal audit context: the trace id of the request
                          that wrote the row.
                    required:
                      - actor_type
                      - actor_sid
                      - team_sid
                      - permissions
                  deleted_by:
                    type: object
                    nullable: true
                    properties:
                      actor_type:
                        type: string
                        enum:
                          - user
                          - support
                          - api_key
                          - system
                          - agent
                      actor_sid:
                        type: string
                        nullable: true
                      team_sid:
                        type: string
                      actor_name:
                        type: string
                        nullable: true
                        description: >-
                          The OAuth client that acted ("Claude", "n8n"); null
                          for a user, an API key or a system job.
                      oauth_client_sid:
                        type: string
                        nullable: true
                        description: >-
                          The acting OAuth client (id_oc_*); null off the OAuth
                          path.
                      reason:
                        type: string
                        nullable: true
                        description: >-
                          Why a system actor wrote the row
                          (snapshot_capture_job, ...); null otherwise.
                      permissions:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Internal audit context: the grant set the actor held
                          at write time. Not a contract.
                      cluster_id:
                        type: integer
                        nullable: true
                        description: >-
                          Internal audit context: the cluster that served the
                          write.
                      trace_id:
                        type: string
                        nullable: true
                        description: >-
                          Internal audit context: the trace id of the request
                          that wrote the row.
                    required:
                      - actor_type
                      - actor_sid
                      - team_sid
                      - permissions
                  created_at:
                    type: string
                  updated_at:
                    type: string
                  deleted_at:
                    type: string
                    nullable: true
                required:
                  - sid
                  - team_sid
                  - name
                  - description
                  - status
                  - published_version_sid
                  - draft_steps
                  - schedule
                  - on_reply
                  - agent_sid
                  - sender_profile_sids
                  - rotation_strategy
                  - priority
                  - created_by
                  - deleted_by
                  - created_at
                  - updated_at
                  - deleted_at
              included:
                type: object
                properties:
                  published_version:
                    type: object
                    nullable: true
                    properties:
                      sid:
                        type: string
                        description: wf_vr_….
                      workflow_sid:
                        type: string
                        description: wf_wf_… parent.
                      version:
                        type: integer
                        description: Per-workflow sequence, >=1 (max+1 at publish).
                      steps:
                        type: array
                        items:
                          oneOf:
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_send_connection_request
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                message:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Invite note - max 300 RENDERED chars
                                    (server-checked); null/omitted = blank
                                    invite. Template namespaces: {{people.*}}
                                    {{company.*}} {{record.<slug>}}
                                    {{ai.<key>}}; per-variable fallback
                                    {{record.slug|text}}.
                                required_fields:
                                  type: object
                                  nullable: true
                                  properties:
                                    refs:
                                      type: array
                                      items:
                                        type: string
                                        maxLength: 160
                                        pattern: >-
                                          ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                      maxItems: 20
                                      description: >-
                                        0..20 bare template refs required on top
                                        of the text's own variables
                                        (people.first_name, company.name,
                                        record.<slug>, company.record.<slug>,
                                        ai.<key>).
                                    on_missing:
                                      type: string
                                      enum:
                                        - fail
                                        - skip
                                      description: >-
                                        fail | skip - what to do when a value
                                        the text needs is empty at task time; no
                                        policy (null) sends the text as it
                                        renders.
                                  required:
                                    - refs
                                    - on_missing
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_send_message
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                message:
                                  type: string
                                  minLength: 1
                                  maxLength: 8000
                                  description: >-
                                    Message template (same namespaces as all
                                    templates).
                                required_fields:
                                  type: object
                                  nullable: true
                                  properties:
                                    refs:
                                      type: array
                                      items:
                                        type: string
                                        maxLength: 160
                                        pattern: >-
                                          ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                      maxItems: 20
                                      description: >-
                                        0..20 bare template refs required on top
                                        of the text's own variables
                                        (people.first_name, company.name,
                                        record.<slug>, company.record.<slug>,
                                        ai.<key>).
                                    on_missing:
                                      type: string
                                      enum:
                                        - fail
                                        - skip
                                      description: >-
                                        fail | skip - what to do when a value
                                        the text needs is empty at task time; no
                                        policy (null) sends the text as it
                                        renders.
                                  required:
                                    - refs
                                    - on_missing
                                  additionalProperties: false
                              required:
                                - type
                                - message
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_send_inmail
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                subject:
                                  type: string
                                  nullable: true
                                  maxLength: 200
                                message:
                                  type: string
                                  minLength: 1
                                  maxLength: 8000
                                required_fields:
                                  type: object
                                  nullable: true
                                  properties:
                                    refs:
                                      type: array
                                      items:
                                        type: string
                                        maxLength: 160
                                        pattern: >-
                                          ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                      maxItems: 20
                                      description: >-
                                        0..20 bare template refs required on top
                                        of the text's own variables
                                        (people.first_name, company.name,
                                        record.<slug>, company.record.<slug>,
                                        ai.<key>).
                                    on_missing:
                                      type: string
                                      enum:
                                        - fail
                                        - skip
                                      description: >-
                                        fail | skip - what to do when a value
                                        the text needs is empty at task time; no
                                        policy (null) sends the text as it
                                        renders.
                                  required:
                                    - refs
                                    - on_missing
                                  additionalProperties: false
                              required:
                                - type
                                - message
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_visit_profile
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                              required:
                                - type
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_endorse_skills
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                skills_count:
                                  type: integer
                                  minimum: 1
                                  maximum: 10
                                  description: >-
                                    Endorse the person's top N listed skills,
                                    1..10.
                              required:
                                - type
                                - skills_count
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_withdraw_connection_request
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                              required:
                                - type
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_like_latest_post
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                              required:
                                - type
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_comment_latest_post
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                comment:
                                  type: string
                                  minLength: 1
                                  maxLength: 1250
                                  description: >-
                                    Comment template on the person's latest
                                    post, 1..1250 rendered; same namespaces as
                                    message templates.
                                required_fields:
                                  type: object
                                  nullable: true
                                  properties:
                                    refs:
                                      type: array
                                      items:
                                        type: string
                                        maxLength: 160
                                        pattern: >-
                                          ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                      maxItems: 20
                                      description: >-
                                        0..20 bare template refs required on top
                                        of the text's own variables
                                        (people.first_name, company.name,
                                        record.<slug>, company.record.<slug>,
                                        ai.<key>).
                                    on_missing:
                                      type: string
                                      enum:
                                        - fail
                                        - skip
                                      description: >-
                                        fail | skip - what to do when a value
                                        the text needs is empty at task time; no
                                        policy (null) sends the text as it
                                        renders.
                                  required:
                                    - refs
                                    - on_missing
                                  additionalProperties: false
                              required:
                                - type
                                - comment
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - email_send
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                subject:
                                  type: string
                                  minLength: 1
                                  maxLength: 255
                                body:
                                  type: string
                                  minLength: 1
                                  maxLength: 100000
                                  description: HTML body template.
                                required_fields:
                                  type: object
                                  nullable: true
                                  properties:
                                    refs:
                                      type: array
                                      items:
                                        type: string
                                        maxLength: 160
                                        pattern: >-
                                          ^(people|company|record|ai|api)\.[a-z][a-z0-9_]*(\.[a-z0-9_]+)*$
                                      maxItems: 20
                                      description: >-
                                        0..20 bare template refs required on top
                                        of the text's own variables
                                        (people.first_name, company.name,
                                        record.<slug>, company.record.<slug>,
                                        ai.<key>).
                                    on_missing:
                                      type: string
                                      enum:
                                        - fail
                                        - skip
                                      description: >-
                                        fail | skip - what to do when a value
                                        the text needs is empty at task time; no
                                        policy (null) sends the text as it
                                        renders.
                                  required:
                                    - refs
                                    - on_missing
                                  additionalProperties: false
                                email_field:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Which address the send uses: any |
                                    work_email | personal_email; omitted or any
                                    = the best one.
                                cc:
                                  type: array
                                  nullable: true
                                  items:
                                    type: string
                                    maxLength: 320
                                    format: email
                                  maxItems: 5
                                  description: Up to 5 literal copy addresses.
                                bcc:
                                  type: array
                                  nullable: true
                                  items:
                                    type: string
                                    maxLength: 320
                                    format: email
                                  maxItems: 5
                                  description: Up to 5 literal blind-copy addresses.
                                attachments:
                                  type: array
                                  nullable: true
                                  items:
                                    type: object
                                    properties:
                                      sid:
                                        type: string
                                        minLength: 18
                                        maxLength: 18
                                        pattern: ^wf_at_
                                      name:
                                        type: string
                                        minLength: 1
                                        maxLength: 255
                                    required:
                                      - sid
                                      - name
                                    additionalProperties: false
                                  maxItems: 5
                                  description: >-
                                    Up to 5 library files ({sid: wf_at_…, name})
                                    sent with the email.
                                reply_in_thread:
                                  type: boolean
                                  nullable: true
                                track_opens:
                                  type: boolean
                                  nullable: true
                                track_clicks:
                                  type: boolean
                                  nullable: true
                                unsubscribe_link:
                                  type: boolean
                                  nullable: true
                              required:
                                - type
                                - subject
                                - body
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - wait
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                for:
                                  type: string
                                  pattern: ^[1-9][0-9]*[mhd]$
                                  description: >-
                                    Duration string: ^[1-9][0-9]*(m|h|d)$ - e.g.
                                    "45m", "12h", "14d". Publish lints the range
                                    1m..365d.
                              required:
                                - type
                                - for
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - wait_for_event
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                event:
                                  type: string
                                  enum:
                                    - linkedin_connection_request_accepted
                                    - email_opened
                                    - email_link_clicked
                                  description: Event observed via the activities ingest.
                                timeout:
                                  type: object
                                  properties:
                                    after:
                                      type: string
                                      pattern: ^[1-9][0-9]*[mhd]$
                                      description: >-
                                        Duration string: ^[1-9][0-9]*(m|h|d)$ -
                                        e.g. "45m", "12h", "14d". Publish lints
                                        the range 1m..365d.
                                    steps:
                                      type: object
                                      additionalProperties: {}
                                      description: >-
                                        Recursive node: the same object shape
                                        repeats here. A static OpenAPI document
                                        cannot express the cycle, so this level
                                        is documented as an open object.
                                  required:
                                    - after
                                    - steps
                                  additionalProperties: false
                                  description: >-
                                    Required since 2026-10-11: a wait always has
                                    a time limit. Bundled: a timeout path cannot
                                    exist without a duration.
                              required:
                                - type
                                - event
                                - timeout
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - condition
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                branches:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      id:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Server-assigned - SAME id-space as step
                                          ids; omit on new branches, carry on kept
                                          ones. The fired branch id lands on the
                                          condition task result.
                                      label:
                                        type: string
                                        nullable: true
                                        maxLength: 255
                                        description: Editor caption.
                                      when:
                                        type: object
                                        additionalProperties: {}
                                        description: >-
                                          NON-nullable filter AST, LOOSE mode
                                          (predicate-only, never compiled to ES):
                                          leaf paths people.* / company.* /
                                          record.<slug> / ai.<output_key> /
                                          api.<output_key>.<path>; a path missing
                                          from the record's playtable makes the
                                          leaf false.
                                      steps:
                                        type: object
                                        additionalProperties: {}
                                        description: >-
                                          Recursive node: the same object shape
                                          repeats here. A static OpenAPI document
                                          cannot express the cycle, so this level
                                          is documented as an open object.
                                    required:
                                      - when
                                      - steps
                                    additionalProperties: false
                                  minItems: 1
                                  maxItems: 9
                                  description: >-
                                    1..9 branches, evaluated in order, first
                                    match wins.
                                else:
                                  type: object
                                  additionalProperties: {}
                                  description: >-
                                    Recursive node: the same object shape
                                    repeats here. A static OpenAPI document
                                    cannot express the cycle, so this level is
                                    documented as an open object.
                              required:
                                - type
                                - branches
                                - else
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - ab_test
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                branches:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      id:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Server-assigned - SAME id-space as step
                                          ids; omit on new arms, carry on kept
                                          ones. The assigned arm id lands on the
                                          ab_test task result.
                                      label:
                                        type: string
                                        nullable: true
                                        maxLength: 255
                                        description: Editor caption ("Variant A").
                                      weight:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Relative weight (int >= 1; need not sum
                                          to 100). Record assigned by
                                          crc32(record.sid) mod sum(weights) - see
                                          workflow_versions.md ab_test algorithm.
                                      steps:
                                        type: object
                                        additionalProperties: {}
                                        description: >-
                                          Recursive node: the same object shape
                                          repeats here. A static OpenAPI document
                                          cannot express the cycle, so this level
                                          is documented as an open object.
                                    required:
                                      - weight
                                      - steps
                                    additionalProperties: false
                                  minItems: 2
                                  maxItems: 9
                                  description: >-
                                    2..9 weighted arms; the record is assigned
                                    deterministically by hashing its sid into
                                    the weight distribution. No `else`.
                              required:
                                - type
                                - branches
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - end
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                              required:
                                - type
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - api_call
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                method:
                                  type: string
                                  enum:
                                    - GET
                                    - POST
                                    - PUT
                                    - PATCH
                                    - DELETE
                                url:
                                  type: string
                                  minLength: 1
                                  maxLength: 2048
                                  description: >-
                                    https-only (publish check); a template -
                                    variables may stand in the path and the
                                    query.
                                headers:
                                  type: object
                                  nullable: true
                                  additionalProperties:
                                    type: string
                                    maxLength: 1024
                                query:
                                  type: object
                                  nullable: true
                                  additionalProperties:
                                    type: string
                                    maxLength: 2048
                                body:
                                  type: string
                                  nullable: true
                                  maxLength: 16000
                                  description: >-
                                    JSON body template, variables inside quotes;
                                    null = the fixed payload; must be null on
                                    GET / DELETE.
                                provider_connection_sid:
                                  type: string
                                  nullable: true
                                  minLength: 18
                                  maxLength: 18
                                  pattern: ^in_cn_
                                  description: >-
                                    A `custom` provider connection whose auth
                                    the integration platform injects at call
                                    time; null = no auth.
                                timeout_secs:
                                  type: integer
                                  nullable: true
                                  minimum: 1
                                  maximum: 120
                                retry_on_error:
                                  type: boolean
                                  nullable: true
                                remove_empty_values:
                                  type: boolean
                                  nullable: true
                                output_key:
                                  type: string
                                  nullable: true
                                  pattern: ^[a-z][a-z0-9_]{0,63}$
                                  description: >-
                                    The answer's name for later steps
                                    (2026-10-11): a slug, unique within the
                                    version with the ask_ai keys; later steps
                                    read {{api.<output_key>.<path>}} and
                                    condition leaves filter on
                                    api.<output_key>.<path>; null = the answer
                                    is not kept.
                              required:
                                - type
                                - method
                                - url
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - ask_ai
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                prompt:
                                  type: string
                                  minLength: 1
                                  maxLength: 8000
                                  description: >-
                                    Same variable namespaces as message
                                    templates.
                                output_key:
                                  type: string
                                  pattern: ^[a-z][a-z0-9_]{0,63}$
                                  description: >-
                                    Slug, unique within the version (publish
                                    check) - later steps read
                                    {{ai.<output_key>}} / condition leaves on
                                    ai.<output_key>.
                                preset_sid:
                                  type: string
                                  nullable: true
                                  description: >-
                                    gtm-api preset for the AI call; null = team
                                    default.
                              required:
                                - type
                                - prompt
                                - output_key
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - manual_task
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                title:
                                  type: string
                                  minLength: 1
                                  maxLength: 255
                                instructions:
                                  type: string
                                  nullable: true
                                  maxLength: 4000
                                  description: >-
                                    Rendered into the human todo; the journey
                                    waits until the task is completed.
                              required:
                                - type
                                - title
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - move_to_workflow
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                target_workflow_sid:
                                  type: string
                                  minLength: 18
                                  maxLength: 18
                                  pattern: ^wf_wf_
                                  description: >-
                                    Enroll the person into this campaign
                                    (wf_wf_…); reuses the existing record per
                                    the re-entry policy. THIS record then
                                    completes - terminal-for-this-record.
                                mode:
                                  type: string
                                  nullable: true
                                  enum:
                                    - from_start
                                    - from_current
                                  description: >-
                                    Re-entry mode when the person is ALREADY in
                                    the target (workflow_records.md, Re-entry):
                                    from_start (default; reset to the entry
                                    step) | from_current (resume the pinned
                                    step, else the entry step). A re-entry is
                                    loop-guarded at re_entered_count 10.
                              required:
                                - type
                                - target_workflow_sid
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - add_tag
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                tag_sids:
                                  type: array
                                  items:
                                    type: string
                                    minLength: 18
                                    maxLength: 18
                                    pattern: ^cr_tg_
                                  minItems: 1
                                  maxItems: 20
                                  description: >-
                                    1..20 CRM tags (cr_tg_…) attached to the
                                    person mid-flow, then falls through.
                              required:
                                - type
                                - tag_sids
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - remove_tag
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                tag_sids:
                                  type: array
                                  items:
                                    type: string
                                    minLength: 18
                                    maxLength: 18
                                    pattern: ^cr_tg_
                                  minItems: 1
                                  maxItems: 20
                                  description: >-
                                    1..20 CRM tags (cr_tg_…) detached from the
                                    person mid-flow, then falls through.
                              required:
                                - type
                                - tag_sids
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - set_field
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                field_slug:
                                  type: string
                                  pattern: ^[a-z][a-z0-9_]{0,63}$
                                  description: >-
                                    Playtable field slug to write
                                    (pipeline_stage is a scalar_select field).
                                value:
                                  anyOf:
                                    - type: string
                                    - type: number
                                    - type: boolean
                                    - {}
                                    - {}
                                  description: >-
                                    Scalar cell value (one cell; no
                                    arrays/objects); null clears the field.
                              required:
                                - type
                                - field_slug
                                - value
                              additionalProperties: false
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - change_sender
                                id:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Server-assigned (workflows.step_id_seq).
                                    OMIT on new steps, CARRY verbatim on kept
                                    steps; always present on read.
                                name:
                                  type: string
                                  nullable: true
                                  maxLength: 255
                                  description: Editor label.
                                sender_profile_sid:
                                  type: string
                                  nullable: true
                                  minLength: 18
                                  maxLength: 18
                                  pattern: ^ub_sp_
                                  description: >-
                                    Explicit forward-only re-pin (ub_sp_…).
                                    Exactly one of sender_profile_sid / rotation
                                    (publish check). NOT a restart-from-top.
                                rotation:
                                  type: string
                                  nullable: true
                                  enum:
                                    - fair
                                    - random
                                    - new_sender
                                    - prior_engagement
                                  description: >-
                                    Re-pick the sender from the workflow pool by
                                    this strategy instead of a fixed sid.
                                    Exactly one of sender_profile_sid / rotation
                                    (publish check).
                              required:
                                - type
                              additionalProperties: false
                        description: Immutable snapshot of the step document at publish.
                      steps_count:
                        type: integer
                        description: Denormalized total step count (incl. nested).
                      entry_step_id:
                        type: integer
                        description: '= steps[0].id - enrollment starts here.'
                      created_at:
                        type: string
                        description: ISO 8601 UTC - publish moment.
                    required:
                      - sid
                      - workflow_sid
                      - version
                      - steps
                      - steps_count
                      - entry_step_id
                      - created_at
                    description: >-
                      WorkflowVersionDomain (1:1 via published_version_sid;
                      heavy - full steps JSON) - see ./workflow_versions.md.
                  sources:
                    type: array
                    items:
                      type: object
                      properties:
                        sid:
                          type: string
                      required:
                        - sid
                    description: >-
                      WorkflowSourceDomain audience feeds (1:N, default 50,
                      created_at ASC) - see ./workflow_sources.md.
                  records_counts:
                    type: object
                    properties:
                      total_count:
                        type: integer
                        minimum: 0
                      groups:
                        type: object
                        properties:
                          status:
                            anyOf:
                              - type: object
                                additionalProperties:
                                  type: number
                              - type: array
                                items: {}
                            description: >-
                              Journey funnel by WorkflowRecordStatusEnum:
                              waiting_limit / blocked / active / waiting /
                              paused_on_reply / paused_manual / paused_blocked /
                              failed / completed / exited.
                        required:
                          - status
                    required:
                      - total_count
                      - groups
                    description: >-
                      WorkflowRecordCounts over { workflow_sid: parent.sid } -
                      the full-scope enrolled/active/replied/done snapshot for
                      the editor header (§4.17a) - see ./workflow_records.md.
                  forecast:
                    type: object
                    nullable: true
                    properties:
                      scheduled_count:
                        type: integer
                        minimum: 0
                        description: Send-class tasks scheduled on a sender profile.
                      sender_profiles_count:
                        type: integer
                        minimum: 0
                      days_to_drain:
                        type: integer
                        nullable: true
                        minimum: 0
                        exclusiveMinimum: true
                        description: >-
                          Days from today until the last planned send leaves (1
                          = everything today); null when nothing is planned.
                      drains_on:
                        type: string
                        nullable: true
                        description: >-
                          YYYY-MM-DD (UTC) of the last send; null past the
                          horizon.
                      over_horizon:
                        type: boolean
                        description: 'The walk stopped at a year: read "over a year".'
                      buckets:
                        type: array
                        items:
                          type: object
                          properties:
                            sender_profile_sid:
                              type: string
                            type:
                              type: string
                              description: The send-class task type.
                            scheduled_count:
                              type: integer
                              minimum: 0
                            daily_share:
                              type: integer
                              minimum: 0
                              description: >-
                                This workflow's share of the (sender profile,
                                type) daily cap, by priority (the sender profile
                                pick's split).
                            days_to_drain:
                              type: integer
                              minimum: 0
                            over_horizon:
                              type: boolean
                          required:
                            - sender_profile_sid
                            - type
                            - scheduled_count
                            - daily_share
                            - days_to_drain
                            - over_horizon
                      timeline:
                        type: array
                        items:
                          type: object
                          properties:
                            day:
                              type: string
                              description: YYYY-MM-DD, UTC.
                            planned:
                              type: integer
                              minimum: 0
                            by_type:
                              type: object
                              additionalProperties:
                                type: integer
                                minimum: 0
                          required:
                            - day
                            - planned
                            - by_type
                        description: The first 60 days; every bucket added up per day.
                    required:
                      - scheduled_count
                      - sender_profiles_count
                      - days_to_drain
                      - drains_on
                      - over_horizon
                      - buckets
                      - timeline
                    description: >-
                      How long the planned sends take at the current limits
                      (TASK_EXECUTION_ARCHITECTURE.md §6.5, D41): the scheduled
                      tasks per (sender profile, type) laid over the days ahead
                      at the workflow's priority share of the sender profile's
                      daily cap, closed days skipped. Computed on read from
                      counts, never stored; rows held at the door are not in it.
            required:
              - item
              - included
        pagination:
          type: object
          properties:
            next_cursor:
              type: string
              nullable: true
            has_more:
              type: boolean
            total_count:
              type: integer
              nullable: true
          required:
            - next_cursor
            - has_more
            - total_count
        applied_filters:
          type: object
          additionalProperties: {}
        includes:
          type: array
          items:
            type: string
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
        counts:
          type: object
          properties:
            total_count:
              type: integer
              minimum: 0
              description: Workflow rows matching the filter scope.
            groups:
              type: object
              properties:
                status:
                  anyOf:
                    - type: object
                      properties:
                        draft:
                          type: integer
                          minimum: 0
                        active:
                          type: integer
                          minimum: 0
                        paused:
                          type: integer
                          minimum: 0
                        archived:
                          type: integer
                          minimum: 0
                    - type: array
                      items: {}
                  description: >-
                    Campaign distribution by status (feeds list badges); absent
                    key = zero (PHP empty map serialises as []).
              required:
                - status
          required:
            - total_count
            - groups
      required:
        - success
        - operation
        - items
        - pagination
        - applied_filters
        - includes
        - meta
    McpError:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_failed
                - nothing_to_update
                - not_found
                - relation_not_found
                - invalid_transition
                - limit_exceeded
                - payment_required
                - duplicate_rejected
                - conflict
                - delete_blocked
                - unauthorized
                - forbidden
                - rate_limited
                - internal_error
                - service_unavailable
                - not_implemented
            message:
              type: string
            recoverable:
              type: boolean
            suggestion:
              type: string
            field_errors:
              type: object
              additionalProperties:
                type: array
                items:
                  type: object
                  properties:
                    rule:
                      type: string
                    message:
                      type: string
                  required:
                    - rule
                    - message
            blockers:
              type: array
              items:
                type: object
                properties:
                  type:
                    type: string
                    description: >-
                      Machine-readable blocker type (active_flow, pending_tasks,
                      …).
                  severity:
                    type: string
                    enum:
                      - hard
                      - soft
                    description: >-
                      hard = external action required; soft = acknowledge is
                      enough.
                  description:
                    type: string
                  entity_sid:
                    type: string
                    nullable: true
                  count:
                    type: integer
                  resolution:
                    type: string
                    description: 'Hard: tool name to call. Soft: code for acknowledge[].'
                  resolution_hint:
                    type: string
                required:
                  - type
                  - severity
                  - description
                  - entity_sid
                  - resolution
                  - resolution_hint
            context:
              type: object
              additionalProperties: {}
          required:
            - code
            - message
            - recoverable
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
      required:
        - success
        - error
  responses:
    McpClientError:
      description: >-
        MCP error envelope. `error.code` is one of validation_failed,
        nothing_to_update, not_found, relation_not_found, invalid_transition,
        limit_exceeded, payment_required, duplicate_rejected, conflict,
        delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
    McpServerError:
      description: >-
        MCP error envelope with `error.code` internal_error or
        service_unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
  securitySchemes:
    BearerJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Access token issued by gs.service.id. Its `access_identity` claim
        carries `team_sid`, `actor_sid` and `actor_type`, and that team scope is
        authoritative.
    TeamSid:
      type: apiKey
      in: header
      name: Team-SID
      description: >-
        Team scope for tokens that do not carry one. Ignored when the token
        already names a team.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.