Download OpenAPI specification:Download
Arrotech Hub provides a unified, powerful interface for building autonomous AI agents and complex marketing automations. Our API allows you to programmatically control the entire "Mini-Hub" ecosystem, from managing connections to executing multi-step workflows.
All requests to the Arrotech Hub API require a Bearer Token. You can generate these in your developer dashboard.
Authorization: Bearer <YOUR_API_KEY>
[!IMPORTANT] Keep your API keys secure. Never expose them in client-side code or public repositories.
The API is optimized for high-concurrency automation. Default limits are:
Join our Developer Discord or open a ticket in the Support Portal.
Retrieves all active and inactive connections you've established with external services.
Connection Statuses:
active: Ready for use.error: Failed authentication or disconnected. See error_message for details.expired: Authentication token has expired.Developer Tip: Use this to populate "Integrations" or "Settings" pages in your UI, showing users which apps they've already connected.
nullEstablishes a secure link between Arrotech Hub and an external service. This is the first step in enabling specialized "skills" for your AI agents.
The Connection Process:
slack_send_message).Security: All credentials are encrypted at rest and never exposed back in plain text after the initial creation.
| platform required | string (Platform) The target platform ID (e.g., 'slack', 'hubspot', 'whatsapp'). Available platforms can be queried via the MCP registry. |
| name required | string (Name) A friendly name for this connection to help you identify it in the dashboard. |
required | object (Config) Platform-specific configuration credentials (API keys, workspace IDs, etc.). Each platform has a unique schema. |
{- "platform": "slack",
- "name": "Marketing Slack",
- "config": {
- "channel": "alerts",
- "token": "xoxb-..."
}
}nullUpdate a connection.
| connection_id required | integer (Connection Id) |
| name required | string (Name) |
| status required | string (Status) |
required | object (Config) |
{- "name": "string",
- "status": "string",
- "config": { }
}nullTest a connection configuration before saving.
| platform required | string (Platform) |
required | object (Config) |
{- "platform": "string",
- "config": { }
}nullReturns a catalog of all tools currently available to the user. This includes built-in tools and those dynamically loaded via Model Context Protocol (MCP) servers.
The Power of MCP: Arrotech Hub uses MCP to bridge the gap between LLMs and external software. This endpoint tells your front-end or your AI agent which "skills" are currently equipped.
Filtering:
include_all: Set to true to see even those tools that require additional configuration or authentication (useful for discovery).| include_all | boolean (Include All) Default: false |
| all | boolean (All) Default: false |
nullExecutes a single tool and returns the result. This is a low-level endpoint primarily used by the Execution Orchestrator, but can be called directly for testing or precise control.
Execution Protocol:
dynamic_tool_registry.Safety: All tool calls are subject to rate limiting and audit logging to ensure secure and responsible AI actions.
| name required | string (Name) The unique name of the MCP tool to execute (e.g., 'slack_send_message', 'hubspot_contact_create'). |
required | object (Arguments) A dictionary of arguments required by the tool. Arguments vary depending on the tool's schema. |
{- "name": "slack_send_message",
- "arguments": {
- "channel": "#general",
- "message": "Hello from Arrotech Hub!"
}
}nullStream tool execution using Server-Sent Events.
| name required | string (Name) The unique name of the MCP tool to execute (e.g., 'slack_send_message', 'hubspot_contact_create'). |
required | object (Arguments) A dictionary of arguments required by the tool. Arguments vary depending on the tool's schema. |
{- "name": "slack_send_message",
- "arguments": {
- "channel": "#general",
- "message": "Hello from Arrotech Hub!"
}
}nullRetrieves a paginated list of all conversation threads belonging to the authenticated user. Conversations are returned in descending order of their last update (most recent first).
This is useful for building a "Recent Chats" or "History" sidebar in your application.
Note: This endpoint only returns metadata (IDs, titles). To get the actual messages, use the GET /conversations/{conversation_id} endpoint.
nullInitiates a fresh conversation thread for the authenticated user. Conversations act as containers for messages and maintain the state for AI interactions.
Key features of conversations:
Returns: A success object containing the newly created conversation's unique ID and metadata.
Title (string) or Title (null) (Title) An optional title for the conversation. If omitted, the system will generate a title based on the first message. | |
Any of string (Title) An optional title for the conversation. If omitted, the system will generate a title based on the first message. | |
{- "title": "HubSpot Integration Project"
}nullFetches the full metadata and a snapshot of messages for a specific conversation.
This endpoint is the standard way to resume a chat session in a UI. It returns the conversation's state, its title, and its message history.
Security:
Optimization Tip:
For very long conversations, consider using the /messages endpoint with pagination (if available) to avoid loading massive JSON payloads at once.
| conversation_id required | integer (Conversation Id) |
{ }Update a conversation title.
| conversation_id required | integer (Conversation Id) |
| title required | string (Title) The new title for the conversation. |
{- "title": "Marketing Automation Campaign v2"
}nullThis is the core "command center" endpoint of Arrotech Hub. When you send a message here, the Hub's Execution Orchestrator takes over to perform autonomous tasks.
The Orchestration Lifecycle:
Usage Examples:
Note on Providers: You can explicitly request a provider like gpt-4o or claude-3-5-sonnet using the provider field, or leave it null to use your default.
| conversation_id required | integer (Conversation Id) |
| content required | string (Content) The text content of the message. Supports markdown. This is the primary input for the AI agent. |
Provider (string) or Provider (null) (Provider) Optional LLM provider override (e.g., 'openai', 'anthropic', 'ollama'). If not provided, the user's default provider is used. |
{- "content": "Create a summary of my last 5 HubSpot deals.",
- "provider": "openai"
}{- "id": 0,
- "conversation_id": 0,
- "role": "string",
- "content": "string",
- "status": "string",
- "tokens_used": 0,
- "tools_called": [
- { }
], - "tool_call_id": "string",
- "error_message": "string",
- "created_at": "string"
}Retrieves the complete chronological list of messages in a conversation. This includes user prompts, assistant responses, and "tool" messages (the technical results of API calls made by the AI).
Understanding Roles:
user: Your input.assistant: The AI's response to you.tool: Internal technical data from integrations (e.g., raw JSON from HubSpot). Usually hidden from end-users but vital for debugging.system: Architectural instructions provided to the AI.| conversation_id required | integer (Conversation Id) |
nullTest direct response generation without tools.
| content required | string (Content) The text content of the message. Supports markdown. This is the primary input for the AI agent. |
Provider (string) or Provider (null) (Provider) Optional LLM provider override (e.g., 'openai', 'anthropic', 'ollama'). If not provided, the user's default provider is used. |
{- "content": "Create a summary of my last 5 HubSpot deals.",
- "provider": "openai"
}nullValidate a tool call before execution.
| conversation_id required | integer (Conversation Id) |
| property name* additional property | any |
{ }nullExplain the intent classification for a user message.
| conversation_id required | integer (Conversation Id) |
| content required | string (Content) The text content of the message. Supports markdown. This is the primary input for the AI agent. |
Provider (string) or Provider (null) (Provider) Optional LLM provider override (e.g., 'openai', 'anthropic', 'ollama'). If not provided, the user's default provider is used. |
{- "content": "Create a summary of my last 5 HubSpot deals.",
- "provider": "openai"
}nullExplain which tools are relevant for a user message.
| conversation_id required | integer (Conversation Id) |
| content required | string (Content) The text content of the message. Supports markdown. This is the primary input for the AI agent. |
Provider (string) or Provider (null) (Provider) Optional LLM provider override (e.g., 'openai', 'anthropic', 'ollama'). If not provided, the user's default provider is used. |
{- "content": "Create a summary of my last 5 HubSpot deals.",
- "provider": "openai"
}nullThis endpoint allows you to build complex automations using simple English instructions. The system uses a specialized Workflow Builder LLM to translate your description into a series of logical steps, tool calls, and conditional branches.
How it works:
Pro Tip: Be as specific as possible about platform names and filters.
| description required | string (Description) A natural language description of the workflow you want to build. Our AI will analyze this to generate steps. |
Name (string) or Name (null) (Name) An optional name for the workflow. If omitted, a creative name will be generated. |
{- "description": "Every Monday at 9 AM, fetch my last 10 HubSpot deals and post a summary to Slack #sales-updates.",
- "name": "Weekly Revenue Sync"
}{- "id": 0,
- "name": "string",
- "description": "string",
- "status": "string",
- "version": 0,
- "is_template": true,
- "trigger_type": "string",
- "trigger_config": { },
- "variables": { },
- "workflow_metadata": { },
- "created_at": "string",
- "updated_at": "string",
- "steps": [
- { }
]
}Update a workflow.
| workflow_id required | integer (Workflow Id) |
| name | string (Name) The updated name for the workflow. |
| description | string (Description) The updated purpose or logic description. |
| status | string (Status) The new status (e.g., 'active', 'paused', 'draft'). |
| trigger_type | string (Trigger Type) Update the initiation logic (e.g., 'manual', 'schedule'). |
object (Trigger Config) Updated configuration for the trigger. | |
object (Variables) Updated map of global workflow variables. | |
Array of objects (Steps) The complete list of updated steps in sequence. | |
object (Workflow Metadata) Additional metadata for categorization or UI rendering. |
{- "name": "string",
- "description": "string",
- "status": "string",
- "trigger_type": "string",
- "trigger_config": { },
- "variables": { },
- "steps": [
- { }
], - "workflow_metadata": { }
}nullManually triggers the execution of a specific workflow. This is ideal for testing or for "On-Demand" automations triggered by external scripts.
Execution Features:
input_data to change the workflow's behavior on each run./executions endpoint.Error Handling:
If a step fails, the workflow will attempt retries based on its configuration before marking the execution as failed.
| workflow_id required | integer (Workflow Id) |
object (Input Data) Default: {} A dictionary of key-value pairs used as input for the workflow's dynamic variables. | |||
| |||
{- "input_data": {
- "limit": 5,
- "target_channel": "#marketing-ops"
}
}nullTest conditional logic evaluation.
required | object (Condition) The conditional logic object to evaluate. |
required | object (Context) The data context (variables/step results) to evaluate against. |
{- "condition": { },
- "context": { }
}{- "result": true,
- "evaluated_value": null,
- "expected_value": null,
- "operator": "string"
}Test variable substitution in parameters.
required | object (Parameters) The template parameters containing {{variables}}. |
required | object (Context) The data context providing the values for substitution. |
{- "parameters": { },
- "context": { }
}{- "original_parameters": { },
- "substituted_parameters": { },
- "substitutions_made": [
- "string"
]
}Create a chat agent from a workflow.
| description required | string (Description) A natural language description of the workflow you want to build. Our AI will analyze this to generate steps. |
Name (string) or Name (null) (Name) An optional name for the workflow. If omitted, a creative name will be generated. |
{- "description": "Every Monday at 9 AM, fetch my last 10 HubSpot deals and post a summary to Slack #sales-updates.",
- "name": "Weekly Revenue Sync"
}nullExtract a workflow from conversation history. Analyzes tool calls in a conversation and creates a reusable workflow.
| conversation_id required | integer (Conversation Id) |
| workflow_name required | string (Workflow Name) |
| description | string (Description) |
| selected_step_ids | Array of strings (Selected Step Ids) |
| parameterize_fields | Array of strings (Parameterize Fields) |
| trigger_type | string (Trigger Type) Default: "manual" |
object (Trigger Config) |
{- "conversation_id": 0,
- "workflow_name": "string",
- "description": "string",
- "selected_step_ids": [
- "string"
], - "parameterize_fields": [
- "string"
], - "trigger_type": "manual",
- "trigger_config": { }
}nullCreate a workflow from explicit step definitions. Used when saving a workflow extracted from conversation.
| workflow_name required | string (Workflow Name) |
| description required | string (Description) |
required | Array of objects (Steps) |
| trigger_type | string (Trigger Type) Default: "manual" |
object (Trigger Config) | |
object (Variables) | |
object (Workflow Metadata) |
{- "workflow_name": "string",
- "description": "string",
- "steps": [
- { }
], - "trigger_type": "manual",
- "trigger_config": { },
- "variables": { },
- "workflow_metadata": { }
}nullTransforms a static workflow into a dynamic, autonomous agent. Agents are the "living" versions of your automations that can run on schedules or respond to events.
When to deploy an agent:
Configuration Overrides: You can pass specialized instructions to the agent during creation to fine-tune its "personality" or "reasoning" style beyond the basic workflow definition.
| workflow_id required | integer (Workflow Id) The unique ID of the workflow that this agent will automate. The workflow must exist and be accessible by the user. |
Agent Config (object) or Agent Config (null) (Agent Config) Optional configuration overrides for the agent, such as specific prompt instructions or execution parameters. |
{- "workflow_id": 42,
- "agent_config": {
- "persona": "helpful assistant",
- "verbosity": "high"
}
}{ }Transforms a static workflow into a dynamic, autonomous agent. Agents are the "living" versions of your automations that can run on schedules or respond to events.
When to deploy an agent:
Configuration Overrides: You can pass specialized instructions to the agent during creation to fine-tune its "personality" or "reasoning" style beyond the basic workflow definition.
| workflow_id required | integer (Workflow Id) The unique ID of the workflow that this agent will automate. The workflow must exist and be accessible by the user. |
Agent Config (object) or Agent Config (null) (Agent Config) Optional configuration overrides for the agent, such as specific prompt instructions or execution parameters. |
{- "workflow_id": 42,
- "agent_config": {
- "persona": "helpful assistant",
- "verbosity": "high"
}
}{ }Schedule an agent for automatic execution.
| agent_id required | string (Agent Id) The unique UUID of the agent to schedule. |
required | object (Schedule Config) Configuration for the execution schedule. Supports 'interval' (seconds) or 'cron' (standard cron expression). |
{- "agent_id": "string",
- "schedule_config": {
- "cron_expression": "0 9 * * *",
- "type": "cron"
}
}{ }Schedule an agent for automatic execution.
| agent_id required | string (Agent Id) The unique UUID of the agent to schedule. |
required | object (Schedule Config) Configuration for the execution schedule. Supports 'interval' (seconds) or 'cron' (standard cron expression). |
{- "agent_id": "string",
- "schedule_config": {
- "cron_expression": "0 9 * * *",
- "type": "cron"
}
}{ }[- {
- "agent_id": "string",
- "workflow_id": 0,
- "workflow_name": "string",
- "status": "string",
- "trigger_type": "string",
- "schedule": { },
- "monitoring": { },
- "performance_metrics": { },
- "created_at": "string",
- "updated_at": "string"
}
][- {
- "agent_id": "string",
- "workflow_id": 0,
- "workflow_name": "string",
- "status": "string",
- "trigger_type": "string",
- "schedule": { },
- "monitoring": { },
- "performance_metrics": { },
- "created_at": "string",
- "updated_at": "string"
}
]Retrieves deep diagnostic information and current health metrics for a specific agent.
Monitoring Data includes:
execution_count: Total number of times the agent has run.success_count: Number of successful goal completions.last_error: The last exception encountered (if any).success_rate: Percentage of successful executions.Use this endpoint to:
| agent_id required | string (Agent Id) |
{- "agent_id": "string",
- "workflow_id": 0,
- "workflow_name": "string",
- "status": "string",
- "trigger_type": "string",
- "schedule": { },
- "monitoring": { },
- "performance_metrics": { },
- "created_at": "string",
- "updated_at": "string"
}Retrieves deep diagnostic information and current health metrics for a specific agent.
Monitoring Data includes:
execution_count: Total number of times the agent has run.success_count: Number of successful goal completions.last_error: The last exception encountered (if any).success_rate: Percentage of successful executions.Use this endpoint to:
| agent_id required | string (Agent Id) |
{- "agent_id": "string",
- "workflow_id": 0,
- "workflow_name": "string",
- "status": "string",
- "trigger_type": "string",
- "schedule": { },
- "monitoring": { },
- "performance_metrics": { },
- "created_at": "string",
- "updated_at": "string"
}Manually execute an autonomous agent.
| agent_id required | string (Agent Id) |
| property name* additional property | any |
nullnullManually execute an autonomous agent.
| agent_id required | string (Agent Id) |
| property name* additional property | any |
nullnullGet list of all workflow templates.
Category (string) or Category (null) (Category) Filter by category | |
Difficulty (string) or Difficulty (null) (Difficulty) Filter by difficulty | |
Search (string) or Search (null) (Search) Search term | |
Connection (string) or Connection (null) (Connection) Filter by required connection |
{- "success": true,
- "data": null,
- "message": "string"
}