Frontline Workflows API
View and manage your workflows across your account
View and manage your workflows across your account
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/frontline-workflows-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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