Frontline Workflows API

View and manage your workflows across your account

OpenAPI Specification

frontline-workflows-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Public Account 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
          nullable: true
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          anyOf:
          - type: boolean
            example: false
          - type: string
            example: example
        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
          nullable: true
          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
          nullable: true
          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
          nullable: true
          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}/nodes:
    post:
      summary: Create workflow node
      operationId: createWorkflowNode
      description: Creates a node in an automation workflow graph.
      security:
      - userApiKey: []
      tags:
      - Workflows
      parameters:
      - schema:
          type: number
          nullable: true
          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/PublicWorkflowNode'
        '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
          nullable: true
          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
          nullable: true
          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
          nullable: true
          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
          nullable: true
          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
          nullable: true
          example: 42
        required: false
        name: workflowId
        in: path
      - schema:
          type: string
          nullable: true
          example: '2024-01-01'
        required: false
        name: startDate
        in: query
      - schema:
          type: string
          nullable: true
          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
          nullable: true
          example: 501
        required: false
        name: workflowId
        in: path
      - schema:
          type: string
          enum:
          - COMPLETED
          - PENDING
          - FAILED
          example: COMPLETED
        required: false
        name: status
        in: query
      - schema:
          type: string
          nullable: true
          example: '2026-01-01'
        required: false
        name: start_date
        in: query
      - schema:
          type: string
          nullable: true
          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
          nullable: true
          example: 501
        required: false
        name: workflowId
        in: path
      - schema:
          type: number
          nullable: true
          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'
components:
  schemas:
    WorkflowDetail:
      allOf:
      - $ref: '#/components/schemas/Workflow'
      - type: object
        properties:
          liveSnapshotId:
            type: string
            nullable: true
            example: 64f1c2e6a75f2d4a9a2f1234
          draftSnapshotId:
            type: string
            nullable: true
            example: 64f1c2e6a75f2d4a9a2f1234
          nodes:
            type: array
            items:
              $ref: '#/components/schemas/PublicWorkflowNode'
        required:
        - liveSnapshotId
        - draftSnapshotId
    WorkflowGraph:
      type: object
      properties:
        id:
          type: string
          example: example
        assistantId:
          type: string
          nullable: true
          example: example
        accountId:
          type: number
          nullable: true
          example: 1
        entityId:
          type: number
          example: 1
        type:
          type: string
          enum:
          - FLOW
          - AUTOMATION
          example: FLOW
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/PublicWorkflowNode'
        createdAt:
          type: string
          example: example
        updatedAt:
          type: string
          nullable: true
          example: example
        executed:
          type: boolean
          default: false
          example: false
        breakingChangeAt:
          type: string
          nullable: true
          example: example
        breakingChangeReason:
          type: string
          nullable: true
          example: example
      required:
      - entityId
      - type
      - nodes
      - createdAt
    WorkflowAnalytics:
      type: object
      properties:
        runsByDate:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
                nullable: true
                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
    PublicWorkflowNodeInput:
      type: object
      properties:
        nodeId:
          type: string
          pattern: node_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
          example: node_550e8400-e29b-41d4-a716-446655440000
        alias:
          type: string
          nullable: true
          example: Initial trigger
        name:
          type: string
          example: Initial trigger
        position:
          type: object
          properties:
            positionX:
              type: number
              example: 1
            positionY:
              type: number
              example: 1
          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
                example: TRIGGER
              triggerType:
                type: string
                nullable: true
                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
              triggeredBy:
                type: string
                nullable: true
                enum:
                - BOTH
                - AGENT
                - USER
                - INCOMING_WEBHOOK
                example: BOTH
              triggeredByAgentIds:
                type: array
                items:
                  type: string
                  example: example
              triggerByWebhookIds:
                type: array
                items:
                  type: string
                  example: example
              triggeredByTableId:
                type: number
                nullable: true
                example: 1
              triggeredByRecordTypeId:
                type: number
                nullable: true
                example: 1
              connectedAccountTriggerId:
                type: string
                nullable: true
                example: example
              triggerToolkit:
                type: string
                nullable: true
                example: example
              triggerSlug:
                type: string
                nullable: true
                example: example
              triggerConfig:
                type: object
                nullable: true
                additionalProperties:
                  nullable: true
                  type: object
              triggerQueryConfig:
                type: object
                nullable: true
                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
                nullable: true
                example: 1
            required:
            - type
          - type: object
            properties:
              type:
                type: string
                enum:
                - SCHEDULED_TRIGGER
                example: 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
                nullable: true
                example: example
              endTime:
                type: string
                nullable: true
                example: example
              startDate:
                type: string
                nullable: true
                example: example
              endDate:
                type: string
                nullable: true
                example: example
              frequency:
                type: string
                nullable: true
                enum:
                - INTERVALS
                - DAILY
                - WEEKLY
                - MONTHLY
                example: INTERVALS
            required:
            - type
            - cronExpression
            - timezone
            - startTime
            - endTime
          - type: object
            properties:
              type:
                type: string
                enum:
                - WEBHOOK
                example: WEBHOOK
              includeConversationTranscript:
                type: boolean
                default: false
                example: false
              includeContactInfo:
                type: boolean
                default: false
                example: false
              includeFeedbackCaptured:
                type: boolean
                default: false
                example: false
              includeCapturedVariables:
                type: boolean
                default: false
                example: false
              includeWebhookPayload:
                type: boolean
                default: false
                example: false
              url:
                type: string
                nullable: true
                format: uri
                example: https://api.example.com/contacts/123
            required:
            - type
          - type: object
            properties:
              type:
                type: string
                enum:
                - TOOLS_AI
                example: TOOLS_AI
              conditions:
                type: array
                items:
                  type: object
                  properties:
                    handleId:
                      type: string
                      example: example
                    expression:
                      type: string
                      example: example
                  required:
                  - handleId
                  - expression
              temperature:
                type: number
                example: 1
              model:
                type: string
                example: example
              aiVendor:
                type: string
                enum:
                - OPENAI
                - ANTHROPIC
                - GOOGLE
                - AZURE
                - DEEPSEEK
                - LLAMA
                example: OPENAI
              instructions:
                type: string
                nullable: true
                example: example
              prompt:
                type: string
                nullable: true
                example: example
              customToolIds:
                type: array
                nullable: true
                items:
                  type: number
                  example: 1
              maxIterations:
                type: number
                minimum: 1
                maximum: 30
                default: 10
                example: 1
              agentType:
                type: string
                enum:
                - BASIC
                - ADVANCED
                default: BASIC
                example: BASIC
              captureVariables:
                type: array
                nullable: true
                items:
                  nullable: true
                  type: object
              knowledgeBaseMode:
                type: string
                enum:
                - DEFAULT
                - CUSTOM
                - DISABLED
                default: DEFAULT
                example: DEFAULT
              knowledgeBaseIds:
                type: array
                nullable: true
                items:
                  type: integer
                  minimum: 0
                  exclusiveMinimum: true
                  example: 1
              selectedRecordTypes:
                type: array
                nullable: true
                items:
                  type: object
                  properties:
                    recordTypeId:
                      type: number
                      example: 1
                    read:
                      type: boolean
                      example: false
                    create:
                      type: boolean
                      example: false
                    update:
                      type: boolean
                      example: false
                    delete:
                      type: boolean
                      example: false
                    createActivity:
                      type: boolean
                      example: false
                  required:
                  - recordTypeId
              systemToolsConfig:
                type: object
                nullable: true
                properties:
                  webSearchEnabled:
                    type: boolean
                    default: false
                    example: false
                  urlScrapeEnabled:
                    type: boolean
                    default: false
                    example: false
                  linkedinSearchEnabled:
                    type: boolean
                    default: false
                    example: false
              connectedAccountConfigs:
                type: array
                nullable: true
                items:
                  type: object
                  properties:
                    connectedAccountId:
                      type: number
                      example: 1
                    useAllTools:
                      type: boolean
                      default: true
                      example: false
                    selectedToolSlugs:
                      type: array
                      nullable: true
                      items:
                        type: string
                        example: example
                  required:
                  - connectedAccountId
              playbookIds:
                type: array
                nullable: true
                items:
                  type: integer
                  minimum: 0
                  exclusiveMinimum: true
                  example: 1
            required:
            - type
            - conditions
            - instructions
          - type: object
            properties:
              type:
                type: string
                enum:
                - API
                example: API
              url:
                type: string
                format: uri
                example: https://api.example.com/hook
              method:
                type: string
                enum:
                - GET
                - POST
                - PUT
                - DELETE
                - PATCH
                example: GET
              headers:
                type: array
                items:
                  type: object
                  properties:
                    key:
                      type: string
                      example: example
                    value:
                      type: string
                      example: example
                  required:
                  - key
                  - value
              body:
                type: string
                nullable: true
                example: example
              response:
                type: string
                nullable: true
                example: example
              parameters:
                type: array
                nullable: true
                items:
                  type: object
                  properties:
                    key:
                      type: string
                      example: example
                    value:
                      type: string
                      example: example
                  required:
                  - key
                  - value
              variables:
                type: array
                nullable: true
                items:
                  type: object
                  properties:
                    key:
                      type: string
                      example: example
                    value:
                      type: string
                      example: example
                    fullResponse:
                      type: boolean
                      default: false
                      example: false
                  required:
                  - key
                  - value
            required:
            - type
            - url
            - method
            - headers
          - type: object
            properties:
              type:
                type: string
                enum:
                - CONDITIONAL_ROUTING
                example: CONDITIONAL_ROUTING
              routingType:
                type: string
                enum:
                - CONDITIONAL_AI
                - DYNAMIC
                example: CONDITIONAL_AI
              conditions:
                type: array
                items:
                  type: object
                  properties:
                    handleId:
                      type: string
                      example: example
                    expression:
                      type: string
                      example: example
                  required:
                  - handleId
                  - expression
              temperature:
                type: number
                example: 1
              model:
                type: string
                example: example
              aiVendor:
                type: string
                enum:
                - OPENAI
                - ANTHROPIC
                - GOOGLE
                - AZURE
                - DEEPSEEK
                - LLAMA
                example: OPENAI
  

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