Frontline Workflows API

View and manage your workflows across your account

Operations 16

GET /public/v1/workflows List all workflows #
POST /public/v1/workflows Create a workflow #
GET /public/v1/workflows/{workflowId} Get workflow details #
PUT /public/v1/workflows/{workflowId} Update workflow #
DELETE /public/v1/workflows/{workflowId} Delete workflow #
GET /public/v1/workflows/{workflowId}/graph Get workflow graph #
POST /public/v1/workflows/{workflowId}/run Run workflow #
POST /public/v1/workflows/{workflowId}/nodes Create workflow node #
PUT /public/v1/workflows/{workflowId}/nodes/{nodeId} Update workflow node #
DELETE /public/v1/workflows/{workflowId}/nodes/{nodeId} Delete workflow node #
POST /public/v1/workflows/{workflowId}/edges Create workflow edge #
DELETE /public/v1/workflows/{workflowId}/edges Delete workflow edge #
GET /public/v1/workflows/{workflowId}/analytics Get workflow analytics #
GET /public/v1/workflows/{workflowId}/logs List workflow run logs #
GET /public/v1/workflows/{workflowId}/logs/{logId} Get a workflow run log #
GET /public/v1/workflows/{workflowId}/logs/{logId}/nodes/{nodeResultId}/trace Get a node's execution trace #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/frontline-workflows-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

frontline-workflows-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Public Workflows API
  version: 1.0.0
  description: 'Public API for accessing agents, flows, and analytics.


    ## Authentication


    The Public API supports two API key types. Pass the key as a Bearer token:


    ```

    Authorization: Bearer <YOUR_API_KEY>

    ```


    ### Account API key (GENERAL)


    Account-level key that acts on behalf of the entire account. Required for account-level endpoints unless noted otherwise.


    ### User API key (USER)


    User-level key tied to a specific user. Required for write operations and user-owned resources. **Also accepted on all account-level endpoints.**


    Each operation documents which key type(s) it accepts in its **Security** section.'
  license:
    name: Proprietary
    url: https://www.getfrontline.ai/terms-and-conditions
servers:
- url: https://prod-api.getfrontline.ai
tags:
- name: Workflows
  description: View and manage your workflows across your account
paths:
  /public/v1/workflows:
    get:
      summary: List all workflows
      operationId: listWorkflows
      description: Returns a list of workflows associated with the account. Nodes and logic are excluded.
      security:
      - accountApiKey: []
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type: string
          enum:
          - ACTIVE
          - DELETED
          - DRAFT
          example: ACTIVE
        required: false
        name: status
        in: query
      responses:
        '200':
          description: A list of workflows
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/Workflow'
                required:
                - results
                description: Standard list response
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      summary: Create a workflow
      operationId: createWorkflow
      description: Creates an automation workflow and an empty graph snapshot.
      security:
      - userApiKey: []
      tags:
      - Workflows
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowCreateInput'
      responses:
        '201':
          description: Created workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDetail'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}:
    get:
      summary: Get workflow details
      operationId: getWorkflow
      description: Returns a workflow automation. Pass includeNodes=true to include graph nodes.
      security:
      - accountApiKey: []
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          anyOf:
          - type: boolean
          - type: string
        required: false
        name: includeNodes
        in: query
      responses:
        '200':
          description: Workflow details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDetail'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      summary: Update workflow
      operationId: updateWorkflow
      description: Updates workflow metadata or status.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowUpdateInput'
      responses:
        '200':
          description: Updated workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDetail'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete workflow
      operationId: deleteWorkflow
      description: Soft deletes a workflow automation and cleans up trigger side effects.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      responses:
        '204':
          description: Workflow deleted
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}/graph:
    get:
      summary: Get workflow graph
      operationId: getWorkflowGraph
      description: Returns the workflow snapshot with nodes and edges.
      security:
      - accountApiKey: []
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      responses:
        '200':
          description: Workflow graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowGraph'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}/run:
    post:
      summary: Run workflow
      operationId: runWorkflow
      description: Manually triggers a scheduled (SCHEDULED_TRIGGER) workflow automation by enqueueing an execution. Only available for ACTIVE scheduled workflows; event-triggered workflows run from their trigger.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      responses:
        '202':
          description: Workflow run enqueued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowRunResult'
        '400':
          description: Workflow is not a scheduled workflow or is not ACTIVE
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}/nodes:
    post:
      summary: Create workflow node
      operationId: createWorkflowNode
      description: Creates a node in an automation workflow graph. The server assigns `nodeId` and `alias`; use the 201 response when adding edges or updates.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowNodeCreateInput'
      responses:
        '201':
          description: Created node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicWorkflowNodeCreated'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}/nodes/{nodeId}:
    put:
      summary: Update workflow node
      operationId: updateWorkflowNode
      description: Updates a node and returns the updated workflow graph.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          type: string
          example: api_1
        required: true
        name: nodeId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowNodeUpdateInput'
      responses:
        '200':
          description: Updated graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowGraph'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete workflow node
      operationId: deleteWorkflowNode
      description: Deletes a node and removes all incoming and outgoing edges.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          type: string
          example: api_1
        required: true
        name: nodeId
        in: path
      responses:
        '200':
          description: Updated graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowGraph'
  /public/v1/workflows/{workflowId}/edges:
    post:
      summary: Create workflow edge
      operationId: createWorkflowEdge
      description: Adds or replaces the outgoing edge for a node.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowEdgeInput'
      responses:
        '200':
          description: Updated graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowGraph'
        '409':
          description: Invalid graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete workflow edge
      operationId: deleteWorkflowEdge
      description: Removes an edge from the workflow graph.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicWorkflowEdgeDeleteInput'
      responses:
        '200':
          description: Updated graph
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowGraph'
  /public/v1/workflows/{workflowId}/analytics:
    get:
      summary: Get workflow analytics
      operationId: getWorkflowAnalytics
      description: Returns analytics for a specific workflow, including runs by date and summary.
      security:
      - accountApiKey: []
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          type:
          - string
          - 'null'
          example: '2024-01-01'
        required: false
        name: startDate
        in: query
      - schema:
          type:
          - string
          - 'null'
          example: '2024-01-01'
        required: false
        name: endDate
        in: query
      responses:
        '200':
          description: Workflow analytics data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowAnalytics'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /public/v1/workflows/{workflowId}/logs:
    get:
      summary: List workflow run logs
      operationId: listWorkflowLogs
      description: Lists the run history (executions) of a workflow. Requires a USER API key.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 501
        required: false
        name: workflowId
        in: path
      - schema:
          type: string
          enum:
          - COMPLETED
          - PENDING
          - FAILED
        required: false
        name: status
        in: query
      - schema:
          type:
          - string
          - 'null'
          example: '2026-01-01'
        required: false
        name: start_date
        in: query
      - schema:
          type:
          - string
          - 'null'
          example: '2026-12-31'
        required: false
        name: end_date
        in: query
      responses:
        '200':
          description: A list of runs
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicWorkflowLog'
                required:
                - results
                description: Standard list response
  /public/v1/workflows/{workflowId}/logs/{logId}:
    get:
      summary: Get a workflow run log
      operationId: getWorkflowLog
      description: Returns one run with its per-node results. Requires a USER API key.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 501
        required: false
        name: workflowId
        in: path
      - schema:
          type:
          - number
          - 'null'
          example: 9001
        required: false
        name: logId
        in: path
      responses:
        '200':
          description: The run log with node results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicWorkflowLogDetail'
  /public/v1/workflows/{workflowId}/logs/{logId}/nodes/{nodeResultId}/trace:
    get:
      summary: Get a node's execution trace
      operationId: getWorkflowNodeTrace
      description: Returns the full execution trace (audit log) for a single node within a run. Look up the node-result id and audit_log_id from the run log. Requires a USER API key.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type:
          - number
          - 'null'
          example: 501
        required: false
        name: workflowId
        in: path
      - schema:
          type:
          - number
          - 'null'
          example: 9001
        required: false
        name: logId
        in: path
      - schema:
          type:
          - number
          - 'null'
          example: 7001
        required: false
        name: nodeResultId
        in: path
      responses:
        '200':
          description: The node execution trace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicExecutionTrace'
components:
  schemas:
    WorkflowRunResult:
      type: object
      properties:
        automationId:
          type: number
          example: 42
        name:
          type: string
          example: Daily CRM Sync
        status:
          type: string
          enum:
          - ACTIVE
          - DELETED
          - DRAFT
          example: ACTIVE
        enqueued:
          type: boolean
          example: true
      required:
      - automationId
      - name
      - status
      - enqueued
    WorkflowAnalytics:
      type: object
      properties:
        runsByDate:
          type: array
          items:
            type: object
            properties:
              date:
                type:
                - string
                - 'null'
                example: '2024-01-01'
              totalRuns:
                type: number
                example: 100
              completedRuns:
                type: number
                example: 95
              failedRuns:
                type: number
                example: 5
              pendingRuns:
                type: number
                example: 0
              totalCredits:
                type: number
                example: 250.5
            required:
            - date
            - totalRuns
            - completedRuns
            - failedRuns
            - pendingRuns
            - totalCredits
        summary:
          type: object
          properties:
            totalRuns:
              type: number
              example: 1000
            completedRuns:
              type: number
              example: 950
            failedRuns:
              type: number
              example: 50
            pendingRuns:
              type: number
              example: 0
            totalCredits:
              type: number
              example: 2500
            averageCreditsPerRun:
              type: number
              example: 2.5
            nonExecutedRuns:
              type: number
              example: 10
          required:
          - totalRuns
          - completedRuns
          - failedRuns
          - pendingRuns
          - totalCredits
          - averageCreditsPerRun
          - nonExecutedRuns
      required:
      - runsByDate
      - summary
    DynamicTablesQueryCondition:
      type: object
      properties:
        path:
          type: string
          description: Field path in format [Field] or [Relation].[Field]
          example: '[Status]'
        operator:
          type: string
          example: equals
        value: {}
        valueType: {}
      required:
      - path
      - operator
    WorkflowDetail:
      allOf:
      - $ref: '#/components/schemas/Workflow'
      - type: object
        properties:
          liveSnapshotId:
            type:
            - string
            - 'null'
            example: 64f1c2e6a75f2d4a9a2f1234
          draftSnapshotId:
            type:
            - string
            - 'null'
            example: 64f1c2e6a75f2d4a9a2f1234
          nodes:
            type: array
            items:
              $ref: '#/components/schemas/PublicWorkflowNode'
        required:
        - liveSnapshotId
        - draftSnapshotId
    DynamicTablesQuery:
      anyOf:
      - $ref: '#/components/schemas/DynamicTablesQueryCondition'
      - $ref: '#/components/schemas/DynamicTablesQueryGroup'
      - {}
    ErrorBody:
      type: object
      properties:
        code:
          type: string
          enum:
          - bad_request
          - unauthorized
          - forbidden
          - not_found
          - conflict
          - internal_error
          - cli_outdated
          example: unauthorized
        message:
          type: string
          example: Detailed error message
        details:
          type: object
          description: 'Optional structured details. Validation errors include `{ issues: [...] }`.'
          example:
            issues:
            - path:
              - name
              message: String must contain at least 1 character(s)
              code: too_small
      required:
      - code
      - message
    Workflow:
      type: object
      properties:
        id:
          type: number
          example: 501
        name:
          type: string
          example: Daily CRM Sync
        description:
          type:
          - string
          - 'null'
          example: Syncs contacts to HubSpot
        status:
          type: string
          enum:
          - ACTIVE
          - DELETED
          - DRAFT
          example: ACTIVE
        triggerType:
          type:
          - string
          - 'null'
          enum:
          - CONVERSATION_ENDED
          - CONTACT_CREATED
          - CONTACT_UPDATED
          - FEEDBACK_CAPTURED
          - INCOMING_WEBHOOK
          - TABLE_ROW_CREATED
          - OBJECT_RECORD_CREATED
          - TABLE_ROW_UPDATED
          - OBJECT_RECORD_UPDATED
          - SCHEDULED_TRIGGER
          - CONVERSATION_IDLE
          - COMPOSIO_TRIGGER
          example: CONVERSATION_ENDED
        createdAt:
          type: string
          example: '2024-01-01T12:00:00Z'
        updatedAt:
          type: string
          example: '2024-01-01T12:00:00Z'
        runsCount:
          type: number
          example: 1200
        runsFailedCount:
          type: number
          example: 5
        lastRunDate:
          type:
          - string
          - 'null'
          example: '2024-01-01T12:00:00Z'
      required:
      - id
      - name
      - description
      - status
      - triggerType
      - createdAt
      - updatedAt
      - runsCount
      - runsFailedCount
      - lastRunDate
    DynamicTablesQueryGroup:
      type: object
      properties:
        operator:
          type: string
          enum:
          - and
          - or
        conditions:
          type: array
          items: {}
          description: Nested filter conditions or AND/OR groups
      required:
      - operator
      - conditions
    PublicWorkflowUpdateInput:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          example: Daily CRM Sync
        description:
          type:
          - string
          - 'null'
          example: Syncs contacts daily
        status:
          type: string
          enum:
          - ACTIVE
          - DELETED
          - DRAFT
          example: ACTIVE
      required:
      - name
    Error:
      type: object
      properties:
        ok:
          type: boolean
          enum:
          - false
          example: false
        error:
          $ref: '#/components/schemas/ErrorBody'
      required:
      - ok
      - error
    PublicWorkflowNodeCreateInput:
      type: object
      properties:
        node:
          type: object
          properties:
            name:
              type: string
              example: Initial trigger
            position:
              type: object
              properties:
                positionX:
                  type: number
                positionY:
                  type: number
              required:
              - positionX
              - positionY
            type:
              type: string
              enum:
              - TRIGGER
              - SCHEDULED_TRIGGER
              - WEBHOOK
              - TOOLS_AI
              - API
              - CONDITIONAL_ROUTING
              - AI_CAPTURE
              - DATA_TRANSFORMER
              - DYNAMIC_TABLES
              - ITERATION
              - BREAK
              - AUTOMATION_STATUS
              - SEND_MESSAGE
              - SEND_WHATSAPP_MESSAGE
              - TRANSCRIPTION
              - FILE_ANALYSIS
              - CREATE_RECORD_ACTIVITY
              example: TRIGGER
            data:
              oneOf:
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                    - TRIGGER
                  triggerType:
                    type:
                    - string
                    - 'null'
                    enum:
                    - CONVERSATION_ENDED
                    - CONTACT_CREATED
                    - CONTACT_UPDATED
                    - FEEDBACK_CAPTURED
                    - INCOMING_WEBHOOK
                    - TABLE_ROW_CREATED
                    - OBJECT_RECORD_CREATED
                    - TABLE_ROW_UPDATED
                    - OBJECT_RECORD_UPDATED
                    - CONVERSATION_IDLE
                    - COMPOSIO_TRIGGER
                  triggeredBy:
                    type:
                    - string
                    - 'null'
                    enum:
                    - BOTH
                    - AGENT
                    - USER
                    - INCOMING_WEBHOOK
                  triggeredByAgentIds:
                    type: array
                    items:
                      type: string
                  triggerByWebhookIds:
                    type: array
                    items:
                      type: string
                  triggeredByTableId:
                    type:
                    - number
                    - 'null'
                  triggeredByRecordTypeId:
                    type:
                    - number
                    - 'null'
                  connectedAccountTriggerId:
                    type:
                    - string
                    - 'null'
                  triggerToolkit:
                    type:
                    - string
                    - 'null'
                  triggerSlug:
                    type:
                    - string
                    - 'null'
                  triggerConfig:
                    type:
                    - object
                    - 'null'
                    additionalProperties: {}
                  triggerQueryConfig:
                    type:
                    - object
                    - 'null'
                    properties:
                      query:
                        type: object
                        description: 'Dynamic-table query: a single `{ path, operator, value }` condition, or a nested `{ operator: ''and'' | ''or'', conditions: [...] }` group.'
                  connectedAccountId:
                    type:
                    - number
                    - 'null'
                required:
                - type
                additionalProperties: false
                description: Event-based entry point. Conversation triggers (CONVERSATION_ENDED, CONVERSATION_IDLE, FEEDBACK_CAPTURED) only fire for the agents listed in triggeredByAgentIds — leave it empty and the workflow never runs. Get the ids from GET /public/v1/agents.
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                    - SCHEDULED_TRIGGER
                  cronExpression:
                    type: string
                    description: Cron expression (default preset). Validated by cron-validate.
                    example: 0 9 * * 1-5
                  timezone:
                    type: string
                    description: IANA timezone identifier. Validated against the host ICU table.
                    example: America/Argentina/Buenos_Aires
                  startTime:
                    type:
                    - string
                    - 'null'
                  endTime:
                    type:
                    - string
                    - 'null'
                  startDate:
                    type:
                    - string
                    - 'null'
                  endDate:
                    type:
                    - string
                    - 'null'
                  frequency:
                    type:
                    - string
                    - 'null'
                    enum:
                    - INTERVALS
                    - DAILY
                    - WEEKLY
                    - MONTHLY
                required:
                - type
                - cronExpression
                - timezone
                - startTime
                - endTime
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                    - WEBHOOK
                  includeConversationTranscript:
                    type: boolean
                    default: false
                  includeContactInfo:
                    type: boolean
                    default: false
                  includeFeedbackCaptured:
                    type: boolean
                    default: false
                  includeCapturedVariables:
                    type: boolean
                    default: false
                  includeWebhookPayload:
                    type: boolean
                    default: false
                  url:
                    type:
                    - string
                    - 'null'
                required:
                - type
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                    - TOOLS_AI
                  conditions:
                    type: array
                    items:
                      type: object
                      properties:
                        handleId:
                          type: string
                        expression:
                          type: string
                      required:
                      - handleId
                      - expression
                  temperature:
                    type: number
                  model:
                    type: string
                  aiVendor:
                    type: string
                    enum:
                    - OPENAI
                    - ANTHROPIC
                    - GOOGLE
                    - AZURE
                    - DEEPSEEK
                    - LLAMA
                  instructions:
                    type:
                    - string
                    - 'null'
                  prompt:
                    type:
                    - string
                    - 'null'
                  customToolIds:
                    type:
                    - array
                    - 'null'
                    items:
                      type: number
                  maxIterations:
                    type: number
                    minimum: 1
                    maximum: 30
                    default: 10
                  agentType:
                    type: string
                    enum:
                    - BASIC
                    - ADVANCED
                    default: BASIC
                  captureVariables:
                    type:
                    - array
                    - 'null'
                    items: {}
                  knowledgeBaseMode:
                    type: string
                    enum:
                    - DEFAULT
                    - CUSTOM
                    - DISABLED
                    default: DEFAULT
                  knowledgeBaseIds:
                    type:
                    - array
                    - 'null'
                    items:
                      type: integer
                      exclusiveMinimum: 0
                  selectedRecordTypes:
                    type:
                    - array
                    - 'null'
                    items:
                      type: object
                      properties:
                        recordTypeId:
                          type: number
                        read:
                          type: boolean
                        create:
                          type: boolean
                        update:
     

# --- truncated at 32 KB (125 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/frontline/refs/heads/main/openapi/frontline-workflows-api-openapi.yml