Frontline Workflows API
View and manage your workflows across your account
View and manage your workflows across your account
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