Workflow Engine API
Visual AI workflow orchestration with Langflow-Drupal integration.
Overview
Service: Workflow Engine Specialist
Port: 3090
Domain: workflow.local.bluefly.io
Protocol: REST + WebSocket
Version: 0.1.0
OpenAPI Spec: /technical-guide/openapi/workflow-engine/openapi.yml
What It Does
Drag-and-drop visual workflow builder for AI agent orchestration: - Visual workflow composer: Langflow-compatible drag-and-drop interface - Real-time execution: Step-by-step workflow tracking - Drupal integration: Custom components for CMS workflows - MCP tool chains: Integrate MCP tools into workflows - Batch processing: Large-scale workflow execution - Error recovery: Automatic retry and error handling
Architecture
graph TB
A[Visual Builder] --> B[Workflow Engine]
B --> C[Langflow Core]
B --> D[Drupal Components]
B --> E[MCP Integration]
C --> F[Execution Runtime]
F --> G[Agent Mesh]
F --> H[LLM Gateway]
Core Endpoints
1. Workflow Catalog
GET /api/v1/workflows/catalog?category=content_management&complexity=simple
Response:
{
"workflows": [
{
"id": "wf-content-generation",
"name": "AI Content Generation",
"description": "Generate and publish Drupal content using AI",
"category": "content_management",
"complexity": "simple",
"components": 5,
"estimatedDuration": 30,
"tags": ["drupal", "content", "ai-generation"]
},
{
"id": "wf-code-review",
"name": "Automated Code Review",
"description": "Multi-agent code review workflow",
"category": "ai_workflows",
"complexity": "advanced",
"components": 12,
"estimatedDuration": 120,
"tags": ["code-review", "swarm", "quality"]
}
],
"total": 47
}
2. Create Workflow
POST /api/v1/workflows
Request:
{
"name": "Content Moderation Workflow",
"description": "AI-powered content moderation with human oversight",
"category": "content_management",
"flow": {
"nodes": [
{
"id": "input",
"type": "TextInput",
"position": { "x": 100, "y": 100 },
"data": {
"label": "Content Input",
"placeholder": "Enter content to moderate"
}
},
{
"id": "ai-analysis",
"type": "LLMNode",
"position": { "x": 300, "y": 100 },
"data": {
"model": "qwen2.5-coder:32b",
"prompt": "Analyze this content for policy violations: {{input}}"
}
},
{
"id": "drupal-publish",
"type": "DrupalEntityCreate",
"position": { "x": 500, "y": 100 },
"data": {
"entityType": "node",
"bundle": "article",
"fields": {
"title": "{{input.title}}",
"body": "{{ai-analysis.sanitized_content}}",
"moderation_state": "draft"
}
}
}
],
"edges": [
{ "source": "input", "target": "ai-analysis" },
{ "source": "ai-analysis", "target": "drupal-publish" }
]
}
}
Response:
{
"id": "wf-abc123",
"name": "Content Moderation Workflow",
"status": "active",
"version": "1.0.0",
"createdAt": "2025-01-15T10:00:00Z",
"endpoints": {
"execute": "/api/v1/workflows/wf-abc123/execute",
"monitor": "/api/v1/workflows/wf-abc123/executions"
}
}
3. Execute Workflow
POST /api/v1/workflows/{workflowId}/execute
Request:
{
"inputs": {
"input": {
"title": "AI in Healthcare",
"content": "Artificial intelligence is transforming healthcare..."
}
},
"options": {
"async": true,
"callbacks": {
"onComplete": "https://myapp.com/webhook/workflow-complete",
"onError": "https://myapp.com/webhook/workflow-error"
}
}
}
Response:
{
"executionId": "exec-xyz789",
"workflowId": "wf-abc123",
"status": "running",
"startedAt": "2025-01-15T10:05:00Z",
"estimatedDuration": 30,
"monitorUrl": "ws://workflow.local.bluefly.io/api/v1/executions/exec-xyz789/stream"
}
4. Monitor Execution
Real-time Monitoring (WebSocket)
WebSocket: ws://workflow.local.bluefly.io/api/v1/executions/{executionId}/stream
Stream Events:
{
"type": "node-started",
"executionId": "exec-xyz789",
"nodeId": "input",
"timestamp": "2025-01-15T10:05:00Z"
}
{
"type": "node-completed",
"executionId": "exec-xyz789",
"nodeId": "input",
"duration": 50,
"output": {
"title": "AI in Healthcare",
"content": "..."
},
"timestamp": "2025-01-15T10:05:00.05Z"
}
{
"type": "workflow-completed",
"executionId": "exec-xyz789",
"duration": 2500,
"result": {
"drupal-publish": {
"nid": 123,
"url": "https://llm.local.bluefly.io/node/123"
}
},
"timestamp": "2025-01-15T10:05:02.5Z"
}
Get Execution Status
GET /api/v1/executions/{executionId}
Response:
{
"executionId": "exec-xyz789",
"workflowId": "wf-abc123",
"status": "completed",
"startedAt": "2025-01-15T10:05:00Z",
"completedAt": "2025-01-15T10:05:02.5Z",
"duration": 2500,
"nodes": [
{
"nodeId": "input",
"status": "completed",
"duration": 50
},
{
"nodeId": "ai-analysis",
"status": "completed",
"duration": 2300,
"modelUsed": "qwen2.5-coder:32b",
"tokensUsed": 523
},
{
"nodeId": "drupal-publish",
"status": "completed",
"duration": 150,
"entityCreated": 123
}
],
"result": {
"nid": 123,
"url": "https://llm.local.bluefly.io/node/123"
}
}
Available Components
1. AI Components
| Component | Description | Inputs | Outputs |
|---|---|---|---|
| LLMNode | LLM inference | prompt, model | completion |
| VectorSearch | Qdrant vector search | query, collection | results |
| Embeddings | Generate embeddings | text | vector |
| ImageGen | DALL-E image generation | prompt | image_url |
2. Drupal Components
| Component | Description | Inputs | Outputs |
|---|---|---|---|
| EntityCreate | Create Drupal entity | fields, bundle | nid, url |
| EntityLoad | Load Drupal entity | nid | entity |
| EntityUpdate | Update Drupal entity | nid, fields | updated |
| UserLogin | Authenticate user | username, password | token |
3. MCP Components
| Component | Description | Inputs | Outputs |
|---|---|---|---|
| MCPToolCall | Execute MCP tool | tool, params | result |
| MCPServerQuery | Query MCP registry | capability | servers |
| FileSystemRead | Read file via MCP | path | content |
| GitLabAPI | GitLab operations | action, params | response |
4. Logic Components
| Component | Description | Inputs | Outputs |
|---|---|---|---|
| Condition | Conditional branching | condition | true/false |
| Loop | Iterate over data | items | results |
| Parallel | Parallel execution | tasks | results |
| Merge | Merge outputs | inputs | merged |
Batch Processing
Execute workflows at scale:
POST /api/v1/workflows/{workflowId}/batch
Request:
{
"inputs": [
{ "input": { "title": "Article 1", "content": "..." } },
{ "input": { "title": "Article 2", "content": "..." } },
{ "input": { "title": "Article 3", "content": "..." } }
],
"options": {
"concurrency": 5,
"failureMode": "continue",
"progressCallback": "https://myapp.com/webhook/batch-progress"
}
}
Response:
{
"batchId": "batch-123",
"totalItems": 3,
"status": "processing",
"progress": {
"completed": 0,
"failed": 0,
"pending": 3
},
"monitorUrl": "ws://workflow.local.bluefly.io/api/v1/batches/batch-123/stream"
}
Error Recovery
Workflows automatically retry failed nodes:
Retry Configuration:
{
"nodes": [
{
"id": "ai-analysis",
"type": "LLMNode",
"data": {
"model": "qwen2.5-coder:32b",
"prompt": "..."
},
"retry": {
"enabled": true,
"maxAttempts": 3,
"backoff": "exponential",
"initialDelay": 1000
}
}
]
}
Error Response:
{
"executionId": "exec-xyz789",
"status": "failed",
"error": {
"nodeId": "ai-analysis",
"attempt": 3,
"message": "Model timeout after 30000ms",
"code": "MODEL_TIMEOUT"
},
"retryable": true
}
Templates
Pre-built workflow templates:
GET /api/v1/workflows/templates
Response:
{
"templates": [
{
"id": "tmpl-content-gen",
"name": "AI Content Generation",
"description": "Generate blog posts with SEO optimization",
"category": "content",
"components": 8,
"usageCount": 523
},
{
"id": "tmpl-code-review",
"name": "Multi-Agent Code Review",
"description": "Swarm-based code review with consensus",
"category": "development",
"components": 12,
"usageCount": 87
}
]
}
Health & Metrics
GET /api/health
Response:
{
"status": "healthy",
"version": "0.1.0",
"langflow": {
"status": "healthy",
"version": "1.0.0"
},
"executions": {
"active": 5,
"queued": 12,
"totalToday": 523
}
}