openapi: 3.0.0 info: title: Public Account Flows 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 ``` ### 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: Flows description: View and manage flows associated with your agents paths: /public/v1/agents/{agentId}/flows: get: summary: List flows for an agent operationId: listAgentFlows description: Returns a list of flows associated with a specific agent. Nodes and logic are excluded. security: - accountApiKey: [] - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: string enum: - ACTIVE - SUSPENDED - DELETED - DRAFT example: ACTIVE required: false name: status in: query responses: '200': description: A list of flows content: application/json: schema: type: object properties: results: type: array items: $ref: '#/components/schemas/Flow' required: - results description: Standard list response '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' post: summary: Create a flow for an agent operationId: createAgentFlow description: Creates a flow and an empty graph snapshot for a specific agent. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowCreateInput' responses: '201': description: Created flow content: application/json: schema: $ref: '#/components/schemas/FlowDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' /public/v1/agents/{agentId}/flows/{flowId}: get: summary: Get flow details operationId: getAgentFlow description: Returns flow metadata. Pass includeNodes=true to include graph nodes. security: - accountApiKey: [] - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path - schema: anyOf: - type: boolean example: false - type: string example: example required: false name: includeNodes in: query - schema: anyOf: - type: boolean example: false - type: string example: example required: false name: draft in: query responses: '200': description: Flow details content: application/json: schema: $ref: '#/components/schemas/FlowDetail' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' put: summary: Update a flow operationId: updateAgentFlow description: Updates flow metadata or status. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowUpdateInput' responses: '200': description: Updated flow content: application/json: schema: $ref: '#/components/schemas/FlowDetail' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' delete: summary: Delete a flow operationId: deleteAgentFlow description: Soft deletes a flow. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path responses: '204': description: Flow deleted '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' /public/v1/agents/{agentId}/flows/{flowId}/graph: get: summary: Get flow graph operationId: getAgentFlowGraph description: Returns the flow snapshot with nodes and edges. security: - accountApiKey: [] - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path responses: '200': description: Flow graph content: application/json: schema: $ref: '#/components/schemas/FlowGraph' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' /public/v1/agents/{agentId}/flows/{flowId}/nodes: post: summary: Create flow node operationId: createAgentFlowNode description: Creates a node in a flow graph. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowNodeCreateInput' responses: '201': description: Created node content: application/json: schema: $ref: '#/components/schemas/PublicFlowNode' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' /public/v1/agents/{agentId}/flows/{flowId}/nodes/{nodeId}: put: summary: Update flow node operationId: updateAgentFlowNode description: Updates a flow node and returns the updated graph. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path - schema: type: string example: start_1 required: true name: nodeId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowNodeUpdateInput' responses: '200': description: Updated graph content: application/json: schema: $ref: '#/components/schemas/FlowGraph' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' delete: summary: Delete flow node operationId: deleteAgentFlowNode description: Deletes a node and removes incoming and outgoing edges. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path - schema: type: string example: start_1 required: true name: nodeId in: path responses: '200': description: Updated graph content: application/json: schema: $ref: '#/components/schemas/FlowGraph' /public/v1/agents/{agentId}/flows/{flowId}/edges: post: summary: Create flow edge operationId: createAgentFlowEdge description: Adds or replaces an edge by handle in the flow graph. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowEdgeInput' responses: '200': description: Updated graph content: application/json: schema: $ref: '#/components/schemas/FlowGraph' '409': description: Invalid graph content: application/json: schema: $ref: '#/components/schemas/Error' delete: summary: Delete flow edge operationId: deleteAgentFlowEdge description: Removes an edge from the flow graph. security: - userApiKey: [] tags: - Flows parameters: - schema: type: string example: uuid-xxxx-xxxx required: true name: agentId in: path - schema: type: number nullable: true example: 101 required: false name: flowId in: path requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicFlowEdgeDeleteInput' responses: '200': description: Updated graph content: application/json: schema: $ref: '#/components/schemas/FlowGraph' components: schemas: 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 PublicFlowEdgeInput: type: object properties: edge: type: object properties: source: type: string example: trigger_1 sourceHandle: type: string example: default target: type: string example: api_1 targetHandle: type: string example: default required: - source - sourceHandle - target - targetHandle required: - edge DynamicTablesQueryCondition: type: object properties: path: type: string description: Field path in format [Field] or [Relation].[Field] example: '[Status]' operator: type: string example: equals value: nullable: true type: object valueType: nullable: true type: object required: - path - operator PublicFlowUpdateInput: type: object properties: name: type: string minLength: 1 example: Order Routing description: type: string nullable: true example: Routes order conversations status: type: string enum: - ACTIVE - SUSPENDED - DELETED - DRAFT example: ACTIVE required: - name FlowGraph: 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/PublicFlowNode' 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 PublicFlowNode: 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: Start name: type: string example: Start position: type: object properties: positionX: type: number example: 1 positionY: type: number example: 1 required: - positionX - positionY type: type: string enum: - START - TRIGGER_INTENT - SAY_AI - RESPONSE_AI - TOOLS_AI - API - CONDITIONAL_ROUTING - DYNAMIC_TABLES example: START data: oneOf: - type: object properties: type: type: string enum: - TRIGGER_INTENT example: TRIGGER_INTENT agenticRouting: type: string nullable: true example: example intentIds: type: array nullable: true items: type: number example: 1 intents: type: array nullable: true items: type: object properties: id: type: number example: 1 name: type: string example: example description: type: string nullable: true example: example createdAt: type: string nullable: true example: example updatedAt: type: string nullable: true example: example status: type: string enum: - ACTIVE - DELETED example: ACTIVE assistantId: type: string example: example phrases: type: array items: type: object properties: id: type: number example: 1 phrase: type: string example: example required: - id - phrase flowId: type: number nullable: true example: 1 required: - id - name - createdAt - updatedAt - status - assistantId required: - type - type: object properties: type: type: string enum: - SAY_AI example: SAY_AI message: type: string nullable: true example: example temperature: type: number default: 0.7 example: 1 prompt: type: string nullable: true example: example aiModelId: type: number nullable: true example: 1 model: type: string nullable: true example: example aiVendor: type: string nullable: true enum: - OPENAI - ANTHROPIC - GOOGLE - AZURE - DEEPSEEK - LLAMA example: OPENAI sayWithAi: type: boolean example: false required: - type - sayWithAi - type: object properties: type: type: string enum: - RESPONSE_AI example: RESPONSE_AI assistantId: type: string format: uuid description: Owning assistant UUID. Validated against the account on save. example: 550e8400-e29b-41d4-a716-446655440000 aiModelId: type: number nullable: true 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 temperature: type: number example: 1 captureVariables: type: array items: nullable: true type: object exitNodeWhen: type: string enum: - ALL_VARIABLES - FLOW_TRIGGERED - ANY_VARIABLES example: ALL_VARIABLES 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 required: - type - assistantId - model - aiVendor - instructions - temperature - captureVariables - exitNodeWhen - 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 required: - type - routingType - conditions - type: object properties: type: type: string enum: - DYNAMIC_TABLES example: DYNAMIC_TABLES tableId: type: number nullable: true example: 1 recordTypeId: type: number nullable: true example: 1 targetRecordTypeId: type: number nullable: true description: Destination record type id. Required when actionType is CHANGE_RECORD_TYPE. example: 12 actionType: type: string nullable: true enum: - CREATE - UPDATE - DELETE - SEARCH - SEARCH_BY_ID - CHANGE_RECORD_TYPE description: 'Operation to run. Required-field rules per action: CREATE → rowData; UPDATE → rowId + rowData; DELETE / SEARCH_BY_ID → rowId; CHANGE_RECORD_TYPE → rowId + targetRecordTypeId.' example: CREATE rowData: type: object nullable: true additionalProperties: nullable: true type: object inputModeByField: type: object nullable: true additionalProperties: type: string enum: - INPUT - VARIABLE - EMPTY example: INPUT rowId: type: string nullable: true example: example search: type: string nullable: true example: example pageNum: type: number nullable: true example: 1 pageSize: type: number nullable: true example: 1 sort: type: array nullable: true items: type: object properties: path: type: string example: example type: type: string enum: - asc - desc example: asc required: - path - type query: $ref: '#/components/schemas/DynamicTablesQuery' required: - type - nullable: true type: object workflowId: type: string example: example handles: type: array items: type: object properties: handleId: type: string example: example sourceEdge: type: object properties: from: type: string example: example fromHandleId: type: string example: example to: type: string example: example toHandleId: type: string example: example required: - from - fromHandleId - to - toHandleId text: type: string example: example required: - handleId - sourceEdge - text targetEdges: type: array items: type: object properties: from: type: string example: example fromHandleId: type: string example: example to: type: string example: example toHandleId: type: string example: example required: - from - fromHandleId - to - toHandleId createdAt: type: string nullable: true example: example updatedAt: type: string nullable: true example: example required: - nodeId - position - type PublicFlowNodeInput: 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: Start name: type: string example: Start position: type: object properties: positionX: type: number example: 1 positionY: type: number example: 1 required: - positionX - positionY type: type: string enum: - START - TRIGGER_INTENT - SAY_AI - RESPONSE_AI - TOOLS_AI - API - CONDITIONAL_ROUTING - DYNAMIC_TABLES example: START data: oneOf: - type: object properties: type: type: string enum: - TRIGGER_INTENT example: TRIGGER_INTENT agenticRouting: type: string nullable: true example: example intentIds: type: array nullable: true items: type: number example: 1 intents: type: array nullable: true items: type: object properties: id: type: number example: 1 name: type: string example: example description: type: string nullable: true example: example createdAt: type: string nullable: true example: example updatedAt: type: string nullable: true example: example status: type: string enum: - ACTIVE - DELETED example: ACTIVE assistantId: type: string example: example phrases: type: array items: type: object properties: id: type: number example: 1 phrase: type: string example: example required: - id - phrase flowId: type: number nullable: true example: 1 required: - id - name - createdAt - updatedAt - status - assistantId required: - type - type: object properties: type: type: string enum: - SAY_AI example: SAY_AI message: type: string nullable: true example: example temperature: type: number default: 0.7 example: 1 prompt: type: string nullable: true example: example aiModelId: type: number nullable: true example: 1 model: type: string nullable: true example: example aiVendor: type: string nullable: true enum: - OPENAI - ANTHROPIC - GOOGLE - AZURE - DEEPSEEK - LLAMA example: OPENAI sayWithAi: type: boolean example: false required: - type - sayWithAi - type: object properties: type: type: string enum: - RESPONSE_AI example: RESPONSE_AI assistantId: type: string format: uuid description: Owning assistant UUID. Validated against the account on save. example: 550e8400-e29b-41d4-a716-446655440000 aiModelId: type: number nullable: true 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 temperature: type: number example: 1 captureVariables: type: array items: nullable: true type: object exitNodeWhen: type: string enum: - ALL_VARIABLES - FLOW_TRIGGERED - ANY_VARIABLES example: ALL_VARIABLES 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 required: - type - assistantId - model - aiVendor - instructions - temperature - captureVariables - exitNodeWhen - 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 required: - type - routingType - conditions - type: object properties: type: type: string enum: - DYNAMIC_TABLES example: DYNAMIC_TABLES tableId: type: number nullable: true example: 1 recordTypeId: type: number nullable: true example: 1 targetRecordTypeId: type: number nullable: true description: Destination record type id. Required when actionType is CHANGE_RECORD_TYPE. example: 12 actionType: type: string nullable: true enum: - CREATE - UPDATE - DELETE - SEARCH - SEARCH_BY_ID - CHANGE_RECORD_TYPE description: 'Operation to run. Required-field rules per action: CREATE → rowData; UPDATE → rowId + rowData; DELETE / SEARCH_BY_ID → rowId; CHANGE_RECORD_TYPE → rowId + targetRecordTypeId.' example: CREATE rowData: type: object nullable: true additionalProperties: nullable: true type: object inputModeByField: type: object nullable: true additionalProperties: type: string enum: - INPUT - VARIABLE - EMPTY example: INPUT rowId: type: string nullable: true example: example search: type: string nullable: true example: example pageNum: type: number nullable: true example: 1 pageSize: type: number nullable: true example: 1 sort: type: array nullable: true items: type: object properties: path: type: string example: example type: type: string enum: - asc - desc example: asc required: - path - type query: $ref: '#/components/schemas/DynamicTablesQuery' required: - type - nullable: true type: object required: - nodeId - position - type FlowDetail: allOf: - $ref: '#/components/schemas/Flow' - type: object properties: assistantId: type: string example: 550e8400-e29b-41d4-a716-446655440000 isDefault: type: boolean example: false liveSnapshotId: type: string nullable: true example: 64f1c2e6a75f2d4a9a2f1234 draftSnapshotId: type: string nullable: true example: 64f1c2e6a75f2d4a9a2f1234 nodes: type: array items: $ref: '#/components/schemas/PublicFlowNode' required: - assistantId - isDefault - liveSnapshotId - draftSnapshotId PublicFlowNodePatch: type: object properties: alias: type: string nullable: true example: Start name: type: string example: Start position: type: object properties: positionX: type: number example: 1 positionY: type: number example: 1 required: - positionX - positionY type: type: string enum: - START - TRIGGER_INTENT - SAY_AI - RESPONSE_AI - TOOLS_AI - API - CONDITIONAL_ROUTING - DYNAMIC_TABLES example: START data: oneOf: - type: object properties: type: type: string enum: - TRIGGER_INTENT example: TRIGGER_INTENT agenticRouting: type: string nullable: true example: example intentIds: type: array nullable: true items: type: number example: 1 intents: type: array nullable: true items: type: object properties: id: type: number example: 1 name: type: string example: example description: type: string nullable: true example: example createdAt: type: string nullable: true example: example updatedAt: type: string nullable: true example: example status: type: string enum: - ACTIVE - DELETED example: ACTIVE assistantId: type: string example: example phrases: type: array items: type: object properties: id: type: number example: 1 phrase: type: string example: example required: - id - phrase flowId: type: number nullable: true example: 1 required: - id - name - createdAt - updatedAt - status - assistantId required: - type - type: object properties: type: type: string enum: - SAY_AI example: SAY_AI message: type: string nullable: true example: example temperature: type: number default: 0.7 example: 1 prompt: type: string nullable: true example: example aiModelId: type: number nullable: true example: 1 model: type: string nullable: true example: example aiVendor: type: string nullable: true enum: - OPENAI - ANTHROPIC - GOOGLE - AZURE - DEEPSEEK - LLAMA example: OPENAI sayWithAi: type: boolean example: false required: - type - sayWithAi - type: object properties: type: type: string enum: - RESPONSE_AI example: RESPONSE_AI assistantId: type: string format: uuid description: Owning assistant UUID. Validated against the account on save. example: 550e8400-e29b-41d4-a716-446655440000 aiModelId: type: number nullable: true 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 temperature: type: number example: 1 captureVariables: type: array items: nullable: true type: object exitNodeWhen: type: string enum: - ALL_VARIABLES - FLOW_TRIGGERED - ANY_VARIABLES example: ALL_VARIABLES 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 required: - type - assistantId - model - aiVendor - instructions - temperature - captureVariables - exitNodeWhen - 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 required: - type - routingType - conditions - type: object properties: type: type: string enum: - DYNAMIC_TABLES example: DYNAMIC_TABLES tableId: type: number nullable: true example: 1 recordTypeId: type: number nullable: true example: 1 targetRecordTypeId: type: number nullable: true description: Destination record type id. Required when actionType is CHANGE_RECORD_TYPE. example: 12 actionType: type: string nullable: true enum: - CREATE - UPDATE - DELETE - SEARCH - SEARCH_BY_ID - CHANGE_RECORD_TYPE description: 'Operation to run. Required-field rules per action: CREATE → rowData; UPDATE → rowId + rowData; DELETE / SEARCH_BY_ID → rowId; CHANGE_RECORD_TYPE → rowId + targetRecordTypeId.' example: CREATE rowData: type: object nullable: true additionalProperties: nullable: true type: object inputModeByField: type: object nullable: true additionalProperties: type: string enum: - INPUT - VARIABLE - EMPTY example: INPUT rowId: type: string nullable: true example: example search: type: string nullable: true example: example pageNum: type: number nullable: true example: 1 pageSize: type: number nullable: true example: 1 sort: type: array nullable: true items: type: object properties: path: type: string example: example type: type: string enum: - asc - desc example: asc required: - path - type query: $ref: '#/components/schemas/DynamicTablesQuery' required: - type - nullable: true type: object PublicFlowCreateInput: type: object properties: name: type: string minLength: 1 example: Order Routing description: type: string nullable: true example: Routes order conversations required: - name PublicFlowEdgeDeleteInput: type: object properties: edge: type: object properties: source: type: string example: trigger_1 sourceHandle: type: string example: default target: type: string example: api_1 targetHandle: type: string example: default required: - source - sourceHandle - target - targetHandle required: - edge DynamicTablesQuery: anyOf: - $ref: '#/components/schemas/DynamicTablesQueryCondition' - $ref: '#/components/schemas/DynamicTablesQueryGroup' - nullable: true type: object PublicFlowNodeUpdateInput: type: object properties: node: $ref: '#/components/schemas/PublicFlowNodePatch' required: - node Error: type: object properties: ok: type: boolean enum: - false example: false error: $ref: '#/components/schemas/ErrorBody' required: - ok - error Flow: type: object properties: id: type: number example: 101 name: type: string example: Order Retrieval description: type: string nullable: true example: Extracts order info from DB status: type: string enum: - ACTIVE - SUSPENDED - DELETED - DRAFT example: ACTIVE createdAt: type: string example: '2024-01-01T12:00:00Z' updatedAt: type: string example: '2024-01-01T12:00:00Z' runCount: type: number example: 450 required: - id - name - description - status - createdAt - updatedAt - runCount PublicFlowNodeCreateInput: type: object properties: node: $ref: '#/components/schemas/PublicFlowNodeInput' required: - node DynamicTablesQueryGroup: type: object properties: operator: type: string enum: - and - or example: and conditions: type: array items: nullable: true type: object description: Nested filter conditions or AND/OR groups required: - operator - conditions securitySchemes: accountApiKey: type: http scheme: bearer bearerFormat: Account API Key description: Account-level API key (GENERAL). Authenticates on behalf of the entire account. Use for read-only and analytics endpoints marked as account-level in this documentation. userApiKey: type: http scheme: bearer bearerFormat: User API Key description: User-level API key (USER). Authenticates on behalf of a specific user. Required for write operations and user-owned resources. Also accepted on all account-level endpoints. x-tagGroups: - name: Agent Builder tags: - Agent Builder - Flows - Flow Variables - Intents - Agents - name: Workflows tags: - Workflows - Workflow Variables - name: Objects tags: - Objects - Object fields - Object options - Object record types - Object views - Object relations - Object rows - Object aggregations - Object activities - Object tasks - Object files - Object export - name: Tables tags: - Tables - Table fields - Table options - Table rows - Table aggregations - Table activities - Table tasks - Table files - Table export - name: Integrations tags: - Tools - Incoming Webhooks - name: Core tags: - Account - AI Models - Billing