Import workflow from Agent Spec JSON
curl --request POST \
--url http://localhost:5173/api/flowdrop/workflows/import/agentspec \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"component_type": "flow",
"name": "document_processing",
"start_node": "start",
"nodes": [
{
"component_type": "start_node",
"name": "process_input",
"description": "<string>",
"inputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": [
"<unknown>"
],
"items": "<unknown>",
"properties": {},
"required": [
"<string>"
]
}
],
"outputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": [
"<unknown>"
],
"items": "<unknown>",
"properties": {},
"required": [
"<string>"
]
}
],
"metadata": {}
}
],
"control_flow_connections": [
{
"name": "start_to_process",
"from_node": "start",
"to_node": "process_input",
"from_branch": "high_priority"
}
],
"description": "<string>",
"data_flow_connections": [
{
"name": "query_to_llm",
"source_node": "process_input",
"source_output": "processed_text",
"destination_node": "llm_generate",
"destination_input": "prompt"
}
],
"metadata": {}
}
'import requests
url = "http://localhost:5173/api/flowdrop/workflows/import/agentspec"
payload = {
"component_type": "flow",
"name": "document_processing",
"start_node": "start",
"nodes": [
{
"component_type": "start_node",
"name": "process_input",
"description": "<string>",
"inputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": ["<unknown>"],
"items": "<unknown>",
"properties": {},
"required": ["<string>"]
}
],
"outputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": ["<unknown>"],
"items": "<unknown>",
"properties": {},
"required": ["<string>"]
}
],
"metadata": {}
}
],
"control_flow_connections": [
{
"name": "start_to_process",
"from_node": "start",
"to_node": "process_input",
"from_branch": "high_priority"
}
],
"description": "<string>",
"data_flow_connections": [
{
"name": "query_to_llm",
"source_node": "process_input",
"source_output": "processed_text",
"destination_node": "llm_generate",
"destination_input": "prompt"
}
],
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
component_type: 'flow',
name: 'document_processing',
start_node: 'start',
nodes: [
{
component_type: 'start_node',
name: 'process_input',
description: '<string>',
inputs: [
{
title: 'user_query',
type: 'string',
description: '<string>',
default: '<unknown>',
enum: ['<unknown>'],
items: '<unknown>',
properties: {},
required: ['<string>']
}
],
outputs: [
{
title: 'user_query',
type: 'string',
description: '<string>',
default: '<unknown>',
enum: ['<unknown>'],
items: '<unknown>',
properties: {},
required: ['<string>']
}
],
metadata: {}
}
],
control_flow_connections: [
{
name: 'start_to_process',
from_node: 'start',
to_node: 'process_input',
from_branch: 'high_priority'
}
],
description: '<string>',
data_flow_connections: [
{
name: 'query_to_llm',
source_node: 'process_input',
source_output: 'processed_text',
destination_node: 'llm_generate',
destination_input: 'prompt'
}
],
metadata: {}
})
};
fetch('http://localhost:5173/api/flowdrop/workflows/import/agentspec', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "5173",
CURLOPT_URL => "http://localhost:5173/api/flowdrop/workflows/import/agentspec",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'component_type' => 'flow',
'name' => 'document_processing',
'start_node' => 'start',
'nodes' => [
[
'component_type' => 'start_node',
'name' => 'process_input',
'description' => '<string>',
'inputs' => [
[
'title' => 'user_query',
'type' => 'string',
'description' => '<string>',
'default' => '<unknown>',
'enum' => [
'<unknown>'
],
'items' => '<unknown>',
'properties' => [
],
'required' => [
'<string>'
]
]
],
'outputs' => [
[
'title' => 'user_query',
'type' => 'string',
'description' => '<string>',
'default' => '<unknown>',
'enum' => [
'<unknown>'
],
'items' => '<unknown>',
'properties' => [
],
'required' => [
'<string>'
]
]
],
'metadata' => [
]
]
],
'control_flow_connections' => [
[
'name' => 'start_to_process',
'from_node' => 'start',
'to_node' => 'process_input',
'from_branch' => 'high_priority'
]
],
'description' => '<string>',
'data_flow_connections' => [
[
'name' => 'query_to_llm',
'source_node' => 'process_input',
'source_output' => 'processed_text',
'destination_node' => 'llm_generate',
'destination_input' => 'prompt'
]
],
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:5173/api/flowdrop/workflows/import/agentspec"
payload := strings.NewReader("{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:5173/api/flowdrop/workflows/import/agentspec")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:5173/api/flowdrop/workflows/import/agentspec")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "My AI Workflow",
"nodes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "calculator",
"position": {
"x": 100,
"y": 200
},
"data": {
"label": "Math Calculator",
"config": {
"instanceTitle": "Email Summarizer",
"instanceDescription": "Summarizes incoming emails into 3 bullet points",
"instanceBadge": "LLM",
"nodeType": "simple",
"model": "gpt-4o-mini",
"temperature": 0.7,
"maxTokens": 1000,
"apiKey": "sk-...",
"dynamicInputs": [
{
"name": "extra_data",
"label": "Extra Data",
"dataType": "json",
"required": false
}
],
"dynamicOutputs": [
{
"name": "result",
"label": "Result",
"dataType": "string"
}
],
"branches": [
{
"name": "success",
"label": "Success",
"condition": "status === 200"
},
{
"name": "error",
"label": "Error",
"isDefault": true
}
]
},
"metadata": {
"id": "calculator",
"name": "Calculator",
"description": "Perform mathematical operations on input data",
"category": "processing",
"version": "1.0.0",
"inputs": [
{
"id": "json",
"name": "JSON Response",
"dataType": "mixed",
"required": false,
"description": "Parsed JSON response from the HTTP request",
"defaultValue": "<unknown>",
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"title": "User",
"description": "User information",
"properties": {
"id": {
"type": "integer",
"description": "User ID"
},
"name": {
"type": "string",
"description": "User full name"
},
"email": {
"type": "string",
"description": "User email address"
},
"address": {
"type": "object",
"title": "Address",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
}
},
"orders": {
"type": "array",
"title": "Orders",
"description": "List of user orders",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "number"
}
}
}
}
}
}
}
],
"outputs": [
{
"id": "json",
"name": "JSON Response",
"dataType": "mixed",
"required": false,
"description": "Parsed JSON response from the HTTP request",
"defaultValue": "<unknown>",
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"title": "User",
"description": "User information",
"properties": {
"id": {
"type": "integer",
"description": "User ID"
},
"name": {
"type": "string",
"description": "User full name"
},
"email": {
"type": "string",
"description": "User email address"
},
"address": {
"type": "object",
"title": "Address",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
}
},
"orders": {
"type": "array",
"title": "Orders",
"description": "List of user orders",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "number"
}
}
}
}
}
}
}
],
"supportedTypes": [],
"icon": "mdi:calculator",
"color": "#3b82f6",
"badge": "API",
"portDataType": "trigger",
"configSchema": {
"type": "object",
"properties": {},
"required": [
"<string>"
],
"additionalProperties": false
},
"tags": [
"math",
"calculation",
"processing"
],
"formats": [
"agentspec"
],
"extensions": {
"ui": {
"hideUnconnectedHandles": true,
"style": {
"opacity": 0.8
}
},
"agentspec:component_type": "llm_node",
"myapp:analytics": {
"trackUsage": true,
"customField": "value"
}
}
},
"isProcessing": true,
"error": "<string>",
"nodeId": "<string>",
"executionInfo": {
"executionCount": 5,
"isExecuting": true,
"lastExecuted": "2023-11-07T05:31:56Z",
"lastExecutionDuration": 1500,
"lastError": "<string>"
},
"extensions": {
"ui": {
"hideUnconnectedHandles": true,
"style": {
"opacity": 0.8
}
},
"agentspec:component_type": "llm_node",
"myapp:analytics": {
"trackUsage": true,
"customField": "value"
}
}
},
"deletable": true
}
],
"edges": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"target": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceHandle": "<string>",
"targetHandle": "<string>",
"selectable": true,
"deletable": true,
"data": {
"label": "<string>",
"condition": "<string>",
"metadata": {
"sourcePortDataType": "<string>"
},
"isToolConnection": true,
"targetNodeType": "<string>",
"targetCategory": "<string>"
}
}
],
"metadata": {
"schemaVersion": "1.0.0",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"author": "admin",
"tags": [
"ai",
"production"
],
"versionId": "<string>",
"updateNumber": 123,
"format": "flowdrop"
},
"description": "<string>",
"config": {}
},
"message": "<string>",
"error": "<string>"
}{
"success": false,
"error": "Invalid request parameters",
"code": "VALIDATION_ERROR",
"details": {
"field": "name",
"message": "Name is required"
}
}{
"valid": true,
"errors": [
"<string>"
],
"warnings": [
"<string>"
]
}{
"success": false,
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}Agent Spec
Import workflow from Agent Spec JSON
Convert an Agent Spec flow or document to a FlowDrop workflow.
The conversion:
- Maps Agent Spec component types to FlowDrop node types
- Merges control_flow_connections and data_flow_connections into unified edges
- Auto-layouts nodes if no position metadata is present
- Preserves Agent Spec component_type in FlowDrop extensions
POST
/
workflows
/
import
/
agentspec
Import workflow from Agent Spec JSON
curl --request POST \
--url http://localhost:5173/api/flowdrop/workflows/import/agentspec \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"component_type": "flow",
"name": "document_processing",
"start_node": "start",
"nodes": [
{
"component_type": "start_node",
"name": "process_input",
"description": "<string>",
"inputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": [
"<unknown>"
],
"items": "<unknown>",
"properties": {},
"required": [
"<string>"
]
}
],
"outputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": [
"<unknown>"
],
"items": "<unknown>",
"properties": {},
"required": [
"<string>"
]
}
],
"metadata": {}
}
],
"control_flow_connections": [
{
"name": "start_to_process",
"from_node": "start",
"to_node": "process_input",
"from_branch": "high_priority"
}
],
"description": "<string>",
"data_flow_connections": [
{
"name": "query_to_llm",
"source_node": "process_input",
"source_output": "processed_text",
"destination_node": "llm_generate",
"destination_input": "prompt"
}
],
"metadata": {}
}
'import requests
url = "http://localhost:5173/api/flowdrop/workflows/import/agentspec"
payload = {
"component_type": "flow",
"name": "document_processing",
"start_node": "start",
"nodes": [
{
"component_type": "start_node",
"name": "process_input",
"description": "<string>",
"inputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": ["<unknown>"],
"items": "<unknown>",
"properties": {},
"required": ["<string>"]
}
],
"outputs": [
{
"title": "user_query",
"type": "string",
"description": "<string>",
"default": "<unknown>",
"enum": ["<unknown>"],
"items": "<unknown>",
"properties": {},
"required": ["<string>"]
}
],
"metadata": {}
}
],
"control_flow_connections": [
{
"name": "start_to_process",
"from_node": "start",
"to_node": "process_input",
"from_branch": "high_priority"
}
],
"description": "<string>",
"data_flow_connections": [
{
"name": "query_to_llm",
"source_node": "process_input",
"source_output": "processed_text",
"destination_node": "llm_generate",
"destination_input": "prompt"
}
],
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
component_type: 'flow',
name: 'document_processing',
start_node: 'start',
nodes: [
{
component_type: 'start_node',
name: 'process_input',
description: '<string>',
inputs: [
{
title: 'user_query',
type: 'string',
description: '<string>',
default: '<unknown>',
enum: ['<unknown>'],
items: '<unknown>',
properties: {},
required: ['<string>']
}
],
outputs: [
{
title: 'user_query',
type: 'string',
description: '<string>',
default: '<unknown>',
enum: ['<unknown>'],
items: '<unknown>',
properties: {},
required: ['<string>']
}
],
metadata: {}
}
],
control_flow_connections: [
{
name: 'start_to_process',
from_node: 'start',
to_node: 'process_input',
from_branch: 'high_priority'
}
],
description: '<string>',
data_flow_connections: [
{
name: 'query_to_llm',
source_node: 'process_input',
source_output: 'processed_text',
destination_node: 'llm_generate',
destination_input: 'prompt'
}
],
metadata: {}
})
};
fetch('http://localhost:5173/api/flowdrop/workflows/import/agentspec', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "5173",
CURLOPT_URL => "http://localhost:5173/api/flowdrop/workflows/import/agentspec",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'component_type' => 'flow',
'name' => 'document_processing',
'start_node' => 'start',
'nodes' => [
[
'component_type' => 'start_node',
'name' => 'process_input',
'description' => '<string>',
'inputs' => [
[
'title' => 'user_query',
'type' => 'string',
'description' => '<string>',
'default' => '<unknown>',
'enum' => [
'<unknown>'
],
'items' => '<unknown>',
'properties' => [
],
'required' => [
'<string>'
]
]
],
'outputs' => [
[
'title' => 'user_query',
'type' => 'string',
'description' => '<string>',
'default' => '<unknown>',
'enum' => [
'<unknown>'
],
'items' => '<unknown>',
'properties' => [
],
'required' => [
'<string>'
]
]
],
'metadata' => [
]
]
],
'control_flow_connections' => [
[
'name' => 'start_to_process',
'from_node' => 'start',
'to_node' => 'process_input',
'from_branch' => 'high_priority'
]
],
'description' => '<string>',
'data_flow_connections' => [
[
'name' => 'query_to_llm',
'source_node' => 'process_input',
'source_output' => 'processed_text',
'destination_node' => 'llm_generate',
'destination_input' => 'prompt'
]
],
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:5173/api/flowdrop/workflows/import/agentspec"
payload := strings.NewReader("{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:5173/api/flowdrop/workflows/import/agentspec")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:5173/api/flowdrop/workflows/import/agentspec")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"component_type\": \"flow\",\n \"name\": \"document_processing\",\n \"start_node\": \"start\",\n \"nodes\": [\n {\n \"component_type\": \"start_node\",\n \"name\": \"process_input\",\n \"description\": \"<string>\",\n \"inputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"outputs\": [\n {\n \"title\": \"user_query\",\n \"type\": \"string\",\n \"description\": \"<string>\",\n \"default\": \"<unknown>\",\n \"enum\": [\n \"<unknown>\"\n ],\n \"items\": \"<unknown>\",\n \"properties\": {},\n \"required\": [\n \"<string>\"\n ]\n }\n ],\n \"metadata\": {}\n }\n ],\n \"control_flow_connections\": [\n {\n \"name\": \"start_to_process\",\n \"from_node\": \"start\",\n \"to_node\": \"process_input\",\n \"from_branch\": \"high_priority\"\n }\n ],\n \"description\": \"<string>\",\n \"data_flow_connections\": [\n {\n \"name\": \"query_to_llm\",\n \"source_node\": \"process_input\",\n \"source_output\": \"processed_text\",\n \"destination_node\": \"llm_generate\",\n \"destination_input\": \"prompt\"\n }\n ],\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "My AI Workflow",
"nodes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "calculator",
"position": {
"x": 100,
"y": 200
},
"data": {
"label": "Math Calculator",
"config": {
"instanceTitle": "Email Summarizer",
"instanceDescription": "Summarizes incoming emails into 3 bullet points",
"instanceBadge": "LLM",
"nodeType": "simple",
"model": "gpt-4o-mini",
"temperature": 0.7,
"maxTokens": 1000,
"apiKey": "sk-...",
"dynamicInputs": [
{
"name": "extra_data",
"label": "Extra Data",
"dataType": "json",
"required": false
}
],
"dynamicOutputs": [
{
"name": "result",
"label": "Result",
"dataType": "string"
}
],
"branches": [
{
"name": "success",
"label": "Success",
"condition": "status === 200"
},
{
"name": "error",
"label": "Error",
"isDefault": true
}
]
},
"metadata": {
"id": "calculator",
"name": "Calculator",
"description": "Perform mathematical operations on input data",
"category": "processing",
"version": "1.0.0",
"inputs": [
{
"id": "json",
"name": "JSON Response",
"dataType": "mixed",
"required": false,
"description": "Parsed JSON response from the HTTP request",
"defaultValue": "<unknown>",
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"title": "User",
"description": "User information",
"properties": {
"id": {
"type": "integer",
"description": "User ID"
},
"name": {
"type": "string",
"description": "User full name"
},
"email": {
"type": "string",
"description": "User email address"
},
"address": {
"type": "object",
"title": "Address",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
}
},
"orders": {
"type": "array",
"title": "Orders",
"description": "List of user orders",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "number"
}
}
}
}
}
}
}
],
"outputs": [
{
"id": "json",
"name": "JSON Response",
"dataType": "mixed",
"required": false,
"description": "Parsed JSON response from the HTTP request",
"defaultValue": "<unknown>",
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"title": "User",
"description": "User information",
"properties": {
"id": {
"type": "integer",
"description": "User ID"
},
"name": {
"type": "string",
"description": "User full name"
},
"email": {
"type": "string",
"description": "User email address"
},
"address": {
"type": "object",
"title": "Address",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
}
}
}
}
},
"orders": {
"type": "array",
"title": "Orders",
"description": "List of user orders",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"product_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "number"
}
}
}
}
}
}
}
],
"supportedTypes": [],
"icon": "mdi:calculator",
"color": "#3b82f6",
"badge": "API",
"portDataType": "trigger",
"configSchema": {
"type": "object",
"properties": {},
"required": [
"<string>"
],
"additionalProperties": false
},
"tags": [
"math",
"calculation",
"processing"
],
"formats": [
"agentspec"
],
"extensions": {
"ui": {
"hideUnconnectedHandles": true,
"style": {
"opacity": 0.8
}
},
"agentspec:component_type": "llm_node",
"myapp:analytics": {
"trackUsage": true,
"customField": "value"
}
}
},
"isProcessing": true,
"error": "<string>",
"nodeId": "<string>",
"executionInfo": {
"executionCount": 5,
"isExecuting": true,
"lastExecuted": "2023-11-07T05:31:56Z",
"lastExecutionDuration": 1500,
"lastError": "<string>"
},
"extensions": {
"ui": {
"hideUnconnectedHandles": true,
"style": {
"opacity": 0.8
}
},
"agentspec:component_type": "llm_node",
"myapp:analytics": {
"trackUsage": true,
"customField": "value"
}
}
},
"deletable": true
}
],
"edges": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"target": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceHandle": "<string>",
"targetHandle": "<string>",
"selectable": true,
"deletable": true,
"data": {
"label": "<string>",
"condition": "<string>",
"metadata": {
"sourcePortDataType": "<string>"
},
"isToolConnection": true,
"targetNodeType": "<string>",
"targetCategory": "<string>"
}
}
],
"metadata": {
"schemaVersion": "1.0.0",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"author": "admin",
"tags": [
"ai",
"production"
],
"versionId": "<string>",
"updateNumber": 123,
"format": "flowdrop"
},
"description": "<string>",
"config": {}
},
"message": "<string>",
"error": "<string>"
}{
"success": false,
"error": "Invalid request parameters",
"code": "VALIDATION_ERROR",
"details": {
"field": "name",
"message": "Name is required"
}
}{
"valid": true,
"errors": [
"<string>"
],
"warnings": [
"<string>"
]
}{
"success": false,
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}Authorizations
BearerAuthSessionAuth
JWT token for authentication
Body
application/json
- Option 1
- Option 2
Agent Spec Flow — a directed, potentially cyclic graph of nodes. Flows function as "subroutines" encapsulating repeatable processes. They separate control-flow (execution order) from data-flow (data routing).
Available options:
flow Flow name
Example:
"document_processing"
Reference to the StartNode name
Example:
"start"
All nodes in the flow
Union of all Agent Spec node types. Discriminated by component_type.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Show child attributes
Show child attributes
Execution order edges
Show child attributes
Show child attributes
Human-readable description
Data routing edges. When null, data flows by matching input/output property names across connected nodes.
Show child attributes
Show child attributes
Extension metadata
Was this page helpful?
⌘I