.
## 11\. No Use By Minors
Service is intended only for access and use by individuals at least eighteen (18) years old. By accessing or using any of the Company, you warrant and represent that you are at least eighteen (18) years of age and with the full authority, right, and capacity to enter into this agreement and abide by all of the terms and conditions of Terms. If you are not at least eighteen (18) years old, you are prohibited from both the access and usage of Service.
## 12\. Accounts
When you create an account with us, you guarantee that you are above the age of 18, and that the information you provide us is accurate, complete, and current at all times. Inaccurate, incomplete, or obsolete information may result in the immediate termination of your account on Service.
You are responsible for maintaining the confidentiality of your account and password, including but not limited to the restriction of access to your computer and/or account. You agree to accept responsibility for any and all activities or actions that occur under your account and/or password, whether your password is with our Service or a third-party service. You must notify us immediately upon becoming aware of any breach of security or unauthorized use of your account.
You may not use as a username the name of another person or entity or that is not lawfully available for use, a name or trademark that is subject to any rights of another person or entity other than you, without appropriate authorization. You may not use as a username any name that is offensive, vulgar or obscene.
We reserve the right to refuse service, terminate accounts, remove or edit content, or cancel orders at our sole discretion.
## 13\. Intellectual Property
Service and its original content (excluding Content provided by users), features and functionality are and will remain the exclusive property of Argonaut HQ, Inc and its licensors. Service is protected by copyright, trademark, and other laws of the United States and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Argonaut HQ, Inc.
## 14\. Error Reporting and Feedback
You may provide us either directly at [support@heliosapp.com](mailto:support@heliosapp.com) or via third party sites and tools with information and feedback concerning errors, suggestions for improvements, ideas, problems, complaints, and other matters related to our Service ("Feedback"). You acknowledge and agree that:
* You shall not retain, acquire or assert any intellectual property right or other right, title or interest in or to the Feedback;
* Company may have development ideas similar to the Feedback;
* Feedback does not contain confidential information or proprietary information from you or any third party; and
* Company is not under any obligation of confidentiality with respect to the Feedback. In the event the transfer of the ownership to the Feedback is not possible due to applicable mandatory laws, you grant Company and its affiliates an exclusive, transferable, irrevocable, free-of-charge, sub-licensable, unlimited and perpetual right to use (including copy, modify, create derivative works, publish, distribute and commercialize) Feedback in any manner and for any purpose.
## 15\. Links To Other Web Sites
Our Service may contain links to third party web sites or services that are not owned or controlled by Argonaut HQ, Inc.
Argonaut HQ, Inc has no control over, and assumes no responsibility for the content, privacy policies, or practices of any third party web sites or services. We do not warrant the offerings of any of these entities/individuals or their websites.
YOU ACKNOWLEDGE AND AGREE THAT ARGONAUT HQ, INC SHALL NOT BE RESPONSIBLE OR LIABLE, DIRECTLY OR INDIRECTLY, FOR ANY DAMAGE OR LOSS CAUSED OR ALLEGED TO BE CAUSED BY OR IN CONNECTION WITH USE OF OR RELIANCE ON ANY SUCH CONTENT, GOODS OR SERVICES AVAILABLE ON OR THROUGH ANY SUCH THIRD PARTY WEB SITES OR SERVICES.
WE STRONGLY ADVISE YOU TO READ THE TERMS OF SERVICE AND PRIVACY POLICIES OF ANY THIRD PARTY WEB SITES OR SERVICES THAT YOU VISIT.
## 16\. Disclaimer Of Warranty
THESE SERVICES ARE PROVIDED BY COMPANY ON AN "AS IS" AND "AS AVAILABLE" BASIS. COMPANY MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THEIR SERVICES, OR THE INFORMATION, CONTENT OR MATERIALS INCLUDED THEREIN. YOU EXPRESSLY AGREE THAT YOUR USE OF THESE SERVICES, THEIR CONTENT, AND ANY SERVICES OR ITEMS OBTAINED FROM US IS AT YOUR SOLE RISK.
NEITHER COMPANY NOR ANY PERSON ASSOCIATED WITH COMPANY MAKES ANY WARRANTY OR REPRESENTATION WITH RESPECT TO THE COMPLETENESS, SECURITY, RELIABILITY, QUALITY, ACCURACY, OR AVAILABILITY OF THE SERVICES. WITHOUT LIMITING THE FOREGOING, NEITHER COMPANY NOR ANYONE ASSOCIATED WITH COMPANY REPRESENTS OR WARRANTS THAT THE SERVICES, THEIR CONTENT, OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE SERVICES WILL BE ACCURATE, RELIABLE, ERROR-FREE, OR UNINTERRUPTED, THAT DEFECTS WILL BE CORRECTED, THAT THE SERVICES OR THE SERVER THAT MAKES IT AVAILABLE ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS OR THAT THE SERVICES OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE SERVICES WILL OTHERWISE MEET YOUR NEEDS OR EXPECTATIONS.
COMPANY HEREBY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, STATUTORY, OR OTHERWISE, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, AND FITNESS FOR PARTICULAR PURPOSE.
THE FOREGOING DOES NOT AFFECT ANY WARRANTIES WHICH CANNOT BE EXCLUDED OR LIMITED UNDER APPLICABLE LAW.
## 17\. Limitation Of Liability
EXCEPT AS PROHIBITED BY LAW, YOU WILL HOLD US AND OUR OFFICERS, DIRECTORS, EMPLOYEES, AND AGENTS NOT LIABLE FOR ANY INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGE, HOWEVER IT ARISES IN CONNECTION WITH THIS AGREEMENT. EXCEPT AS PROHIBITED BY LAW, IF THERE IS LIABILITY FOUND ON THE PART OF COMPANY, IT WILL BE LIMITED TO THE AGGREGATED AMOUNT PAID FOR THE PRODUCTS AND/OR SERVICES IN THE PREVIOUS 12 MONTHS OF THE SPECIFIC CLAIM ARISING, LESS COSTS AND EXPENSES TO PROVIDE THE PRODUCTS AND/OR SERVICES, AND UNDER NO CIRCUMSTANCES WILL THERE BE CONSEQUENTIAL OR PUNITIVE DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF PUNITIVE, INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE PRIOR LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU.
## 18\. Termination
We may terminate or suspend your account and bar access to Service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever and without limitation, including but not limited to a breach of Terms.
If you wish to terminate your account, you may simply discontinue using Service.
All provisions of Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.
## 19\. Governing Law
These Terms shall be governed and construed in accordance with the laws of State of Delaware without regard to its conflict of law provisions.
Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service and supersede and replace any prior agreements we might have had between us regarding Service.
## 20\. Changes To Service
We reserve the right to withdraw or amend our Service, and any service or material we provide via Service, in our sole discretion without notice. We will not be liable if for any reason all or any part of Service is unavailable at any time or for any period. From time to time, we may restrict access to some parts of Service, or the entire Service, to users, including registered users.
## 21\. Amendments To Terms
We may amend Terms at any time by posting the amended terms on this site. It is your responsibility to review these Terms periodically.
Your continued use of the Platform following the posting of revised Terms means that you accept and agree to the changes. You are expected to check this page frequently so you are aware of any changes, as they are binding on you.
By continuing to access or use our Service after any revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, you are no longer authorized to use Service.
## 22\. Waiver And Severability
No waiver by Company of any term or condition set forth in Terms shall be deemed a further or continuing waiver of such term or condition or a waiver of any other term or condition, and any failure of Company to assert a right or provision under Terms shall not constitute a waiver of such right or provision.
If any provision of Terms is held by a court or other tribunal of competent jurisdiction to be invalid, illegal or unenforceable for any reason, such provision shall be eliminated or limited to the minimum extent such that the remaining provisions of Terms will continue in full force and effect.
## 23\. Acknowledgement
BY USING SERVICE OR OTHER SERVICES PROVIDED BY US, YOU ACKNOWLEDGE THAT YOU HAVE READ THESE TERMS OF SERVICE AND AGREE TO BE BOUND BY THEM.
## 24\. Contact Us
Please send your feedback, comments, requests for technical support: By email: [support@heliosapp.com](mailto:support@heliosapp.com).
---
# Pricing - The most powerful workflow automation platform | Helios | Helios
URL: https://www.heliosapp.com/pricing
Description: Simple, transparent pricing for AI-native workflow automation. Start free with 5,000 credits. Growth at $99/mo with 50,000 credits included. Enterprise plans for custom needs.
# One platform, simple pricing
Workflows, Assistant, and Apps — all included on every plan. Start free, scale with unified credits.
### Free
For individuals exploring the platform
Free
5,000 credits included
[Get started](https://app.heliosapp.com/)
* Unlimited workflows & apps
* Full assistant access
* All integrations & API access
* Shared workflows & RBAC
* 14-day execution history
* Community support
### Growth
For teams using the full platform
$0/month + usage
$0.002/credit
[Get started](https://app.heliosapp.com/)
* Everything in Free, plus:
* 100 concurrent executions
* 1 GB knowledge bases
* 45-day conversation history
* Error notifications (beta)
* Email support
### Enterprise
For organizations with advanced needs
Custom
[Contact us](https://cal.com/suryao/helios)
* Everything in Growth, plus:
* Custom credit volumes
* Unlimited history & knowledge bases
* Custom branding & domains
* SSO / SAML & audit logs
* Dedicated infrastructure
* BYOK & custom models
* SLA guarantees
* Dedicated support & onboarding
## Compare plan features
Feature
Free
Growth
Enterprise
Workflows
Credits
5,000
Pay per use
Custom volume
Credit pricing
—
$0.002
Custom
Active workflows
Unlimited
Unlimited
Unlimited
Concurrent executions
5
100
Custom
Triggers per workflow
Unlimited
Unlimited
Unlimited
Scheduled triggers
Webhook triggers
Execution history
14 days
14 days
Unlimited
Version history
Error notifications
—
Beta
Beta
Approval workflows
Assistant
Web access
Slack access
Browser extension
Custom instructions
Knowledge bases
10 MB
1 GB
Unlimited
Conversation history
7 days
45 days
Unlimited
Usage analytics
Apps
Published apps
Unlimited
Unlimited
Unlimited
App viewers
Unlimited
Unlimited
Unlimited
Custom branding
—
—
App RBAC
Custom domains
—
—
Platform
Core integrations
All integrations
Custom integrations SDK
API access
Shared workflows
RBAC
Environment separation
Audit logs
—
—
SSO / SAML
—
—
Dedicated infrastructure
—
—
SOC 2 Type II
—
End-to-end encryption
Model Training
—
—
—
BYOK for LLM
—
—
Custom Models
—
—
Support
Community support
Email support
—
Dedicated support
—
—
SLA guarantees
—
—
Onboarding
—
—
### How do credits work?
### What counts as an execution?
### What happens if I exceed my included credits?
### Can I upgrade or downgrade my plan?
### How is Helios different from Zapier or Make?
### What happens as my usage grows?
### Do I get access to all three capabilities on every plan?
### What are the Assistant and Apps capabilities?
### Is my data secure?
---
# Helios Documentation
Base URL: https://www.heliosapp.com/docs
# Advanced
URL: https://www.heliosapp.com/docs/advanced
Description: Advanced usage of Helios
---
title: "Advanced"
excerpt: "Advanced usage of Helios"
description: "Advanced usage of Helios"
icon: Code
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Advanced
## Workflow YAML definition
Workflows can be defined in YAML for advanced customization. Some examples are below.
#### 1. Webhook Trigger
```yaml
trigger:
type: webhook
events: ["issues.opened"]
```
#### 2. Format Message Node
```javascript
// Script node to format the message
const issue = triggers['github-issue'].payload;
return {
text: `🚨 New Issue: ${issue.title}`,
url: issue.html_url,
author: issue.user.login
};
```
#### 3. Post to Slack Node
```yaml
# Slack integration node
channel: "#dev-alerts"
message: |
{{nodes['format-message'].output.text}}
Author: {{nodes['format-message'].output.author}}
Link: {{nodes['format-message'].output.url}}
```
### Test Your Workflow
1. **Save** the workflow
2. **Run Test** to verify functionality
3. **Set up webhook** in GitHub repository
4. **Create test issue** to confirm workflow
#### 4. Conditional Logic
```yaml
# Condition node
if: "nodes['format-message'].output.priority === 'high'"
then: ["urgent-notification"]
else: ["standard-notification"]
```
#### 5. AI Processing
```yaml
# AI node for issue analysis
model: "gemini-2.5-flash"
prompt: "Analyze and categorize this issue: {{trigger.payload.body}}"
output_schema:
category: ["bug", "feature", "documentation", "question"]
priority: ["low", "medium", "high", "critical"]
```
## Step 4: Manage Variable
### Variables
Non-sensitive configuration values with hierarchical scoping.
**Create Variable:**
1. Go to **Variables** in project/organization settings
2. Click **Add Variable**
3. Set key-value (e.g., `ENVIRONMENT`: `production`)
4. Reference in workflows: `{{variables.ENVIRONMENT}}`
## Step 5: Monitor and Debug
### Workflow Runs
Each execution creates a run record with:
- **Status**: Success, failure, or running
- **Duration**: Execution time
- **Node Results**: Output from each node
- **Logs**: Detailed execution information
### Common Issues
#### Node Failures
- Check logs for error messages
- Validate all required inputs
- Test integration connections
#### Authentication Errors
- Verify integration permissions
- Check API key validity
---
# Quickstart
URL: https://www.heliosapp.com/docs/quickstart
Description: Create your first Helios workflow in 5 minutes, automate everything.
---
title: "Quickstart"
excerpt: "Create your first Helios workflow"
description: "Create your first Helios workflow in 5 minutes, automate everything."
icon: FastForward
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Step, Steps } from 'fumadocs-ui/components/steps';
import { Callout } from 'fumadocs-ui/components/callout';
# Quickstart
This guide walks you through creating your first project, setting up integrations, and building your first workflow.
## Create Project
Projects organize related workflows, variables, and integrations.
1. Navigate to **Projects** in sidebar
2. Click **Create Project**
3. Fill in details:
- **Name**: Descriptive project name
- **Description**: Optional purpose description
4. **Set Visibility**:
- **Organization**: All team members can access
- **Restricted**: Only explicitly granted users
5. Click **Create**
Your project now contains workflows, variables, integrations, and team access settings.
## Set Up Integrations
Integrations connect workflows to external services securely.
1. Go to your project → **Integrations**
2. Select a service
3. Choose authentication method:
- **Helios App**: Built-in OAuth (recommended)
- **API Key**: Enter service API key
- **BYO App**: Use your OAuth credentials
4. Name your integration for easy identification
For detailed setup instructions and examples, see the **[Integrations](/docs/integrations)** section.
## Create Your First Workflow
Let's build a workflow that posts GitHub issues to Slack.
1. In your project, click **Create Workflow**
2. **Name**: "GitHub Issue to Slack"
3. **Description** (optional): "Post new GitHub issues to Slack channel"
### Trigger
Triggers are the starting point of a workflow. They can be configured to listen to events from external services, or periodically run on a schedule.
The payload of the trigger is available in the `{{ trigger.payload }}` variable. You can use it in any node.
#### Example
Listen for new issues in a GitHub repository.
Select the `Integration Trigger` node and select the `GitHub` integration you created in the previous step.
Prompt it in natural language to listen for new issues in the `ExampleOrg/ExampleRepo` repository as follows:
```
Listen for new issues in the `ExampleOrg/ExampleRepo` repository of the type `bug`.
```
The prompt is used to filter the events that are delivered to the workflow. No additional processing is done on the input payload.
Use nodes to process the input payload as needed for your workflow.
For example, the following is an invalid filter prompt:
```
Listen for new issues in the `ExampleOrg/ExampleRepo` repository of the type `bug` and identify if the issue is a duplicate of an existing issue.
```
The following is a valid filter prompt:
```
Listen for new issues in the `ExampleOrg/ExampleRepo` repository of the type `bug`.
```
### Add Integration
Select the `Slack` node and select the `Slack` integration you created in the previous step.
Prompt it in natural language to post a message to the `#dev-alerts` channel as follows:
```
Post a message to the #dev-alerts slack channel with the details of the issue. Format it as a markdown message with the title, author, and link to the issue.
Include the issue priority and category.
Issue details are here:
`{{ trigger.payload }}`.
```
The input and output of each node is available in the `{{ nodes['node-name'].input }}` and `{{ nodes['node-name'].output }}` variables.
## Run the Workflow
Create a new issue in the `ExampleOrg/ExampleRepo` repository to see the workflow run. You can:
- See the workflow run in the `Workflow Runs` tab.
- See the logs of the workflow run in the `Logs` tab.
- Change the workflow and re-run it by redelivering the trigger payload.
## Next Steps
Explore advanced features:
1. **[User roles and permissions](/docs/basics/roles-permissions)** - Manage team access
2. **[Sharing options](/docs/basics/sharing)** - Share projects and integrations
3. **[Manage Variables](/docs/basics/variables)** - Manage variables
4. **[Workflow YAML definition](/docs/advanced)** - Advanced workflow customization
5. **[Keyboard shortcuts](/docs/basics/keyboard-shortcuts)** - Boost productivity
6. **[Available integrations](/docs/integrations)** - Connect more services
7. **[Key concepts](/docs/basics/concepts)** - Deepen your understanding
## Support
Email support@warpbuild.com for assistance or reach out through the in-app chat.
---
# What is Helios?
URL: https://www.heliosapp.com/docs/what-is-helios
Description: Helios is an AI-native collaboration and workflow builder that enables developers to create, manage, and execute automated workflows with seamless integrations and intelligent processing.
---
title: "What is Helios?"
excerpt: "Introducing Helios - AI-native workflow automation platform built for developers"
description: "Helios is an AI-native collaboration and workflow builder that enables developers to create, manage, and execute automated workflows with seamless integrations and intelligent processing."
icon: Sun
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Card } from 'fumadocs-ui/components/card';
import { Code2, Megaphone, BarChart3, Settings, DollarSign, Users, Target, Heart, GraduationCap, Scale, Factory, ShoppingCart } from 'lucide-react';
# What is Helios?
Helios is an **AI-native workflow automation platform**. Create, manage, and execute automated workflows with seamless integrations and intelligent processing.
## Guiding Principles
The objective with Helios is to maximally leverage AI to automate all useful work.
1. AI native - It is simpler to automate the task than it is to send a slack message or raise a Linear issue. Creating workflows is 100x easier.
1. Collaboration and team first - create once and reuse across teams.
1. Access 100% of capabilities of integrated product (not just the top 10 actions).
1. Enterprise ready from day one with custom permissions, scopes, SOC2 Type 2 compliance, RBAC, SSO with SCIM, and more.
1. [Coming soon] Appify workflows instantly for maximal reuse and productivity.
1. [Coming soon] Run anywhere, securely - on-prem, cloud, or self-hosted.
## Key Features
| Feature | Description |
|---------|-------------|
| **Extensive Integrations** | Connect with 100+ tools and services including GitHub, Slack, Notion, Stripe, OpenAI, and custom APIs. |
| **AI-Powered Processing** | Built-in AI capabilities for content generation, data analysis, code review, and multi-modal processing. |
| **Visual Workflow Builder** | Intuitive drag-and-drop interface with real-time collaboration, version control, and easy testing. |
| **Scalable Architecture** | Distributed execution with event-driven architecture, fault tolerance, and 99.9% uptime. |
| **Enterprise Security** | SOC2 Type 2 compliant with encrypted storage, RBAC, and SSO integration. |
## Core Concepts
| Concept | Description |
|---------|-------------|
| **Workflows** | Directed acyclic graphs (DAGs) of connected nodes that define your automation logic. Triggered manually, by schedules, or via webhooks. |
| **Nodes** | Individual processing units that execute tasks, connect to external services, transform data, and support conditional logic. |
| **Projects** | Organizational units containing workflows, variables, and integrations. Enable team collaboration and resource sharing. |
| **Integrations** | Authenticated connections to external services with secure credential storage and multiple authentication methods. |
## Use Cases
Helios is designed to automate any task that can be described in natural language. The objective is to make it as easy to build workflows as it is to send a slack message.
}
title='Software Development'>
Automated code reviews, PR management, documentation generation, and deployment workflows.
}
title='Marketing & Content'>
Campaign automation, content generation, social media scheduling, and performance analytics.
}
title='Data & Analytics'>
Data processing, report generation, ETL workflows, and predictive analytics dashboards.
}
title='Operations & Support'>
Incident response, ticket routing, system monitoring, and automated customer support.
}
title='Finance & Accounting'>
Invoice processing, expense automation, financial reporting, and compliance tracking.
}
title='HR & Recruitment'>
Candidate screening, onboarding workflows, performance reviews, and employee surveys.
}
title='Sales & CRM'>
Lead qualification, follow-up automation, pipeline management, and customer communications.
}
title='Healthcare'>
Patient scheduling, medical record processing, appointment reminders, and treatment workflows.
}
title='Education'>
Student enrollment, grading automation, course management, and learning analytics.
}
title='Legal & Compliance'>
Contract review, compliance monitoring, document automation, and regulatory reporting.
}
title='Manufacturing'>
Quality control, inventory management, supply chain automation, and production scheduling.
}
title='E-commerce'>
Order processing, inventory updates, customer notifications, and marketplace management.
## Quickstart
1. **[Create your first project](/docs/quickstart)** - Set up projects and understand basics
2. **[Connect your tools](/docs/integrations)** - Set up integrations with your services
3. **[Learn key concepts](/docs/basics/concepts)** - Understand workflows, nodes, and integrations
4. **[Understand permissions](/docs/basics/roles-permissions)** - Learn about user roles and access control
5. **[Master collaboration](/docs/basics/sharing)** - Share projects and integrations with your team
6. **[Boost productivity](/docs/basics/keyboard-shortcuts)** - Master keyboard shortcuts
## Compliance and Security
Helios is SOC2 Type 2 compliant. For detailed security documentation, visit our [trust center](https://compliance.warpbuild.com) or contact support@warpbuild.com.
No data passing through Helios is used for training or improving AI models. Helios stores data for managing workflows, running workflows, and providing the relevant functionality for users in accordance with our data retention policy.
## Next Steps
- [Get started with your first workflow](/docs/quickstart)
- [Explore available integrations](/docs/integrations)
- [Learn about user roles and permissions](/docs/basics/roles-permissions)
- [Master keyboard shortcuts](/docs/basics/keyboard-shortcuts)
---
# Workflow triggers (draft)
URL: https://www.heliosapp.com/docs/agent-workflows/triggers
Description: Reference for agent-workflow trigger types and webhook signing
---
title: "Workflow triggers (draft)"
description: "Reference for agent-workflow trigger types and webhook signing"
draft: true
---
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
# Triggers
Agent workflows can be triggered by manual dispatch, cron schedules, integration events, or webhooks.
## Webhook triggers
Webhook triggers expose a public URL that any HTTP client can POST to. To prevent anyone with the URL from firing your workflow, every request must carry a valid HMAC-SHA256 signature derived from a per-trigger secret.
### Headers
| Header | Value |
| -------------------- | ------------------------------------- |
| `X-Helios-Timestamp` | Unix seconds at the moment of signing |
| `X-Helios-Signature` | `sha256=` |
### Algorithm
1. Capture the raw request body as bytes.
2. Compute `HMAC-SHA256(secret, "${timestamp}.${rawBody}")` and hex-encode it.
3. Send the request with both headers above.
The server rejects when:
- the signature header is missing or doesn't begin with `sha256=`,
- the timestamp is more than 5 minutes off the server's clock,
- or the computed digest doesn't match.
All failures return `401`. The body is intentionally generic — server-side logs carry the precise reason.
### Examples
```ts
import crypto from "node:crypto";
const url = "";
const secret = "";
const ts = Math.floor(Date.now() / 1000);
const body = JSON.stringify({ hello: "world" });
const sig = crypto
.createHmac("sha256", secret)
.update(`${ts}.${body}`)
.digest("hex");
await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Helios-Timestamp": String(ts),
"X-Helios-Signature": `sha256=${sig}`,
},
body,
});
```
```bash
ts=$(date +%s)
body='{"hello":"world"}'
sig=$(printf '%s.%s' "$ts" "$body" \
| openssl dgst -sha256 -hmac "$SECRET" -hex \
| awk '{print $2}')
curl -X POST "$URL" \
-H "X-Helios-Timestamp: $ts" \
-H "X-Helios-Signature: sha256=$sig" \
-H 'Content-Type: application/json' \
--data "$body"
```
### Rotating the secret
You can rotate a webhook trigger's signing secret from the workflow's trigger panel. Rotation immediately invalidates the previous secret — every existing sender will start receiving `401` until reconfigured with the new value. There is no overlap window.
### Notes
- The secret is treated as a UTF-8 string, not raw bytes. Both ends sign the same way; don't `Buffer.from(secret, "hex")` on one side only.
- The body is signed exactly as transmitted. If a proxy mutates whitespace or re-encodes JSON, signatures will fail.
- Empty bodies are signed as the empty string — sign over `${ts}.` (no body bytes).
---
# Key Concepts
URL: https://www.heliosapp.com/docs/basics/concepts
Description: Core concepts and terminology in Helios workflows, nodes, and integrations
---
title: "Key Concepts"
excerpt: "Essential concepts and terminology for understanding Helios"
description: "Core concepts and terminology in Helios workflows, nodes, and integrations"
icon: BookOpen
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Key Concepts
Essential concepts and terminology for understanding Helios.
## Core Concepts
### **Integration**
Configured connection to external services with secure credential storage and reusable access across workflows. This is sometimes called a "service".
### **Node**
Individual processing unit in workflows that executes tasks, processes data, and connects to external services.
**Example Node Types:**
- **Script**: Execute custom JavaScript code
- **Integration**: Connect to external services
- **AI**: Process data using AI models
- **Control**: Handle workflow logic (conditions, loops)
- **Trigger**: Start workflow execution
**Node States:**
- **Pending**: Waiting to execute
- **Running**: Currently executing
- **Succeeded**: Completed successfully
- **Failed**: Execution failed
- **Suspended**: Paused for external input
### **Project**
Organizational unit grouping related workflows, variables, and integrations with team access control.
### **Resource**
Manageable entities in Helios including organizations, projects, workflows, integrations, and variables.
### **Role**
Permission level determining user actions. Three main types: User (view/use), Editor (create/modify), Admin (full control).
### **Service**
External system that Helios integrates with (GitHub, Slack, APIs, databases, AI services).
### **Trigger**
Event that initiates workflow execution. Types include manual, webhook, cron, and subworkflow.
### **Variable**
Non-sensitive configuration values reusable across workflows with hierarchical scoping.
**Variable Precedence:**
1. Workflow-level (highest)
2. User-level
3. Project-level
4. Organization-level (lowest)
### **Visibility**
Access control setting determining resource discoverability. "Organization" (all members) or "Restricted" (explicit access only).
### **Webhook**
HTTP endpoints receiving external events to trigger workflows with authentication and filtering support.
### **Workflow**
Automated process defined as directed acyclic graph (DAG) of connected nodes.
**Workflow States:**
- **Draft**: Being designed
- **Published**: Ready for execution
- **Running**: Currently executing
- **Completed**: Finished successfully
- **Failed**: Execution failed
- **Cancelled**: Manually stopped
### **Workflow Run**
Specific execution instance with status, duration, trigger data, node results, and logs.
---
## Security Terms
### **Encryption**
Data protection through cryptographic methods for data at rest, in transit, and envelope encryption.
### **OAuth**
Industry-standard authorization protocol enabling secure authorization without password sharing.
### **RBAC (Role-Based Access Control)**
Permission system assigning roles to users with hierarchical permissions and fine-grained access control.
### **SOC2 Type 2**
Security certification validating comprehensive security controls and operational effectiveness.
---
## Integration Terms
### **API Version**
Specific version of external service API with backward compatibility and feature support considerations.
### **Authentication Method**
Different ways to authenticate with services (OAuth 2.0, API key, basic auth, bearer token, custom).
### **Rate Limiting**
Restrictions on API call frequency with request limits, throttling, queuing, and backoff strategies.
---
## Related Documentation
- [Quickstart Guide](/docs/quickstart) - Learn to use these concepts
- [User Roles and Permissions](/docs/basics/roles-permissions) - Detailed role information
- [Sharing Guide](/docs/basics/sharing) - Project and integration sharing
- [Integrations](/docs/integrations) - Integration setup guides
---
# Keyboard Shortcuts
URL: https://www.heliosapp.com/docs/basics/keyboard-shortcuts
Description: Essential keyboard shortcuts for efficient workflow automation
---
title: "Keyboard Shortcuts"
excerpt: "Master Helios with these essential keyboard shortcuts for efficient workflow automation"
description: "Essential keyboard shortcuts for efficient workflow automation"
icon: Keyboard
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Keyboard Shortcuts
Master these essential shortcuts to boost your productivity in Helios.
## Global Navigation
### General
| Shortcut | Action |
|----------|--------|
| `⌘ + /` | Show keyboard shortcuts |
| `⌘ + B` | Toggle sidebar |
| `⌘ + K` | Open command palette |
| `/` | Focus search |
| `⌥ + T` | Toggle theme |
### Quick Navigation
| Shortcut | Action |
|----------|--------|
| `g` then `h` | Go to Helios dashboard |
| `g` then `c` | Go to CI |
| `g` then `s` | Go to Settings |
| `g` then `i` | Go to Insights |
### Helios Navigation
| Shortcut | Action |
|----------|--------|
| `h` then `w` | Go to workflow editor |
| `h` then `v` | Go to variables |
| `h` then `p` | Go to projects |
| `h` then `i` | Go to integrations |
### Settings Navigation
| Shortcut | Action |
|----------|--------|
| `s` then `a` | Go to account |
| `s` then `b` | Go to billing |
| `s` then `k` | Go to API keys |
---
## Workflow Canvas
### Workflow Actions
| Shortcut | Action |
|----------|--------|
| `⌘ + S` | Save workflow |
| `⌘ + ⇧ + E` | Toggle editor sidebar |
| `⌘ + ⇧ + H` | Toggle history panel |
| `⌘ + ⇧ + V` | Show variables modal |
### Canvas Control
| Shortcut | Action |
|----------|--------|
| `⌘ + ⇧ + L` | Auto layout |
| `⌘ + 0` | Zoom to fit |
| `⌘ + +` | Zoom in |
| `⌘ + -` | Zoom out |
### Node Operations
| Shortcut | Action |
|----------|--------|
| `⌘ + A` | Select all nodes |
| `Delete` | Delete selected node |
| `⌘ + ⇧ + C` | Clone selected node |
| `⌘ + Z` | Undo |
| `⌘ + ⇧ + Z` | Redo |
---
## Variables
### General Actions
| Shortcut | Action |
|----------|--------|
| `/` | Focus search |
| `⌥ + N` | Create new variable |
| `⌘ + I` | Import from file |
| `⌘ + S` | Save changes |
### Navigation
| Shortcut | Action |
|----------|--------|
| `↑` or `K` | Move up |
| `↓` or `J` | Move down |
| `X` | Toggle selection |
| `⌘ + A` | Select all |
| `⌘ + ⌫` | Delete selected |
---
## Form and Modal Controls
### Text Editing
| Shortcut | Action |
|----------|--------|
| `Enter` | Save changes |
| `Escape` | Cancel edit |
| `Tab` | Next field |
| `⇧ + Tab` | Previous field |
### Modal Dialogs
| Shortcut | Action |
|----------|--------|
| `Escape` | Close modal |
| `Enter` | Confirm action |
### Dropdowns
| Shortcut | Action |
|----------|--------|
| `↑` / `↓` | Navigate options |
| `Enter` | Select option |
| `Escape` | Close dropdown |
---
## Resource Management
### Integrations
| Shortcut | Action |
|----------|--------|
| `⌘ + N` | Create new integration |
| `⌘ + R` | Refresh integration |
| `⌘ + T` | Test connection |
| `⌘ + O` | Start OAuth flow |
| `⌘ + ⇧ + R` | Refresh token |
### Projects
| Shortcut | Action |
|----------|--------|
| `⌘ + N` | Create new project |
| `⌘ + E` | Edit project |
| `Enter` | Open project |
| `⌘ + ↑` | Go to parent |
---
## Accessibility
### Keyboard Navigation
| Shortcut | Action |
|----------|--------|
| `Tab` | Focus next element |
| `⇧ + Tab` | Focus previous element |
| `Space` | Activate element |
| `Arrow Keys` | Navigate UI |
| `Home` | Go to beginning |
| `End` | Go to end |
| `Page Up` | Previous page |
| `Page Down` | Next page |
---
## Platform Notes
### **Windows/Linux**
Replace `⌘` with `Ctrl` in all shortcuts.
### **Browser Compatibility**
- **Chrome/Edge**: All shortcuts work as documented
- **Firefox**: `⌘ + K` may conflict with address bar
- **Safari**: Enable "Press Tab to highlight each item" in Preferences > Advanced
## Pro Tips
### Workflow Building
1. Start with `⌘ + K` for quick access to any function
2. Use `⌘ + 0` to zoom to fit, then `⌘ + +/-` to zoom
3. Press `⌘ + ⇧ + L` to auto-arrange nodes
4. Save frequently with `⌘ + S`
### Navigation
1. Master two-key sequences: `g` + `h` for Helios, `h` + `w` for workflows
2. Use `⌘ + B` to toggle sidebar for more space
3. Use `/` to quickly find anything
4. Switch themes with `⌥ + T` based on lighting
### Variables
1. Use `⌥ + N` for quick variable creation
2. Navigate with `J` and `K` for speed
3. Use `⌘ + A` then `X` for bulk operations
4. Save with `⌘ + S` without clicking
## Troubleshooting
### Common Issues
- **Shortcuts not working**: Check browser conflicts, reload page
- **Platform differences**: Use `Ctrl` instead of `⌘` on Windows/Linux
- **Mobile**: Keyboard shortcuts unavailable on mobile devices
### Need Help?
Contact support@warpbuild.com if shortcuts aren't working as expected.
---
# Roles and Permissions
URL: https://www.heliosapp.com/docs/basics/roles-permissions
Description: Understanding user roles and access control in Helios
---
title: "Roles and Permissions"
excerpt: "Understanding user roles, permissions, and access control in Helios"
description: "Understanding user roles and access control in Helios"
icon: Shield
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Roles and Permissions
Helios uses role-based access control (RBAC) to manage user permissions across the platform with hierarchical organization and resource-specific roles.
## Role Types
### **Organization Roles**
Base access level across the entire platform.
**Member** - Default role for users
- View organization-wide resources with "organization" visibility
- Inherit base role for all resource-specific permissions
**Admin** - Administrative privileges
- Full access to all organization resources and settings
- Manage user roles, organization settings, and billing
- Override any resource-specific permissions
### **Resource-Specific Roles**
Assigned for specific resources (projects, workflows, integrations).
**User** - Basic consumption access
- View resource details and configuration
- Execute workflows and use integrations
- Monitor results and logs
**Editor** - Create and modify resources
- All User permissions
- Create, update, and delete resources
- Cannot manage permissions or sharing
**Admin** - Full control including permission management
- All Editor permissions
- Modify user access and sharing settings
- Complete authority over the resource
---
## Permission System
### **Hierarchy**
Permissions follow this structure:
1. **Organization Level** - Base permissions for all users
2. **Project Level** - Permissions for specific projects
3. **Workflow Level** - Permissions for individual workflows
4. **Integration Level** - Permissions for specific integrations
### **Resolution Priority**
When determining access, Helios uses this order:
1. **Resource-specific role** (highest priority)
2. **Project-level role** (for resources within projects)
3. **Organization role** (base level)
4. **Default restriction** (lowest priority)
---
## Resource Permissions
### **Projects**
#### User Role
- View project details and workflows
- Use project integrations
- View variable/secret names (values hidden)
#### Editor Role
- Create workflows in project
- Modify project details
- Create/modify variables
- Delete workflows
#### Admin Role
- Manage project permissions
- Delete entire project
- Full control over all project resources
### **Workflows**
#### User Role
- View workflow definition
- Trigger execution
- View runs and results
- Access variables for execution
#### Editor Role
- Modify workflow definition
- Update metadata
- Create/modify workflow variables
- Cancel running workflows
#### Admin Role
- Manage workflow permissions
- Delete workflow
- Full control over workflow settings
### **Integrations**
#### User Role
- Use integration in workflows
- View integration metadata
- Test connectivity
#### Editor Role
- Modify integration configuration
- Update authentication credentials
- Refresh OAuth tokens
#### Admin Role
- Manage integration permissions
- Delete integration
- Full control over integration settings
---
## Visibility and Sharing
### **Organization Visibility**
- All members can see and use resource
- Members inherit base organization role
- Use for shared team resources
### **Restricted Visibility**
- Only explicitly granted users can access
- No default access
- Use for private or sensitive resources
---
## Managing Roles
### Adding Users
1. Navigate to resource settings
2. Click sharing/permissions
3. Add user email or select from members
4. Assign appropriate role
5. Save changes
### Modifying Roles
1. Access resource permissions page
2. Find user in permissions list
3. Select new role from dropdown
4. Save changes
### Removing Access
1. Access resource permissions page
2. Find user in permissions list
3. Click remove/delete button
4. Confirm removal
---
## Best Practices
### **Role Assignment**
- **Principle of least privilege**: Give minimum access needed
- **Regular reviews**: Update permissions periodically
- **Team alignment**: Match permissions to organizational structure
- **Documentation**: Document permission rationale
### **Organization Setup**
- **Limit admins**: Minimize number of organization admins
- **Default policies**: Establish standard visibility and sharing policies
- **Standardized onboarding**: Create consistent permission processes
- **Proper offboarding**: Remove access when users leave
### **Resource Management**
- **Consistent naming**: Use clear, consistent resource names
- **Logical grouping**: Group related resources in projects
- **Access reviews**: Regularly audit sensitive resource access
- **Audit logging**: Monitor permission changes
---
## Security Considerations
### **Sensitive Data**
- Limit integration credential access
- Monitor audit trails
- Ensure compliance requirements are met
### **Access Control**
- Strong authentication with 2FA
- SSO integration for centralized control
- Automatic session timeouts
- Regular access audits
---
## Troubleshooting
### Common Issues
#### "Permission Denied" Errors
- Verify required role for action
- Ask admin to grant appropriate permissions
- Check resource visibility settings
#### Cannot See Resources
- Check if resources are "restricted" visibility
- Verify organization membership
- Request explicit access from admin
#### Cannot Share Resources
- Admin role required for permission management
- Check organization sharing policies
- Verify resource type supports sharing
### Getting Help
- Contact organization administrator
- Email support@warpbuild.com for technical issues
- Check [sharing documentation](/docs/basics/sharing) for detailed guidance
---
## Related Documentation
- [Sharing Guide](/docs/basics/sharing) - Detailed sharing and collaboration
- [Quickstart Guide](/docs/quickstart) - Project and workflow setup
- [Key Concepts](/docs/basics/concepts) - Key terms and concepts
---
# Sharing
URL: https://www.heliosapp.com/docs/basics/sharing
Description: Share projects and integrations with your team
---
title: "Sharing"
excerpt: "Learn how to share projects and integrations, manage access levels, and collaborate effectively in Helios"
description: "Share projects and integrations with your team"
icon: Share
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Sharing
Helios provides flexible sharing to help teams collaborate effectively while maintaining security and control.
## Visibility Settings
### **Organization**
Accessible to all organization members with automatic discovery and inheritance of base organization roles.
**Use for:**
- Shared development tools (GitHub, Slack integrations)
- Common workflow templates
- Organization-wide automation
### **Restricted**
Only accessible to explicitly granted users with no default access.
**Use for:**
- Personal projects
- Sensitive integrations (billing, customer data)
- Experimental workflows
- Client-specific automation
---
## Access Levels
### **User**
Basic consumption access for shared resources.
**Permissions:**
- View resource details and configuration
- Execute workflows and use integrations
- Monitor execution results and logs
**Cannot:** Modify or delete resources
### **Editor**
Can create and modify shared resources.
**Permissions:**
- All User permissions
- Create new resources
- Update existing resources
- Delete resources
**Cannot:** Manage permissions or sharing settings
### **Admin**
Full control including permission management.
**Permissions:**
- All Editor permissions
- Modify user access
- Change visibility settings
- Complete authority over resource
---
## Sharing Projects
### Quick Setup
1. **Create project** with appropriate visibility
2. **Add team members** with suitable roles
3. **Configure resources** (workflows, variables, integrations)
4. **Document usage** for team clarity
### Example Project Configuration
```yaml
project:
name: "Team Automation Hub"
visibility: "organization"
default_role: "user"
team_members:
- email: "developer@company.com"
role: "editor"
- email: "manager@company.com"
role: "user"
- email: "lead@company.com"
role: "admin"
```
### Best Practices
- **Clear ownership**: Designate project administrators
- **Document purpose**: Explain project goals and usage
- **Regular reviews**: Update access permissions periodically
- **Principle of least privilege**: Grant minimum necessary access
---
## Sharing Integrations
### Organization-Wide Integration
```yaml
integration:
name: "GitHub - Organization"
service: "github"
visibility: "organization"
description: "Shared GitHub integration for all teams"
```
### Team-Specific Integration
```yaml
integration:
name: "Slack - Marketing Team"
service: "slack"
visibility: "restricted"
users:
- email: "marketing-lead@company.com"
role: "admin"
- email: "marketing-analyst@company.com"
role: "user"
```
### Security Considerations
- **Separate credentials** for different teams
- **Regular credential rotation**
- **Audit access** to sensitive integrations
- **Minimal permission scopes**
---
## Managing Access
### Adding Users
1. Navigate to resource settings
2. Click sharing/permissions
3. Add user email or select from members
4. Assign appropriate role
5. Save changes
### API Example
```javascript
await fetch('/api/projects/project-id/permissions', {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
userRoles: [{
id: 'user-id',
role: 'editor'
}]
})
});
```
### Bulk Access Management
```yaml
bulk_access:
team: "development"
role: "editor"
resources:
- project: "api-automation"
- project: "deployment-workflows"
- integration: "github-main"
```
---
## Collaboration Features
### Real-Time Collaboration
- **Live editing**: Multiple users can edit simultaneously
- **Change tracking**: All changes are tracked and attributed
- **Version history**: Complete change history
- **Conflict resolution**: Automatic handling of simultaneous edits
### Communication
- **Comments**: Add comments to workflows and nodes
- **Notifications**: Real-time change notifications
- **Activity feed**: Recent activity on shared resources
- **Mentions**: Tag team members in discussions
### Workflow Sharing
- **Export/Import**: Share workflows as JSON files
- **Templates**: Create reusable workflow templates
- **Version control**: Track workflow versions
---
## Best Practices
### Security
- **Regular access audits**: Review permissions periodically
- **Least privilege**: Grant minimum necessary access
- **Strong authentication**: Use 2FA and strong passwords
- **Credential separation**: Use different service accounts
### Team Collaboration
- **Clear documentation**: Document all shared resources
- **Change notifications**: Set up alerts for important changes
- **Naming conventions**: Use consistent resource naming
- **Ownership clarity**: Assign clear resource ownership
### Organization Management
- **Access policies**: Establish clear access policies
- **Approval processes**: Implement approval for sensitive changes
- **Compliance**: Ensure practices meet requirements
- **Training**: Provide sharing best practices training
---
## Troubleshooting
### Common Issues
#### Cannot Share Resource
- Check if you have admin access
- Verify organization sharing policies
- Confirm resource type supports sharing
#### User Cannot Access Resource
- Verify user invitation was sent
- Check user's role assignment
- Confirm user is organization member
- Verify resource visibility settings
#### Permission Conflicts
- Understand role hierarchy
- Check for explicit permission overrides
- Review permission inheritance
### Getting Help
- Check [roles and permissions documentation](/docs/basics/roles-permissions)
- Contact organization administrator
- Email support@warpbuild.com for technical issues
---
## Related Documentation
- [Roles and Permissions](/docs/basics/roles-permissions) - Detailed permissions info
- [Quickstart Guide](/docs/quickstart) - Project setup basics
- [Integrations](/docs/integrations) - Integration management
- [Key Concepts](/docs/basics/concepts) - Key terms and concepts
---
# Variables
URL: https://www.heliosapp.com/docs/basics/variables
Description: Manage variables in Helios
---
title: "Variables"
excerpt: "Manage variables in Helios"
description: "Manage variables in Helios"
icon: Key
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
# Variables
---
# Authentication
URL: https://www.heliosapp.com/docs/integrations/auth
Description: How to authenticate with Helios
---
title: "Authentication"
excerpt: "How to authenticate integrations with Helios"
description: "How to authenticate with Helios"
icon: Key
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## API Key
> Many third-party services-Stripe, Twilio, OpenAI, etc.-issue long-lived secret API keys. Helios lets you store those keys securely and attach them to Integration nodes in your workflows.
For Helios Integration nodes, the key is injected automatically in API calls.
```http
POST https://api.stripe.com/v1/customers
Authorization: Bearer {{ connections.stripe_prod.key }}
Content-Type: application/x-www-form-urlencoded
```
### Rotating a key
1. Generate a **new key** in the provider's dashboard.
2. Open **Integrations** in Helios and edit your integration. Paste the new key and click **Save**.
3. Delete the old key in the provider.
> Rotating immediately affects new workflow executions; in-flight retries that were already queued will continue with the previous key.
---
## Helios App with OAuth Flow
Many services require an OAuth flow to be completed. Helios has a built-in OAuth app with all the integrations that can be used to authenticate with these services.
### When to use the built-in app
- You need to connect common SaaS providers such as GitHub, Slack, Notion, Google Sheets, etc.
- You do **not** want to manage client IDs, secrets, and refresh logic yourself.
- The default set of scopes requested by Helios is sufficient for your use-case.
### Connecting an account
1. Create a new integration in Helios.
2. Select Helios App if it is available
3. A new tab will open in the browser to complete the OAuth flow.
4. Once the flow is complete, you will be redirected back to Helios.
5. The access and refresh tokens are now stored **encrypted** in Helios' vault and automatically refreshed when they expire.
Once an account is linked you can reuse it across multiple workflows without re-authentication.
---
## Bring your own (BYO) OAuth App
If you want to have more control over the app itself, you can create your own OAuth app.
### Why run your own app?
- Custom branding on the consent screen (your logo and company name).
- Lower the number of requested scopes or add beta scopes not yet supported by Helios.
### Set-up steps
1. Create an OAuth application at the provider (e.g. GitHub → Developer Settings → OAuth Apps).
2. Note the **Client ID** and **Client Secret**.
3. Perform the OAuth flow and note the token.
4. Inside the **Helios Dashboard → Integrations** page choose BYO App during creation.
5. Select the provider, paste the Client ID, Secret and Access Token, and click **Save**.
6. From now on, pick **My Own App** when connecting accounts in the workflow builder.
---
# Database Security Best Practices
URL: https://www.heliosapp.com/docs/integrations/databases-security
Description: How to safely expose databases to Helios agents via SSH bastions, scoped credentials, and read replicas
---
title: "Database Security Best Practices"
excerpt: "Recommended hardening for database connections used by Helios agents and workflows"
description: "How to safely expose databases to Helios agents via SSH bastions, scoped credentials, and read replicas"
icon: ShieldCheck
createdAt: "2026-05-10"
updatedAt: "2026-05-10"
draft: true
---
> Draft. These are recommendations for customers connecting databases to Helios. The goal is to bound what an agent running in a sandboxed environment can do with the credentials you provide.
## Threat model
When you connect a database to Helios, an LLM-driven agent running inside an isolated sandbox is granted enough access to authenticate to that database. The sandbox holds your SSH key (if you use a bastion) and your database credentials for as long as the session lives. While the sandbox is isolated from the public internet on the inbound side, the agent code running inside it is, by design, untrusted: prompt injection, jailbreaks, or hostile tool output could cause it to use those credentials in ways you didn't intend.
The mitigations below are about **bounding the blast radius** of that access. None of them are required for the connection to work, but each one limits what an agent can do if it goes off-script.
## Use a read-only database role
The simplest and highest-leverage mitigation. Create a role on your database that only has `SELECT` on the tables you want the agent to introspect, and use that role's credentials in the Helios connection.
- The agent cannot write, update, delete, drop, or grant anything.
- SQL injection in the agent's prompt cannot mutate data.
- Schema introspection still works.
For Postgres:
```sql
CREATE ROLE helios_readonly LOGIN PASSWORD '...';
GRANT CONNECT ON DATABASE mydb TO helios_readonly;
GRANT USAGE ON SCHEMA public TO helios_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO helios_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO helios_readonly;
```
## Point Helios at a read replica
Even better than a read-only role on the primary. Most managed Postgres services (RDS, Aurora, Supabase, Neon branches, Cloud SQL) let you create a read replica with a click.
- Production writes are physically impossible from the replica's endpoint.
- Expensive queries from the agent hit the replica, not your primary.
- If the agent ever escalates beyond read-only (e.g. a database CVE), the damage is contained to the replica.
Use the replica's host in the Helios connection string and a read-only role on that replica.
## Lock down your SSH bastion's `authorized_keys`
If you connect via an SSH tunnel, the SSH key you give Helios works for anything the bastion can reach by default: other databases, internal HTTP services, shell access on the bastion itself. To limit that key to forwarding only to the configured database, prepend restriction options to the key's line in `~/.ssh/authorized_keys` on your bastion:
```
no-pty,no-agent-forwarding,permitopen="db.internal:5432" ssh-ed25519 AAAA... helios
```
Replace `db.internal:5432` with your database host and port. Now the bastion refuses any forward request to a different target, so even if an agent had its own SSH client it could not pivot to other hosts.
Additional flags you may want depending on your bastion configuration:
- `no-X11-forwarding` — disables X11 forwarding.
- `no-port-forwarding` — too strict for our case; the tunnel relies on local-forward.
- `command="/bin/false"` — refuses interactive shell commands.
## Use a dedicated SSH key
Generate a fresh SSH keypair specifically for Helios, rather than reusing one of your developer keys. This makes auditing and revocation simple: rotate or remove the helios key on the bastion any time without affecting other access.
```
ssh-keygen -t ed25519 -f ~/.ssh/helios -C helios
```
Add the public key (`~/.ssh/helios.pub`) to your bastion's `authorized_keys` with the `permitopen` restriction above, and paste the private key into the Helios connection form.
## Restrict network reachability
If your bastion sits behind a firewall and you can reach it from the public internet, consider also restricting which source IPs are allowed to dial port 22. Helios connects from a stable egress range; contact support for the current IP list.
## Audit logs
All queries the agent runs are visible to you:
- Database side: enable query logging on your database (`pg_stat_statements`, etc.) to record what was actually executed against your data.
- Helios side: the agent session transcripts capture every tool call, including SQL strings.
We recommend keeping database-side logging on for any production-data connection.
## Summary
| Mitigation | Bounds |
|---|---|
| Read-only role | What the agent can do _at the database_ |
| Read replica | Where the agent's writes (if any) can land |
| `permitopen` on bastion | What the agent can reach _through_ the SSH key |
| Dedicated SSH key | How quickly you can rotate / revoke |
Layered together, the residual exposure is exactly what you chose to grant: read access to specific tables via a tunnel that can't pivot anywhere else.
---
# Integrations
URL: https://www.heliosapp.com/docs/integrations
Description: Connect Helios to your favorite tools and services with 100+ pre-built integrations
---
title: "Integrations"
excerpt: "Connect Helios with your favorite tools and services through our comprehensive integration library"
description: "Connect Helios to your favorite tools and services with 100+ pre-built integrations"
icon: Puzzle
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Callout } from 'fumadocs-ui/components/callout';
import { IntegrationsExplorer } from '@/components/docs/IntegrationsExplorer';
# Integrations
Helios connects to 100+ popular services, enabling you to automate workflows across your entire tech stack. From communication tools to databases, we provide secure, reliable integrations that just work.
**Getting Started:** Most integrations support OAuth for one-click setup. For services requiring API keys, we encrypt and store them securely using industry-standard practices.
## Browse Available Integrations
Explore our complete integration library below. Use the search and filter tools to find exactly what you need.
## Authentication Methods
Helios supports multiple authentication approaches to work with any service:
### OAuth (Recommended)
Pre-built OAuth flows for popular services like Google, Microsoft, Slack, and GitHub. Simply click "Connect" and authorize Helios to access your account.
**Benefits:**
- One-click setup
- No API keys to manage
- Automatic token refresh
- Fine-grained permissions
By default, Helios OAuth apps take broad permissions for maximizing the capabilities accessible in workflows.
You can use your own OAuth apps for any integration for controlling scopes and permissions.
### API Keys
Direct API key authentication for services that support it. Perfect for services without OAuth or when you need programmatic access.
**How it works:**
1. Generate an API key in your service's settings
2. Paste it into Helios during integration setup
3. We encrypt and store it securely
4. Use it across all your workflows
## Common Use Cases
### Marketing and Sales Automation
Connect your marketing and sales tools (HubSpot, Salesforce, Instantly, Apollo.io) with communication tools (Slack, Teams) to completely automate outreach, follow-ups, and route conversations efficiently.
### Automate Customer Support
Connect your support system (Zendesk, Intercom) with communication tools (Slack, Teams) to notify your team of urgent tickets and route conversations efficiently. You can also use Helios to create tickets in your support system.
### Sync Data Across Platforms
Keep your CRM (Salesforce, HubSpot) in sync with your email marketing platform (Mailchimp, ConvertKit) and accounting software (QuickBooks, Stripe).
### Development Workflows
Automate your development process by connecting GitHub with project management tools (Jira, Linear) and communication channels (Slack, Discord).
### E-commerce Operations
Integrate your store (Shopify, WooCommerce) with inventory management, accounting, and customer support tools for seamless operations.
## Getting Help
**Need a custom integration?** Our team can build custom connectors for your specific needs. [Contact our integration team](mailto:integrations@heliosapp.com) for more information.
**Having trouble with an integration?**
- Check our [integration guides](/docs/integrations/apps) for step-by-step setup instructions
- Contact support through the in-app chat or [email us](mailto:support@heliosapp.com)
Ready to get started? Head to your [Helios dashboard](https://app.heliosapp.com) and start connecting your first integration.
---
# Expressions
URL: https://www.heliosapp.com/docs/workflows/expressions
---
title: "Expressions"
excerpt: "Use JavaScript expressions to dynamically generate values"
icon: Braces
createdAt: "2025-07-30"
updatedAt: "2025-07-30"
---
import { ExternalLink } from "lucide-react";
import { CodeBlock } from "@/components/docs/CodeBlock";
Helios uses JavaScript expressions to dynamically generate and transform values from the data available in and out of the workflow.
Anything inside double curly braces `{{ }}` is evaluated as JavaScript code. They can be used as standalone expressions:
```javascript
{{ 1 + 2 }}
{{ Math.max(10, 20, 30) }}
{{ JSON.stringify({ key: "value" }) }}
```
or can be used within strings:
```javascript
"Hello {{ node.nameGetter.output.name }}! The current time is {{ new Date().toISOString() }}"
```
## Context Variables
Expressions have access to the following context variables that provide data from your workflow:
### Trigger Data
Every workflow run starts from a trigger. The trigger data is available in the `trigger` variable. The shape of the object depends on the trigger type as shown below.
{/* We should generate the types and use this: https://fumadocs.dev/docs/ui/components/auto-type-table */}
)
},
{
value: "webhook",
label: "Webhook",
displayElement: (
)
},
{
value: "manual",
label: "Manual",
displayElement: (
)
},
{
value: "integration",
label: "Integration",
displayElement: (
)
}
]}
defaultSelected="cron"
/>
**Example usage**
```javascript
{{ trigger.type === "cron" ? "This is a cron trigger" : "This is not a cron trigger" }}
{{ trigger.type === "manual" ? `Triggered by: ${trigger.triggeredByUser}` : "Not a manual trigger" }}
{{ trigger.payload?.user?.email || "No email provided" }}
{{ trigger.type === "integration" ? trigger.integrationId : trigger.triggerId }}
{{ trigger.payload.items.filter(item => item.status === "active").map(item => item.name).join(", ") }}
```
### Node runs
All running and completed node runs are available in the `nodes` context variable. It is an object with the node label as the key and the node run as the value:
```js
{
"ai_1": NodeRun,
"node-67890": NodeRun,
myOtherNode: NodeRun,
myGitHubNode: NodeRun
}
```
Each `NodeRun` object is described according to its status:
{/* We should generate the types and use this: https://fumadocs.dev/docs/ui/components/auto-type-table */}
)
},
{
value: "running",
label: "Running",
displayElement: (
)
},
{
value: "succeeded",
label: "Succeeded",
displayElement: (
)
},
{
value: "failed",
label: "Failed",
displayElement: (
)
},
{
value: "cancelled",
label: "Cancelled",
displayElement: (
)
},
{
value: "suspended",
label: "Suspended",
displayElement: (
)
}
]}
defaultSelected="succeeded"
/>
You can find the specific `input`, `configuration`, and `output` properties for each node in the specific node documentation.
**Example usage**
```javascript
{{ nodes.httpRequest.output.data }}
{{ nodes.jsonParser.output.parsed }}
{{ nodes.filter.output.items }}
{{ nodes['node-1'].output.result }} // Accessing nodes with hyphenated labels
{{ nodes['node name'].output.items[1] }} // Accessing nodes with spaces in the label
{{ nodes['node-2'].status }}
{{ nodes['node-2'].error.message }}
```
You can technically access any node via `nodes.nodeLabel` but beware that the **node run may not be available yet**.
For example, a parent node trying to access a child or a concurrently running node trying to access a sibling that hasn't started or finished yet.
In these cases, the node run will be `undefined` and will fail accordingly.
```javascript
{{ nodes.notYetStartedNode.output.data }} // This will fail
{{ nodes.notYetStartedNode?.output?.data }} // This will return undefined
```
### Variables
Any [variables](/docs/basics/variables) accessible to the workflow are available in the `vars` context variable.
```javascript
{{ vars.counter }}
{{ vars.userEmail }}
{{ vars.config.environment }}
```
> [!Note]
> Secrets or sensitive variables are currently not supported and will be added in the future.
### Loop Context
Nodes inside loops have access to iteration-specific data via the `loop` context variable:
```json
{
"loop": {
"currentIteration": {
"item": // The current item in the loop,
"nodes": NodeRun[] // all the node runs in the loop,
},
// The total number of iterations in the loop.
// If an array was passed, this will be the length of the array.
// If a number was passed, this will be the number of iterations.
"totalIterations": 10,
}
}
```
**Example usage**
```javascript
{{ loop.currentIteration.item.data }}
{{ loop.currentIteration.nodes.previousNode.output }}
{{ loop.totalIterations }}
```
## Available Global Objects
Expressions have access to the following standard JavaScript global objects:
- **`Math`** - [MDN Docs ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math)
```javascript
{{ Math.max(1, 2, 3) }}
{{ Math.floor(3.7) }}
{{ Math.random() }}
```
- **`Date`** - [MDN Docs ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
```javascript
{{ new Date().toISOString() }}
{{ new Date().getTime() }}
```
- **`Array`** - [MDN Docs ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
```javascript
{{ Array.from({ length: 10 }, (_, i) => i) }}
{{ Array.isArray([1, 2, 3]) }}
```
- **`JSON`** - [MDN Docs ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)
```javascript
{{ JSON.stringify({ name: "John" }) }}
{{ JSON.parse('{"key": "value"}') }}
```
- **`Number`** - [MDN Docs ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)
```javascript
{{ Number.parseInt("123") }}
{{ Number.parseFloat("123.45") }}
```
## Examples
```javascript
// Combine data from two parent nodes
{{ { ...nodes.userProfile.output.data, ...nodes.userPreferences.output.data } }}
// Get user's full name from profile data
{{ `${nodes.userProfile.output.data.firstName} ${nodes.userProfile.output.data.lastName}` }}
// Use fallback value if data is missing
{{ nodes.userProfile.output.data?.nickname ?? nodes.userProfile.output.data?.firstName }}
// Check if both nodes completed successfully
{{ nodes.userProfile.status === "succeeded" && nodes.userPreferences.status === "succeeded" }}
// Filter active items from a data source
{{ nodes.dataFetcher.output.items.filter(item => item.status === "active") }}
// Clean up text using regex
{{ nodes.dataFetcher.output.data.description.replace(/\s+/g, ' ').trim() }}
// Build API URL based on environment
{{ `${vars.environment === "production" ? "https://api.prod.com" : "https://api.dev.com"}/v1/users` }}
// Handle different trigger types
{{ trigger.type === "manual" ? `Manual run by ${trigger.triggeredByUser}` : `Automated ${trigger.type} trigger` }}
// Extract branch name from webhook ref
{{ trigger.payload.ref?.match(/refs\/heads\/(.+)/)?.[1] ?? "main" }}
// Safe access to potentially failed nodes
{{ nodes.dataFetcher?.output?.data ?? [] }}
// Check if workflow can proceed (in `if` node, e.g.)
{{ nodes.dataFetcher?.status === "succeeded" && nodes.configLoader?.status !== "failed" }}
// Get current timestamp
{{ new Date().toISOString() }}
// Array methods
{{ nodes.dataFetcher.output.items.map(item => item.name).join(", ") }}
{{ nodes.dataFetcher.output.items.find(item => item.id === vars.targetId) }}
{{ nodes.dataFetcher.output.items.filter(item => item.status === "active").length }}
// Object operations
{{ { id: nodes.userProfile.output.data.id, fullName: `${nodes.userProfile.output.data.firstName} ${nodes.userProfile.output.data.lastName}`, isActive: nodes.userProfile.output.data.status === "active" } }}
{{ { ...vars.defaultConfig, ...nodes.configLoader.output.config } }}
// Conditional operators
{{ vars.environment === "production" ? "prod-api.com" : "dev-api.com" }}
{{ trigger.payload?.user?.email ?? vars.defaultEmail ?? "no-email@example.com" }}
// JSON operations
{{ JSON.parse(nodes.dataFetcher.output.data.config) }}
{{ JSON.stringify({ id: nodes.userProfile.output.data.id, name: nodes.userProfile.output.data.name }) }}
```
## Limitations
- Expressions are code that **must evaluate to a value**. Javascript statements are not expressions. That means function, class, or variable declarations are not allowed.
- Each expression **must be on a single line**. Multiline expressions are just treated as normal strings.
- No access to external APIs or network calls apart from the available [global objects](#available-global-objects).
- Limited to synchronous operations.
---
# Pricing
URL: https://www.heliosapp.com/docs/basics/pricing
Description: Understanding Helios' flexible credit-based pricing model for workflows, LLMs, and premium nodes
---
title: "Pricing"
excerpt: "Understanding Helios' flexible credit-based pricing model"
description: "Understanding Helios' flexible credit-based pricing model for workflows, LLMs, and premium nodes"
icon: DollarSign
createdAt: "2025-07-31"
updatedAt: "2025-08-04"
---
# Pricing
Helios uses a flexible credit-based pricing model that scales with your usage. You only pay for what you use, with no minimum commitments or hidden fees.
`Workflow Cost = Node Cost + LLM Cost`
Nodes cost 0 credits by default. You can use your own API keys or OAuth integrations for saving credits.
Helios is designed to be the most user-friendly way to build workflows and automate **everything**. We are not the cheapest, but we offer the most powerful and flexible platform with 100% coverage of the capabilities of the tools we integrate.
## LLM Costs
Different AI models consume different amounts of credits per call. Almost every node in the workflow is agentic and invokes LLM calls to perform its task.
### Model Classes
| Model Class | Credits per Call | Example Models |
| ------------- | ---------------- | ------------------------------------------ |
| **Class 1** | 1 credit | Gemini Flash, GPT-4o Mini |
| **Class 2** | 5 credits | Gemini 2.5 Pro, Claude 4 Sonnet, OpenAI o3 |
| **Class 3** | 20 credits | Claude-4 Opus |
| **BYO Model** | 1 credit | Bring Your Own Model |
### Fallback Pricing
For unrecognized or new models that are not yet classified, Helios applies a default rate of **10 credits per call** until the model is properly categorized.
For detailed pricing of individual models, see our [Complete Model Pricing Guide](/docs/basics/pricing/model-pricing).
Support for custom models and models from other providers is coming soon.
Bring Your Own (BYO) models allow you to use your own API keys and pay the
same low rate regardless of the model complexity.
## Node Costs
Premium nodes provide advanced capabilities and consume credits based on their complexity:
| Node Type | Credits per Use | Notes |
| -------------------- | --------------- | ------------------------------------------- |
| **Apollo** | 30 credits | Advanced data processing |
| **AI/ML Models** | 1-20 credits | Same as LLM classes above, 1 credit for BYO |
| **Crawler/Scrape** | 5 credits | Per page scraped |
| **Search** | 2 credits | Per search query |
| **Deep Research** | 60 credits | Comprehensive research tasks |
| **BYO Premium Tool** | 1 credit | Using your own API keys |
Use your own API keys or OAuth integrations for saving credits.
## Node Costs
### Free Nodes (0 Credits)
- **Control nodes**: switch, if, merge, delay, etc.
- **Integrations**: HubSpot, Notion, Resend, Slack, Stripe, and 1000+ others
- **Basic operations**: Data transformation, filtering, routing
### Premium Nodes (Variable Credits)
- **AI/ML inference**: GPT, Claude, Gemini, custom models
- **Web scraping**: Automated data extraction
- **Search APIs**: Web search, document search
- **Advanced processing**: Document analysis, image processing
- **Compute-intensive operations**: Complex calculations, data analysis
## How Credits Work
Credits are consumed when your workflows execute. The cost depends on the complexity of your workflow and the resources it uses:
- **Control nodes** (if, switch, merge, etc.): **0 credits**
- **Integrations** (HubSpot, Notion, Slack, etc.): **0 credits**
- **Premium nodes**: Variable credit cost based on complexity
- **LLM calls**: Credit cost varies by model class
## Credit Tiers
Our graduated pricing structure offers better rates as your usage grows:
| Tier | Price per Credit | Credit Range |
| -------------- | ---------------- | ---------------------- |
| **Tier 1** | $0.0020 | 0 - 1,000,000 |
| **Tier 2** | $0.0016 | 1,000,000 - 10,000,000 |
| **Enterprise** | Custom pricing | 10,000,000+ |
Credits are valid for 12 months from purchase and are consumed based on actual
usage.
---
Ready to get started? [Sign up for free](https://app.heliosapp.com) and get 5,000 credits to explore the platform.
---
# Complete Model Pricing Guide
URL: https://www.heliosapp.com/docs/basics/pricing/model-pricing
Description: Complete reference for pricing of individual AI models including Claude, GPT, Gemini, and Perplexity models
---
title: "Complete Model Pricing Guide"
excerpt: "Detailed pricing for every LLM model available in Helios"
description: "Complete reference for pricing of individual AI models including Claude, GPT, Gemini, and Perplexity models"
icon: Calculator
createdAt: "2025-08-04"
updatedAt: "2025-08-04"
---
# Complete Model Pricing Guide
This page provides detailed pricing for every LLM model available in Helios. All models are categorized into three classes based on their capabilities and computational requirements.
## Credit Classes
- **Class 1**: 1 credit per call - Fast, efficient models optimized for speed
- **Class 2**: 5 credits per call - Balanced performance models for most use cases
- **Class 3**: 20 credits per call - Most advanced models with superior reasoning capabilities
- **BYO Models**: 1 credit per call - Use your own API keys with any model
---
## Anthropic Models (Claude)
### Class 3 Models (20 credits per call)
| Model | Credits per Call | Description |
| -------------------------- | ---------------- | ------------------------ |
| `claude-opus-4-1-20250805` | 20 credits | Latest Claude Opus |
| `claude-opus-4-20250514` | 20 credits | Claude 4 Opus |
| `claude-3-opus-latest` | 20 credits | Claude 3 Opus (latest) |
| `claude-3-opus-20240229` | 20 credits | Claude 3 Opus (Feb 2024) |
### Class 2 Models (5 credits per call)
| Model | Credits per Call | Description |
| ---------------------------- | ---------------- | ----------------------------- |
| `claude-sonnet-4-20250514` | 5 credits | Latest Claude Sonnet |
| `claude-3-7-sonnet-20250219` | 5 credits | Claude 3.7 Sonnet (Feb 2025) |
| `claude-3-5-sonnet-latest` | 5 credits | Claude 3.5 Sonnet (latest) |
| `claude-3-5-sonnet-20241022` | 5 credits | Claude 3.5 Sonnet (Oct 2024) |
| `claude-3-5-sonnet-20240620` | 5 credits | Claude 3.5 Sonnet (June 2024) |
| `claude-3-sonnet-20240229` | 5 credits | Claude 3 Sonnet (Feb 2024) |
### Class 1 Models (1 credit per call)
| Model | Credits per Call | Description |
| --------------------------- | ---------------- | --------------------------- |
| `claude-3-5-haiku-latest` | 1 credit | Claude 3.5 Haiku (latest) |
| `claude-3-5-haiku-20241022` | 1 credit | Claude 3.5 Haiku (Oct 2024) |
| `claude-3-haiku-20240307` | 1 credit | Claude 3 Haiku (March 2024) |
---
## OpenAI Models (GPT)
### Class 3 Models (20 credits per call)
| Model | Credits per Call | Description |
| ----------------------- | ---------------- | ---------------------------- |
| `o1` | 20 credits | OpenAI o1 (latest) |
| `o1-2024-12-17` | 20 credits | OpenAI o1 (Dec 2024) |
| `o1-preview` | 20 credits | OpenAI o1 Preview (latest) |
| `o1-preview-2024-09-12` | 20 credits | OpenAI o1 Preview (Sep 2024) |
| `o3` | 20 credits | OpenAI o3 (latest) |
| `o3-2025-04-16` | 20 credits | OpenAI o3 (April 2025) |
### Class 2 Models (5 credits per call)
| Model | Credits per Call | Description |
| ---------------------------------- | ---------------- | ---------------------------------- |
| `o1-mini` | 5 credits | OpenAI o1 Mini (latest) |
| `o1-mini-2024-09-12` | 5 credits | OpenAI o1 Mini (Sep 2024) |
| `o3-mini` | 5 credits | OpenAI o3 Mini (latest) |
| `o3-mini-2025-01-31` | 5 credits | OpenAI o3 Mini (Jan 2025) |
| `gpt-4.1` | 5 credits | GPT-4.1 (latest) |
| `gpt-4.1-2025-04-14` | 5 credits | GPT-4.1 (April 2025) |
| `gpt-4.1-mini` | 5 credits | GPT-4.1 Mini (latest) |
| `gpt-4.1-mini-2025-04-14` | 5 credits | GPT-4.1 Mini (April 2025) |
| `gpt-4o` | 5 credits | GPT-4o (latest) |
| `gpt-4o-2024-05-13` | 5 credits | GPT-4o (May 2024) |
| `gpt-4o-2024-08-06` | 5 credits | GPT-4o (Aug 2024) |
| `gpt-4o-2024-11-20` | 5 credits | GPT-4o (Nov 2024) |
| `gpt-4o-audio-preview` | 5 credits | GPT-4o Audio Preview (latest) |
| `gpt-4o-audio-preview-2024-10-01` | 5 credits | GPT-4o Audio Preview (Oct 2024) |
| `gpt-4o-audio-preview-2024-12-17` | 5 credits | GPT-4o Audio Preview (Dec 2024) |
| `gpt-4o-search-preview` | 5 credits | GPT-4o Search Preview (latest) |
| `gpt-4o-search-preview-2025-03-11` | 5 credits | GPT-4o Search Preview (March 2025) |
| `gpt-4-turbo` | 5 credits | GPT-4 Turbo (latest) |
| `gpt-4-turbo-2024-04-09` | 5 credits | GPT-4 Turbo (April 2024) |
| `gpt-4-turbo-preview` | 5 credits | GPT-4 Turbo Preview |
| `gpt-4-0125-preview` | 5 credits | GPT-4 (Jan 2025 Preview) |
| `gpt-4-1106-preview` | 5 credits | GPT-4 (Nov 2023 Preview) |
| `gpt-4` | 5 credits | GPT-4 (latest) |
| `gpt-4-0613` | 5 credits | GPT-4 (June 2023) |
| `gpt-4.5-preview` | 5 credits | GPT-4.5 Preview (latest) |
| `gpt-4.5-preview-2025-02-27` | 5 credits | GPT-4.5 Preview (Feb 2025) |
| `chatgpt-4o-latest` | 5 credits | ChatGPT-4o (latest) |
| `computer-use-preview` | 5 credits | Computer Use Preview |
### Class 1 Models (1 credit per call)
| Model | Credits per Call | Description |
| --------------------------------------- | ---------------- | --------------------------------------- |
| `o4-mini` | 1 credit | OpenAI o4 Mini (latest) |
| `o4-mini-2025-04-16` | 1 credit | OpenAI o4 Mini (April 2025) |
| `gpt-4.1-nano` | 1 credit | GPT-4.1 Nano (latest) |
| `gpt-4.1-nano-2025-04-14` | 1 credit | GPT-4.1 Nano (April 2025) |
| `gpt-4o-mini-search-preview` | 1 credit | GPT-4o Mini Search Preview (latest) |
| `gpt-4o-mini-search-preview-2025-03-11` | 1 credit | GPT-4o Mini Search Preview (March 2025) |
| `gpt-4o-mini` | 1 credit | GPT-4o Mini (latest) |
| `gpt-4o-mini-2024-07-18` | 1 credit | GPT-4o Mini (July 2024) |
| `gpt-3.5-turbo-0125` | 1 credit | GPT-3.5 Turbo (Jan 2025) |
| `gpt-3.5-turbo` | 1 credit | GPT-3.5 Turbo (latest) |
| `gpt-3.5-turbo-1106` | 1 credit | GPT-3.5 Turbo (Nov 2023) |
| `codex-mini-latest` | 1 credit | Codex Mini (latest) |
---
## Google Models (Gemini)
### Class 2 Models (5 credits per call)
| Model | Credits per Call | Description |
| -------------------------- | ---------------- | ------------------------------ |
| `gemini-1.5-pro` | 5 credits | Gemini 1.5 Pro (latest) |
| `gemini-1.5-pro-latest` | 5 credits | Gemini 1.5 Pro (latest) |
| `gemini-1.5-pro-001` | 5 credits | Gemini 1.5 Pro (001) |
| `gemini-1.5-pro-002` | 5 credits | Gemini 1.5 Pro (002) |
| `gemini-2.0-pro-exp-02-05` | 5 credits | Gemini 2.0 Pro Experimental |
| `gemini-2.5-pro` | 5 credits | Gemini 2.5 Pro (latest) |
| `gemini-2.5-pro-exp-03-25` | 5 credits | Gemini 2.5 Pro Experimental |
| `gemini-exp-1206` | 5 credits | Gemini Experimental (Dec 2024) |
| `gemma-3-27b-it` | 5 credits | Gemma 3 27B Instruction Tuned |
### Class 1 Models (1 credit per call)
| Model | Credits per Call | Description |
| ------------------------------------- | ---------------- | -------------------------------------- |
| `gemini-1.5-flash` | 1 credit | Gemini 1.5 Flash (latest) |
| `gemini-1.5-flash-latest` | 1 credit | Gemini 1.5 Flash (latest) |
| `gemini-1.5-flash-001` | 1 credit | Gemini 1.5 Flash (001) |
| `gemini-1.5-flash-002` | 1 credit | Gemini 1.5 Flash (002) |
| `gemini-1.5-flash-8b` | 1 credit | Gemini 1.5 Flash 8B (latest) |
| `gemini-1.5-flash-8b-latest` | 1 credit | Gemini 1.5 Flash 8B (latest) |
| `gemini-1.5-flash-8b-001` | 1 credit | Gemini 1.5 Flash 8B (001) |
| `gemini-2.0-flash` | 1 credit | Gemini 2.0 Flash (latest) |
| `gemini-2.0-flash-001` | 1 credit | Gemini 2.0 Flash (001) |
| `gemini-2.0-flash-live-001` | 1 credit | Gemini 2.0 Flash Live (001) |
| `gemini-2.0-flash-lite` | 1 credit | Gemini 2.0 Flash Lite |
| `gemini-2.0-flash-thinking-exp-01-21` | 1 credit | Gemini 2.0 Flash Thinking Experimental |
| `gemini-2.0-flash-exp` | 1 credit | Gemini 2.0 Flash Experimental |
| `gemini-2.5-flash` | 1 credit | Gemini 2.5 Flash (latest) |
| `gemini-2.5-flash-lite` | 1 credit | Gemini 2.5 Flash Lite |
| `gemini-2.5-flash-preview-04-17` | 1 credit | Gemini 2.5 Flash Preview (April 2025) |
| `gemma-3-12b-it` | 1 credit | Gemma 3 12B Instruction Tuned |
---
## Perplexity Models (Sonar)
### Class 3 Models (20 credits per call)
| Model | Credits per Call | Description |
| --------------------- | ---------------- | ------------------- |
| `sonar-reasoning-pro` | 20 credits | Sonar Reasoning Pro |
### Class 2 Models (5 credits per call)
| Model | Credits per Call | Description |
| --------------------- | ---------------- | ------------------- |
| `sonar-deep-research` | 5 credits | Sonar Deep Research |
| `sonar-reasoning` | 5 credits | Sonar Reasoning |
| `sonar-pro` | 5 credits | Sonar Pro |
### Class 1 Models (1 credit per call)
| Model | Credits per Call | Description |
| ------- | ---------------- | ------------- |
| `sonar` | 1 credit | Sonar (basic) |
---
## Bring Your Own (BYO) Models
When you use your own API keys with any model provider, you pay a flat rate of **1 credit per call** regardless of the model's complexity or class. This provides significant cost savings for high-volume usage.
### Supported BYO Providers
- **Anthropic**: Use your own Anthropic API key
- **OpenAI**: Use your own OpenAI API key
- **Google**: Use your own Google AI API key
- **Perplexity**: Use your own Perplexity API key
- **Custom providers**: Connect your own model endpoints
BYO models always cost 1 credit per call, making them the most cost-effective
option for frequent usage.
---
## Cost Calculator
To estimate your workflow costs:
1. **Identify your models**: Choose which models your workflow will use
2. **Estimate calls**: Count how many LLM calls your workflow makes
3. **Calculate total**: Multiply calls by credits per model
4. **Add node costs**: Include any premium node costs from the [main pricing page](./)
### Example Calculation
A workflow that makes:
- 10 calls to `gpt-4o` (5 credits each) = 50 credits
- 5 calls to `claude-3-5-haiku-latest` (1 credit each) = 5 credits
- 1 Deep Research node = 60 credits
- **Total**: 115 credits per workflow execution
At Tier 1 pricing ($0.0020 per credit), this would cost $0.23 per execution.
---
Ready to get started? [Sign up for free](https://app.heliosapp.com) and get 5,000 credits to explore the platform with any of these models.
---
# Apify
URL: https://www.heliosapp.com/docs/integrations/apps/apify
Description: The Apify integration lets you programmatically manage actors, automate web scraping tasks, handle datasets, and integrate with Apify's automation platform directly from Helios.
---
title: "Apify"
excerpt: "Automate web scraping, data extraction, and automation workflows with Apify from your Helios workflows."
description: "The Apify integration lets you programmatically manage actors, automate web scraping tasks, handle datasets, and integrate with Apify's automation platform directly from Helios."
icon: /static/img/assets/apify.svg
createdAt: "2025-09-26"
updatedAt: "2025-09-26"
---
## Authentication
| Method | Type | Description |
| --------------------- | ----------- | ------------------------------------------------ |
| Personal Access Token | Token-based | Simple token authentication with full API access |
### Personal Access Token
The simplest and most secure way to connect Apify is using a Personal Access Token (PAT) for server-to-server authentication.
#### Setup Steps
1. Go to your [Apify Console](https://console.apify.com/)
2. Navigate to **Settings → Integrations → Personal Access Tokens**
3. Click **Create new token**
4. Provide a descriptive name for your token
5. Select the appropriate scopes for your use case
6. Click **Create token**
7. Copy the generated token and paste it into Helios
8. Save your integration
Store your Personal Access Token securely. It provides full access to your Apify account and cannot be recovered once lost.
#### Common Scopes
- `actor:read` - Read actor information and configurations
- `actor:write` - Create, modify, and delete actors
- `run:read` - Read actor runs and their details
- `run:write` - Start, stop, and manage actor runs
- `dataset:read` - Access dataset contents and metadata
- `dataset:write` - Create, modify, and delete datasets
- `storage:read` - Read from key-value stores and request queues
- `storage:write` - Write to key-value stores and request queues
## Functionality
The Apify integration lets your workflows **manage web scraping actors, automate data extraction tasks, handle datasets, and integrate with Apify's automation platform** without writing custom code.
| Category | Features |
| ---------------------- | ------------------------------------------------------------------------------------------- |
| Actor Management | Run Actors, Get Actor Info, List Actors, Get Run Details, Abort Runs |
| Data Management | Get Dataset Items, Download Datasets, Get Dataset Info, List Datasets, Create Datasets |
| Storage Operations | Key-Value Store Operations, Request Queue Management, Dataset Operations, File Storage |
| Monitoring & Analytics | Run Statistics, Usage Analytics, Error Monitoring, Performance Metrics, Billing Information |
| Automation Workflows | Scheduled Runs, Webhook Triggers, Chain Multiple Actors, Data Pipeline Automation |
| Content Extraction | Web Scraping, Data Mining, Content Monitoring, API Integration, Social Media Scraping |
## API Versions
The integration supports the Apify API:
### Apify API v2
Current stable API version with full feature support for actor management, data extraction, and automation workflows.
## Rate Limits
Apify API has the following rate limits:
- **Free plan**: 1,000 API calls per month
- **Personal plan**: 10,000 API calls per month
- **Team plan**: 100,000 API calls per month
- **Enterprise**: Custom limits
Rate limits are applied per account and reset monthly. Monitor your usage in the Apify Console.
## Common Use Cases
| Use Case | Description |
| ---------------------- | -------------------------------------------------------------- |
| E-commerce Monitoring | Track product prices, availability, and competitor analysis |
| Lead Generation | Extract contact information from websites and social platforms |
| Content Aggregation | Collect news articles, blog posts, and social media content |
| SEO Analysis | Monitor search rankings, backlinks, and competitor SEO metrics |
| Social Media Analytics | Track mentions, engagement, and sentiment analysis |
| Real Estate Data | Extract property listings, pricing trends, and market analysis |
---
# Apollo
URL: https://www.heliosapp.com/docs/integrations/apps/apollo
Description: The Apollo.io integration lets you programmatically search for prospects, enrich contact data, manage sequences, and automate sales workflows directly from Helios.
---
title: "Apollo"
excerpt: "Automate lead generation, prospecting, and sales outreach with Apollo.io from your Helios workflows."
description: "The Apollo.io integration lets you programmatically search for prospects, enrich contact data, manage sequences, and automate sales workflows directly from Helios."
icon: /static/img/assets/apollo-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## Authentication
| Method | Type | Description |
| ------------------------------ | ---------------- | ----------------------------------------------- |
| Helios OAuth App (Recommended) | OAuth 2.0 | User-specific access with enhanced security |
| API Key | Server-to-Server | Simple authentication with your account API key |
| BYO OAuth App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
### ✅ Helios OAuth App (Recommended)
The Helios OAuth App provides user-specific access with enhanced security.
### API Key
The simplest way to connect Apollo.io is using your API key for server-to-server authentication, if you already have one.
#### Setup Steps
1. Go to your [Apollo.io account](https://app.apollo.io/)
2. Go to **Settings → Integrations & API → API**
3. Copy your API key
4. Paste the API key into Helios and save your integration
#### Common Scopes
- `read:contacts` - Read contacts
- `write:contacts` - Write contacts
- `read:sequences` - Read sequences
- `write:sequences` - Write sequences
### BYO OAuth App
Create your own Apollo.io OAuth application for enterprise requirements or custom scope management.
> Learn more about creating Apollo.io apps in the [Apollo.io documentation](https://apolloio.github.io/apollo-api-docs/).
## Functionality
The Apollo.io integration lets your workflows **search for prospects, enrich contact data, manage email sequences, and automate sales processes** without writing custom code.
| Category | Features |
| -------------------------- | --------------------------------------------------------------------------------------------- |
| Prospecting & Search | People Search, Company Search, Contact Enrichment, Email Finder, Phone Number Discovery |
| Contact Management | Contact Creation, Contact Updates, Contact Lists, Data Verification, Contact Notes |
| Email Sequences & Outreach | Sequence Management, Sequence Enrollment, Email Sending, Template Management, Bounce Handling |
| Analytics & Reporting | Sequence Analytics, Contact Engagement, Campaign Performance, Data Export |
| Contact Enrichment | Professional Information, Company Data, Contact Details, Technographics, Intent Data |
| Company Enrichment | Firmographics, Financial Data, Technology Stack, Employee Information, News and Events |
---
# Attio
URL: https://www.heliosapp.com/docs/integrations/apps/attio
Description: The Attio integration lets you programmatically manage CRM records, automate sales processes, track interactions, and sync data with Attio's customizable platform directly from Helios.
---
title: "Attio"
excerpt: "Manage contacts, companies, deals, and automate your CRM workflows with Attio from Helios."
description: "The Attio integration lets you programmatically manage CRM records, automate sales processes, track interactions, and sync data with Attio's customizable platform directly from Helios."
icon: /static/img/assets/attio-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| ------------------------------ | --------- | ----------------------------------------------- |
| Helios Attio App (Recommended) | OAuth 2.0 | Pre-configured scopes for common CRM operations |
| BYO Attio App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Helios Attio App (Recommended)
The Helios Attio App provides a seamless setup with pre-configured permissions for most common CRM use cases.
##### Permissions
The Helios Attio App includes scopes for:
**Core CRM Objects:**
- Read and write contacts, companies, deals, and custom objects
- Manage lists and list entries
- Access public and private collections
**Collaboration:**
- Read and write comments, tasks, and notes
- Access meeting and call recording data
**Administration:**
- User management and workspace configuration
- Webhook management for real-time event delivery
#### BYO Attio App
Create your own Attio OAuth application for custom control over scopes and branding.
##### Setup Steps
1. Go to [Attio Developer Settings](https://app.attio.com)
2. Create a new OAuth application
3. Configure the required scopes for your use case
4. Copy the client ID and client secret into Helios
> Learn more about creating Attio apps in the [Attio API documentation](https://developers.attio.com).
## Functionality
The Attio integration lets your workflows **manage CRM records, automate sales pipelines, track customer interactions, and access workspace data** without writing custom code.
| Category | Features |
| --------------- | --------------------------------------------------------------- |
| CRM Operations | Contacts, Companies, Deals, Custom Objects, Lists, List Entries |
| Collaboration | Comments, Tasks, Notes, Meetings, Call Recordings |
| Data Management | Record Merging, Attribute Management, Object Configuration |
## Real-time Events
| Event Category | Event Types |
| --------------------- | ------------------------------------------ |
| Record Events | Created, updated, merged, deleted |
| List Events | List created, updated, deleted |
| List Entry Events | Entry added, updated, removed |
| Note Events | Created, updated, deleted, content updated |
| Task Events | Created, updated, deleted |
| Comment Events | Created, resolved, unresolved, deleted |
| Call Recording Events | Recording completed |
| Workspace Events | Member added |
---
# Discord
URL: https://www.heliosapp.com/docs/integrations/apps/discord
Description: The Discord integration lets you programmatically interact with Discord to read/send messages, manage channels, automate community interactions and much more.
---
title: "Discord"
excerpt: "Send messages, manage channels, and automate community interactions with Discord from your Helios workflows."
description: "The Discord integration lets you programmatically interact with Discord to read/send messages, manage channels, automate community interactions and much more."
icon: Si-Discord
createdAt: "2025-09-29"
updatedAt: "2025-09-29"
---
import { Step, Steps } from 'fumadocs-ui/components/steps';
import { Callout } from 'fumadocs-ui/components/callout';
## How to connect
| Method | Type | Description |
| --------------- | --------- | --------------------------------------------------------------------- |
| BYO Discord Bot | Bot Token | Custom app with complete control over the permission set and branding |
Helios bot is not supported for Discord due to permissions limitations.
#### BYO Discord Bot
Create your own Discord bot application for interacting with Discord
through Helios.
##### Setup Steps
Go to [Discord Developer Portal](https://discord.com/developers/applications).
Click **New Application** and give it a name.

Navigate to the 'Installation' section and
scroll to the bottom of the page to the 'Default Install Settings'.

Click on the Guild Install scope dropdown > Select 'bot' from the scope list.

A new permissions section will show up for the Guild Install. Click on the dropdown
and select the appropriate permissions for your bot. You can either give the bot exact
permission set or you can give it 'Administrator' permission. 'Administrator' permission
has complete access to the Discord API. Finally, click 'Save Changes'.

Discord should give you a confirmation at the top of the page.

Copy and paste the install link in your browser.

Click on 'Add to Server'. Select your server. Click on 'Continue'.

Click on 'Authorize' on the next screen.

Discord should redirect you to a success screen here.

Close the tab and go back to your application settings. Navigate to the
OAuth2 section. Copy the 'Client ID' from this page.

Navigate to the [create Discord integration](http://localhost:3000/helios/integrations/discord?modal=true&mode=create) page.
Give the integration a name. Paste your client ID.
Navigate back to your Discord application page and click on 'Reset Secret'
under the 'Client Secret' section. This will open a verification popup.

Click on 'Yes, do it!'. Discord may ask you to perform additional steps
for verification like password verification. It should show a newly generated
secret in the 'Client Secret' section. Please copy it.
The client secret here is sensitive information, do not share this with anyone. We show
the token here for simplicity; the token shown here is revoked and is no longer in use.

Navigate back to the 'Create Discord Integration' tab on Helios and paste
the token in the Client Secret section.
Navigate back to the Discord applications tab > Go to the Bot section. Generate
and copy the 'Token'. You'll need to follow steps similar to the 'Client Secret' generation.

Copy the token and navigate back to the 'Create Discord Integration' tab on Helios. Paste the
Bot Token and click on 'Test Connection' to validate.
Click on 'Create Integration'.
Learn more about creating Discord bots in the [Discord documentation](https://discord.com/developers/docs/quick-start/overview-of-apps).
## Functionality
The Discord integration lets your workflows **send messages, manage channels, handle interactions, and automate community management** without writing custom code.
| Category | Features |
| ----------------- | ------------------------------------------------------------- |
| Core Capabilities | Messaging, Channel Management, User Operations |
| Message Features | Rich Embeds, Mentions, Threads, Reactions, Scheduled Messages |
## Real-time Events
### Webhook Setup
Discord in Helios supports 'Interaction API'. Interactions are the way Discord
sends Helios information about slash commands which you can configure to trigger your workflows.
Go to [Discord integrations page](http://localhost:3000/helios/integrations/discord) > Click 'Manage' for your Discord integration >
Click 'Advanced Configuration' > Copy the URL > Go to Discord Developer Portal >
General Information > Paste the URL in 'Interactions Endpoint URL'. Don't
click on 'Save Changes' yet on Discord.
Go to Discord Developer Portal > General Information > Copy the Public Key >
Paste in the public key section in the Manage Discord modal in Helios > Click
'Save Changes' on Helios.
Go back to the Discord Developer Portal > Click 'Save Changes'.
This configures Discord to send notifications to Helios.
### Setup slash commands
Discord integration supports slash commands as a way for directly interacting
with Helios from Discord. These commands are available to you in a Discord server
when you type / (slash). Since these are custom commands, they need to be
registered per Discord application + server.
For example, if we want to create a command which sends a message to Helios like
`/helios `, we could use the following curl command to register this
command to our server.
```bash
curl -X POST \
"https://discord.com/api/v10/applications//guilds//commands" \
-H "Authorization: Bot " \
-H "Content-Type: application/json" \
-d '{
"name": "helios",
"description": "Ask Helios something",
"options": [
{
"name": "statement",
"description": "What you want to tell or ask Helios",
"type": 3,
"required": true
}
]
}'
```
Fetching the details:
- `application_id`: Application ID can be located in Discord application settings >
General Information > Application ID section.
- `guild_id`: A Discord guild is a Discord server. This is your Discord server ID.
To fetch the guild_id you need to enable developer mode in Discord. To enable
developer mode, go to Discord > User Settings (click on the gear icon) > Advanced
(Under App Settings) > Enable Developer Mode.
Navigate back to Discord home screen > Right click on the server icon >
Click 'Copy Server ID'.
- `bot_token`: The token for the Discord bot.
After updating the values and running the curl command, you should be able to
see a `/helios` command in your server. Do a test run, say hello.
```bash
/helios statement:hello
```
This should return an acknowledgment message to you. You can customize this further
and use slash commands to trigger various workflows in Helios.
---
# GitHub
URL: https://www.heliosapp.com/docs/integrations/apps/github
Description: The GitHub integration lets you programmatically manage repositories, automate pull request workflows, handle issues, manage CI/CD pipelines, and integrate with GitHub's development platform directly from Helios.
---
title: "GitHub"
excerpt: "Automate repository management, pull requests, issues, and CI/CD workflows with GitHub from your Helios workflows."
description: "The GitHub integration lets you programmatically manage repositories, automate pull request workflows, handle issues, manage CI/CD pipelines, and integrate with GitHub's development platform directly from Helios."
icon: Si-Github
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## Authentication
| Method | Type | Description |
| ------------------------------- | ----------- | ----------------------------------------------- |
| Helios GitHub App (Recommended) | GitHub App | Seamless integration with automatic permissions |
| Personal Access Token | Token-based | Simple token authentication with custom scopes |
| BYO GitHub App | GitHub App | Custom GitHub App for enterprise requirements |
### ✅ Helios GitHub App (Recommended)
The Helios GitHub App provides seamless integration with automatic permission management and webhook configuration.
### Personal Access Token
Another simple way to connect GitHub is using a Personal Access Token (PAT) with the required scopes for your use case.
#### Setup Steps
1. Go to [GitHub Settings → Developer settings → Personal access tokens](https://github.com/settings/tokens)
2. Click **Generate new token → Generate new token (classic)**
3. Select the required scopes for your workflows
4. Copy the generated token and paste it into Helios
5. Save your integration
#### Common Scopes
- `repo` - Full access to repositories
- `public_repo` - Access to public repositories only
- `workflow` - Update GitHub Actions workflows
- `read:org` - Read organization membership
- `user:email` - Access user email addresses
### BYO GitHub App
Create your own GitHub App for enterprise requirements or custom permission management.
#### Setup Steps
1. Go to [GitHub Settings → Developer settings → GitHub Apps](https://github.com/settings/apps)
2. Click **New GitHub App**
3. Configure app permissions, webhook URL, and events
4. Generate and download a private key
5. Install the app on your repositories
6. Configure the app in Helios with app ID, installation ID, and private key
Learn more about creating GitHub Apps in the [GitHub documentation](https://docs.github.com/en/developers/apps/building-github-apps).
## Functionality
The GitHub integration lets your workflows **manage repositories, automate development workflows, handle CI/CD processes, and integrate with GitHub's ecosystem** without writing custom code.
| Category | Features |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------ |
| Repository Management | Code Operations, Branch Management, Tag and Release Management, Repository Settings, Collaborator Management |
| Issue and Project Management | Issues, Labels, Milestones, Projects, Discussions |
| Pull Request Automation | PR Management, Code Reviews, Status Checks, Comments, Draft PRs |
| CI/CD Integration | GitHub Actions, Deployment Status, Check Runs, Artifacts |
## Webhook Events
| Event Category | Event Types |
| ------------------- | ----------------------------------------------------------------- |
| Repository Events | Push, Branch, Tag, Repository |
| Issue Events | Issues, Issue Comments, Milestones |
| Pull Request Events | Pull Requests, Pull Request Reviews, Pull Request Review Comments |
| Workflow Events | Workflow Run, Workflow Job, Check Run |
| Security Events | Security Advisory, Vulnerability Alert, Code Scanning |
## API Versions
The integration supports multiple GitHub API versions:
### GitHub.com (2022-11-28)
Latest API version for GitHub.com with all current features.
### GitHub Enterprise Cloud (GHEC)
API version for GitHub Enterprise Cloud with enterprise-specific features.
### GitHub Enterprise Server (GHES 3.17)
API version for self-hosted GitHub Enterprise Server instances.
## Rate Limits
// TODO: Add the link to GitHub rate limits
---
# Google Docs
URL: https://www.heliosapp.com/docs/integrations/apps/google-docs
Description: The Google Docs integration lets you programmatically create and edit documents, manage content, and automate document workflows directly from Helios.
---
title: "Google Docs"
excerpt: "Create, edit, and manage documents with real-time collaboration using Google Docs from your Helios workflows."
description: "The Google Docs integration lets you programmatically create and edit documents, manage content, and automate document workflows directly from Helios."
icon: /static/img/assets/google-docs-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| ------------------------------------ | --------- | --------------------------------------------- |
| Helios Google Docs App (Recommended) | OAuth 2.0 | Pre-configured scopes for document operations |
| BYO Google Docs App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Helios Google Docs App (Recommended)
The Helios Google Docs App provides seamless setup with pre-configured permissions for most common document use cases.
##### Permissions
The Helios Google Docs App includes scopes for:
- Read and write Google Docs documents
- Read-only access to Google Drive for document discovery
- File-level access to Drive for document management
#### BYO Google Docs App
Create your own Google OAuth application for custom control over scopes and branding.
##### Setup Steps
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Google Docs API
4. Configure the OAuth consent screen
5. Create OAuth 2.0 credentials (client ID and client secret)
6. Add the Helios redirect URI to your OAuth client
7. Copy the client ID and client secret into Helios
> Learn more in the [Google Docs API documentation](https://developers.google.com/docs/api).
## Functionality
The Google Docs integration lets your workflows **create documents, edit content, manage formatting, and automate document-based processes** without writing custom code.
| Category | Features |
| ------------------- | ---------------------------------- |
| Document Operations | Create, read, update documents |
| Content Management | Text insertion, formatting, styles |
| Collaboration | Comments, suggestions, sharing |
---
# Google Drive
URL: https://www.heliosapp.com/docs/integrations/apps/google-drive
Description: The Google Drive integration lets you programmatically upload, organize, and manage files and folders, and automate file-based workflows directly from Helios.
---
title: "Google Drive"
excerpt: "Store, share, and manage files and folders with Google Drive from your Helios workflows."
description: "The Google Drive integration lets you programmatically upload, organize, and manage files and folders, and automate file-based workflows directly from Helios."
icon: Si-Googledrive
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| ------------------------------------- | --------- | ---------------------------------------------------- |
| Helios Google Drive App (Recommended) | OAuth 2.0 | Pre-configured scopes for file and folder operations |
| BYO Google Drive App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Helios Google Drive App (Recommended)
The Helios Google Drive App provides seamless setup with pre-configured permissions for most common file management use cases.
##### Permissions
The Helios Google Drive App includes scopes for:
- Read and manage files and folders
- Access file metadata
- Read-only access to photos and Meet recordings
- App data folder management
#### BYO Google Drive App
Create your own Google OAuth application for custom control over scopes and branding.
##### Setup Steps
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Google Drive API
4. Configure the OAuth consent screen
5. Create OAuth 2.0 credentials (client ID and client secret)
6. Add the Helios redirect URI to your OAuth client
7. Copy the client ID and client secret into Helios
> Learn more in the [Google Drive API documentation](https://developers.google.com/drive/api).
## Functionality
The Google Drive integration lets your workflows **upload files, organize folders, manage permissions, and automate file-based processes** without writing custom code.
| Category | Features |
| ----------------- | -------------------------------------------- |
| File Operations | Upload, download, copy, move, delete files |
| Folder Management | Create, organize, list folder contents |
| Metadata | Read and update file metadata, search files |
| Sharing | Manage file permissions and sharing settings |
---
# Gmail
URL: https://www.heliosapp.com/docs/integrations/apps/google-gmail
Description: The Gmail integration lets you programmatically send and receive emails, manage labels, organize your inbox, and automate email-based workflows directly from Helios.
---
title: "Gmail"
excerpt: "Send, receive, and manage emails with Gmail from your Helios workflows."
description: "The Gmail integration lets you programmatically send and receive emails, manage labels, organize your inbox, and automate email-based workflows directly from Helios."
icon: /static/img/assets/gmail-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| ------------------------------ | --------- | -------------------------------------------- |
| Helios Gmail App (Recommended) | OAuth 2.0 | Pre-configured scopes for email operations |
| BYO Gmail App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Helios Gmail App (Recommended)
The Helios Gmail App provides seamless setup with pre-configured permissions for most common email use cases.
##### Permissions
The Helios Gmail App includes scopes for:
- Compose and send emails
- Read and modify emails and threads
- Manage labels and filters
- Access basic email settings and sharing configuration
#### BYO Gmail App
Create your own Google OAuth application for custom control over scopes and branding.
##### Setup Steps
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Gmail API
4. Configure the OAuth consent screen
5. Create OAuth 2.0 credentials (client ID and client secret)
6. Add the Helios redirect URI to your OAuth client
7. Copy the client ID and client secret into Helios
> Learn more in the [Gmail API documentation](https://developers.google.com/gmail/api).
## Functionality
The Gmail integration lets your workflows **send emails, manage your inbox, organize with labels, and automate email-based processes** without writing custom code.
| Category | Features |
| ---------------- | ------------------------------------------------- |
| Email Operations | Send, read, reply, forward, delete emails |
| Organization | Labels, filters, threads, search |
| Settings | Email signatures, forwarding, vacation responders |
## Real-time Events
| Event Category | Event Types |
| -------------- | ------------------------------------------------------ |
| Message Events | Messages added, messages deleted |
| Label Events | Labels added to messages, labels removed from messages |
---
# Google Sheets
URL: https://www.heliosapp.com/docs/integrations/apps/google-sheets
Description: The Google Sheets integration lets you programmatically create and edit spreadsheets, manage data, and automate spreadsheet-based workflows directly from Helios.
---
title: "Google Sheets"
excerpt: "Create, edit, and analyze spreadsheet data with Google Sheets from your Helios workflows."
description: "The Google Sheets integration lets you programmatically create and edit spreadsheets, manage data, and automate spreadsheet-based workflows directly from Helios."
icon: /static/img/assets/google-sheets-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| -------------------------------------- | --------- | ------------------------------------------------ |
| Helios Google Sheets App (Recommended) | OAuth 2.0 | Pre-configured scopes for spreadsheet operations |
| BYO Google Sheets App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Helios Google Sheets App (Recommended)
The Helios Google Sheets App provides seamless setup with pre-configured permissions for most common spreadsheet use cases.
##### Permissions
The Helios Google Sheets App includes scopes for:
- Read and write spreadsheet data
- Read-only access to Google Drive for spreadsheet discovery
- File-level access to Drive for spreadsheet management
#### BYO Google Sheets App
Create your own Google OAuth application for custom control over scopes and branding.
##### Setup Steps
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Google Sheets API
4. Configure the OAuth consent screen
5. Create OAuth 2.0 credentials (client ID and client secret)
6. Add the Helios redirect URI to your OAuth client
7. Copy the client ID and client secret into Helios
> Learn more in the [Google Sheets API documentation](https://developers.google.com/sheets/api).
## Functionality
The Google Sheets integration lets your workflows **create spreadsheets, read and write data, manage formatting, and automate data-driven processes** without writing custom code.
| Category | Features |
| ---------------------- | -------------------------------------------------------- |
| Data Operations | Read, write, append, clear cell data |
| Spreadsheet Management | Create spreadsheets, manage sheets and tabs |
| Formatting | Cell formatting, conditional formatting, data validation |
| Analysis | Formulas, charts, pivot tables, filters |
---
# HubSpot
URL: https://www.heliosapp.com/docs/integrations/apps/hubspot
Description: The HubSpot integration lets you programmatically manage CRM data, automate sales processes, sync marketing activities, and integrate with HubSpot's comprehensive platform directly from Helios.
---
title: "HubSpot"
excerpt: "Manage contacts, companies, deals, and automate your sales and marketing workflows with HubSpot from Helios."
description: "The HubSpot integration lets you programmatically manage CRM data, automate sales processes, sync marketing activities, and integrate with HubSpot's comprehensive platform directly from Helios."
icon: Si-Hubspot
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## Authentication
| Method | Type | Description |
| ------------------------------ | ----------------- | ----------------------------------------------- |
| Helios OAuth App (Recommended) | OAuth 2.0 | Comprehensive access with pre-configured scopes |
| Personal Access Token | Private App Token | Simple server-to-server authentication |
| BYO OAuth App | OAuth 2.0 | Custom OAuth app for enterprise requirements |
#### Personal Access Token
The simplest way to connect HubSpot is using a Personal Access Token for server-to-server authentication.
##### Setup Steps
1. Go to your [HubSpot account settings](https://app.hubspot.com/settings/)
2. Navigate to **Integrations → Private Apps**
3. Click **Create a private app**
4. Configure the required scopes for your use case
5. Generate the access token and paste it into Helios
#### Helios OAuth App
The Helios OAuth app provides comprehensive access with pre-configured scopes for most common CRM operations.
{/* TODO: Add the link to HubSpot rate limits */}
##### Permissions
The Helios OAuth app includes scopes for:
**Core CRM Objects (Required):**
- Read contacts, companies, deals, products, line items
- Read conversations and tickets
- Access to custom objects
**Extended CRM Objects (Optional):**
- Write access to all CRM objects
- Custom object management
- Lists and workflows
- Commerce objects (subscriptions, orders, carts)
- Reports and analytics
**Marketing & Content:**
- Email marketing and campaigns
- Blog posts and landing pages
- Files and media management
- Social media accounts
**Settings & Administration:**
- Account and user information
- Business units and teams
- Integrations and apps management
#### BYO OAuth App
Create your own HubSpot OAuth application for enterprise requirements or custom scope management.
> Learn more about creating HubSpot apps in the [HubSpot developer documentation](https://developers.hubspot.com/docs/api/private-apps).
## Functionality
The HubSpot integration lets your workflows **manage CRM data, automate sales processes, sync marketing activities, and access comprehensive business intelligence** without writing custom code.
| Category | Features |
| -------------------- | --------------------------------------------------------------------------- |
| CRM Operations | Contacts, Companies, Deals, Tickets, Custom Objects, Lists |
| Marketing Automation | Email Campaigns, Landing Pages, Forms, Blog Posts, Social Media |
| Sales Intelligence | Pipeline Management, Activity Tracking, Quote Generation, Revenue Analytics |
## Real-time Events
| Event Category | Event Types |
| ---------------- | -------------------------------------------- |
| Contact Events | Creation, updates, deletion, merge |
| Company Events | Creation, updates, property changes |
| Deal Events | Stage changes, amount updates, close dates |
| Ticket Events | Status changes, priority updates, assignment |
| Form Submissions | New leads from HubSpot forms |
| Email Events | Opens, clicks, bounces, unsubscribes |
---
# Notion
URL: https://www.heliosapp.com/docs/integrations/apps/notion
Description: The Notion integration lets you programmatically interact with Notion workspaces-create pages, update database entries, query data, search content, and automate content workflows directly from Helios.
---
title: "Notion"
excerpt: "Create, update and query pages and databases in Notion from your Helios workflows."
description: "The Notion integration lets you programmatically interact with Notion workspaces-create pages, update database entries, query data, search content, and automate content workflows directly from Helios."
icon: Si-Notion
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## Authentication
| Method | Type | Description |
| ------------------------------ | ------------ | ---------------------------------------------- |
| Helios OAuth App (Recommended) | OAuth 2.0 | Full-featured integration for all workspaces |
| Internal Integration | Secret Token | Workspace-specific integration with secret |
| BYO OAuth App | OAuth 2.0 | Custom public integration for advanced control |
#### Helios OAuth App (Recommended)
The Helios OAuth app is a full-featured integration that can be used to access all Notion workspaces. It requires the OAuth flow to be completed.
##### Permissions
The Helios OAuth app requires the following permissions:
- Read, Update and Insert Content
- Read and Insert Comments
- Read user information including email addresses
#### Internal Integration
An internal integration in Notion only has access to the workspace it is created in. This type of integration can be used without the OAuth flow directly with a secret.
> Learn more about internal integrations in the [Notion documentation](https://developers.notion.com/docs/authorization#what-is-an-internal-integration).
#### BYO OAuth App (Public Integration)
If you want more granular control over the integration itself, you can create a custom OAuth app in Notion. However, this requires additional setup and is not recommended for most users.
> Learn more about public integrations in the [Notion documentation](https://developers.notion.com/docs/authorization#what-is-a-public-integration).
## Functionality
The Notion integration lets your workflows **read, create, update and search content inside a Notion workspace** without writing custom code.
Typical use-cases include:
- **Create database pages** - add new rows to a database when an event happens in another service.
- **Update page properties** - keep Notion dashboards in sync with external data sources.
- **Query databases** - pull structured information out of Notion and pass it downstream in the workflow.
- **Retrieve or append blocks** - fetch the full page content or add text, headings, to-dos, images and more.
- **Search workspace** - quickly locate pages or databases by keyword.
- **Comment on pages** - add comments to pages.
### As Trigger Node
Trigger node allows you to use the webhooks from notion to trigger your workflows.
You can find the webhooks that Notion sends in the [Notion Webhook Reference](https://developers.notion.com/reference/webhooks-events-delivery#supported-webhook-event-types)
The filter prompt in the trigger node is used to filter the webhooks with natural language prompt. For example, you can filter the webhooks to only trigger when a new page is created in a specific database or when a user comments on a page.
### As Integration Node
When placed as an integration node, the Notion node lets you perform actions against pages, databases, blocks and more. All the public API operations are supported.
See what operations are supported in the [Notion API Reference](https://developers.notion.com/reference/capabilities).
## Outputs
Depending on the operation the node performs, it returns one of the standard Notion API payloads. You can check the output payloads of different operations in the [Notion API Reference](https://developers.notion.com/reference/intro).
Example: If the node created a comment, the output value would be:
```json
{
"object": "comment",
"id": "b52b8ed6-e029-4707-a671-832549c09de3",
"parent": {
"type": "page_id",
"page_id": "5c6a2821-6bb1-4a7e-b6e1-c50111515c3d"
},
"discussion_id": "f1407351-36f5-4c49-a13c-49f8ba11776d",
"created_time": "2022-07-15T20:53:00.000Z",
"last_edited_time": "2022-07-15T20:53:00.000Z",
"created_by": {
"object": "user",
"id": "067dee40-6ebd-496f-b446-093c715fb5ec"
},
"rich_text": [
{
"type": "text",
"text": {
"content": "Hello world",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "Hello world",
"href": null
}
],
"attachments": [
{
"category": "image",
"file": {
"url": "https://s3.us-west-2.amazonaws.com/...",
"expiry_time": "2025-06-10T21:58:51.599Z"
}
}
],
"display_name": {
"type": "integration",
"resolved_name": "Public Integration"
}
}
```
To reference the output in other nodes, you can use the `[[nodes["notion"].output]]` syntax in prompts.
## Limitations
The Notion public API is still evolving. Keep the following constraints in mind when designing workflows:
- **Rate limits** - The node automatically respects the per-second limit but high-volume jobs may require batching.
- **Permissions** - the integration token can access only the pages and databases that have been explicitly shared with it.
### ✅ What you can do
All of the Notion public API operations are supported which include but are not limited to:
- Add or update content in any shared database or page.
- Query databases with complex filter and sort combinations.
- Append rich-text, headings, to-dos, images, code blocks and more.
- Migrate content by iterating over databases and writing to external systems.
- Build dashboards that stay in sync by periodically updating Notion properties.
Read more about the endpoints and their capabilities in the [Notion API Reference](https://developers.notion.com/reference/intro).
### ❌ What you can't do
- Access pages that have **not** been explicitly shared with the integration.
- Share pages with other users via the integration.
- Respond to discussions on pages. Comments are only allowed at page level.
---
# Reddit
URL: https://www.heliosapp.com/docs/integrations/apps/reddit
Description: The Reddit integration lets you programmatically manage subreddits, automate content posting, handle community moderation, track submissions and comments, and integrate with Reddit's platform directly from Helios.
---
title: "Reddit"
excerpt: "Automate subreddit management, content posting, moderation, and community engagement with Reddit from your Helios workflows."
description: "The Reddit integration lets you programmatically manage subreddits, automate content posting, handle community moderation, track submissions and comments, and integrate with Reddit's platform directly from Helios."
icon: Si-Reddit
createdAt: "2025-09-26"
updatedAt: "2025-09-26"
---
## Authentication
| Method | Type | Description |
| ------------------------------- | ---------- | ----------------------------------------------- |
| Helios Reddit App (Recommended) | Reddit App | Seamless integration with automatic permissions |
| BYO Reddit App | Reddit App | Custom Reddit App for enterprise requirements |
### ✅ Helios Reddit App (Recommended)
The Helios Reddit App provides seamless integration with automatic permission management and secure OAuth flow.
### BYO Reddit App
Create your own Reddit application for enterprise requirements or custom permission management.
#### Setup Steps
1. **Create the Reddit App**
- Go to [Reddit App Preferences](https://www.reddit.com/prefs/apps)
- Click **Create App** or **Create Another App**
- **Important**: Choose **web app** (this is required for OAuth flow)
- Fill in the app details:
- **Name**: Your app name (e.g., "MyHeliosApp")
- **Description**: Brief description of your app
- **About URL**: Optional URL with information about your app
- **Redirect URI**: Set to your OAuth callback URL (e.g., `https://your-app.com/auth/reddit/callback`)
- Click **Create app**
- Copy the **Client ID** (displayed under the app name) and **Client Secret**
2. **Generate Access and Refresh Tokens**
- Direct users to the authorization URL:
```
https://www.reddit.com/api/v1/authorize?client_id=YOUR_CLIENT_ID&response_type=code&state=RANDOM_STRING&redirect_uri=YOUR_REDIRECT_URI&duration=permanent&scope=REQUIRED_SCOPES
```
- After user authorization, Reddit will redirect to your callback URL with an authorization code
- Exchange the authorization code for access and refresh tokens:
```
POST https://www.reddit.com/api/v1/access_token
```
- Include the authorization code, client ID, client secret, and redirect URI in the request
- Save both the access token (short-lived) and refresh token (for token renewal)
3. **Configure in Helios**
- **Client ID**: The client ID from your Reddit app
- **Client Secret**: The client secret from your Reddit app
- **Access Token**: The access token obtained from the OAuth flow
- **Refresh Token**: The refresh token for automatic token renewal
- **App Name**: Your app identifier in format `MyHeliosApp:v1.0.0` (used for Reddit API requests)
- **Username**: Your Reddit username in format `/u/heliosuser` (the account associated with the app)
- Helios will automatically handle token refresh when needed
The **App Name** and **Username** fields are required by Reddit's API for authentication and rate limiting purposes. Make sure the username matches the account that created the Reddit app.
#### Common OAuth Scopes
- `identity` - Access to account information
- `edit` - Edit and delete posts and comments
- `flair` - Manage user and link flair
- `history` - Access to post and comment history
- `modconfig` - Manage subreddit configuration and rules
- `modflair` - Manage user and link flair in moderated subreddits
- `modlog` - Access to moderation log
- `modposts` - Approve/remove posts and comments
- `modself` - Accept moderator invitations
- `modwiki` - Manage wiki pages in moderated subreddits
- `mysubreddits` - Access to subscribed and moderated subreddits
- `privatemessages` - Access to private messages
- `read` - Read posts and comments
- `report` - Report posts and comments
- `save` - Save and unsave posts and comments
- `submit` - Submit posts and comments
- `subscribe` - Subscribe/unsubscribe from subreddits
- `vote` - Submit and change votes on posts and comments
- `wikiedit` - Edit wiki pages
- `wikiread` - Read wiki pages
Learn more about creating Reddit apps in the [Reddit API documentation](https://reddit.com/dev/api/).
## Functionality
The Reddit integration lets your workflows **manage subreddits, automate content creation, handle community moderation, and engage with Reddit's community platform** without writing custom code.
| Category | Features |
| -------------------- | -------------------------------------------------------------------------------------------- |
| Content Management | Submit Posts, Submit Comments, Edit Content, Delete Content, Vote on Content |
| Subreddit Management | Subreddit Creation, Settings Management, Rules Management, Flair Management, Wiki Management |
| User Management | Profile Management, Friend Lists, Blocked Users, User Preferences |
| Moderation Tools | Remove Posts/Comments, Ban/Unban Users, Approve Content, Mod Actions, Mod Queue Management |
| Community Engagement | Message Users, Reply to Comments, Award Content, Follow Users, Join/Leave Subreddits |
| Data Retrieval | Get Posts, Get Comments, Search Content, Get User Info, Get Subreddit Info |
## API Versions
The integration supports the Reddit API:
### Reddit API (OAuth 2.0)
Current stable API version with full feature support for content management and community interaction.
## Data Retrieval
Reddit does not support webhooks. Data must be retrieved through polling or on-demand API calls from your workflows.
## Rate Limits
Reddit API has rate limiting in place:
- **OAuth requests**: 60 requests per minute
- **Read operations**: Higher limits for GET requests
- **Write operations**: Lower limits for POST/PUT/DELETE requests
Be mindful of Reddit's rate limits when building high-frequency workflows.
---
# Resend
URL: https://www.heliosapp.com/docs/integrations/apps/resend
Description: Resend integration
---
title: "Resend"
excerpt: "Resend integration"
description: "Resend integration"
icon: /static/img/assets/resend-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
The Resend integration lets your workflows **send transactional emails, manage templates, contacts, domains and react to delivery events** without custom code.
## Authentication
| Method | Type | Description |
| -------------- | ------------ | ----------------------------------------------- |
| Resend API Key | API Key | Server-to-server authentication with Resend API |
| Webhooks | Event-driven | Real-time event notifications (trigger only) |
#### Resend API Key (Required)
Generate an API key from your Resend dashboard and paste it into the Resend credential in Helios. This key authenticates every request sent to the Resend REST API.
> OAuth flows are **not** supported by this integration.
#### Webhooks (Trigger only)
- After creating the integration, reopen it to enable webhooks.
- Copy the **webhook URL** generated by Helios.
- In your Resend dashboard (Settings → Webhooks) create a new webhook, paste the URL and pick the events you want to listen to (e.g. `email.delivered`).
- Copy the **signing secret** shown by Resend and paste it back into the Helios integration, then save.
- Add integration trigger to your workflow.
Once saved, matching Resend events will trigger your workflow in real time.
### Permissions
The node can only perform the actions permitted by **your** Resend API key. Create a key with the required privileges (e.g. sending email, viewing templates) and add it to Helios. Any operation beyond those privileges will be rejected by Resend.
## Functionality
### As Trigger Node
Fire the workflow whenever Resend emits an event such as `email.bounced` or `email.delivered`. Combine with the natural-language filter prompt to target specific messages.
### As Integration Node
Within a workflow you can perform any action exposed by the Resend REST API, including:
- Send single or batch emails
- Retrieve message status
- Manage templates
- Add or verify sender domains
See the [Resend API reference](https://resend.com/docs/api-reference) for the full list of operations.
## Outputs
The Resend node returns the full response from the Resend API. You can reference the output in other nodes using the `[[nodes["resend"].output]]` syntax in prompts.
## Limitations
### ✅ What you can do
We support full range of operations from the Resend API. Read more about the endpoints and their capabilities in the [Resend API reference](https://resend.com/docs/api-reference). Some of the operations include:
- Send transactional emails
- Manage templates
- Add or verify sender domains
- Manage contacts
- React to delivery events
#### ❌ What you can't do
- Access emails that have **not** been explicitly shared with the integration.
---
# Slack
URL: https://www.heliosapp.com/docs/integrations/apps/slack
Description: The Slack integration lets you programmatically send messages, manage channels, handle user interactions, and automate team communication directly from Helios.
---
title: "Slack"
excerpt: "Send messages, manage channels, and automate team communication with Slack from your Helios workflows."
description: "The Slack integration lets you programmatically send messages, manage channels, handle user interactions, and automate team communication directly from Helios."
icon: /static/img/assets/slack-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| ------------------------------ | --------- | ----------------------------------------------- |
| Helios OAuth App (Recommended) | OAuth 2.0 | Pre-configured permissions for common use cases |
| BYO Slack App | OAuth 2.0 | Custom control over permissions and branding |
#### Helios OAuth App (Recommended)
The Helios OAuth app provides a seamless setup with pre-configured permissions for most common use cases.
##### Permissions
The Helios OAuth app includes the following permissions:
- Send messages to channels and users
- Read channel and user information
- Manage channels and groups
- Upload and manage files
- Access workspace information
- Receive real-time events
#### BYO Slack App
Create your own Slack application for custom control over permissions, branding, and distribution.
##### Setup Steps
1. Go to [Slack App Management](https://api.slack.com/apps)
2. Click **Create New App → From scratch**
3. Configure OAuth scopes, event subscriptions, and bot permissions
4. Install the app to your workspace
5. Copy the client ID, client secret, and configure in Helios
> Learn more about creating Slack apps in the [Slack documentation](https://api.slack.com/start/quickstart).
## Functionality
The Slack integration lets your workflows **send messages, manage channels, handle interactions, and automate team communication** without writing custom code.
| Category | Features |
| ---------------------- | --------------------------------------------------------------------------------------------------------- |
| Core Capabilities | Messaging, Channel Management, User Operations, File Operations, Interactive Components, Real-time Events |
| Message Features | Rich Formatting, Mentions, Threads, Reactions, Scheduled Messages |
| Interactive Components | Button Clicks, Modal Submissions, Slash Commands, Shortcuts |
## Real-time Events
| Event Category | Event Types |
| -------------- | ----------------------------------------------- |
| Messages | New messages in channels or direct messages |
| Reactions | Emoji reactions added or removed |
| Channel Events | Channel created, archived, renamed |
| User Events | User joined, left, presence changed |
| App Events | App installed, uninstalled, permissions changed |
---
# Stripe
URL: https://www.heliosapp.com/docs/integrations/apps/stripe
Description: Stripe integration
---
title: "Stripe"
excerpt: "Stripe integration"
description: "Stripe integration"
icon: Si-Stripe
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
The Stripe integration lets your workflows **create payments, manage customers, handle subscriptions** and listen to events-without writing custom code.
## How to connect
| Method | Type | Description |
| -------------- | ------- | ----------------------------------------------- |
| Secret API Key | API Key | Server-to-server authentication with Stripe API |
#### Secret API Key
The Stripe node authenticates requests with a secret API key. Obtain it from **Stripe → Developers → API keys** and paste it into the Stripe credential in Helios. Both _test_ and _live_ keys are supported-remember that data is isolated per environment.
OAuth flows are **not** supported by this integration.
#### Webhooks (Trigger only)
- After creating the integration, reopen it to add a Stripe Trigger.
- Copy the **webhook URL** generated by Helios.
- In your Stripe dashboard (Developers → Webhooks) click **+ Add endpoint**, paste the URL and pick the events you want to forward (e.g. `invoice.payment_succeeded`).
- Stripe will display a **signing secret**-copy it and paste it back into the Helios integration, then save.
- Add integration trigger to your workflow.
Once saved, the selected Stripe events will trigger your workflow in real time.
### Permissions
The node can only perform the actions allowed by **your** API key. Generate a key in Stripe with the minimum required scopes (e.g. `read_write` on Payments, Customers, etc.) and paste it into Helios. Any operation outside those scopes will be rejected by Stripe.
## Functionality
### As Trigger Node
Receive real-time events such as `invoice.payment_succeeded` or `customer.created`. Use the natural-language filter prompt to run the workflow only for relevant events. For example, “When a payment fails for invoices over $100”.
### As Integration Node
Inside a workflow you can perform any Stripe API call, for example:
- Create or confirm a _PaymentIntent_
- Issue a refund
- Fetch a list of customers
- Update a subscription item
See the full list of operations in the [Stripe API reference](https://stripe.com/docs/api).
## Outputs
The Stripe node returns the full response from the Stripe API. You can reference the output in other nodes using the `[[nodes["stripe_node_name"].output]]` syntax in prompts.
## Limitations
- Standard Stripe API [rate limits](https://stripe.com/docs/rate-limits) apply.
- Test and live modes are completely separate-keys and data do not overlap.
### ✅ What you can do
- Invoke any REST endpoint exposed by Stripe.
- Listen to any event emitted via webhooks.
### ❌ What you can't do
- Perform actions that require Stripe Connect OAuth (e.g. acting on behalf of a connected account).
---
# Typeform
URL: https://www.heliosapp.com/docs/integrations/apps/typeform
Description: The Typeform integration lets you programmatically create forms, manage surveys, collect responses, and automate form workflows directly from Helios.
---
title: "Typeform"
excerpt: "Create and manage forms, surveys, and collect responses with Typeform from your Helios workflows."
description: "The Typeform integration lets you programmatically create forms, manage surveys, collect responses, and automate form workflows directly from Helios."
icon: /static/img/assets/typeform-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Callout } from 'fumadocs-ui/components/callout';
## Authentication
| Method | Type | Description |
| ------------------------------ | ----------- | ---------------------------------------------- |
| Helios OAuth App (Recommended) | OAuth 2.0 | Seamless setup with automated token management |
| Personal Access Token | Token-based | Simple token-based authentication |
| BYO OAuth App | OAuth 2.0 | Custom OAuth app for advanced control |
Typeform requires separate webhooks for each form for receiving response events. Create a `Webhook` node for each form and configure that value in the form settings.
## Functionality
The Typeform integration lets your workflows **create forms, manage surveys, collect responses, and automate form workflows** without writing custom code.
| Category | Features |
| ----------------- | ------------------------------------------------------------------------------------------------------------------ |
| Core Capabilities | Form Management, Response Collection, Webhook Configuration, Theme Management, Workspace Operations, Image Uploads |
## Real-time Events
| Event Category | Event Types |
| -------------- | ----------------------------------------------------------------- |
| Form Events | New responses submitted, Forms completed, Partial responses saved |
---
# WarpBuild
URL: https://www.heliosapp.com/docs/integrations/apps/warpbuild
Description: The WarpBuild integration lets you programmatically manage CI/CD runners, builders, cloud integrations, and monitor build infrastructure directly from Helios.
---
title: "WarpBuild"
excerpt: "Manage CI/CD runners, builders, and infrastructure with WarpBuild from your Helios workflows."
description: "The WarpBuild integration lets you programmatically manage CI/CD runners, builders, cloud integrations, and monitor build infrastructure directly from Helios."
icon: /static/img/assets/warpbuild-light.svg
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
## How to connect
| Method | Type | Description |
| --------------------- | ---- | ------------------------------------------------------- |
| Personal Access Token | PAT | Authenticate using your WarpBuild Personal Access Token |
#### Personal Access Token
Authenticate using a WarpBuild Personal Access Token (PAT) for direct API access.
##### Setup Steps
1. Go to your [WarpBuild dashboard](https://app.warpbuild.com)
2. Navigate to your account settings
3. Generate a Personal Access Token (format: `wb_pat_xxxxxxxxxxxxxxxxx`)
4. Paste the token into Helios
## Functionality
The WarpBuild integration lets your workflows **manage CI/CD runners, monitor builds, track costs, and automate infrastructure operations** without writing custom code.
| Category | Features |
| ------------------ | ----------------------------------------------------------------------------------- |
| Runner Management | List runner images, manage runner instances, configure runner pools, label matching |
| Builder Management | List builders, manage builder profiles, handle build sessions |
| Cloud Integrations | GCP, AWS, and Azure cloud provider connections |
| Monitoring | Job tracking, cost analysis, usage reporting, daily cost snapshots |
| Infrastructure | Stack management, snapshot operations, VCS integrations |
---
# If Node
URL: https://www.heliosapp.com/docs/workflows/control-nodes/if
Description: Conditional branching node that executes different paths based on true/false evaluation
---
title: "If Node"
excerpt: "Execute different workflow paths based on boolean conditions"
description: "Conditional branching node that executes different paths based on true/false evaluation"
icon: GitBranch
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# If Node
The If node provides conditional branching in your workflows. It evaluates a boolean condition and executes different sets of nodes based on whether the condition is true or false.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|-------|-----------------|----------|------------------------------------------------|
| `if` | `boolean` | Yes | The boolean condition to evaluate |
| `then`| `string[]` | Yes | Array of node IDs to execute if condition is true |
| `else`| `string[]` | Yes | Array of node IDs to execute if condition is false |
### Output Schema
| Field | Type | Description |
|-------|-----------|--------------------------------|
| `output` | `boolean` | The evaluated condition value |
## Basic Usage
```yaml
# Simple condition check
- id: user_check
type: condition
input:
if: "{{ user.isPremium }}"
then: ["premium_features"]
else: ["upgrade_prompt"]
```
## Advanced Examples
```yaml
# API response validation
- id: validate_response
type: condition
input:
if: "{{ api_response.status === 200 }}"
then: ["process_data", "save_result"]
else: ["log_error", "retry_request", "notify_admin"]
```
Handle API responses gracefully by checking status codes and routing to appropriate error handling or success flows.
```yaml
# Environment-based routing
- id: feature_toggle
type: condition
input:
if: "{{ env.FEATURE_ENABLED && user.betaAccess }}"
then: ["new_feature_flow"]
else: ["legacy_feature_flow"]
```
Control feature rollout by combining environment variables with user permissions for gradual feature deployment.
```yaml
# Input validation
- id: validate_input
type: condition
input:
if: "{{ data.email && data.email.includes('@') }}"
then: ["send_email", "log_success"]
else: ["validation_error", "request_correction"]
```
Validate user input before processing to ensure data integrity and provide appropriate feedback for invalid inputs.
## Integration Patterns
### With HTTP Nodes
```yaml
- id: api_call
type: http
input:
url: "https://api.example.com/data"
method: "GET"
- id: response_check
type: condition
input:
if: "{{ api_call.output.ok }}"
then: ["parse_response"]
else: ["retry_api_call"]
```
### With AI Nodes
```yaml
- id: content_check
type: condition
input:
if: "{{ content.length > 1000 }}"
then: ["ai_summarize"]
else: ["direct_process"]
```
### With Loop Nodes
```yaml
- id: batch_check
type: condition
input:
if: "{{ items.length > 10 }}"
then: ["batch_process_loop"]
else: ["single_process"]
```
## Troubleshooting
- Check variable existence with optional chaining: `variable?.property`
- Verify data types: `"5" !== 5`
- Use explicit comparisons: `value === true` instead of just `value`
- Ensure both then and else arrays contain valid node IDs
- Verify referenced nodes exist in the workflow
- Check for typos in node references
- Add logging nodes to debug condition evaluation
- Use simple test conditions first
- Verify input data structure matches expectations
## Debugging Tips
```yaml
# Add debug logging
- id: debug_condition
type: condition
input:
if: "{{ debug.log(user.status) || user.status === 'active' }}"
then: ["log_true_path", "active_user_flow"]
else: ["log_false_path", "inactive_user_flow"]
```
The If node is fundamental to creating intelligent, responsive workflows that adapt to different conditions and scenarios.
---
# Loop Node
URL: https://www.heliosapp.com/docs/workflows/control-nodes/loop
Description: Iteration node that processes arrays sequentially or in parallel with configurable execution modes
---
title: "Loop Node"
excerpt: "Iterate over data sets or repeat execution a specified number of times"
description: "Iteration node that processes arrays sequentially or in parallel with configurable execution modes"
icon: RotateCcw
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# Loop Node
The Loop node enables iteration in your workflows. It can iterate over arrays of data (`forEach`) or repeat execution a specified number of times (`forN`). The node supports both sequential and parallel execution modes for optimal performance.
## Configuration
### Input Schema
The Loop node accepts one of two input modes:
#### forEach Mode
| Field | Type | Required | Description |
|-----------|---------------|----------|--------------------------------|
| `forEach` | `JsonValue[]` | Yes | Array of items to iterate over |
| `forN` | `undefined` | No | Must be undefined in forEach mode |
#### forN Mode
| Field | Type | Required | Description |
|-----------|-------------|----------|---------------------------------------|
| `forN` | `number` | Yes | Number of iterations (minimum 1) |
| `forEach` | `undefined` | No | Must be undefined in forN mode |
### Configuration Schema
| Field | Type | Required | Description |
|--------|----------------------------|----------|---------------------------------|
| `mode` | `"sequential" \| "parallel"` | Yes | Execution mode for iterations |
### Output Schema
| Field | Type | Description |
|------------------|---------------|------------------------------------|
| `totalIterations`| `number` | Total number of iterations executed|
| `iterations` | `JsonValue[]` | Array of results from each iteration|
## Basic Usage
### Array Iteration (forEach)
```yaml
# Process a list of users
- id: process_users
type: loop
input:
forEach: "{{ users }}"
configuration:
mode: "sequential"
```
### Count-based Iteration (forN)
```yaml
# Retry an operation 3 times
- id: retry_operation
type: loop
input:
forN: 3
configuration:
mode: "sequential"
```
## Advanced Examples
```yaml
# Process files in parallel for speed
- id: process_files_parallel
type: loop
input:
forEach: "{{ uploadedFiles }}"
configuration:
mode: "parallel"
```
Use parallel mode when operations are independent and can benefit from concurrent execution. Perfect for file processing, image resizing, or API calls that don't depend on each other.
```yaml
# Process orders one by one to maintain inventory state
- id: process_orders
type: loop
input:
forEach: "{{ orders }}"
configuration:
mode: "sequential"
```
Use sequential mode when order matters or when operations depend on shared state. Essential for inventory management, account balance updates, or any workflow requiring consistency.
```yaml
# Process data in batches
- id: create_batches
type: loop
input:
forN: "{{ Math.ceil(data.length / batchSize) }}"
configuration:
mode: "sequential"
```
Use forN mode with calculated iterations for batch processing. Ideal for handling large datasets by processing them in manageable chunks.
## Use Cases
Transform each item in an array:
```yaml
# Resize multiple images
- id: resize_images
type: loop
input:
forEach: "{{ images }}"
configuration:
mode: "parallel"
# Child nodes would access {{ loop.current }} for each image
```
Perfect for applying the same operation to multiple items like image processing, data cleaning, or format conversion.
Fetch all pages of data:
```yaml
# Fetch all pages from paginated API
- id: fetch_all_pages
type: loop
input:
forN: "{{ totalPages }}"
configuration:
mode: "sequential"
# Child nodes would use {{ loop.index }} for page number
```
Ideal for systematically fetching all data from paginated APIs where you need to iterate through page numbers.
Process large datasets in chunks:
```yaml
# Process users in batches of 100
- id: batch_process_users
type: loop
input:
forN: "{{ Math.ceil(users.length / 100) }}"
configuration:
mode: "sequential"
```
Essential for handling large datasets by breaking them into manageable chunks to avoid memory issues or API rate limits.
Implement retry mechanisms:
```yaml
# Retry failed operations
- id: retry_with_backoff
type: loop
input:
forN: 5
configuration:
mode: "sequential"
# Child nodes implement exponential backoff
```
Build robust workflows by automatically retrying failed operations with configurable attempts and backoff strategies.
Execute independent operations concurrently:
```yaml
# Send notifications to multiple channels
- id: send_notifications
type: loop
input:
forEach: "{{ notificationChannels }}"
configuration:
mode: "parallel"
```
Maximize throughput by executing independent operations simultaneously, perfect for notifications, file uploads, or API calls.
## Loop Context Variables
Available when iterating over arrays:
- `{{ loop.current }}` - Current item being processed
- `{{ loop.index }}` - Zero-based index of current iteration
- `{{ loop.isFirst }}` - True if this is the first iteration
- `{{ loop.isLast }}` - True if this is the last iteration
- `{{ loop.total }}` - Total number of items
Perfect for array processing where you need access to both the item and its position.
Available when using count-based iteration:
- `{{ loop.index }}` - Zero-based index of current iteration (0 to N-1)
- `{{ loop.iteration }}` - One-based iteration number (1 to N)
- `{{ loop.isFirst }}` - True if this is the first iteration
- `{{ loop.isLast }}` - True if this is the last iteration
- `{{ loop.total }}` - Total number of iterations
Ideal for retry logic, pagination, or any scenario requiring a specific number of iterations.
## Best Practices
**Use Sequential Mode When:**
- Order of execution matters
- Operations modify shared state
- Each iteration depends on previous results
- Memory usage needs to be controlled
```yaml
# Sequential for state-dependent operations
- id: process_transactions
type: loop
input:
forEach: "{{ transactions }}"
configuration:
mode: "sequential" # Maintain account balance consistency
```
**Use Parallel Mode When:**
- Operations are independent
- Performance is critical
- No shared state modifications
- I/O bound operations
```yaml
# Parallel for independent operations
- id: validate_emails
type: loop
input:
forEach: "{{ emailList }}"
configuration:
mode: "parallel" # Each validation is independent
```
Key optimization strategies:
- **Batch size**: For large arrays, consider chunking data
- **Resource limits**: Be mindful of memory and CPU usage
- **Timeouts**: Implement timeouts for long-running operations
- **Error handling**: Plan for partial failures in parallel mode
```yaml
# Good: Controlled batch processing
- id: controlled_processing
type: loop
input:
forEach: "{{ data.slice(0, 1000) }}" # Limit batch size
configuration:
mode: "parallel"
```
Implement robust error resilience:
```yaml
# Implement error resilience
- id: resilient_loop
type: loop
input:
forEach: "{{ items }}"
configuration:
mode: "sequential"
# Child nodes should include error handling
```
- Always plan for partial failures in parallel mode
- Use try-catch patterns in child nodes
- Consider circuit breaker patterns for external API calls
- Implement proper logging for debugging failed iterations
## Integration Patterns
```yaml
# Fetch data from multiple endpoints
- id: multi_endpoint_fetch
type: loop
input:
forEach: "{{ endpoints }}"
configuration:
mode: "parallel"
# Child HTTP node
- id: fetch_endpoint
type: http
input:
url: "{{ loop.current.url }}"
method: "GET"
```
Perfect for parallel API calls, batch data fetching, and distributed service communication.
```yaml
# Process multiple prompts
- id: ai_batch_processing
type: loop
input:
forEach: "{{ prompts }}"
configuration:
mode: "sequential" # Respect rate limits
# Child AI node
- id: process_prompt
type: ai
input:
prompt: "{{ loop.current }}"
```
Ideal for bulk content processing, batch analysis, and respecting AI provider rate limits.
```yaml
# Send Slack messages to multiple channels
- id: broadcast_message
type: loop
input:
forEach: "{{ channels }}"
configuration:
mode: "parallel"
# Child Slack node
- id: send_slack_message
type: slack
input:
channel: "{{ loop.current }}"
message: "{{ broadcastMessage }}"
```
Essential for multi-channel notifications, bulk email sending, and broadcast communications.
## Nested Loops
```yaml
# Outer loop: Process each user
- id: process_users
type: loop
input:
forEach: "{{ users }}"
configuration:
mode: "sequential"
# Inner loop: Process each user's orders
- id: process_user_orders
type: loop
input:
forEach: "{{ loop.current.orders }}"
configuration:
mode: "parallel"
```
## Troubleshooting
- Verify input array is not empty
- Check that forEach/forN values are properly set
- Ensure loop context variables are accessible
- Consider switching between sequential/parallel modes
- Reduce batch sizes for large datasets
- Implement timeouts and resource limits
- Process data in smaller chunks
- Use sequential mode for memory-intensive operations
- Clear unnecessary variables between iterations
- Ensure child nodes reference `loop.current` correctly
- Verify loop context is available in nested nodes
- Check variable scoping in complex workflows
### Debugging Tips
```yaml
# Add logging to track loop progress
- id: debug_loop
type: loop
input:
forEach: "{{ items }}"
configuration:
mode: "sequential"
# Debug child node
- id: log_iteration
type: script
input:
script: |
console.log(`Processing item ${loop.index}: ${JSON.stringify(loop.current)}`);
return loop.current;
```
The Loop node is essential for processing collections and implementing retry logic, making it a cornerstone of data processing workflows.
---
# Merge Node
URL: https://www.heliosapp.com/docs/workflows/control-nodes/merge
Description: Synchronization node that combines results from parallel workflows with configurable merge strategies
---
title: "Merge Node"
excerpt: "Combine outputs from multiple parallel execution paths"
description: "Synchronization node that combines results from parallel workflows with configurable merge strategies"
icon: Merge
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# Merge Node
The Merge node synchronizes and combines outputs from multiple parallel execution paths. It provides different merging strategies to handle various parallel processing scenarios, making it essential for workflows that split execution and need to converge.
## Configuration
### Configuration Schema
| Field | Type | Required | Description |
|--------|-----------------------------------|----------|---------------------------------|
| `mode` | `"onFirstComplete" \| "onAllComplete"` | Yes | Strategy for merging parallel outputs |
### Output Schema
The output varies based on the merge mode:
#### onFirstComplete Mode
| Field | Type | Description |
|----------|-------------|---------------------------------------|
| `output` | `JsonValue` | The output of the first completed path |
#### onAllComplete Mode
| Field | Type | Description |
|----------|---------------|--------------------------------------|
| `output` | `JsonValue[]` | Array of outputs from all paths |
## Merge Modes
### onFirstComplete
Completes when the first parallel path finishes execution. Useful for race conditions, fallback mechanisms, and performance optimization.
```yaml
# API fallback with multiple endpoints
- id: api_race
type: merge
configuration:
mode: "onFirstComplete"
# Returns the first successful API response
```
### onAllComplete
Waits for all parallel paths to complete before continuing. Useful for data aggregation, comprehensive validation, and ensuring all operations finish.
```yaml
# Data aggregation from multiple sources
- id: aggregate_data
type: merge
configuration:
mode: "onAllComplete"
# Returns array of all results
```
## Use Cases
Execute multiple API calls and use the fastest response:
```yaml
# Try multiple endpoints for best performance
- id: endpoint_race
type: switch
input:
switch: "{{ dataSource }}"
cases:
- id: primary
case: "primary"
then: ["call_primary_api"]
- id: backup
case: "backup"
then: ["call_backup_api", "call_tertiary_api"]
- id: fastest_response
type: merge
configuration:
mode: "onFirstComplete"
```
Perfect for performance optimization when multiple services can provide the same data with different latencies.
Collect data from multiple sources:
```yaml
# Gather user data from different services
- id: user_data_sources
type: condition
input:
if: true
then: ["get_profile", "get_preferences", "get_activity"]
else: []
- id: aggregate_user_data
type: merge
configuration:
mode: "onAllComplete"
```
Essential for building comprehensive data views from distributed microservices or multiple data sources.
Run multiple validation checks:
```yaml
# Comprehensive validation
- id: validation_checks
type: condition
input:
if: true
then: ["validate_format", "validate_business_rules", "validate_permissions"]
else: []
- id: validation_results
type: merge
configuration:
mode: "onAllComplete"
```
Ensure data quality by running independent validation checks simultaneously for faster processing.
Implement graceful degradation:
```yaml
# Try premium service, fall back to basic
- id: service_fallback
type: condition
input:
if: "{{ user.isPremium }}"
then: ["premium_service", "basic_service"]
else: ["basic_service"]
- id: service_response
type: merge
configuration:
mode: "onFirstComplete"
```
Build resilient systems that gracefully degrade when premium services are unavailable or fail.
Process multiple items and collect results:
```yaml
# Process files in parallel
- id: file_processing
type: loop
input:
forEach: "{{ files }}"
configuration:
mode: "parallel"
- id: collect_results
type: merge
configuration:
mode: "onAllComplete"
```
Efficiently handle bulk operations by processing items in parallel and collecting all results.
## Advanced Patterns
```yaml
# Dynamic merge strategy based on context
- id: dynamic_merge
type: merge
configuration:
mode: "{{ urgentRequest ? 'onFirstComplete' : 'onAllComplete' }}"
```
Dynamically choose merge strategy based on runtime conditions like priority, user type, or system load.
```yaml
# Merge with timeout consideration
- id: parallel_operations
type: condition
input:
if: true
then: ["fast_operation", "slow_operation_with_timeout"]
else: []
- id: merge_with_timeout
type: merge
configuration:
mode: "onFirstComplete" # Don't wait for slow operations
```
Prevent slow operations from blocking workflows by using first-complete strategy with timeout-aware design.
```yaml
# Multiple levels of merging
- id: regional_data
type: loop
input:
forEach: "{{ regions }}"
configuration:
mode: "parallel"
- id: merge_regional
type: merge
configuration:
mode: "onAllComplete"
- id: global_processing
type: condition
input:
if: true
then: ["process_global", "process_summary"]
else: []
- id: final_merge
type: merge
configuration:
mode: "onAllComplete"
```
Build complex hierarchical workflows with multiple merge levels for sophisticated data aggregation patterns.
## Best Practices
**Use onFirstComplete When:**
- Performance is critical
- Implementing fallback mechanisms
- Racing multiple options
- Any single result is sufficient
```yaml
# Good: Performance-critical scenarios
- id: cache_or_compute
type: merge
configuration:
mode: "onFirstComplete"
```
**Use onAllComplete When:**
- All results are needed
- Data aggregation is required
- Comprehensive validation needed
- State consistency is important
```yaml
# Good: Comprehensive data collection
- id: complete_user_profile
type: merge
configuration:
mode: "onAllComplete"
```
```yaml
# Robust error handling with merge
- id: parallel_with_fallback
type: condition
input:
if: true
then: ["primary_operation", "backup_operation"]
else: []
- id: merge_results
type: merge
configuration:
mode: "onFirstComplete"
# Handle case where all operations fail
- id: validate_merge_result
type: condition
input:
if: "{{ merge_results.output !== null }}"
then: ["process_result"]
else: ["handle_all_failed"]
```
Always plan for scenarios where parallel operations might fail or return unexpected results.
Key optimization strategies:
- **Balance parallelism**: Too many parallel paths can overwhelm resources
- **Consider timeouts**: Prevent slow operations from blocking onAllComplete
- **Monitor resource usage**: Track memory and CPU usage in parallel operations
- **Use appropriate merge mode**: Match the mode to your use case
Profile your workflows to find the optimal balance between speed and resource consumption.
## Integration Patterns
```yaml
# Parallel loop with result aggregation
- id: parallel_processing
type: loop
input:
forEach: "{{ items }}"
configuration:
mode: "parallel"
- id: collect_loop_results
type: merge
configuration:
mode: "onAllComplete"
```
```yaml
# Multiple API calls with fastest response
- id: api_endpoints
type: condition
input:
if: true
then: ["call_api_us", "call_api_eu", "call_api_asia"]
else: []
- id: fastest_api
type: merge
configuration:
mode: "onFirstComplete"
```
```yaml
# Multiple AI models for comparison
- id: ai_comparison
type: condition
input:
if: true
then: ["gpt_analysis", "claude_analysis", "gemini_analysis"]
else: []
- id: ai_consensus
type: merge
configuration:
mode: "onAllComplete"
```
## Data Processing
### Result Structure
#### onFirstComplete Output
```json
{
"output": "first_completed_result",
"completedPath": "path_identifier",
"completionTime": "2024-01-01T12:00:00Z"
}
```
#### onAllComplete Output
```json
{
"output": [
"result_from_path_1",
"result_from_path_2",
"result_from_path_3"
],
"totalPaths": 3,
"completionTime": "2024-01-01T12:00:05Z"
}
```
### Accessing Merge Results
```yaml
# Process onFirstComplete result
- id: process_first_result
type: condition
input:
if: "{{ merge_results.output !== null }}"
then: ["handle_success"]
else: ["handle_failure"]
# Process onAllComplete results
- id: process_all_results
type: loop
input:
forEach: "{{ merge_results.output }}"
configuration:
mode: "sequential"
```
## Troubleshooting
- Check if all parallel paths can complete successfully
- Verify no infinite loops in parallel paths
- Implement timeouts for long-running operations
- Check for unhandled errors in parallel paths
- Verify the fastest path returns the expected data format
- Consider adding validation to filter invalid early results
- Check if the "first" result is actually the desired one
- Monitor for race condition edge cases
- Limit the number of parallel paths
- Use streaming for large data sets
- Implement garbage collection between merges
- Monitor memory usage in parallel operations
- Reduce parallel operation complexity
- Implement proper error handling to prevent retries
- Use resource pooling for parallel operations
- Monitor execution time patterns
## Debugging Tips
```yaml
# Add logging to track merge behavior
- id: debug_merge
type: merge
configuration:
mode: "onAllComplete"
# Log results for analysis
- id: log_merge_results
type: script
input:
script: |
console.log('Merge completed:', {
mode: 'onAllComplete',
resultCount: merge_results.output.length,
results: merge_results.output
});
return merge_results.output;
```
---
# Suspend Node
URL: https://www.heliosapp.com/docs/workflows/control-nodes/suspend
Description: Control workflow timing with flexible suspension modes for approvals, delays, and event-driven resumption
---
title: "Suspend Node"
excerpt: "Pause workflow execution and resume based on conditions or timing"
description: "Control workflow timing with flexible suspension modes for approvals, delays, and event-driven resumption"
icon: Pause
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# Suspend Node
The Suspend node pauses workflow execution and resumes based on specified conditions. It supports time-based suspension, duration delays, and integration event-driven resumption, making it essential for approval workflows and human-in-the-loop processes.
## Configuration
### Input Schema
The Suspend node accepts one of three suspension modes:
#### Integration Mode
| Field | Type | Required | Description |
|-----------------|----------|----------|---------------------------------------------|
| `type` | `string` | Yes | Must be `"integration"` |
| `integrationId` | `string` | Yes | ID of integration to monitor for events |
| `filterPrompt` | `string` | Yes | Prompt to filter which events resume workflow |
#### Until Mode
| Field | Type | Required | Description |
|--------|----------|----------|------------------------------------------|
| `type` | `string` | Yes | Must be `"until"` |
| `until`| `string` | Yes | ISO datetime when workflow should resume |
#### Duration Mode
| Field | Type | Required | Description |
|------------|----------|----------|----------------------------------------------|
| `type` | `string` | Yes | Must be `"duration"` |
| `duration` | `string` | Yes | ISO 8601 duration (e.g., "PT1H30M", "PT5M") |
### Output Schema
| Field | Type | Description |
|--------------|----------|------------------------------------------------|
| `suspendType`| `string` | The type of suspension used |
| `resumeAt` | `string` | ISO datetime when workflow will resume (optional) |
## Basic Usage
### Simple Time Delay
```yaml
- id: wait_5_minutes
type: suspend
input:
type: "duration"
duration: "PT5M"
```
### Schedule for Specific Time
```yaml
- id: wait_until_midnight
type: suspend
input:
type: "until"
until: "2024-12-31T23:59:59Z"
```
### Wait for Integration Event
```yaml
- id: wait_for_approval
type: suspend
input:
type: "integration"
integrationId: "slack-approval-bot"
filterPrompt: "Resume when message contains 'APPROVED' from manager"
```
## Advanced Examples
```yaml
- id: submit_for_approval
type: http
input:
url: "{{ approval_api }}"
method: "POST"
body:
request: "{{ approval_request }}"
requester: "{{ user.id }}"
- id: wait_for_approval
type: suspend
input:
type: "integration"
integrationId: "approval-system"
filterPrompt: "Approved by manager with ID matching {{ user.managerId }}"
- id: process_approved_request
type: condition
input:
if: true
then: ["execute_approved_action", "notify_success"]
else: []
```
Human-in-the-loop workflow that pauses execution until external approval is received through integrations.
```yaml
- id: collect_daily_data
type: http
input:
url: "{{ data_api }}/daily"
- id: wait_for_next_day
type: suspend
input:
type: "until"
until: "{{ tomorrow_at_midnight }}"
- id: process_batch
type: loop
input:
forEach: "{{ collect_daily_data.output }}"
configuration:
mode: "parallel"
```
Schedule workflows to run at specific times, perfect for daily reports, batch processing, or maintenance tasks.
```yaml
- id: process_items
type: loop
input:
forEach: "{{ items_to_process }}"
configuration:
mode: "sequential"
- id: api_call
type: http
input:
url: "{{ rate_limited_api }}"
body: "{{ item }}"
- id: respect_rate_limit
type: suspend
input:
type: "duration"
duration: "PT1S" # 1 second delay between calls
```
Respect API rate limits by adding delays between requests to avoid hitting usage quotas.
```yaml
- id: technical_review
type: suspend
input:
type: "integration"
integrationId: "github-reviews"
filterPrompt: "Technical approval from engineering team lead"
- id: business_review
type: suspend
input:
type: "integration"
integrationId: "slack-approvals"
filterPrompt: "Business approval from product manager"
- id: final_approval
type: suspend
input:
type: "integration"
integrationId: "executive-approval"
filterPrompt: "Executive sign-off for deployment"
- id: deploy_changes
type: http
input:
url: "{{ deployment_api }}"
method: "POST"
```
Implement complex approval chains with multiple stakeholders and different approval systems.
```yaml
- id: check_system_load
type: http
input:
url: "{{ monitoring_api }}/load"
- id: conditional_delay
type: condition
input:
if: "{{ check_system_load.output.cpu > 80 }}"
then: ["wait_for_low_load"]
else: ["proceed_immediately"]
- id: wait_for_low_load
type: suspend
input:
type: "duration"
duration: "PT10M" # Wait 10 minutes during high load
```
Dynamically delay execution based on system conditions, perfect for load management and resource optimization.
## Duration Format Reference
```yaml
# Minutes
duration: "PT5M" # 5 minutes
duration: "PT30M" # 30 minutes
# Hours
duration: "PT1H" # 1 hour
duration: "PT2H30M" # 2 hours 30 minutes
# Seconds (rounded up to next minute)
duration: "PT30S" # 30 seconds (becomes 1 minute)
duration: "PT90S" # 90 seconds (becomes 2 minutes)
# Complex durations
duration: "PT1H15M" # 1 hour 15 minutes
duration: "PT45M" # 45 minutes
```
Follow ISO 8601 duration format for consistent, machine-readable timing.
```yaml
# Good: Clear, human-readable
duration: "PT5M" # 5 minutes
duration: "PT1H" # 1 hour
# Avoid: Overly complex
duration: "PT1H23M45S" # Too precise, rounds to minutes anyway
```
Keep durations simple and readable since seconds are rounded up to the next minute anyway.
## Error Handling
### Timeout Management
```yaml
- id: timed_approval
type: suspend
input:
type: "integration"
integrationId: "approval-system"
filterPrompt: "Approval from authorized user"
configuration:
timeoutMs: 3600000 # 1 hour timeout
- id: handle_timeout
type: condition
input:
if: "{{ timed_approval.timedOut }}"
then: ["escalate_approval", "notify_timeout"]
else: ["process_approval"]
```
### Fallback Mechanisms
```yaml
- id: primary_approval
type: suspend
input:
type: "integration"
integrationId: "primary-approver"
filterPrompt: "Approval from primary manager"
configuration:
timeoutMs: 1800000 # 30 minutes
- id: backup_approval
type: suspend
input:
type: "integration"
integrationId: "backup-approver"
filterPrompt: "Approval from backup manager if primary unavailable"
```
## Best Practices
- Implementing rate limiting
- Adding processing delays
- Waiting for system recovery
- Scheduled batch intervals
- Scheduling for specific times
- Daily/weekly/monthly processing
- Maintenance windows
- Business hour restrictions
- Human approvals required
- External event triggers
- Dynamic conditions
- Interactive workflows
---
# Switch Node
URL: https://www.heliosapp.com/docs/workflows/control-nodes/switch
Description: Multi-path routing node that executes different paths based on value matching with support for complex data types
---
title: "Switch Node"
excerpt: "Route workflow execution based on multiple value matches using switch-case logic"
description: "Multi-path routing node that executes different paths based on value matching with support for complex data types"
icon: Route
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# Switch Node
The Switch node provides multi-path routing in your workflows. It evaluates a value against multiple cases and executes the corresponding path when a match is found. It supports deep equality comparison for objects and arrays.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|-----------|-------------|----------|------------------------------------------------|
| `switch` | `JsonValue` | Yes | The value to compare against cases |
| `cases` | `Case[]` | Yes | Array of case objects with matching values |
| `default` | `string[]` | No | Array of node IDs to execute if no case matches |
#### Case Object Schema
| Field | Type | Required | Description |
|-------|-------------|----------|------------------------------------|
| `id` | `string` | Yes | Unique identifier for this case |
| `case`| `JsonValue` | Yes | Value to match against switch input|
| `then`| `string[]` | Yes | Node IDs to execute on match |
### Output Schema
| Field | Type | Description |
|----------|-------------|--------------------------|
| `output` | `JsonValue` | The original switch value|
## Basic Usage
```yaml
# Status-based routing
- id: order_router
type: switch
input:
switch: "{{ order.status }}"
cases:
- id: pending
case: "pending"
then: ["validate_payment", "check_inventory"]
- id: confirmed
case: "confirmed"
then: ["prepare_shipment"]
- id: shipped
case: "shipped"
then: ["track_package", "notify_customer"]
default: ["log_unknown_status", "manual_review"]
```
## Advanced Examples
```yaml
# HTTP status code handling
- id: http_status_router
type: switch
input:
switch: "{{ response.status }}"
cases:
- id: success
case: 200
then: ["process_data", "cache_result"]
- id: created
case: 201
then: ["process_created", "send_confirmation"]
- id: not_found
case: 404
then: ["log_not_found", "try_alternative"]
- id: server_error
case: 500
then: ["log_error", "retry_request", "notify_admin"]
default: ["handle_unexpected_status"]
```
Perfect for handling API responses, error codes, or any numeric categorization where different values require different processing paths.
```yaml
# User role and permission routing
- id: permission_router
type: switch
input:
switch: "{{ user.role }}"
cases:
- id: admin_case
case: { "type": "admin", "level": "super" }
then: ["admin_dashboard", "system_management"]
- id: manager_case
case: { "type": "manager", "department": "sales" }
then: ["sales_dashboard", "team_reports"]
- id: user_case
case: { "type": "user", "verified": true }
then: ["user_dashboard"]
default: ["access_denied", "redirect_login"]
```
Use object matching for complex conditions where multiple properties must match exactly. Supports deep equality comparison for nested objects.
```yaml
# Feature flag routing
- id: feature_router
type: switch
input:
switch: "{{ user.features }}"
cases:
- id: beta_features
case: ["beta", "experimental", "advanced"]
then: ["beta_dashboard", "experimental_features"]
- id: premium_features
case: ["premium", "advanced"]
then: ["premium_dashboard"]
- id: basic_features
case: ["basic"]
then: ["basic_dashboard"]
default: ["default_features"]
```
Match exact array configurations for feature flags, permissions lists, or any scenario where array order and content matter.
## Use Cases
Route based on different response types:
```yaml
- id: api_response_router
type: switch
input:
switch: "{{ api_response.type }}"
cases:
- id: user_data
case: "user"
then: ["process_user", "update_profile"]
- id: product_data
case: "product"
then: ["process_product", "update_catalog"]
- id: order_data
case: "order"
then: ["process_order", "update_inventory"]
default: ["log_unknown_type", "generic_processor"]
```
Perfect for microservices architectures where different services return different data types that require specialized processing.
Handle different content formats:
```yaml
- id: content_processor
type: switch
input:
switch: "{{ file.type }}"
cases:
- id: image_case
case: "image"
then: ["resize_image", "optimize_quality", "generate_thumbnails"]
- id: video_case
case: "video"
then: ["compress_video", "extract_frames", "generate_preview"]
- id: document_case
case: "document"
then: ["extract_text", "generate_summary", "index_content"]
default: ["unsupported_format", "notify_user"]
```
Essential for media processing workflows where different file types require completely different processing pipelines and tools.
Route based on deployment environment:
```yaml
- id: env_router
type: switch
input:
switch: "{{ env.NODE_ENV }}"
cases:
- id: development
case: "development"
then: ["dev_config", "debug_logging", "mock_services"]
- id: staging
case: "staging"
then: ["staging_config", "limited_logging"]
- id: production
case: "production"
then: ["prod_config", "error_logging", "monitoring"]
default: ["default_config"]
```
Critical for deployment workflows where different environments require different configurations, logging levels, and service integrations.
## Best Practices
- **Use meaningful case IDs**: Make them self-documenting
- **Order cases by likelihood**: Put most common cases first
- **Always provide a default**: Handle unexpected values gracefully
```yaml
# Good: Clear case organization
cases:
- id: success_response
case: 200
then: ["process_success"]
- id: client_error
case: 400
then: ["handle_client_error"]
- id: server_error
case: 500
then: ["handle_server_error"]
default: ["handle_unknown_error"]
# Avoid: Unclear and incomplete
cases:
- id: case1
case: 200
then: ["node1"]
# Missing default case
```
- **Be explicit with types**: `"5"` vs `5` are different
- **Use deep equality for objects**: Switch node handles this automatically
- **Consider null/undefined cases**: Include them explicitly if needed
```yaml
# Good: Explicit type handling
cases:
- id: string_zero
case: "0"
then: ["handle_string_zero"]
- id: number_zero
case: 0
then: ["handle_number_zero"]
- id: null_case
case: null
then: ["handle_null"]
```
Critical for avoiding subtle bugs in production workflows.
- **Limit case count**: Too many cases can impact performance
- **Use simple values when possible**: Complex object matching is slower
- **Consider using multiple switch nodes**: For complex nested logic
```yaml
# Good: Simple value matching
switch: "{{ user.status }}"
# Consider restructuring if you have 20+ cases
# Use nested switches or separate logic nodes instead
```
## Integration Patterns
```yaml
- id: fetch_data
type: http
input:
url: "{{ api.endpoint }}"
- id: status_handler
type: switch
input:
switch: "{{ fetch_data.output.status }}"
cases:
- id: ok
case: 200
then: ["parse_response"]
- id: unauthorized
case: 401
then: ["refresh_token", "retry_request"]
default: ["handle_error"]
```
Perfect for handling different HTTP response codes and routing to appropriate error handling or success flows.
```yaml
- id: content_classifier
type: ai
input:
prompt: "Classify this content: {{ content }}"
- id: classification_router
type: switch
input:
switch: "{{ content_classifier.output.category }}"
cases:
- id: spam
case: "spam"
then: ["delete_content", "log_spam"]
- id: appropriate
case: "appropriate"
then: ["approve_content", "publish"]
```
Ideal for content moderation, sentiment analysis routing, and AI-driven decision workflows.
```yaml
# First level: User type
- id: user_type_router
type: switch
input:
switch: "{{ user.type }}"
cases:
- id: premium
case: "premium"
then: ["premium_feature_router"]
- id: basic
case: "basic"
then: ["basic_feature_router"]
# Second level: Premium features
- id: premium_feature_router
type: switch
input:
switch: "{{ request.feature }}"
cases:
- id: analytics
case: "analytics"
then: ["premium_analytics"]
- id: export
case: "export"
then: ["premium_export"]
```
Essential for complex hierarchical routing with multiple decision layers and nested logic flows.
## Troubleshooting
- Verify case values match exactly (type and value)
- Check for unexpected data transformations
- Always provide a default case for safety
- Ensure object properties are in the same order
- Use consistent property naming
- Consider using simpler value comparisons
- Reduce the number of cases if possible
- Simplify complex case values
- Consider alternative routing strategies
## Debugging Tips
```yaml
# Add logging to debug case matching
- id: debug_switch
type: switch
input:
switch: "{{ debug.log('Switch value:', switchValue) || switchValue }}"
cases:
- id: debug_case
case: "expected"
then: ["log_match_found", "continue_flow"]
default: ["log_no_match", "investigate_value"]
```
The Switch node is powerful for creating complex routing logic that can handle multiple scenarios with clean, maintainable case-based organization.
---
# Cron Trigger
URL: https://www.heliosapp.com/docs/workflows/triggers/cron
Description: Time-based workflow triggering with flexible scheduling patterns and timezone support
---
title: "Cron Trigger"
excerpt: "Schedule workflows to run at specific times using cron expressions"
description: "Time-based workflow triggering with flexible scheduling patterns and timezone support"
icon: Clock
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
# Cron Trigger
The Cron trigger enables time-based workflow execution using standard cron expression syntax. It provides reliable, scheduled automation for recurring tasks, reports, maintenance jobs, and periodic data processing.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|------------------|----------|----------|---------------------------------------|
| `cronExpression` | `string` | Yes | Standard cron expression (5 or 6 fields) |
| `timezone` | `string` | No | IANA timezone identifier (defaults to UTC) |
| `defaultInput` | `object` | No | Default data to pass to the workflow |
### Basic Configuration
```yaml
triggers:
daily_report:
type: "cron"
input:
cronExpression: "0 9 * * 1-5" # 9 AM on weekdays
timezone: "America/New_York"
defaultInput:
reportType: "daily"
includeMetrics: true
```
## Cron Expression Syntax
**Cron Expression Builder**: Use [crontab.guru](https://crontab.guru/) to easily build and validate your cron expressions. This interactive tool helps you visualize when your cron jobs will run and catch syntax errors before deployment.
Cron expressions use 5 or 6 fields separated by spaces:
```
┌───────────── minute (0 - 59)
│ ┌─────────── hour (0 - 23)
│ │ ┌───────── day of month (1 - 31)
│ │ │ ┌─────── month (1 - 12)
│ │ │ │ ┌───── day of week (0 - 6) (Sunday to Saturday)
│ │ │ │ │
* * * * *
```
### Special Characters
| Character | Description | Example |
|-----------|-------------|---------|
| `*` | Any value | `* * * * *` (every minute) |
| `,` | Value list separator | `0,30 * * * *` (every 30 minutes) |
| `-` | Range of values | `0 9-17 * * *` (every hour 9 AM to 5 PM) |
| `/` | Step values | `*/15 * * * *` (every 15 minutes) |
| `?` | No specific value | `0 0 ? * MON` (Mondays at midnight) |
### Common Patterns
```yaml
# Every minute
cronExpression: "* * * * *"
# Every hour at 30 minutes past
cronExpression: "30 * * * *"
# Daily at 2:30 AM
cronExpression: "30 2 * * *"
# Weekdays at 9 AM
cronExpression: "0 9 * * 1-5"
# Every Sunday at 3 AM
cronExpression: "0 3 * * 0"
# First day of every month at midnight
cronExpression: "0 0 1 * *"
```
## Pattern Examples
```yaml
# Every minute
cronExpression: "* * * * *"
# Every hour at 30 minutes past
cronExpression: "30 * * * *"
# Daily at 2:30 AM
cronExpression: "30 2 * * *"
```
Basic recurring patterns for frequent automation tasks and regular monitoring.
```yaml
# Weekdays at 9 AM
cronExpression: "0 9 * * 1-5"
# Every Sunday at 3 AM
cronExpression: "0 3 * * 0"
# First day of every month at midnight
cronExpression: "0 0 1 * *"
```
Perfect for weekly reports, monthly billing processes, and weekend maintenance tasks.
```yaml
# Every 15 minutes during business hours
cronExpression: "*/15 9-17 * * 1-5"
# Lunch break automation (12:30 PM weekdays)
cronExpression: "30 12 * * 1-5"
# End of business day (5:30 PM weekdays)
cronExpression: "30 17 * * 1-5"
```
Ideal for business process automation, status updates, and team notifications during working hours.
```yaml
# Quarterly: first day of quarter at 6 AM
cronExpression: "0 6 1 1,4,7,10 *"
# Bi-weekly on Mondays and Thursdays
cronExpression: "0 9 * * 1,4"
# Every 6 hours starting at midnight
cronExpression: "0 */6 * * *"
```
Complex scheduling patterns for quarterly reports, multi-day cycles, and sophisticated automation workflows.
## Advanced Scheduling
```yaml
# Send status updates every 2 hours during business hours
triggers:
business_hours_update:
type: "cron"
input:
cronExpression: "0 */2 9-17 * * 1-5"
timezone: "America/New_York"
defaultInput:
updateType: "status"
audience: "team"
```
Perfect for automating tasks during working hours like status updates, notifications, and team communications. Ensures activities happen when people are available to respond.
```yaml
# Global reports at local business hours
triggers:
us_morning_report:
type: "cron"
input:
cronExpression: "0 9 * * 1-5"
timezone: "America/New_York"
defaultInput:
region: "US"
eu_morning_report:
type: "cron"
input:
cronExpression: "0 9 * * 1-5"
timezone: "Europe/London"
defaultInput:
region: "EU"
asia_morning_report:
type: "cron"
input:
cronExpression: "0 9 * * 1-5"
timezone: "Asia/Tokyo"
defaultInput:
region: "ASIA"
```
Essential for global teams and services. Run the same schedule at appropriate local times across different regions for consistent user experience.
```yaml
# Summer schedule (May-September)
triggers:
summer_maintenance:
type: "cron"
input:
cronExpression: "0 2 * 5-9 6" # Saturdays at 2 AM, May-Sept
timezone: "UTC"
defaultInput:
season: "summer"
maintenanceType: "light"
# Winter schedule (October-April)
triggers:
winter_maintenance:
type: "cron"
input:
cronExpression: "0 2 * 10-12,1-4 6" # Saturdays at 2 AM, Oct-Apr
timezone: "UTC"
defaultInput:
season: "winter"
maintenanceType: "heavy"
```
Adapt scheduling based on seasons, business cycles, or varying operational needs. Useful for maintenance windows, resource allocation, and seasonal campaigns.
## Common Use Cases
```yaml
# Generate and send daily analytics report
triggers:
daily_analytics:
type: "cron"
input:
cronExpression: "0 8 * * 1-5" # 8 AM weekdays
timezone: "America/Los_Angeles"
defaultInput:
reportType: "analytics"
recipients: ["team@company.com"]
timeframe: "yesterday"
```
```yaml
# Sync data every 4 hours
triggers:
data_sync:
type: "cron"
input:
cronExpression: "0 */4 * * *"
defaultInput:
syncType: "incremental"
sources: ["database", "api", "files"]
# Daily database backup
triggers:
daily_backup:
type: "cron"
input:
cronExpression: "0 3 * * *" # 3 AM daily
defaultInput:
backupType: "full"
retention: "7days"
```
```yaml
# Weekly cleanup on Sunday nights
triggers:
weekly_cleanup:
type: "cron"
input:
cronExpression: "0 2 * * 0" # Sundays at 2 AM
defaultInput:
cleanupTasks: ["logs", "temp_files", "old_backups"]
retentionDays: 30
# System health check every 15 minutes
triggers:
health_check:
type: "cron"
input:
cronExpression: "*/15 * * * *"
defaultInput:
checkType: "system"
services: ["api", "database", "cache"]
alertOnFailure: true
```
## Best Practices
### Scheduling Guidelines
- **Avoid peak hours**: Schedule resource-intensive tasks during off-peak times
- **Consider dependencies**: Ensure dependent workflows run in the correct order
- **Use appropriate frequencies**: Don't over-schedule unnecessary tasks
- **Plan for maintenance windows**: Schedule around known system maintenance
```yaml
# Good: Off-peak scheduling
triggers:
data_processing:
type: "cron"
input:
cronExpression: "0 2 * * *" # 2 AM when traffic is low
# Avoid: Peak hour scheduling
triggers:
heavy_processing:
type: "cron"
input:
cronExpression: "0 12 * * *" # Noon when traffic is high
```
### Timezone Management
- **Be explicit**: Always specify timezone when time matters
- **Consider users**: Use timezone appropriate for your audience
- **Document assumptions**: Make timezone choices clear in comments
- **Handle DST**: Be aware of daylight saving time changes
```yaml
# Good: Explicit timezone
triggers:
user_notification:
type: "cron"
input:
cronExpression: "0 9 * * 1-5"
timezone: "America/New_York" # Clear timezone
# Avoid: Ambiguous timing
triggers:
unclear_timing:
type: "cron"
input:
cronExpression: "0 9 * * 1-5" # What timezone?
```
## Monitoring and Debugging
### Cron Context Variables
Access scheduling information in your workflows:
```yaml
# Available cron context
- "{{ trigger.scheduledTime }}" # When it was supposed to run
- "{{ trigger.actualTime }}" # When it actually ran
- "{{ trigger.cronExpression }}" # The cron expression
- "{{ trigger.timezone }}" # The configured timezone
- "{{ trigger.defaultInput }}" # The default input provided
```
### Execution Monitoring
```yaml
# Log cron execution details
- id: log_cron_execution
type: script
input:
script: |
console.log('Cron Execution:', {
expression: trigger.cronExpression,
scheduled: trigger.scheduledTime,
actual: trigger.actualTime,
delay: new Date(trigger.actualTime) - new Date(trigger.scheduledTime),
timezone: trigger.timezone
});
```
### Common Issues & Solutions
**Jobs not running**
- Verify cron expression syntax
- Check timezone settings
- Confirm system time is correct
- Review workflow permissions
**Inconsistent timing**
- Monitor system load during execution
- Check for competing scheduled jobs
- Verify timezone handling
- Review execution logs
Most timing issues stem from incorrect cron expressions or timezone misconfigurations. Always test with a simple expression first.
**Performance problems**
- Analyze job duration patterns
- Check resource consumption
- Consider staggering job start times
- Implement job timeouts
**Resource optimization**
- Use appropriate cron frequencies
- Monitor memory and CPU usage
- Implement circuit breakers
- Consider job queuing for heavy tasks
Performance issues often occur when multiple jobs run simultaneously. Stagger start times to distribute load.
```yaml
# Test cron expressions
triggers:
test_cron:
type: "cron"
input:
cronExpression: "* * * * *" # Every minute for testing
defaultInput:
testMode: true
# Add execution tracking
- id: track_execution
type: script
input:
script: |
const now = new Date();
const scheduled = new Date(trigger.scheduledTime);
const delay = now - scheduled;
console.log(`Cron job executed with ${delay}ms delay`);
return {
executionTime: now.toISOString(),
scheduledTime: trigger.scheduledTime,
delay: delay
};
```
Use frequent testing intervals during development, then adjust to production schedules. Monitor execution delays to identify system performance issues.
## Summary
The Cron trigger is essential for creating reliable, time-based automation that keeps your systems running smoothly and your data up to date.
---
# Integration Trigger
URL: https://www.heliosapp.com/docs/workflows/triggers/integration
Description: Event-driven workflow triggering with real-time processing and AI-powered filtering
---
title: "Integration Trigger"
excerpt: "Respond to events from connected services and applications with intelligent filtering"
description: "Event-driven workflow triggering with real-time processing and AI-powered filtering"
icon: Zap
createdAt: "2025-07-31"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
# Integration Trigger
The Integration trigger enables event-driven workflow execution by responding to events from connected services and applications. It provides real-time processing with intelligent filtering capabilities to ensure workflows are triggered only when relevant events occur.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|-----------------|----------|----------|------------------------------------------|
| `integrationId` | `string` | Yes | ID of the connected integration service |
| `eventTypes` | `string[]` | No | Specific event types to listen for |
| `filterPrompt` | `string` | No | AI-powered filtering criteria |
### Basic Configuration
```yaml
triggers:
github_pr_trigger:
type: "integration"
input:
integrationId: "github_main_repo"
eventTypes: ["pull_request.opened", "pull_request.synchronized"]
filterPrompt: "Only trigger for pull requests targeting the main branch"
```
## Event Context
Integration triggers provide rich context about the triggering event:
### Common Context Variables
```yaml
# Available for all integration triggers
- "{{ trigger.integrationId }}" # Source integration
- "{{ trigger.eventType }}" # Specific event type
- "{{ trigger.originalPayload }}" # Raw event data
- "{{ trigger.filteredPayload }}" # Processed event data
- "{{ trigger.source }}" # Event source system
- "{{ trigger.timestamp }}" # When event occurred
```
### Service-Specific Context
```yaml
- "{{ trigger.repository }}" # Repository information
- "{{ trigger.pullRequest }}" # PR details (if applicable)
- "{{ trigger.author }}" # Event author
- "{{ trigger.changes }}" # Files changed
- "{{ trigger.labels }}" # Associated labels
```
```yaml
- "{{ trigger.channel }}" # Channel information
- "{{ trigger.user }}" # Message author
- "{{ trigger.message }}" # Message content
- "{{ trigger.thread }}" # Thread context
- "{{ trigger.mentions }}" # User mentions
```
```yaml
- "{{ trigger.table }}" # Affected table
- "{{ trigger.operation }}" # CRUD operation
- "{{ trigger.record }}" # Record data
- "{{ trigger.changes }}" # Changed fields
- "{{ trigger.metadata }}" # Transaction metadata
```
## AI-Powered Filtering
### Smart Event Filtering
Integration triggers use AI to intelligently filter events based on natural language criteria:
```yaml
# Complex filtering with natural language
triggers:
smart_pr_review:
type: "integration"
input:
integrationId: "github_repo"
filterPrompt: |
Trigger for pull requests that:
- Have more than 100 lines of code changes
- Modify files in the /src directory
- Are not from dependabot
- Target the main or develop branch
- Include tests or documentation updates
```
### Content-Based Filtering
```yaml
# Filter based on content analysis
triggers:
content_moderation:
type: "integration"
input:
integrationId: "social_platform"
filterPrompt: |
Trigger for posts that may need moderation:
- Contain potentially offensive language
- Have been reported by multiple users
- Include suspicious links or attachments
- Are from new accounts with no verification
```
### Business Logic Filtering
```yaml
# Business rule-based filtering
triggers:
high_value_customer:
type: "integration"
input:
integrationId: "crm_system"
filterPrompt: |
Trigger for customer interactions where:
- Customer lifetime value > $10,000
- Account status is 'premium' or 'enterprise'
- Previous support tickets were escalated
- Contact method preference is 'phone' or 'priority email'
```
## Use Cases
### Automated Code Review
```yaml
# AI-powered code review triggering
triggers:
code_review_trigger:
type: "integration"
input:
integrationId: "github_main"
filterPrompt: |
Trigger automated review for pull requests that:
- Modify critical system files (auth, payment, security)
- Have more than 200 lines of changes
- Are from external contributors
- Touch database migration files
```
### Customer Support Automation
```yaml
# Intelligent support ticket routing
triggers:
support_ticket_router:
type: "integration"
input:
integrationId: "zendesk_integration"
filterPrompt: |
Route urgent tickets that:
- Contain keywords like 'down', 'broken', 'critical', 'urgent'
- Are from enterprise customers
- Relate to payment or billing issues
- Were submitted outside business hours
```
### Security Incident Response
```yaml
# Security event monitoring
triggers:
security_incident:
type: "integration"
input:
integrationId: "security_logs"
filterPrompt: |
Trigger security response for events indicating:
- Multiple failed login attempts from same IP
- Access attempts to restricted resources
- Unusual data download patterns
- Login from unexpected geographic locations
```
### Content Management
```yaml
# Social media content monitoring
triggers:
content_monitor:
type: "integration"
input:
integrationId: "social_platform"
filterPrompt: |
Monitor content that may need attention:
- Posts with high engagement but negative sentiment
- Content flagged by community moderators
- Brand mentions with complaint keywords
- Viral content requiring quick response
```
### Data Pipeline Triggers
```yaml
# Data processing pipeline
triggers:
data_pipeline:
type: "integration"
input:
integrationId: "data_warehouse"
filterPrompt: |
Start data processing when:
- New data files are uploaded to staging
- Files are larger than 100MB
- Data contains customer transaction records
- Upload occurs during processing windows
```
## Advanced Patterns
### Multi-Integration Orchestration
Coordinate events from multiple services to create sophisticated automation workflows:
```yaml
# Coordinate events from multiple services
triggers:
deployment_trigger:
type: "integration"
input:
integrationId: "github_repo"
filterPrompt: "Release tagged and CI tests passed"
notification_trigger:
type: "integration"
input:
integrationId: "slack_devops"
filterPrompt: "Deployment started or completed messages"
monitoring_trigger:
type: "integration"
input:
integrationId: "monitoring_system"
filterPrompt: "Performance alerts after deployment"
```
### Context-Aware Filtering
Create intelligent filters that consider business context, time zones, and operational requirements:
```yaml
# Business hours and user context
triggers:
business_hours_support:
type: "integration"
input:
integrationId: "customer_portal"
filterPrompt: |
During business hours (9 AM - 6 PM EST), trigger for:
- All customer inquiries
- Any technical issues
- Billing questions
Outside business hours, only trigger for:
- Critical system outages
- Enterprise customer escalations
- Security incidents
```
### Workflow Suspension and Resume
Resume suspended workflows based on external approval events and validation processes:
```yaml
# Resume suspended workflows based on integration events
triggers:
workflow_resume:
type: "integration"
input:
integrationId: "approval_system"
filterPrompt: |
Resume workflows when:
- Manager approves pending requests
- Budget approval is granted
- Legal review is completed
- External validation is received
```
## Troubleshooting
**Common symptoms:**
- Workflows not starting despite events occurring
- Integration showing as connected but no activity
- Expected events not appearing in logs
**Solutions:**
- Verify integration connectivity
- Check webhook configuration
- Review event type filters
- Validate filter prompt logic
Most integration issues stem from connectivity problems or misconfigured event filtering. Always test with a simple, broad filter first.
**Common symptoms:**
- Workflows triggering for irrelevant events
- High resource usage from unnecessary runs
- Notification spam from over-active triggers
**Solutions:**
- Refine filter criteria
- Add more specific conditions
- Test with recent event data
- Consider event volume patterns
Over-triggering usually indicates filter criteria that are too broad. Use specific business logic and test with real event data to refine filters.
**Common symptoms:**
- Workflows receiving incomplete data
- Expected variables are undefined
- Missing payload fields in trigger context
**Solutions:**
- Verify integration permissions
- Check payload parsing logic
- Review service API changes
- Validate webhook configuration
Context issues often result from insufficient permissions or API changes. Review integration logs to identify missing data fields.
## Summary
Integration triggers enable powerful, intelligent automation that responds to real-world events across your entire technology stack, making your workflows truly reactive and responsive to business needs.
---
# Manual Trigger
URL: https://www.heliosapp.com/docs/workflows/triggers/manual
Description: Start workflows manually
---
title: "Manual Trigger"
excerpt: "Start workflows manually"
description: "Start workflows manually"
icon: Hand
createdAt: "2023-11-07"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
# Manual Trigger
The Manual trigger enables you to start workflows manually. This is useful for testing and debugging workflows, or running workflows that are not triggered by an external event.
## Configuration
### Input Schema
The Manual trigger allows you to provide test data that mimics other trigger types. This is essential for testing and debugging workflows without waiting for real events to occur.
## Test Data Examples
Test integration triggers with realistic event data:
```json
{
"event": "pull_request",
"action": "opened",
"repository": "https://github.com/ExampleOrg/ExampleRepo",
"ref": "refs/heads/feature-branch",
"commit": "abc123def456789",
"author": {
"username": "developer",
"email": "dev@example.com"
},
"pullRequest": {
"id": 123,
"title": "Add new feature",
"base": "main",
"head": "feature-branch"
}
}
```
Common integration event types to test:
- GitHub: `pull_request`, `push`, `issues`, `release`
- Slack: `message`, `app_mention`, `reaction_added`
- Database: `record.created`, `record.updated`, `record.deleted`
Test webhook triggers with HTTP-style payloads:
```json
{
"method": "POST",
"endpoint": "/test-webhook",
"headers": {
"content-type": "application/json",
"authorization": "Bearer test-token",
"user-agent": "TestClient/1.0"
},
"body": {
"userId": "user_123",
"action": "order_completed",
"data": {
"orderId": "order_456",
"amount": 99.99,
"currency": "USD"
},
"timestamp": "2024-01-15T10:30:00Z"
},
"query": {
"source": "test",
"version": "v1"
},
"remoteIp": "192.168.1.100"
}
```
Test cron triggers with scheduling context:
```json
{
"cronExpression": "0 9 * * 1-5",
"timezone": "America/New_York",
"scheduledTime": "2024-01-15T09:00:00-05:00",
"actualTime": "2024-01-15T09:00:02-05:00",
"defaultInput": {
"reportType": "daily",
"includeMetrics": true
}
}
```
Useful for testing:
- Scheduled report generation
- Maintenance workflows
- Data synchronization processes
Test any workflow with custom data:
```json
{
"testMode": true,
"testData": {
"customField1": "value1",
"customField2": 42,
"customField3": ["item1", "item2", "item3"]
},
"environment": "development",
"timestamp": "2024-01-15T10:30:00Z"
}
```
Best practices for manual testing:
- Use realistic data that matches production patterns
- Include edge cases and error conditions
- Test with both valid and invalid data
- Verify all required fields are present
Ensure that the mandatory fields for the trigger type are provided in the input. Missing required fields will prevent workflow execution.
## Debugging and Best Practices
### Testing Guidelines
- **Start simple**: Begin with minimal valid payloads, then add complexity
- **Test edge cases**: Include boundary conditions and error scenarios
- **Validate schemas**: Ensure your test data matches expected trigger formats
- **Use realistic data**: Mirror production data patterns as closely as possible
- **Test error handling**: Verify workflows handle invalid or missing data gracefully
### Common Issues
**Missing required fields**
- Workflows will fail silently if mandatory trigger fields are absent
- Review trigger documentation for required fields
- Use schema validation during testing
**Invalid data types**
- Ensure numeric fields contain numbers, strings contain text, etc.
- Validate data types match expected trigger formats
- Test with both valid and invalid data types
Always validate your test data structure matches the expected trigger schema before execution.
**Malformed JSON**
- Verify JSON syntax is correct before testing
- Use JSON validators to check syntax
- Watch for trailing commas and quote mismatches
**Timezone mismatches**
- Use consistent timezone formats for time-based data
- Prefer ISO 8601 format for timestamps
- Be explicit about timezone assumptions
JSON formatting errors are the most common cause of manual trigger failures. Always validate JSON before testing.
### Debugging Tips
```yaml
# Add debugging output to your workflows
- id: debug_trigger_data
type: script
input:
script: |
console.log('Manual trigger data:', {
triggerType: typeof trigger,
triggerKeys: Object.keys(trigger || {}),
triggerData: trigger
});
return {
debugInfo: 'Check logs for trigger details',
triggerReceived: !!trigger
};
```
---
# Webhook Trigger
URL: https://www.heliosapp.com/docs/workflows/triggers/webhook
Description: HTTP-based workflow triggering with custom endpoints, authentication, and real-time payload processing
---
title: "Webhook Trigger"
excerpt: "Start workflows via HTTP endpoints with flexible authentication and validation"
description: "HTTP-based workflow triggering with custom endpoints, authentication, and real-time payload processing"
icon: Globe
createdAt: "2023-11-07"
updatedAt: "2025-07-31"
---
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
# Webhook Trigger
The Webhook trigger enables HTTP-based workflow execution by exposing custom endpoints that external systems can call. It provides flexible authentication, payload validation, and real-time processing capabilities for seamless integration with third-party services.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|----------------|-------------------|----------|------------------------------------------------|
| `endpoint` | `string` | Yes | Custom endpoint path (e.g., "/my-webhook") |
| `method` | `"GET" \| "POST"` | No | HTTP method to accept (defaults to POST) |
| `authentication` | `object` | No | Authentication configuration |
| `validation` | `object` | No | Payload validation rules |
| `response` | `object` | No | Custom response configuration |
### Basic Configuration
```yaml
triggers:
simple_webhook:
type: "webhook"
input:
endpoint: "/deploy-notification"
method: "POST"
```
## Authentication Options
```yaml
# Public webhook (use with caution)
triggers:
public_webhook:
type: "webhook"
input:
endpoint: "/public-endpoint"
method: "POST"
```
Use for internal services or non-sensitive data. Not recommended for production environments with external access.
```yaml
# Secure with bearer token
triggers:
secure_webhook:
type: "webhook"
input:
endpoint: "/secure-endpoint"
method: "POST"
authentication:
type: "bearer"
secret: "{{ secrets.webhook_token }}"
```
Standard OAuth-style authentication. Simple and secure for most third-party integrations.
```yaml
# API key in header
triggers:
api_key_webhook:
type: "webhook"
input:
endpoint: "/api-endpoint"
authentication:
type: "api_key"
header: "X-API-Key"
secret: "{{ secrets.api_key }}"
```
Common pattern for API services. Customize the header name to match your service requirements.
```yaml
# Multiple custom headers
triggers:
custom_auth_webhook:
type: "webhook"
input:
endpoint: "/custom-auth"
authentication:
type: "custom"
required_headers:
- "X-Source-System"
- "X-Request-ID"
secrets:
X-Auth-Token: "{{ secrets.auth_token }}"
```
Maximum flexibility for complex authentication schemes requiring multiple headers or custom validation.
```yaml
# GitHub-style signature verification
triggers:
github_webhook:
type: "webhook"
input:
endpoint: "/github-events"
authentication:
type: "signature"
algorithm: "sha256"
header: "X-Hub-Signature-256"
secret: "{{ secrets.github_webhook_secret }}"
```
Highest security level. Verifies payload integrity and authenticity using cryptographic signatures.
## Payload Validation
### Schema Validation
```yaml
# Validate incoming payload structure
triggers:
validated_webhook:
type: "webhook"
input:
endpoint: "/user-data"
validation:
schema:
type: "object"
required: ["userId", "action", "timestamp"]
properties:
userId:
type: "string"
pattern: "^user_[0-9]+$"
action:
type: "string"
enum: ["created", "updated", "deleted"]
timestamp:
type: "string"
format: "date-time"
```
### Content Type Validation
```yaml
# Ensure proper content type
triggers:
json_webhook:
type: "webhook"
input:
endpoint: "/json-only"
validation:
content_type: "application/json"
max_size: "1MB"
```
## Response Configuration
### Custom Response
```yaml
# Return custom response
triggers:
custom_response_webhook:
type: "webhook"
input:
endpoint: "/custom-response"
response:
status: 200
headers:
Content-Type: "application/json"
X-Processed-By: "Helios"
body:
status: "received"
message: "Webhook processed successfully"
timestamp: "{{ now() }}"
```
### Conditional Responses
```yaml
# Different responses based on processing
triggers:
conditional_webhook:
type: "webhook"
input:
endpoint: "/conditional"
response:
success:
status: 200
body: { status: "success" }
error:
status: 400
body: { status: "error", message: "Invalid payload" }
timeout:
status: 408
body: { status: "timeout", message: "Processing timeout" }
```
## Use Cases
```yaml
# GitHub deployment webhook
triggers:
github_deploy:
type: "webhook"
input:
endpoint: "/github-deploy"
method: "POST"
authentication:
type: "signature"
algorithm: "sha256"
header: "X-Hub-Signature-256"
secret: "{{ secrets.github_secret }}"
validation:
schema:
type: "object"
required: ["repository", "ref", "deployment"]
```
Perfect for automating deployments and managing CI/CD pipelines. GitHub, GitLab, and other platforms can trigger workflows based on repository events.
```yaml
# Stripe payment webhook
triggers:
stripe_payments:
type: "webhook"
input:
endpoint: "/stripe-events"
authentication:
type: "signature"
algorithm: "sha256"
header: "Stripe-Signature"
secret: "{{ secrets.stripe_webhook_secret }}"
validation:
content_type: "application/json"
required_headers: ["Stripe-Signature"]
```
Handle payment events securely with proper signature validation. Essential for e-commerce workflows, subscription management, and financial reconciliation.
```yaml
# Support ticket webhook
triggers:
support_ticket:
type: "webhook"
input:
endpoint: "/support-tickets"
method: "POST"
authentication:
type: "bearer"
secret: "{{ secrets.support_token }}"
validation:
schema:
type: "object"
required: ["ticket_id", "customer_id", "priority"]
response:
status: 202
body:
message: "Ticket received and will be processed"
eta: "< 5 minutes"
```
Streamline support operations by automatically routing tickets, escalating based on priority, and integrating with CRM systems.
```yaml
# IoT sensor data
triggers:
iot_sensors:
type: "webhook"
input:
endpoint: "/sensor-data"
method: "POST"
authentication:
type: "api_key"
header: "X-Device-Key"
secret: "{{ secrets.device_key }}"
validation:
schema:
type: "object"
required: ["device_id", "timestamp", "readings"]
max_size: "10KB"
```
Process real-time sensor data from IoT devices with proper validation and size limits. Ideal for monitoring systems, smart buildings, and industrial automation.
```yaml
# CMS content updates
triggers:
cms_updates:
type: "webhook"
input:
endpoint: "/content-updates"
authentication:
type: "custom"
required_headers: ["X-CMS-Source", "X-Content-Type"]
validation:
content_type: "application/json"
schema:
type: "object"
required: ["content_id", "action", "content_type"]
```
Automate content workflows when CMS content is created, updated, or published. Perfect for cache invalidation, search indexing, and content distribution.
## Advanced Patterns
```yaml
# Different endpoints for different environments
triggers:
prod_webhook:
type: "webhook"
input:
endpoint: "/prod/events"
authentication:
type: "bearer"
secret: "{{ secrets.prod_webhook_token }}"
staging_webhook:
type: "webhook"
input:
endpoint: "/staging/events"
authentication:
type: "bearer"
secret: "{{ secrets.staging_webhook_token }}"
```
Configure different webhook endpoints for production, staging, and development environments with environment-specific authentication and validation rules.
```yaml
# Implement rate limiting
triggers:
rate_limited_webhook:
type: "webhook"
input:
endpoint: "/rate-limited"
validation:
rate_limit:
requests_per_minute: 60
burst_size: 10
response:
rate_limit_exceeded:
status: 429
headers:
Retry-After: "60"
body:
error: "Rate limit exceeded"
```
Protect your webhooks from abuse and ensure system stability by implementing rate limiting with configurable thresholds and proper HTTP responses.
```yaml
# Combined with filter prompt for intelligent processing
triggers:
filtered_webhook:
type: "webhook"
input:
endpoint: "/filtered-events"
filterPrompt: |
Only process webhook calls that:
- Have valid authentication
- Contain event type 'order.completed'
- Are from verified merchant accounts
- Have transaction amount > $100
```
Use AI-powered filtering to intelligently process only relevant webhook events based on complex business logic and conditions that would be difficult to express with traditional validation.
## Webhook Context
Access webhook-specific information in your workflows:
### Available Context Variables
```yaml
# Webhook-specific context
- "{{ trigger.method }}" # HTTP method used
- "{{ trigger.endpoint }}" # Endpoint that was called
- "{{ trigger.headers }}" # Request headers
- "{{ trigger.query }}" # Query parameters
- "{{ trigger.body }}" # Request body
- "{{ trigger.remoteIp }}" # Client IP address
- "{{ trigger.userAgent }}" # Client user agent
- "{{ trigger.contentType }}" # Request content type
- "{{ trigger.contentLength }}" # Request size
```
### Processing Webhook Data
```yaml
# Access webhook data in workflow
- id: process_webhook_data
type: script
input:
script: |
console.log('Webhook received:', {
method: trigger.method,
endpoint: trigger.endpoint,
remoteIp: trigger.remoteIp,
userAgent: trigger.userAgent,
bodySize: trigger.contentLength,
hasAuth: !!trigger.headers.authorization
});
return {
processed: true,
source: trigger.remoteIp,
data: trigger.body
};
```
## Best Practices
- **Always use authentication**: Avoid public webhooks for sensitive operations
- **Validate all inputs**: Check payload structure, size, and content
- **Use HTTPS only**: Ensure encrypted communication
- **Implement rate limiting**: Prevent abuse and DoS attacks
- **Log security events**: Track authentication failures and suspicious activity
```yaml
# Secure webhook configuration
triggers:
secure_webhook:
type: "webhook"
input:
endpoint: "/secure"
authentication:
type: "signature"
algorithm: "sha256"
header: "X-Signature"
secret: "{{ secrets.webhook_secret }}"
validation:
content_type: "application/json"
max_size: "1MB"
schema:
type: "object"
required: ["timestamp", "data"]
response:
status: 200
body: { received: true }
```
- **Optimize payload processing**: Handle large payloads efficiently
- **Use async processing**: Don't block webhook responses for long operations
- **Implement timeouts**: Prevent hanging requests
- **Monitor response times**: Track webhook performance metrics
```yaml
# Performance-optimized webhook
triggers:
fast_webhook:
type: "webhook"
input:
endpoint: "/fast-processing"
validation:
max_size: "5MB"
timeout: "30s"
response:
status: 202 # Accepted for async processing
body: { queued: true }
```
- **Return appropriate status codes**: Use proper HTTP status codes
- **Provide meaningful error messages**: Help clients understand failures
- **Implement retry logic**: Handle transient failures gracefully
- **Log all errors**: Maintain detailed error logs for debugging
```yaml
# Error handling configuration
triggers:
resilient_webhook:
type: "webhook"
input:
endpoint: "/resilient"
response:
validation_error:
status: 400
body: { error: "Invalid payload format" }
auth_error:
status: 401
body: { error: "Authentication required" }
server_error:
status: 500
body: { error: "Internal server error" }
```
```yaml
# Add monitoring to webhook workflows
- id: monitor_webhook
type: script
input:
script: |
// Log webhook metrics
metrics.increment('webhook.received', {
endpoint: trigger.endpoint,
method: trigger.method,
source: trigger.remoteIp
});
metrics.timing('webhook.processing_time', processingTime);
return { monitored: true };
```
Track key metrics:
- Request volume and frequency
- Response times and latency
- Authentication success/failure rates
- Error rates by type
- Payload sizes and processing times
## Troubleshooting
### Common Issues
**Webhook not receiving requests**
- Verify endpoint URL and method
- Check firewall and network configuration
- Confirm webhook registration with external service
- Review DNS and routing settings
Most common cause is incorrect endpoint configuration. Double-check the URL path and HTTP method match what your external service is configured to send.
**Authentication failures**
- Validate authentication tokens and secrets
- Check header names and formats
- Verify signature algorithms and encoding
- Review timestamp-based authentication windows
Authentication issues often stem from mismatched secrets or incorrect header names. Ensure your secret matches exactly what the sending service expects.
**Payload validation errors**
- Verify JSON schema accuracy
- Check required field presence
- Validate data types and formats
- Review content-type headers
Schema validation failures usually indicate the incoming payload structure doesn't match your expectations. Use loose validation during testing, then tighten as needed.
**Response issues**
- Check response configuration syntax
- Verify status codes and headers
- Ensure response body is valid JSON
- Review timeout settings
Response configuration problems can cause the sending service to retry unnecessarily. Always return appropriate HTTP status codes and valid JSON when configured.
### Debugging Tips
```yaml
# Debug webhook requests
- id: debug_webhook
type: script
input:
script: |
console.log('Webhook Debug Info:', {
trigger: {
method: trigger.method,
endpoint: trigger.endpoint,
headers: trigger.headers,
query: trigger.query,
bodyPreview: JSON.stringify(trigger.body).substring(0, 200),
remoteIp: trigger.remoteIp,
timestamp: trigger.timestamp
}
});
```
Webhook triggers provide the foundation for real-time, event-driven automation that connects your workflows to the broader ecosystem of web services and applications.
---
# AI Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/ai
Description: Integrate powerful language models from OpenAI, Anthropic, and Google into your workflows
---
title: "AI Node"
excerpt: "Leverage AI models for text generation, analysis, and processing"
description: "Integrate powerful language models from OpenAI, Anthropic, and Google into your workflows"
icon: Brain
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# AI Node
The AI node brings powerful language model capabilities into your workflows. It supports multiple AI providers and models, enabling text generation, analysis, code review, and intelligent data processing.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|----------|----------|----------|-----------------------------|
| `prompt` | `string` | Yes | The prompt to send to the AI model |
### Configuration Schema
| Field | Type | Required | Default | Description |
|------------|----------|----------|------------------------|------------------------------------------|
| `provider` | `string` | No | `"anthropic"` | AI provider: "openai", "anthropic", or "google" |
| `model` | `string` | No | `"claude-4-sonnet-20250514"` | Model name to use |
| `api_key` | `string` | No | - | Custom API key (uses env vars by default) |
### Output Schema
| Field | Type | Description |
|----------|-------------|--------------------------------|
| `output` | `JsonValue` | The AI model's response text |
## Basic Usage
### Simple Text Generation
```yaml
- id: generate_content
type: ai
input:
prompt: "Write a brief summary of the benefits of workflow automation"
configuration:
provider: "anthropic"
model: "claude-4-sonnet-20250514"
```
### Code Analysis
```yaml
- id: review_code
type: ai
input:
prompt: |
Review this code for potential issues:
{{ code_snippet }}
Provide specific feedback on:
- Security vulnerabilities
- Performance concerns
- Best practices
configuration:
provider: "openai"
model: "gpt-4"
```
## Advanced Examples
```yaml
- id: analyze_data
type: ai
input:
prompt: |
Analyze this sales data and provide insights:
{{ sales_data.output }}
Please include:
- Key trends and patterns
- Anomalies or outliers
- Actionable recommendations
Format the response as structured JSON.
- id: validate_analysis
type: ai
input:
prompt: |
Validate this analysis for accuracy and completeness:
{{ analyze_data.output }}
Are the conclusions supported by the data?
```
Perfect for business intelligence, financial analysis, and data-driven decision making workflows.
```yaml
- id: gather_context
type: search
input:
query: "{{ topic }}"
maxResults: 5
- id: generate_article
type: ai
input:
prompt: |
Based on this research context:
{{ gather_context.output }}
Write a comprehensive article about {{ topic }}.
Include relevant facts, statistics, and insights.
Target audience: {{ target_audience }}
configuration:
provider: "anthropic"
model: "claude-4-sonnet-20250514"
```
Ideal for marketing content, research reports, and educational material creation with fact-based foundations.
```yaml
- id: evaluate_options
type: ai
input:
prompt: |
Evaluate these options for {{ decision_context }}:
Options:
{{ options }}
Criteria:
{{ evaluation_criteria }}
Provide a structured recommendation with:
- Pros and cons for each option
- Risk assessment
- Final recommendation with reasoning
Response format: JSON
```
Essential for strategic planning, vendor selection, and complex business decisions requiring structured analysis.
## Tool Integration
The AI node includes access to a common toolset for enhanced capabilities:
```yaml
- id: ai_with_tools
type: ai
input:
prompt: |
Help me research {{ topic }} and create a summary.
Use available tools to gather current information.
```
Tools automatically available:
- Web search capabilities
- Data processing functions
- Structured output generation
## Best Practices
### Prompt Engineering
**Clear Instructions:**
```yaml
input:
prompt: |
Task: Analyze customer feedback
Input: {{ feedback_data }}
Output format: JSON with sentiment, themes, and action items
Context: SaaS product feedback analysis
```
**Structured Prompts:**
```yaml
input:
prompt: |
## Context
{{ context }}
## Task
{{ specific_task }}
## Requirements
- {{ requirement_1 }}
- {{ requirement_2 }}
## Output Format
{{ desired_format }}
```
### Error Handling
```yaml
- id: ai_task
type: ai
input:
prompt: "{{ complex_prompt }}"
configuration:
errorHandling: "continue"
retryPolicy:
maxRetries: 2
- id: validate_output
type: condition
input:
if: "{{ ai_task.output && ai_task.output.length > 0 }}"
then: ["process_result"]
else: ["handle_ai_error"]
```
### Cost Optimization
```yaml
# Use appropriate models for task complexity
- id: simple_classification
type: ai
configuration:
provider: "openai"
model: "gpt-4o-mini" # Faster, cheaper for simple tasks
- id: complex_analysis
type: ai
configuration:
provider: "anthropic"
model: "claude-4-sonnet-20250514" # More capable for complex tasks
```
---
# Crawler Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/crawler
Description: Powerful web crawling and scraping using Firecrawl for content extraction and website analysis
---
title: "Crawler Node"
excerpt: "Extract content and data from websites and web pages"
description: "Powerful web crawling and scraping using Firecrawl for content extraction and website analysis"
icon: Globe
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# Crawler Node
The Crawler node enables comprehensive web crawling and content extraction using Firecrawl. It can crawl entire websites, extract structured data, take screenshots, and convert web content to various formats for further processing.
## Configuration
### Input Schema
| Field | Type | Required | Default | Description |
|------------------------|------------|----------|---------|------------------------------------------------|
| `url` | `string` | Yes | - | Target URL to crawl |
| `includePaths` | `array` | No | `[]` | Path patterns to include in crawling |
| `excludePaths` | `array` | No | `[]` | Path patterns to exclude from crawling |
| `limit` | `number` | No | `100` | Maximum number of pages to crawl |
| `maxDepth` | `number` | No | `3` | Maximum crawling depth |
| `outputFormats` | `object` | No | - | Output format configuration |
| `additionalCrawlParams`| `JsonValue`| No | - | Additional Firecrawl parameters as JSON |
#### Output Formats Schema
| Field | Type | Required | Default | Description |
|-----------|------------|----------|-------------------|--------------------------------------------|
| `formats` | `array` | No | `["markdown"]` | Output formats: markdown, html, json, content, links, screenshots |
| `maxAge` | `number` | No | `86400000` | Cache max age in milliseconds (24 hours) |
### Configuration Schema
| Field | Type | Required | Description |
|----------|----------|----------|---------------------------------|
| `apiKey` | `string` | No | Custom Firecrawl API key |
### Output Schema
| Field | Type | Description |
|----------|-------------|----------------------------------------|
| `output` | `JsonValue` | Extracted content and data from crawl |
## Basic Usage
### Simple Page Crawl
```yaml
- id: crawl_website
type: crawler
input:
url: "https://example.com"
limit: 50
maxDepth: 2
```
### Targeted Content Extraction
```yaml
- id: extract_blog_posts
type: crawler
input:
url: "https://blog.example.com"
includePaths: ["/posts/", "/articles/"]
excludePaths: ["/admin/", "/private/"]
limit: 25
outputFormats:
formats: ["markdown", "json"]
maxAge: 3600000 # 1 hour cache
```
## Advanced Examples
```yaml
- id: crawl_docs
type: crawler
input:
url: "https://docs.example.com"
includePaths: ["/docs/", "/guides/", "/api/"]
excludePaths: ["/legacy/", "/deprecated/"]
limit: 100
maxDepth: 4
outputFormats:
formats: ["markdown", "content"]
maxAge: 7200000 # 2 hours cache
- id: process_documentation
type: ai
input:
prompt: |
Process this documentation content:
{{ crawl_docs.output }}
Create a structured knowledge base with:
- Topic categorization
- Key concepts extraction
- Cross-references
```
Perfect for building knowledge bases, API documentation analysis, and technical content organization.
```yaml
- id: crawl_products
type: crawler
input:
url: "https://shop.example.com"
includePaths: ["/products/", "/categories/"]
excludePaths: ["/cart/", "/checkout/", "/account/"]
limit: 200
outputFormats:
formats: ["json", "content"]
additionalCrawlParams: |
{
"extractorOptions": {
"mode": "llm-extraction",
"extractionPrompt": "Extract product details including name, price, description, and specifications"
}
}
- id: analyze_products
type: ai
input:
prompt: |
Analyze this product data:
{{ crawl_products.output }}
Provide insights on:
- Price ranges and trends
- Product categories
- Popular features
```
Ideal for competitive pricing analysis, product catalog management, and market research automation.
```yaml
- id: crawl_news_site
type: crawler
input:
url: "https://news.example.com"
includePaths: ["/articles/", "/news/"]
excludePaths: ["/ads/", "/sponsored/"]
limit: 50
maxDepth: 2
outputFormats:
formats: ["markdown", "content", "links"]
- id: extract_key_articles
type: ai
input:
prompt: |
From this news content:
{{ crawl_news_site.output }}
Extract the 10 most important articles with:
- Headlines
- Summaries
- Key topics
- Publication dates
```
Essential for media monitoring, content curation, and real-time news analysis workflows.
```yaml
- id: monitor_website
type: crawler
input:
url: "{{ target_website }}"
limit: 20
outputFormats:
formats: ["content", "screenshots"]
maxAge: 3600000 # Check for changes hourly
- id: detect_changes
type: ai
input:
prompt: |
Compare this current content with previous version:
Current: {{ monitor_website.output }}
Previous: {{ previous_crawl.output }}
Identify and summarize any significant changes.
- id: notify_changes
type: condition
input:
if: "{{ detect_changes.output.hasChanges }}"
then: ["send_notification"]
else: ["log_no_changes"]
```
Critical for website change detection, compliance monitoring, and automated content tracking.
## Output Formats
### Markdown Format
- Clean, structured text representation
- Preserves headers, links, and formatting
- Ideal for AI processing and analysis
### HTML Format
- Raw HTML content
- Preserves original structure and styling
- Useful for visual analysis
### JSON Format
- Structured data extraction
- Programmatically accessible
- Best for data processing
### Content Format
- Plain text content
- Minimal formatting
- Fast processing
### Links Format
- Extracted hyperlinks
- Link relationship mapping
- Navigation structure analysis
### Screenshots Format
- Visual page captures
- Layout verification
- Visual change detection
## Advanced Configuration
### Custom Extraction Parameters
```yaml
- id: custom_extraction
type: crawler
input:
url: "{{ target_url }}"
additionalCrawlParams: |
{
"pageOptions": {
"waitFor": 2000,
"screenshot": true
},
"extractorOptions": {
"mode": "llm-extraction",
"extractionSchema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"price": {"type": "number"},
"description": {"type": "string"}
}
}
}
}
```
### Rate-Limited Crawling
```yaml
- id: gentle_crawl
type: crawler
input:
url: "{{ website_url }}"
limit: 10
maxDepth: 1
configuration:
timeoutMs: 60000 # 1 minute timeout
- id: pause_between_crawls
type: suspend
input:
type: "duration"
duration: "PT5S" # 5 second pause
- id: continue_crawl
type: crawler
input:
url: "{{ next_section_url }}"
```
## Error Handling
```yaml
- id: robust_crawl
type: crawler
input:
url: "{{ target_url }}"
limit: 100
configuration:
errorHandling: "continue"
retryPolicy:
maxRetries: 3
- id: validate_crawl_results
type: condition
input:
if: "{{ robust_crawl.output && robust_crawl.output.data }}"
then: ["process_results"]
else: ["handle_crawl_failure"]
- id: handle_crawl_failure
type: ai
input:
prompt: "Analyze why crawling failed and suggest alternatives for URL: {{ target_url }}"
```
---
# Deep Research Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/deep-research
Description: Perform in-depth research and analysis using specialized research-focused AI models from Perplexity and Google
---
title: "Deep Research Node"
excerpt: "Conduct comprehensive research using advanced AI models with extended capabilities"
description: "Perform in-depth research and analysis using specialized research-focused AI models from Perplexity and Google"
icon: Microscope
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# Deep Research Node
The Deep Research node is designed for comprehensive, time-intensive research tasks. It leverages specialized research-focused AI models that can perform deep analysis, fact-checking, and extensive information gathering with built-in web search capabilities.
## Configuration
### Input Schema
| Field | Type | Required | Description |
|----------|----------|----------|-----------------------------|
| `prompt` | `string` | Yes | The research query or topic to investigate |
### Configuration Schema
| Field | Type | Required | Default | Description |
|------------|----------|----------|------------------------|------------------------------------------|
| `provider` | `string` | No | `"perplexity"` | Research provider: "perplexity" or "google" |
| `model` | `string` | No | `"sonar-deep-research"` | Model name optimized for research tasks |
| `api_key` | `string` | No | - | Custom API key (uses env vars by default) |
### Output Schema
| Field | Type | Description |
|----------|-------------|--------------------------------|
| `output` | `JsonValue` | Comprehensive research results in markdown format |
## Key Features
- **Extended Timeout**: 60-minute timeout for comprehensive research
- **Research-Optimized Models**: Specialized models designed for deep investigation
- **Web Search Integration**: Built-in capability to search and analyze web sources
- **Structured Output**: Results formatted in clear, readable markdown
- **Advanced Telemetry**: Detailed tracking for research workflows
## Basic Usage
### Simple Research Query
```yaml
- id: research_topic
type: deep-research
input:
prompt: "Research the latest developments in renewable energy storage technologies"
configuration:
provider: "perplexity"
model: "sonar-deep-research"
```
### Market Analysis
```yaml
- id: market_research
type: deep-research
input:
prompt: |
Conduct a comprehensive market analysis for electric vehicles in 2024:
- Market size and growth trends
- Key players and market share
- Technology developments
- Consumer adoption patterns
- Regulatory landscape
- Future outlook and projections
```
## Advanced Examples
```yaml
- id: competitor_analysis
type: deep-research
input:
prompt: |
Research {{ company_name }}'s main competitors in the {{ industry }} sector:
For each competitor, analyze:
- Business model and revenue streams
- Market positioning and strategy
- Recent product launches or innovations
- Financial performance and funding
- Strengths and weaknesses
- Strategic partnerships
Provide insights on market trends and opportunities.
configuration:
provider: "perplexity"
model: "sonar-deep-research"
```
Perfect for strategic planning, market entry decisions, and competitive positioning analysis.
```yaml
- id: tech_research
type: deep-research
input:
prompt: |
Research the current state and future prospects of {{ technology }}:
Cover the following aspects:
- Technical specifications and capabilities
- Current implementations and use cases
- Advantages and limitations
- Industry adoption rates
- Research and development trends
- Regulatory considerations
- Investment and funding landscape
- Expert opinions and predictions
Include specific examples, statistics, and credible sources.
```
Essential for technology evaluation, R&D planning, and innovation strategy development.
```yaml
- id: investment_analysis
type: deep-research
input:
prompt: |
Conduct thorough due diligence research on {{ investment_target }}:
Research areas:
- Company background and history
- Financial performance and metrics
- Management team and governance
- Market opportunity and competition
- Risk factors and challenges
- Growth strategy and pipeline
- Industry trends and outlook
- Analyst opinions and ratings
Provide a balanced assessment with both opportunities and risks.
configuration:
provider: "google"
model: "gemini-2.5-pro"
```
Critical for investment decisions, due diligence processes, and risk assessment workflows.
### Research Pipeline with Follow-up Analysis
```yaml
- id: initial_research
type: deep-research
input:
prompt: "Research {{ research_topic }} and identify the top 5 most important findings"
- id: detailed_analysis
type: deep-research
input:
prompt: |
Based on this initial research:
{{ initial_research.output }}
Conduct deeper analysis on each of the top 5 findings:
- Verify information with multiple sources
- Identify potential biases or limitations
- Explore counterarguments or alternative perspectives
- Provide additional context and implications
- Suggest areas for further investigation
- id: synthesis_report
type: ai
input:
prompt: |
Create a comprehensive executive summary from this research:
Initial findings: {{ initial_research.output }}
Detailed analysis: {{ detailed_analysis.output }}
Structure the summary with:
- Key insights and conclusions
- Supporting evidence and sources
- Implications and recommendations
- Areas of uncertainty or further research needed
```
## Provider Comparison
### Perplexity (Default)
- **Sonar Deep Research**: Specialized for comprehensive research tasks
- **Web Search Integration**: Real-time access to current information
- **Source Citation**: Automatic attribution of sources
- **Best For**: Current events, market research, fact-checking
### Google
- **Gemini Models**: Advanced reasoning and analysis capabilities
- **Multimodal Support**: Can process various content types
- **Large Context**: Handle extensive research materials
- **Best For**: Complex analysis, technical research, academic inquiries
## Best Practices
### Research Query Optimization
- **Be Specific**: Clearly define the scope and objectives of your research
- **Structure Requests**: Use bullet points or numbered lists for complex queries
- **Include Context**: Provide relevant background information when needed
- **Specify Format**: Request specific output formats (e.g., tables, summaries)
### Workflow Integration
- **Chain Research**: Use multiple deep research nodes for iterative investigation
- **Validate Findings**: Follow up with fact-checking or source verification
- **Synthesize Results**: Combine multiple research outputs for comprehensive reports
- **Version Control**: Track research iterations and updates
### Performance Considerations
- **Timeout Awareness**: Deep research can take up to 60 minutes
- **Resource Planning**: Consider the computational cost of extensive research
- **Parallel Processing**: Use multiple nodes for different research aspects
- **Caching Strategy**: Store results to avoid redundant research
## Related Nodes
- **[AI Node](./ai)**: For general AI text processing and analysis
- **[Search Node](./search)**: For basic web search functionality
- **[Crawler Node](./crawler)**: For structured web data extraction
- **[HTTP Node](./http)**: For API-based data gathering
---
# HTTP Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/http
Description: Send HTTP requests with full control over methods, headers, and body content
---
title: "HTTP Node"
excerpt: "Make HTTP requests to external APIs and services"
description: "Send HTTP requests with full control over methods, headers, and body content"
icon: Globe
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# HTTP Node
The HTTP node enables your workflows to communicate with external APIs and services through HTTP requests. It supports all standard HTTP methods with comprehensive request and response handling.
## Configuration
### Input Schema
| Field | Type | Required | Default | Description |
|----------|---------------------|----------|---------|---------------------------------------|
| `method` | `string` | No | `"GET"` | HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS) |
| `url` | `string` | Yes | - | Target URL (must be valid URL format) |
| `headers`| `Record` | No | `{}` | Custom headers for the request |
| `body` | `JsonValue` | No | - | Request body (JSON, string, or null) |
### Output Schema
| Field | Type | Description |
|-------------|-----------------------|------------------------------------------|
| `ok` | `boolean` | Whether the request was successful |
| `status` | `number` | HTTP status code |
| `statusText`| `string` | HTTP status message |
| `headers` | `Record` | Response headers |
| `body` | `JsonValue` | Response body (parsed based on content-type) |
| `error` | `{message: string, code?: string}` | Error details (if request failed) |
## Basic Usage
### GET Request
```yaml
- id: fetch_user
type: http
input:
method: "GET"
url: "https://api.example.com/users/123"
headers:
Authorization: "Bearer {{ token }}"
```
### POST Request
```yaml
- id: create_user
type: http
input:
method: "POST"
url: "https://api.example.com/users"
headers:
Content-Type: "application/json"
Authorization: "Bearer {{ token }}"
body:
name: "{{ user.name }}"
email: "{{ user.email }}"
```
## Advanced Examples
```yaml
- id: api_call
type: http
input:
method: "POST"
url: "{{ api_endpoint }}"
headers:
Authorization: "Bearer {{ api_token }}"
X-API-Version: "2023-01"
body:
data: "{{ processed_data }}"
- id: check_response
type: condition
input:
if: "{{ api_call.output.ok }}"
then: ["process_success"]
else: ["handle_error"]
```
Perfect for robust API integrations with proper error handling and response validation.
```yaml
- id: upload_file
type: http
input:
method: "POST"
url: "https://upload.example.com/files"
headers:
Authorization: "Bearer {{ upload_token }}"
Content-Type: "multipart/form-data"
body: "{{ file_data }}"
```
Essential for file upload workflows, document processing, and media management systems.
```yaml
- id: api_with_retry
type: loop
input:
forN: 3
configuration:
mode: "sequential"
- id: try_request
type: http
input:
method: "GET"
url: "{{ unreliable_endpoint }}"
headers:
Authorization: "Bearer {{ token }}"
- id: exponential_backoff
type: suspend
input:
type: "duration"
duration: "{{ 'PT' + (loop.iteration * 2) + 'S' }}"
```
Critical for reliable communication with external services that may experience temporary failures.
## Response Handling
The HTTP node automatically handles different content types:
- **JSON**: Automatically parsed into JavaScript objects
- **Text**: Returned as strings
- **Binary**: Encoded as base64 strings
- **Empty**: Returns null
## Error Handling
When requests fail, the node returns:
```yaml
{
"ok": false,
"status": 0,
"statusText": "Network Error",
"headers": {},
"error": {
"message": "Connection timeout",
"code": "NETWORK_ERROR"
}
}
```
## Best Practices
### Retry Logic
Combine with control nodes for robust error handling:
```yaml
- id: api_with_retry
type: loop
input:
forN: 3
configuration:
mode: "sequential"
- id: try_request
type: http
input:
url: "{{ api_url }}"
- id: check_success
type: condition
input:
if: "{{ try_request.output.ok }}"
then: ["success_handler"]
else: ["retry_or_fail"]
```
### Rate Limiting
Use suspend nodes to respect API rate limits:
```yaml
- id: api_call
type: http
input:
url: "{{ api_url }}"
- id: rate_limit_delay
type: suspend
input:
type: "duration"
duration: "PT1S" # Wait 1 second between calls
```
---
# Script Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/script
Description: Run scripts for data transformations and automation tasks with built-in support for multiple languages and package management
---
title: "Script Node"
excerpt: "Execute custom scripts in bash, Python, or JavaScript/TypeScript"
description: "Run scripts for data transformations and automation tasks with built-in support for multiple languages and package management"
icon: Terminal
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# Script Node
The Script node lets you run custom code directly inside your workflows. It supports **Bash**, **Python**, and **JavaScript/TypeScript** - each executed in an isolated sandbox environment.
Scripts are executed using the following runners:
| Language | Runner | Description |
| -------- | -------------------------------- | --------------------------------------------------------- |
| Bash | `/bin/bash` | Native shell execution |
| Python | [uv](https://docs.astral.sh/uv/) | Fast Python package runner with inline dependency support |
| JavaScript/TypeScript | [Deno](https://deno.com/) | Secure JavaScript/TypeScript runtime with built-in module support |
## Configuration
### Input
| Field | Type | Required | Default | Description |
| ---------- | -------- | -------- | -------- | ----------------------------------------------- |
| `language` | `string` | No | `"bash"` | Script language: `bash`, `python`, `typescript` |
| `script` | `string` | Yes | - | The script code to execute |
### Output
| Field | Type | Description |
| ---------- | -------- | --------------------------------------------------------------- |
| `stdout` | `string` | Standard output from the script |
| `stderr` | `string` | Standard error output (truncated to 1024 characters on failure) |
| `exitCode` | `number` | Process exit code (0 = success) |
## Basic Usage
### Bash
```bash
echo "Current date: $(date)"
echo "Files in /tmp:"
ls -la /tmp
```
### Python
```python
import json
data = {"status": "ok", "count": 42}
print(json.dumps(data))
```
### JavaScript/TypeScript
```typescript
const result = { transformed: true, timestamp: Date.now() };
console.log(JSON.stringify(result));
```
## 3rd Party Dependencies
One of the most powerful features of the Script node is the ability to pull in third-party packages without any pre-configuration.
### Python - uv inline dependencies
Python scripts are executed with [uv](https://docs.astral.sh/uv/), which supports [inline script metadata](https://docs.astral.sh/uv/guides/scripts/#declaring-script-dependencies) for declaring dependencies. Add a special comment block at the top of your script and `uv` will automatically install the packages before running:
```python
# /// script
# dependencies = [
# "requests",
# "beautifulsoup4",
# ]
# ///
import requests
from bs4 import BeautifulSoup
resp = requests.get("https://example.com")
soup = BeautifulSoup(resp.text, "html.parser")
print(soup.title.string)
```
### JavaScript/TypeScript - Deno imports
JavaScript/TypeScript scripts are executed with [Deno](https://deno.com/), which supports [importing third-party modules](https://docs.deno.com/runtime/fundamentals/modules/#importing-third-party-modules-and-libraries) directly via `npm:`, `jsr:`, or URL specifiers - no install step needed:
```typescript
import { nanoid } from "npm:nanoid@5";
import { camelCase } from "jsr:@luca/cases@1.0.0";
const id = nanoid();
const name = camelCase("hello world");
console.log(JSON.stringify({ id, name }));
```
## Error Handling
A script node fails when the process exits with a non-zero exit code. On failure, `stderr` is captured (truncated to the last 1024 characters) and surfaced as the error message.
Use a condition node after the script to branch on success or failure based on the exit code.
---
# Search Node
URL: https://www.heliosapp.com/docs/workflows/utility-nodes/search
Description: Google Custom Search integration for research and information gathering
---
title: "Search Node"
excerpt: "Perform web searches and retrieve relevant results"
description: "Google Custom Search integration for research and information gathering"
icon: Search
createdAt: "2025-01-08"
updatedAt: "2025-01-08"
---
# Search Node
The Search node enables web search capabilities in your workflows using Google Custom Search. It's perfect for research, information gathering, competitive analysis, and real-time data lookup.
## Configuration
### Input Schema
| Field | Type | Required | Default | Description |
|--------------|----------|----------|---------|-------------------------------------------|
| `query` | `string` | Yes | - | Search query (minimum 1 character) |
| `maxResults` | `number` | No | `5` | Maximum results to return (1-10) |
| `safeSearch` | `string` | No | `"off"` | Safe search setting: "off" or "strict" |
| `language` | `string` | No | `"en"` | Search language code |
| `region` | `string` | No | `"US"` | Search region code |
### Configuration Schema
| Field | Type | Required | Description |
|------------------------|----------|----------|--------------------------------|
| `googleApiKey` | `string` | No | Custom Google API key |
| `googleSearchEngineId` | `string` | No | Custom Search Engine ID |
### Output Schema
| Field | Type | Description |
|----------------|------------|------------------------------------------------|
| `results` | `array` | Array of search results |
| `totalResults` | `number` | Total number of results found (optional) |
| `searchTime` | `number` | Time taken for search in seconds (optional) |
| `query` | `string` | The search query that was executed |
#### Result Object Schema
| Field | Type | Description |
|--------------|----------|----------------------------------|
| `title` | `string` | Page title |
| `url` | `string` | Page URL |
| `snippet` | `string` | Page description snippet |
| `displayUrl` | `string` | Display URL (shortened format) |
## Basic Usage
### Simple Search
```yaml
- id: basic_search
type: search
input:
query: "workflow automation best practices"
maxResults: 5
```
### Localized Search
```yaml
- id: localized_search
type: search
input:
query: "restaurant recommendations"
maxResults: 10
language: "fr"
region: "FR"
safeSearch: "strict"
```
## Advanced Examples
```yaml
- id: primary_research
type: search
input:
query: "{{ research_topic }} 2024 trends"
maxResults: 5
- id: competitive_analysis
type: search
input:
query: "{{ company_name }} competitors analysis"
maxResults: 3
- id: compile_research
type: ai
input:
prompt: |
Based on this research data:
Primary: {{ primary_research.output.results }}
Competitive: {{ competitive_analysis.output.results }}
Create a comprehensive research summary.
```
Perfect for academic research, market analysis, and comprehensive topic investigation combining multiple search angles.
```yaml
- id: find_sources
type: search
input:
query: "{{ content_topic }} authoritative sources"
maxResults: 8
safeSearch: "strict"
- id: filter_quality_sources
type: ai
input:
prompt: |
From these search results:
{{ find_sources.output.results }}
Identify the 3 most authoritative and relevant sources.
Return as JSON array with reasoning.
- id: extract_content
type: crawler
input:
url: "{{ filtered_source.url }}"
```
Ideal for content creation workflows where quality sources are critical for credibility and accuracy.
```yaml
- id: market_trends
type: search
input:
query: "{{ industry }} market trends {{ current_year }}"
maxResults: 6
- id: competitor_news
type: search
input:
query: "{{ competitor_name }} news announcements"
maxResults: 4
- id: analyze_intelligence
type: ai
input:
prompt: |
Analyze this market intelligence:
Trends: {{ market_trends.output.results }}
Competitor: {{ competitor_news.output.results }}
Provide strategic insights and opportunities.
```
Essential for business intelligence, competitive analysis, and strategic planning based on current market data.
```yaml
- id: current_events
type: search
input:
query: "{{ topic }} latest news today"
maxResults: 3
- id: fact_check
type: search
input:
query: "{{ claim }} fact check verification"
maxResults: 5
safeSearch: "strict"
```
Critical for staying current with breaking news, verifying information, and ensuring content accuracy.
## Search Optimization
### Query Strategies
**Specific Queries:**
```yaml
input:
query: "TypeScript best practices 2024 enterprise applications"
```
**Quoted Phrases:**
```yaml
input:
query: '"API security" OR "REST API" vulnerability assessment'
```
**Site-Specific Search:**
```yaml
input:
query: "site:github.com TypeScript workflow automation"
```
**Time-Sensitive Queries:**
```yaml
input:
query: "{{ topic }} after:2024-01-01"
```
## Configuration Options
### Safe Search Settings
```yaml
# Strict filtering for family-friendly content
- id: safe_search
type: search
input:
query: "{{ user_query }}"
safeSearch: "strict"
```
## Error Handling
```yaml
- id: search_with_fallback
type: search
input:
query: "{{ primary_query }}"
configuration:
errorHandling: "continue"
- id: check_results
type: condition
input:
if: "{{ search_with_fallback.output.results.length > 0 }}"
then: ["process_results"]
else: ["try_alternative_search"]
- id: try_alternative_search
type: search
input:
query: "{{ fallback_query }}"
```
---