diff --git a/apps/docs/content/docs/en/mothership/index.mdx b/apps/docs/content/docs/en/mothership/index.mdx
new file mode 100644
index 00000000000..13474ffc795
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/index.mdx
@@ -0,0 +1,68 @@
+---
+title: Mothership
+description: Your AI command center. Build and manage your entire workspace in natural language.
+---
+
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Describe what you want and Mothership handles it. Build a workflow, run research, generate a presentation, query a table, schedule a recurring job, send a Slack message — Mothership knows your entire workspace and takes action directly.
+
+{/* TODO: Screenshot or GIF of the full Mothership home page — chat pane on the left with a conversation in progress, resource panel on the right with a workflow or file tab open. Hero shot for the page. */}
+
+## What You Can Do
+
+| Area | What Mothership can do |
+|------|-----------------------|
+| **[Workflows](/mothership/workflows)** | Build, edit, run, debug, deploy, and organize workflows |
+| **[Research](/mothership/research)** | Search the web, read pages, crawl sites, produce research reports |
+| **[Files & Documents](/mothership/files)** | Upload, create, edit, and generate documents, presentations, and images |
+| **[Tables](/mothership/tables)** | Create, query, update, and export workspace tables |
+| **[Automation & Configuration](/mothership/tasks)** | Schedule jobs, take immediate actions, connect integrations, manage tools |
+| **[Knowledge Bases](/mothership/knowledge)** | Create knowledge bases, add documents, and query content in plain language |
+
+## How It Works
+
+Mothership receives a snapshot of your entire workspace with every message — all workflows, tables, knowledge bases, files, credentials, jobs, and integrations. This is why you can refer to things by name without specifying IDs or paths:
+
+- "Run the invoice workflow"
+- "Add a row to the leads table"
+- "Deploy the summarizer as a chat"
+
+No configuration, no context-setting. Just describe what you want:
+
+- "Build a lead enrichment workflow that scores inbound signups and writes the results to the leads table"
+- "Research our top 5 competitors and save a battle card for each one"
+- "Schedule a daily job that checks for new high-fit prospects and posts them to #outbound in Slack"
+- "Create a workflow that takes a contract PDF, extracts the key terms, and emails a summary to legal"
+
+For complex tasks, Mothership delegates to specialized subagents automatically. You'll see them appear as collapsible sections in the chat while they work — building, researching, writing files, executing actions.
+
+{/* TODO: Screenshot of the Mothership chat showing a subagent section expanded mid-task — e.g., the Build or Research subagent actively working, with its collapsible header and steps visible in the thread. */}
+
+## Adding Context
+
+Bring any workspace object into the conversation via the **+** menu, `@`-mentions, or drag-and-drop from the sidebar. Mothership also opens resources automatically when it creates or modifies them.
+
+{/* TODO: Screenshot of the resource panel with multiple tabs open — a workflow tab, a table tab, and a file tab — showing different resource types side by side. */}
+
+| What to add | How it appears |
+|-------------|---------------|
+| **Workflow** | Interactive canvas in the resource panel |
+| **Table** | Full table editor in the resource panel |
+| **File** | File viewer with editor, split, and preview modes |
+| **Knowledge Base** | Knowledge base management UI |
+| **Folder** | Folder contents |
+| **Past task** | A previous Mothership conversation |
+
+## Layout
+
+Mothership has two panes. On the left: the chat thread, where your messages and Mothership's responses appear. On the right: the resource panel, where workflows, tables, files, and knowledge bases open as tabs. The panel is resizable; tabs are draggable and closeable.
+
+
diff --git a/apps/docs/content/docs/en/mothership/knowledge.mdx b/apps/docs/content/docs/en/mothership/knowledge.mdx
new file mode 100644
index 00000000000..1151f873d3f
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/knowledge.mdx
@@ -0,0 +1,84 @@
+---
+title: Knowledge Bases
+description: Create, populate, and query knowledge bases from Mothership.
+---
+
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Create a knowledge base, add documents to it, and query it in plain language — all through conversation. Knowledge bases you create in Mothership are immediately available to Agent blocks in any workflow.
+
+{/* TODO: Screenshot of Mothership with a knowledge base open in the resource panel — showing the knowledge base name, document list, and status of indexed documents. */}
+
+## Creating Knowledge Bases
+
+Describe the knowledge base and Mothership creates it:
+
+- "Create a knowledge base called 'Product Docs'"
+- "Set up a knowledge base for our support team — call it 'Support KB'"
+- "Create a competitive intelligence knowledge base"
+- "Create a knowledge base from our sales playbook and attach it to the outbound agent workflow"
+- "Set up a customer success knowledge base — I'll add our onboarding guides and past case studies to it"
+
+## Adding Documents
+
+Add documents by attaching files to your message, pasting text, or pointing Mothership at a URL:
+
+- "Add this PDF to the Product Docs knowledge base [attach file]"
+- "Add the following text to the Support KB as a new document: [paste content]"
+- "Fetch the page at [URL] and add it to the competitive intelligence knowledge base"
+- "Add these three uploaded case studies to the customer success knowledge base"
+
+Mothership processes and indexes each document automatically. Once indexed, the content is searchable by any Agent block that has the knowledge base attached.
+
+{/* TODO: Screenshot of Mothership confirming a document was added and indexed — showing the document name and its indexed status in the knowledge base. */}
+
+## Querying Knowledge Bases
+
+Ask Mothership a question and it searches the specified knowledge base to answer:
+
+- "What does the Product Docs knowledge base say about our refund policy?"
+- "Search the Support KB for anything related to SSO setup errors"
+- "What are the key differences between our Pro and Enterprise plans, based on the product docs?"
+- "Find everything in the competitive intelligence knowledge base about [competitor]'s pricing"
+
+## Connectors
+
+For knowledge bases that should stay current automatically, connectors sync content from external services on a schedule — no manual uploads needed. New content is added, changed content is re-processed, and deleted content is removed on every run.
+
+Connectors are configured through the knowledge base settings, not through Mothership chat. Once connected, all synced content is immediately searchable by Mothership and by any Agent block with the knowledge base attached.
+
+Sim ships with 30 built-in connectors, including Notion, Google Drive, Slack, GitHub, Confluence, HubSpot, Salesforce, Gmail, and more.
+
+Examples of what you can sync:
+
+- **Notion** — sync a workspace, a database, or a specific page tree
+- **Google Drive / Dropbox / OneDrive** — sync documents from cloud storage
+- **GitHub** — sync a repository's markdown and code files
+- **Slack** — sync channel history
+- **Confluence / Jira** — sync your internal wiki or issue tracker
+- **HubSpot / Salesforce** — sync CRM records into a searchable knowledge base
+
+See [Connectors](/knowledgebase/connectors) for setup steps, sync frequency options, and managing connector status.
+
+## Managing Knowledge Bases
+
+List, inspect, and clean up knowledge bases in plain language:
+
+- "What knowledge bases are in this workspace?"
+- "How many documents are in the Support KB?"
+- "Remove the outdated pricing doc from the Product Docs knowledge base"
+- "Delete the old-competitive-intel knowledge base"
+
+## Using Knowledge Bases in Workflows
+
+Knowledge bases created in Mothership are immediately available to Agent blocks in any workflow. Attach a knowledge base to an Agent block and it will use semantic search to retrieve relevant content at runtime.
+
+See [Knowledge Base](/knowledgebase) for full details on document processing settings, search configuration, and connector syncing.
+
+
diff --git a/apps/docs/content/docs/en/mothership/meta.json b/apps/docs/content/docs/en/mothership/meta.json
new file mode 100644
index 00000000000..767005e2f25
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Mothership",
+ "pages": ["index", "workflows", "research", "files", "tables", "tasks", "knowledge"]
+}
diff --git a/apps/docs/content/docs/en/mothership/research.mdx b/apps/docs/content/docs/en/mothership/research.mdx
new file mode 100644
index 00000000000..482ce32ad61
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/research.mdx
@@ -0,0 +1,43 @@
+---
+title: Research
+description: Ask Mothership to research anything — it searches, reads, and synthesizes from the web.
+---
+
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Ask Mothership to research anything and it figures out the best approach — searching the web, reading specific pages, crawling sites, looking up technical docs. Just describe what you want to know.
+
+{/* TODO: Screenshot of the Research subagent section in the Mothership chat — expanded, showing it working through a research task with the final report or answer appearing. Ideally with a file tab open in the resource panel showing the output. */}
+
+## Asking Questions
+
+Ask anything — about a company, a competitor, a market, a technical question, or a specific URL:
+
+- "What did Salesforce, HubSpot, and Gong each ship in the past 30 days? Summarize the key product updates."
+- "What's Acme Corp's tech stack, recent hires, and open engineering roles?"
+- "Find everything published about [competitor] in the past 90 days — press, product changes, job postings."
+- "What are the current rate limits on the Anthropic API?"
+- "Read [URL] and tell me what changed in this release"
+- "What does Stripe's API say about handling webhooks with idempotency keys?"
+- "Who are the main players in AI-powered revenue operations, and how do they differentiate?"
+
+Mothership returns an answer directly in the chat. For anything that needs a longer written output, ask it to save the result as a file.
+
+## Research Reports
+
+When you need a structured, saved document rather than a chat answer, ask Mothership to write it up. It searches, reads, and cross-references multiple sources until it has enough to produce a full report. The output is saved as a file in your workspace and opened in the resource panel.
+
+{/* TODO: Screenshot of a completed research report open in the resource panel as a file — showing a structured markdown document with sections, findings, and citations. */}
+
+- "Research the top 10 AI SDR tools — pricing, features, positioning, and what customers say. Save as a competitive analysis."
+- "Do a full market landscape for AI in healthcare diagnostics — major players, funding, use cases, and regulatory environment."
+- "Research how our top 5 competitors handle multi-tenant auth — pricing, architecture, and any known vulnerabilities. Write it up as a report."
+- "Find every public case study on AI agents in financial compliance from the past 2 years. Summarize the key outcomes and save as a markdown file."
+- "Build a battle card for [competitor] — their positioning, pricing, strengths, weaknesses, and how we win against them."
+
+
diff --git a/apps/docs/content/docs/en/mothership/tables.mdx b/apps/docs/content/docs/en/mothership/tables.mdx
new file mode 100644
index 00000000000..6c7ee1866c0
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/tables.mdx
@@ -0,0 +1,60 @@
+---
+title: Tables
+description: Create, query, and manage workspace tables from Mothership.
+---
+
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Create a table from a description or a CSV, query it in plain language, add or update rows, and export the results — all through conversation. Tables open in the resource panel when created or referenced.
+
+{/* TODO: Screenshot of Mothership with a table open in the resource panel — ideally after a query or row operation, showing the table with data populated. */}
+
+## Creating Tables
+
+Describe the schema and Mothership creates the table:
+
+- "Create a leads table with columns for name, email, company, status, and created date"
+- "Create a table that matches the structure of this CSV [attach file]"
+- "Set up an errors table with: id (text), message (text), workflow (text), timestamp (date), resolved (boolean)"
+- "Create a prospect table for outbound — company, domain, employee count, industry, ICP score, and last contacted date"
+- "Set up an enrichment results table to store output from the lead enrichment workflow: email, company, title, LinkedIn URL, fit score"
+
+## Querying Data
+
+Ask questions about table contents in plain language:
+
+- "How many rows in the leads table have status 'qualified'?"
+- "Show me all records from the past 7 days where score is above 0.8"
+- "What are the top 5 most common error messages in the failures table?"
+- "Are there any duplicate emails in the contacts table?"
+- "How many prospects have an ICP score above 0.75 and haven't been contacted in the past 30 days?"
+- "What's the conversion rate from 'contacted' to 'meeting booked' in the pipeline table this month?"
+
+Mothership translates the question into a structured query and returns the results.
+
+## Adding and Updating Rows
+
+Add individual rows, bulk-update based on a condition, or delete records — all in plain language:
+
+- "Add a row to the leads table: Acme Corp, jane@acme.com, status pending"
+- "Mark all rows in the queue table as processed where created_at is before today"
+- "Update the price column for all rows where tier is 'pro' to 49"
+- "Delete all rows in the test_events table"
+
+## Exporting
+
+Export a full table or a filtered subset as a CSV. The file is saved to your workspace and can be downloaded or referenced in other workflows:
+
+- "Export the leads table to a CSV"
+- "Export all rows where status is 'closed' and save as a file"
+
+## Using Tables in Workflows
+
+Tables created in Mothership are immediately available in workflows via the [Table tool](/tools/table). Reference a table by name — no additional configuration needed.
+
+
diff --git a/apps/docs/content/docs/en/mothership/tasks.mdx b/apps/docs/content/docs/en/mothership/tasks.mdx
new file mode 100644
index 00000000000..b729e0ec2cb
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/tasks.mdx
@@ -0,0 +1,130 @@
+---
+title: Automation & Configuration
+description: Schedule recurring jobs, take immediate actions, connect integrations, and configure your workspace.
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Mothership can act on your behalf right now — send a message, create an issue, call an API — or on a schedule, running a prompt automatically every hour, day, or week. It can also connect integrations, set environment variables, add MCP servers, and create custom tools.
+
+## Scheduled Jobs
+
+A scheduled job is a Mothership task that runs on a cron schedule. On each run, Mothership reads the current workspace state and executes the job's prompt as if you had just sent it.
+
+{/* TODO: Screenshot of Mothership chat confirming a scheduled job was created — showing the job name, schedule, and what it will do. If there's a jobs list view in the sidebar, include that as a second screenshot here. */}
+
+### Creating a Job
+
+Describe the recurring task and how often it should run:
+
+- "Every morning at 8am, check the leads table for new entries and post a summary to #sales in Slack"
+- "Every Monday at 9am, pull last week's workflow run counts and write a report to the workspace"
+- "Run the data sync workflow every 6 hours"
+- "On the first of every month, export the billing table to CSV and email it to finance@example.com"
+- "Every weekday at 7am, check for new funding announcements from companies in our ICP and post the top 5 to #market-intel in Slack"
+- "Every Sunday night, run the lead enrichment workflow on all prospects added in the past week and update their scores in the table"
+- "Daily at 6am, pull the previous day's workflow errors, summarize the top issues, and post to #eng-alerts"
+
+Mothership sets the cron expression and stores the job prompt. The first run happens at the next scheduled time.
+
+### Viewing Job Logs
+
+- "Show me the last 5 runs of the weekly report job"
+- "Did the sync job run successfully this morning?"
+- "What did the Monday digest job do last week?"
+
+Logs show run time, status (completed, failed), and a summary of what the agent did.
+
+### Managing Jobs
+
+- "Pause the morning summary job"
+- "Change the sync job to run every 3 hours instead of 6"
+- "Delete the onboarding digest job"
+- "What scheduled jobs are currently active?"
+
+## Taking Direct Action
+
+For requests that should happen right now — without building a workflow — just ask. Mothership acts immediately using the credentials connected to your workspace.
+
+{/* TODO: Screenshot of Mothership chat showing the "Taking action" subagent label active during a direct action — e.g., posting to Slack or sending an email. Shows the subagent inline in the chat thread. */}
+
+| Request | What happens |
+|---------|-------------|
+| "Send a Slack message to #eng that the deploy finished" | Posts to Slack immediately |
+| "Email the Q3 report to jane@example.com" | Sends via connected Gmail or Outlook |
+| "Create a GitHub issue: auth tokens not rotating on logout" | Opens an issue in the specified repo |
+| "Add a contact to HubSpot: Acme Corp, ceo@acme.com" | Creates the contact via HubSpot API |
+| "Call the webhook at [URL] with this JSON payload" | Makes the HTTP request |
+
+If an integration isn't connected, Mothership walks you through connecting it.
+
+## Connecting Integrations
+
+Mothership can connect new OAuth integrations and API credentials on demand:
+
+- "Connect my Google account"
+- "Add the Slack workspace for our team"
+- "Set up GitHub with my personal access token"
+
+{/* TODO: Screenshot of Mothership walking through connecting an integration — e.g., the Integration subagent active with an OAuth prompt or confirmation that a credential was connected. */}
+
+Once connected, credentials are available to Mothership for direct actions and scheduled jobs, and to all workflows in the workspace.
+
+
+ Connected credentials are shared across the workspace. Any workflow that uses the same integration will automatically use the same credential.
+
+
+See [Credentials](/credentials) for managing connected accounts.
+
+## Environment Variables
+
+Environment variables are workspace-scoped values — API keys, connection strings, and configuration that workflows reference via `{{ENV_VAR}}` syntax rather than hardcoding. Set them once and every workflow in the workspace can use them.
+
+- "Set the DATABASE_URL environment variable to 'postgres://...'"
+- "Add an OPENAI_API_KEY environment variable"
+- "Add a WEBHOOK_SECRET variable for the inbound webhook workflow"
+- "Update the SCORING_API_URL variable to point to the new endpoint"
+- "What environment variables are currently set?"
+
+{/* TODO: Screenshot of Mothership confirming an environment variable was set — e.g., a response message showing the variable name was saved. */}
+
+## MCP Servers
+
+MCP (Model Context Protocol) servers expose tools from external services that Agent blocks can call inside workflows. Connecting an MCP server makes all of its tools available in the workflow editor's tool picker — no custom integration code required.
+
+Mothership can add and manage MCP servers connected to your workspace:
+
+- "Add the Stripe MCP server using my API key"
+- "Remove the old analytics MCP server"
+- "What MCP servers are connected to this workspace?"
+- "Update the endpoint for the internal tools MCP server to [URL]"
+
+Once added, MCP tools appear in the workflow editor's tool picker and can be called from any Agent block.
+
+{/* TODO: Screenshot of Mothership confirming an MCP server was added or updated — showing the server name and its status. */}
+
+## Custom Tools
+
+Custom tools are single HTTP endpoints you define manually — useful for internal APIs and services that don't have a built-in Sim integration or an MCP server. Once created, they appear in the workflow editor alongside built-in tools and can be called from any Agent block.
+
+Mothership can build custom tools from a description:
+
+- "Create a custom tool that calls our internal scoring API at [URL] with a POST request and returns the score field"
+- "Build a tool for our Zendesk instance that creates a ticket with a subject and body"
+- "Create a tool that hits our internal enrichment API with a domain and returns company size, industry, and funding stage"
+- "Add a tool that calls our CRM's REST API to look up a contact by email and return their account owner"
+
+Custom tools appear in the workflow editor and are callable from any Agent block alongside built-in tools.
+
+{/* TODO: Screenshot of Mothership with the Custom Tool subagent active — showing it building a tool definition. */}
+
+
diff --git a/apps/docs/content/docs/en/mothership/workflows.mdx b/apps/docs/content/docs/en/mothership/workflows.mdx
new file mode 100644
index 00000000000..102c60e6fc7
--- /dev/null
+++ b/apps/docs/content/docs/en/mothership/workflows.mdx
@@ -0,0 +1,122 @@
+---
+title: Workflows
+description: Create, edit, run, debug, deploy, and organize workflows from Mothership.
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Image } from '@/components/ui/image'
+import { FAQ } from '@/components/ui/faq'
+
+Describe a workflow and Mothership builds it. Reference an existing one by name and it edits it. No canvas navigation required — every change appears in the resource panel in real time.
+
+{/* TODO: Screenshot of Mothership chat on the left with the Build subagent section visible, and a workflow open in the resource panel on the right. Shows the split-pane experience of building via natural language. */}
+
+## Creating Workflows
+
+Describe what the workflow should do — what triggers it, what it should do, which integrations it needs, and what it should return. Mothership builds it and opens the canvas in the resource panel.
+
+- "Build a workflow that takes a URL, scrapes the page, summarizes it with Claude, and sends the summary to a Slack channel"
+- "Create a workflow triggered by a webhook that extracts invoice data from a PDF and writes it to the billing table"
+- "Build an outbound workflow: take a company name and domain, enrich it with firmographic data, score the fit, and draft a personalized cold email"
+- "Create a lead enrichment workflow that takes an email from a form submission, looks up the company, and writes the enriched record to the leads table"
+- "Build a customer onboarding workflow: when a new user signs up, send a welcome email, create a HubSpot contact, and post a notification to #new-customers in Slack"
+
+## Editing Workflows
+
+{/* TODO: Screenshot of Mothership with the Edit subagent active and a change applied to an open workflow — e.g., a new block added or a configuration updated, visible on the canvas in the resource panel. */}
+
+Open an existing workflow with `@workflow-name` or the **+** menu, then describe the change. Mothership reads the current structure before modifying it — you don't need to explain what already exists.
+
+- "Add a condition that routes to a different branch if the confidence score is below 0.7"
+- "Replace the GPT-4o model with Claude Opus 4.6 on the summarizer block"
+- "Add a Slack notification at the end that includes the output"
+
+## Running Workflows
+
+{/* TODO: Screenshot or GIF of Mothership running a workflow — showing the chat streaming execution output on the left while the workflow canvas in the resource panel highlights blocks as they execute in real time. */}
+
+Ask Mothership to run a workflow and it handles the execution:
+
+- "Run the data sync workflow"
+- "Run the invoice processor with this PDF [attach file]"
+- "Test the lead scoring workflow with these inputs: name=Acme, score=0.4"
+
+Execution streams back to the chat. The workflow in the resource panel shows live block-by-block state.
+
+## Reading Logs
+
+Mothership can retrieve and interpret execution logs for any workflow in the workspace:
+
+- "Show me the last 10 runs of the pipeline workflow"
+- "Why did the invoice workflow fail yesterday?"
+- "What did the extractor block return in the most recent run?"
+
+Logs include per-block execution state, outputs, errors, and timing.
+
+## Debugging
+
+When a workflow fails, tell Mothership to debug it:
+
+- "Debug the last failed run of the content pipeline"
+- "The summarizer block is returning empty output — figure out why"
+
+Mothership reads the failure logs, identifies the cause, applies a fix, and can re-run to confirm.
+
+{/* TODO: Screenshot of the Debug subagent section in the Mothership chat showing it reading logs and applying a fix. */}
+
+## Deploying
+
+Mothership can deploy a workflow as any of the three deployment types:
+
+| Deployment type | What it creates |
+|----------------|----------------|
+| **API** | A REST endpoint at `https://sim.ai/api/workflows/{id}/execute` |
+| **Chat** | A hosted conversational interface with a shareable URL |
+| **MCP tool** | An MCP server that exposes the workflow as a tool |
+
+Ask: "Deploy the invoice workflow as an API and generate an API key."
+
+Mothership can also roll back: "Revert the billing workflow to the version from last Tuesday."
+
+See [API Deployment](/execution/api-deployment) and [Chat Deployment](/execution/chat) for full details on each deployment type.
+
+## Organizing Workflows
+
+Mothership can create and manage folders to keep your workspace organized.
+
+**Folders:**
+- "Create a folder called 'Data Pipelines'"
+- "Move the invoice workflow into the billing folder"
+- "Move the billing folder inside the finance folder"
+- "Delete the old-experiments folder"
+
+**Renaming and moving:**
+- "Rename the 'test_v2' workflow to 'lead-scorer'"
+- "Move the summarizer workflow to the research folder"
+
+{/* TODO: Screenshot showing Mothership confirming a folder or workflow organization action — e.g., a message confirming "Moved 'invoice-processor' into 'billing' folder" with the resource panel showing the folder open. */}
+
+## Workflow Variables
+
+Mothership can set global variables on a workflow — values accessible across all blocks in that workflow at runtime:
+
+- "Set the API_ENDPOINT variable on the sync workflow to 'https://api.example.com/v2'"
+- "Update the MAX_RETRIES variable on the pipeline workflow to 5"
+
+Variables set this way are available via `
` syntax inside any block in the workflow.
+
+## Deleting Workflows
+
+- "Delete the old_api_prototype workflow"
+- "Delete all workflows in the deprecated folder"
+
+
+ Workflow deletion is permanent. Deployed versions are also removed. There is no recycle bin.
+
+
+
diff --git a/apps/docs/content/docs/en/tools/custom-tools.mdx b/apps/docs/content/docs/en/tools/custom-tools.mdx
new file mode 100644
index 00000000000..6261af27a80
--- /dev/null
+++ b/apps/docs/content/docs/en/tools/custom-tools.mdx
@@ -0,0 +1,162 @@
+---
+title: Custom Tools
+description: Create your own tools with JavaScript code and use them in Agent blocks
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Step, Steps } from 'fumadocs-ui/components/steps'
+import { FAQ } from '@/components/ui/faq'
+
+Custom tools let you write your own JavaScript functions and make them available as callable tools in Agent blocks. This is useful when you need functionality that isn't covered by Sim's built-in integrations — for example, calling an internal API, performing a custom calculation, or transforming data in a specific way.
+
+## How Custom Tools Work
+
+A custom tool has two parts:
+
+1. **Schema** — A JSON definition describing the tool's name, description, and parameters (using the OpenAI function-calling format). This tells the AI agent what the tool does and what inputs it expects.
+2. **Code** — A JavaScript function body that runs when the agent calls the tool. Parameters defined in the schema are available as variables in your code.
+
+When an Agent block has access to a custom tool, the AI model decides when to call it based on the schema description and the conversation context — just like built-in tools.
+
+## Creating a Custom Tool
+
+
+
+
+### Open Custom Tools settings
+
+Navigate to **Settings → Custom Tools** in your workspace and click **Add**.
+
+
+
+
+### Define the schema
+
+In the **Schema** tab, define your tool using JSON in the OpenAI function-calling format:
+
+```json
+{
+ "type": "function",
+ "function": {
+ "name": "get_weather",
+ "description": "Get the current weather for a city",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "city": {
+ "type": "string",
+ "description": "The city name"
+ },
+ "units": {
+ "type": "string",
+ "enum": ["celsius", "fahrenheit"],
+ "description": "Temperature units"
+ }
+ },
+ "required": ["city"]
+ }
+ }
+}
+```
+
+
+ You can use the AI wand button to generate a schema from a natural language description of what the tool should do.
+
+
+
+
+
+### Write the code
+
+Switch to the **Code** tab and write the JavaScript function body. Parameters from your schema are available directly as variables:
+
+```javascript
+const response = await fetch(
+ `https://api.openweathermap.org/data/2.5/weather?q=${city}&units=${units === 'celsius' ? 'metric' : 'imperial'}&appid={{OPENWEATHER_API_KEY}}`
+);
+
+const data = await response.json();
+
+return {
+ temperature: data.main.temp,
+ description: data.weather[0].description,
+ humidity: data.main.humidity
+};
+```
+
+
+ You can also use the AI wand to generate code from a description. Environment variables are referenced with `{{KEY}}` syntax.
+
+
+
+
+
+### Save
+
+Click **Save** to create the tool. It's now available to use in any Agent block across your workspace.
+
+
+
+
+## Using Custom Tools in Workflows
+
+Once created, custom tools appear alongside built-in tools when configuring an Agent block:
+
+1. Open an Agent block
+2. Click **Add Tools**
+3. Find your custom tool in the tool list
+4. The agent will call the tool when it determines it's relevant to the task
+
+## Code Environment
+
+### Available Features
+
+- **Async/await** — Your code runs in an async context, so you can use `await` directly
+- **fetch()** — Make HTTP requests to external APIs
+- **Node.js built-ins** — Access to `crypto`, `Buffer`, and other standard modules
+- **Environment variables** — Use `{{KEY}}` syntax to inject secrets
+
+### Limitations
+
+- **No npm packages** — External libraries like `axios` or `lodash` are not available. Use built-in APIs instead
+- **Parameters by name** — Schema parameters are available directly as variables (e.g., `city`), not via a `params` object
+
+### Returning Results
+
+Return a value from your code to send it back to the agent:
+
+```javascript
+const result = await fetch(`https://api.example.com/data?q=${query}`);
+const data = await result.json();
+return data;
+```
+
+The returned value becomes the tool output that the agent sees and can use in its response.
+
+## Managing Custom Tools
+
+From **Settings → Custom Tools** you can:
+
+- **Search** tools by name, function name, or description
+- **Edit** any tool's schema or code
+- **Delete** tools that are no longer needed
+
+
+ Deleting a custom tool removes it from all Agent blocks that reference it. Make sure no active workflows depend on the tool before deleting.
+
+
+## Permissions
+
+| Action | Required Permission |
+|--------|-------------------|
+| View custom tools | **Read**, **Write**, or **Admin** |
+| Create or edit tools | **Write** or **Admin** |
+| Delete tools | **Write** or **Admin** |
+
+
diff --git a/apps/docs/content/docs/en/tools/gong.mdx b/apps/docs/content/docs/en/tools/gong.mdx
index 34ef1563d6e..954883120ad 100644
--- a/apps/docs/content/docs/en/tools/gong.mdx
+++ b/apps/docs/content/docs/en/tools/gong.mdx
@@ -409,7 +409,7 @@ Retrieve interaction statistics for users by date range from Gong. Only includes
| Parameter | Type | Description |
| --------- | ---- | ----------- |
-| `peopleInteractionStats` | array | Email address of the Gong user |
+| `peopleInteractionStats` | array | Interaction statistics per user. Applicable stat names: 'Longest Monologue', 'Longest Customer Story', 'Interactivity', 'Patience', 'Question Rate'. |
| ↳ `userId` | string | Gong's unique numeric identifier for the user |
| ↳ `userEmailAddress` | string | Email address of the Gong user |
| ↳ `personInteractionStats` | array | List of interaction stat measurements for this user |
@@ -656,7 +656,7 @@ Retrieve coaching metrics for a manager from Gong.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `requestId` | string | A Gong request reference ID for troubleshooting purposes |
-| `coachingData` | array | The manager user information |
+| `coachingData` | array | A list of coaching data entries, one per manager's team |
| ↳ `manager` | object | The manager user information |
| ↳ `id` | string | Gong unique numeric identifier for the user |
| ↳ `emailAddress` | string | Email address of the Gong user |
diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json
index d11a49bfd71..bdb407b4afc 100644
--- a/apps/docs/content/docs/en/tools/meta.json
+++ b/apps/docs/content/docs/en/tools/meta.json
@@ -30,6 +30,7 @@
"confluence",
"crowdstrike",
"cursor",
+ "custom-tools",
"dagster",
"databricks",
"datadog",
diff --git a/apps/docs/content/docs/en/tools/sharepoint.mdx b/apps/docs/content/docs/en/tools/sharepoint.mdx
index d348a0f9084..13027ea8261 100644
--- a/apps/docs/content/docs/en/tools/sharepoint.mdx
+++ b/apps/docs/content/docs/en/tools/sharepoint.mdx
@@ -87,7 +87,7 @@ Read a specific page from a SharePoint site
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
| `pages` | array | List of SharePoint pages |
-| ↳ `page` | object | The unique ID of the page |
+| ↳ `page` | object | page output from the tool |
| ↳ `id` | string | The unique ID of the page |
| ↳ `name` | string | The name of the page |
| ↳ `title` | string | The title of the page |
@@ -95,7 +95,7 @@ Read a specific page from a SharePoint site
| ↳ `pageLayout` | string | The layout type of the page |
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
-| ↳ `content` | object | Extracted text content from the page |
+| ↳ `content` | object | content output from the tool |
| ↳ `content` | string | Extracted text content from the page |
| ↳ `canvasLayout` | object | Raw SharePoint canvas layout structure |
| `content` | object | Content of the SharePoint page |
@@ -127,9 +127,9 @@ List details of all SharePoint sites
| ↳ `createdDateTime` | string | When the site was created |
| ↳ `lastModifiedDateTime` | string | When the site was last modified |
| ↳ `isPersonalSite` | boolean | Whether this is a personal site |
-| ↳ `root` | object | Server relative URL |
+| ↳ `root` | object | root output from the tool |
| ↳ `serverRelativeUrl` | string | Server relative URL |
-| ↳ `siteCollection` | object | Site collection hostname |
+| ↳ `siteCollection` | object | siteCollection output from the tool |
| ↳ `hostname` | string | Site collection hostname |
| `sites` | array | List of all accessible SharePoint sites |
| ↳ `id` | string | The unique ID of the site |
diff --git a/apps/docs/content/docs/en/tools/textract.mdx b/apps/docs/content/docs/en/tools/textract.mdx
index c654e281ff2..c6062a937c4 100644
--- a/apps/docs/content/docs/en/tools/textract.mdx
+++ b/apps/docs/content/docs/en/tools/textract.mdx
@@ -66,7 +66,7 @@ Integrate AWS Textract into your workflow to extract text, tables, forms, and ke
| ↳ `Confidence` | number | Confidence score \(0-100\) |
| ↳ `Page` | number | Page number |
| ↳ `Geometry` | object | Location and bounding box information |
-| ↳ `BoundingBox` | object | Height as ratio of document height |
+| ↳ `BoundingBox` | object | BoundingBox output from the tool |
| ↳ `Height` | number | Height as ratio of document height |
| ↳ `Left` | number | Left position as ratio of document width |
| ↳ `Top` | number | Top position as ratio of document height |
diff --git a/apps/docs/content/docs/en/tools/typeform.mdx b/apps/docs/content/docs/en/tools/typeform.mdx
index b8a7e97e527..d3e97f913c3 100644
--- a/apps/docs/content/docs/en/tools/typeform.mdx
+++ b/apps/docs/content/docs/en/tools/typeform.mdx
@@ -96,7 +96,7 @@ Retrieve insights and analytics for Typeform forms
| Parameter | Type | Description |
| --------- | ---- | ----------- |
-| `fields` | array | Number of users who dropped off at this field |
+| `fields` | array | Analytics data for individual form fields |
| ↳ `dropoffs` | number | Number of users who dropped off at this field |
| ↳ `id` | string | Unique field ID |
| ↳ `label` | string | Field label |
@@ -104,15 +104,15 @@ Retrieve insights and analytics for Typeform forms
| ↳ `title` | string | Field title/question |
| ↳ `type` | string | Field type \(e.g., short_text, multiple_choice\) |
| ↳ `views` | number | Number of times this field was viewed |
-| `form` | object | Average completion time for this platform |
-| ↳ `platforms` | array | Average completion time for this platform |
+| `form` | object | Form-level analytics and performance data |
+| ↳ `platforms` | array | Platform-specific analytics data |
| ↳ `average_time` | number | Average completion time for this platform |
| ↳ `completion_rate` | number | Completion rate for this platform |
| ↳ `platform` | string | Platform name \(e.g., desktop, mobile\) |
| ↳ `responses_count` | number | Number of responses from this platform |
| ↳ `total_visits` | number | Total visits from this platform |
| ↳ `unique_visits` | number | Unique visits from this platform |
-| ↳ `summary` | object | Overall average completion time |
+| ↳ `summary` | object | Overall form performance summary |
| ↳ `average_time` | number | Overall average completion time |
| ↳ `completion_rate` | number | Overall completion rate |
| ↳ `responses_count` | number | Total number of responses |
diff --git a/apps/docs/content/docs/en/triggers/airtable.mdx b/apps/docs/content/docs/en/triggers/airtable.mdx
new file mode 100644
index 00000000000..f053764c544
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/airtable.mdx
@@ -0,0 +1,60 @@
+---
+title: Airtable
+description: Available Airtable triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Airtable provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Airtable Webhook
+
+Trigger workflow from Airtable record changes like create, update, and delete events (requires Airtable credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires airtable credentials to access your account. |
+| `baseId` | string | Yes | The ID of the Airtable Base this webhook will monitor. |
+| `tableId` | string | Yes | The ID of the table within the Base that the webhook will monitor. |
+| `includeCellValues` | boolean | No | Enable to receive the complete record data in the payload, not just changes. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payloads` | array | The payloads of the Airtable changes |
+| ↳ `timestamp` | string | Timestamp of the change |
+| ↳ `baseTransactionNumber` | number | Transaction number |
+| `latestPayload` | object | The most recent payload from Airtable |
+| ↳ `timestamp` | string | ISO 8601 timestamp of the change |
+| ↳ `baseTransactionNumber` | number | Transaction number |
+| ↳ `payloadFormat` | string | Payload format version \(e.g., v0\) |
+| ↳ `actionMetadata` | object | Metadata about who made the change |
+| ↳ `source` | string | Source of the change \(e.g., client, publicApi\) |
+| ↳ `sourceMetadata` | object | Source metadata including user info |
+| ↳ `user` | object | User who made the change |
+| ↳ `id` | string | User ID |
+| ↳ `email` | string | User email |
+| ↳ `name` | string | User name |
+| ↳ `permissionLevel` | string | User permission level |
+| ↳ `changedTablesById` | object | Tables that were changed \(keyed by table ID\) |
+| ↳ `changedRecordsById` | object | Changed records keyed by record ID |
+| ↳ `current` | object | Current state of the record |
+| ↳ `cellValuesByFieldId` | object | Cell values keyed by field ID |
+| ↳ `createdRecordsById` | object | Created records by ID |
+| ↳ `destroyedRecordIds` | array | Array of destroyed record IDs |
+| `airtableChanges` | array | Changes made to the Airtable table |
+| ↳ `tableId` | string | Table ID |
+| ↳ `recordId` | string | Record ID |
+| ↳ `changeType` | string | Type of change \(created, changed, destroyed\) |
+| ↳ `cellValuesByFieldId` | object | Cell values by field ID |
+
diff --git a/apps/docs/content/docs/en/triggers/ashby.mdx b/apps/docs/content/docs/en/triggers/ashby.mdx
new file mode 100644
index 00000000000..aad15714728
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/ashby.mdx
@@ -0,0 +1,185 @@
+---
+title: Ashby
+description: Available Ashby triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Ashby provides 6 triggers for automating workflows based on events.
+
+## Triggers
+
+### Ashby Application Submitted
+
+Trigger workflow when a new application is submitted
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `application` | object | application output from the tool |
+| ↳ `id` | string | Application UUID |
+| ↳ `createdAt` | string | Application creation timestamp \(ISO 8601\) |
+| ↳ `updatedAt` | string | Application last update timestamp \(ISO 8601\) |
+| ↳ `status` | string | Application status \(Active, Hired, Archived, Lead\) |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | string | Candidate UUID |
+| ↳ `name` | string | Candidate name |
+| ↳ `currentInterviewStage` | object | currentInterviewStage output from the tool |
+| ↳ `id` | string | Current interview stage UUID |
+| ↳ `title` | string | Current interview stage title |
+| ↳ `job` | object | job output from the tool |
+| ↳ `id` | string | Job UUID |
+| ↳ `title` | string | Job title |
+
+
+---
+
+### Ashby Candidate Deleted
+
+Trigger workflow when a candidate is deleted
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `candidate` | object | candidate output from the tool |
+| ↳ `id` | string | Deleted candidate UUID |
+
+
+---
+
+### Ashby Candidate Hired
+
+Trigger workflow when a candidate is hired
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `application` | object | application output from the tool |
+| ↳ `id` | string | Application UUID |
+| ↳ `createdAt` | string | Application creation timestamp \(ISO 8601\) |
+| ↳ `updatedAt` | string | Application last update timestamp \(ISO 8601\) |
+| ↳ `status` | string | Application status \(Hired\) |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | string | Candidate UUID |
+| ↳ `name` | string | Candidate name |
+| ↳ `currentInterviewStage` | object | currentInterviewStage output from the tool |
+| ↳ `id` | string | Current interview stage UUID |
+| ↳ `title` | string | Current interview stage title |
+| ↳ `job` | object | job output from the tool |
+| ↳ `id` | string | Job UUID |
+| ↳ `title` | string | Job title |
+
+
+---
+
+### Ashby Candidate Stage Change
+
+Trigger workflow when a candidate changes interview stages
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `application` | object | application output from the tool |
+| ↳ `id` | string | Application UUID |
+| ↳ `createdAt` | string | Application creation timestamp \(ISO 8601\) |
+| ↳ `updatedAt` | string | Application last update timestamp \(ISO 8601\) |
+| ↳ `status` | string | Application status \(Active, Hired, Archived, Lead\) |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | string | Candidate UUID |
+| ↳ `name` | string | Candidate name |
+| ↳ `currentInterviewStage` | object | currentInterviewStage output from the tool |
+| ↳ `id` | string | Current interview stage UUID |
+| ↳ `title` | string | Current interview stage title |
+| ↳ `job` | object | job output from the tool |
+| ↳ `id` | string | Job UUID |
+| ↳ `title` | string | Job title |
+
+
+---
+
+### Ashby Job Created
+
+Trigger workflow when a new job is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `job` | object | job output from the tool |
+| ↳ `id` | string | Job UUID |
+| ↳ `title` | string | Job title |
+| ↳ `confidential` | boolean | Whether the job is confidential |
+| ↳ `status` | string | Job status \(Open, Closed, Draft, Archived\) |
+| ↳ `employmentType` | string | Employment type \(Full-time, Part-time, etc.\) |
+
+
+---
+
+### Ashby Offer Created
+
+Trigger workflow when a new offer is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | The webhook event type \(e.g., applicationSubmit, candidateHire\) |
+| `offer` | object | offer output from the tool |
+| ↳ `id` | string | Offer UUID |
+| ↳ `applicationId` | string | Associated application UUID |
+| ↳ `acceptanceStatus` | string | Offer acceptance status \(Accepted, Declined, Pending, Created, Cancelled, WaitingOnResponse\) |
+| ↳ `offerStatus` | string | Offer process status \(WaitingOnApprovalStart, WaitingOnOfferApproval, WaitingOnCandidateResponse, CandidateAccepted, CandidateRejected, OfferCancelled\) |
+| ↳ `decidedAt` | string | Offer decision timestamp \(ISO 8601\). Typically null at creation; populated after candidate responds. |
+| ↳ `latestVersion` | object | latestVersion output from the tool |
+| ↳ `id` | string | Latest offer version UUID |
+
diff --git a/apps/docs/content/docs/en/triggers/attio.mdx b/apps/docs/content/docs/en/triggers/attio.mdx
new file mode 100644
index 00000000000..7d7418d36b1
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/attio.mdx
@@ -0,0 +1,513 @@
+---
+title: Attio
+description: Available Attio triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Attio provides 22 triggers for automating workflows based on events.
+
+## Triggers
+
+### Attio Comment Created
+
+Trigger workflow when a new comment is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `threadId` | string | The thread ID |
+| `commentId` | string | The comment ID |
+| `objectId` | string | The object type ID |
+| `recordId` | string | The record ID |
+| `listId` | string | The list ID \(if comment is on a list entry\) |
+| `entryId` | string | The list entry ID \(if comment is on a list entry\) |
+
+
+---
+
+### Attio Comment Deleted
+
+Trigger workflow when a comment is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `threadId` | string | The thread ID |
+| `commentId` | string | The comment ID |
+| `objectId` | string | The object type ID |
+| `recordId` | string | The record ID |
+| `listId` | string | The list ID \(if comment is on a list entry\) |
+| `entryId` | string | The list entry ID \(if comment is on a list entry\) |
+
+
+---
+
+### Attio Comment Resolved
+
+Trigger workflow when a comment thread is resolved in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `threadId` | string | The thread ID |
+| `commentId` | string | The comment ID |
+| `objectId` | string | The object type ID |
+| `recordId` | string | The record ID |
+| `listId` | string | The list ID \(if comment is on a list entry\) |
+| `entryId` | string | The list entry ID \(if comment is on a list entry\) |
+
+
+---
+
+### Attio Comment Unresolved
+
+Trigger workflow when a comment thread is unresolved in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `threadId` | string | The thread ID |
+| `commentId` | string | The comment ID |
+| `objectId` | string | The object type ID |
+| `recordId` | string | The record ID |
+| `listId` | string | The list ID \(if comment is on a list entry\) |
+| `entryId` | string | The list entry ID \(if comment is on a list entry\) |
+
+
+---
+
+### Attio List Created
+
+Trigger workflow when a list is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+
+
+---
+
+### Attio List Deleted
+
+Trigger workflow when a list is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+
+
+---
+
+### Attio List Entry Created
+
+Trigger workflow when a new list entry is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+| `entryId` | string | The list entry ID |
+
+
+---
+
+### Attio List Entry Deleted
+
+Trigger workflow when a list entry is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+| `entryId` | string | The list entry ID |
+
+
+---
+
+### Attio List Entry Updated
+
+Trigger workflow when a list entry is updated in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+| `entryId` | string | The list entry ID |
+| `attributeId` | string | The ID of the attribute that was updated on the list entry |
+
+
+---
+
+### Attio List Updated
+
+Trigger workflow when a list is updated in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `listId` | string | The list ID |
+
+
+---
+
+### Attio Note Created
+
+Trigger workflow when a new note is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `noteId` | string | The note ID |
+| `parentObjectId` | string | The parent object type ID |
+| `parentRecordId` | string | The parent record ID |
+
+
+---
+
+### Attio Note Deleted
+
+Trigger workflow when a note is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `noteId` | string | The note ID |
+| `parentObjectId` | string | The parent object type ID |
+| `parentRecordId` | string | The parent record ID |
+
+
+---
+
+### Attio Note Updated
+
+Trigger workflow when a note is updated in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `noteId` | string | The note ID |
+| `parentObjectId` | string | The parent object type ID |
+| `parentRecordId` | string | The parent record ID |
+
+
+---
+
+### Attio Record Created
+
+Trigger workflow when a new record is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `objectId` | string | The object type ID \(e.g. people, companies\) |
+| `recordId` | string | The record ID |
+
+
+---
+
+### Attio Record Deleted
+
+Trigger workflow when a record is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `objectId` | string | The object type ID \(e.g. people, companies\) |
+| `recordId` | string | The record ID |
+
+
+---
+
+### Attio Record Merged
+
+Trigger workflow when two records are merged in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `objectId` | string | The object type ID of the surviving record |
+| `recordId` | string | The surviving record ID after merge |
+| `duplicateObjectId` | string | The object type ID of the merged-away record |
+| `duplicateRecordId` | string | The record ID that was merged away |
+
+
+---
+
+### Attio Record Updated
+
+Trigger workflow when a record is updated in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `objectId` | string | The object type ID \(e.g. people, companies\) |
+| `recordId` | string | The record ID |
+| `attributeId` | string | The ID of the attribute that was updated on the record |
+
+
+---
+
+### Attio Task Created
+
+Trigger workflow when a new task is created in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `taskId` | string | The task ID |
+
+
+---
+
+### Attio Task Deleted
+
+Trigger workflow when a task is deleted in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `taskId` | string | The task ID |
+
+
+---
+
+### Attio Task Updated
+
+Trigger workflow when a task is updated in Attio
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `taskId` | string | The task ID |
+
+
+---
+
+### Attio Webhook (All Events)
+
+Trigger workflow on any Attio webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `id` | json | The event ID object containing resource identifiers |
+| `parentObjectId` | string | The parent object type ID \(if applicable\) |
+| `parentRecordId` | string | The parent record ID \(if applicable\) |
+
+
+---
+
+### Attio Workspace Member Created
+
+Trigger workflow when a new member is added to the Attio workspace
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Attio Account |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g. record.created, note.created\) |
+| `workspaceId` | string | The workspace ID |
+| `workspaceMemberId` | string | The workspace member ID |
+
diff --git a/apps/docs/content/docs/en/triggers/calcom.mdx b/apps/docs/content/docs/en/triggers/calcom.mdx
new file mode 100644
index 00000000000..cdd8a94c1a5
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/calcom.mdx
@@ -0,0 +1,293 @@
+---
+title: Cal.com
+description: Available Cal.com triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Cal.com provides 9 triggers for automating workflows based on events.
+
+## Triggers
+
+### CalCom Booking Cancelled
+
+Trigger workflow when a booking is cancelled in Cal.com
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Booking start time \(ISO 8601\) |
+| ↳ `endTime` | string | Booking end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status |
+| ↳ `location` | string | Meeting location or URL |
+| ↳ `cancellationReason` | string | Reason for cancellation |
+| ↳ `responses` | json | Booking form responses |
+| ↳ `metadata` | json | Custom metadata attached to the booking |
+
+
+---
+
+### CalCom Booking Created
+
+Trigger workflow when a new booking is created in Cal.com
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Booking start time \(ISO 8601\) |
+| ↳ `endTime` | string | Booking end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status |
+| ↳ `location` | string | Meeting location or URL |
+| ↳ `responses` | json | Booking form responses \(dynamic - fields depend on your event type configuration\) |
+| ↳ `metadata` | json | Custom metadata attached to the booking \(dynamic - user-defined key-value pairs\) |
+| ↳ `videoCallData` | json | Video call details \(structure varies by provider\) |
+
+
+---
+
+### CalCom Booking Paid
+
+Trigger workflow when payment is completed for a paid booking
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(BOOKING_PAID\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Booking start time \(ISO 8601\) |
+| ↳ `endTime` | string | Booking end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status |
+| ↳ `location` | string | Meeting location or URL |
+| ↳ `payment` | object | Payment details |
+| ↳ `id` | string | Payment ID |
+| ↳ `amount` | number | Payment amount |
+| ↳ `currency` | string | Payment currency |
+| ↳ `success` | boolean | Whether payment succeeded |
+| ↳ `metadata` | json | Custom metadata attached to the booking |
+
+
+---
+
+### CalCom Booking Rejected
+
+Trigger workflow when a booking request is rejected by the host
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(BOOKING_REJECTED\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Requested start time \(ISO 8601\) |
+| ↳ `endTime` | string | Requested end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status \(rejected\) |
+| ↳ `rejectionReason` | string | Reason for rejection provided by host |
+| ↳ `metadata` | json | Custom metadata attached to the booking |
+
+
+---
+
+### CalCom Booking Requested
+
+Trigger workflow when a booking request is submitted (pending confirmation)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(BOOKING_REQUESTED\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Requested start time \(ISO 8601\) |
+| ↳ `endTime` | string | Requested end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status \(pending\) |
+| ↳ `location` | string | Meeting location or URL |
+| ↳ `responses` | json | Booking form responses |
+| ↳ `metadata` | json | Custom metadata attached to the booking |
+
+
+---
+
+### CalCom Booking Rescheduled
+
+Trigger workflow when a booking is rescheduled in Cal.com
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Booking title |
+| ↳ `description` | string | Booking description |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | New booking start time \(ISO 8601\) |
+| ↳ `endTime` | string | New booking end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `status` | string | Booking status |
+| ↳ `location` | string | Meeting location or URL |
+| ↳ `rescheduleId` | number | Previous booking ID |
+| ↳ `rescheduleUid` | string | Previous booking UID |
+| ↳ `rescheduleStartTime` | string | Original start time \(ISO 8601\) |
+| ↳ `rescheduleEndTime` | string | Original end time \(ISO 8601\) |
+| ↳ `responses` | json | Booking form responses |
+| ↳ `metadata` | json | Custom metadata attached to the booking |
+
+
+---
+
+### CalCom Meeting Ended
+
+Trigger workflow when a Cal.com meeting ends
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(MEETING_ENDED\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Meeting title |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Meeting start time \(ISO 8601\) |
+| ↳ `endTime` | string | Meeting end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `duration` | number | Actual meeting duration in minutes |
+| ↳ `videoCallData` | json | Video call details |
+
+
+---
+
+### CalCom Recording Ready
+
+Trigger workflow when a meeting recording is ready for download
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(RECORDING_READY\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | object | payload output from the tool |
+| ↳ `title` | string | Meeting title |
+| ↳ `eventTypeId` | number | Event type ID |
+| ↳ `startTime` | string | Meeting start time \(ISO 8601\) |
+| ↳ `endTime` | string | Meeting end time \(ISO 8601\) |
+| ↳ `uid` | string | Unique booking identifier |
+| ↳ `bookingId` | number | Numeric booking ID |
+| ↳ `recordingUrl` | string | URL to download the recording |
+| ↳ `transcription` | string | Meeting transcription text \(if available\) |
+
+
+---
+
+### CalCom Webhook (All Events)
+
+Trigger workflow on any Cal.com webhook event (configure event types in Cal.com)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Used to verify webhook requests via X-Cal-Signature-256 header. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `triggerEvent` | string | The webhook event type \(e.g., BOOKING_CREATED, MEETING_ENDED\) |
+| `createdAt` | string | When the webhook event was created \(ISO 8601\) |
+| `payload` | json | Complete webhook payload \(structure varies by event type\) |
+
diff --git a/apps/docs/content/docs/en/triggers/calendly.mdx b/apps/docs/content/docs/en/triggers/calendly.mdx
new file mode 100644
index 00000000000..7d29e5c916f
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/calendly.mdx
@@ -0,0 +1,181 @@
+---
+title: Calendly
+description: Available Calendly triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Calendly provides 4 triggers for automating workflows based on events.
+
+## Triggers
+
+### Calendly Invitee Canceled
+
+Trigger workflow when someone cancels a scheduled event on Calendly
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Personal Access Token |
+| `organization` | string | Yes | Organization URI for the webhook subscription. Get this from |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | Event type \(invitee.created or invitee.canceled\) |
+| `created_at` | string | Webhook event creation timestamp |
+| `created_by` | string | URI of the Calendly user who created this webhook |
+| `payload` | object | payload output from the tool |
+| ↳ `uri` | string | Invitee URI |
+| ↳ `email` | string | Invitee email address |
+| ↳ `name` | string | Invitee full name |
+| ↳ `first_name` | string | Invitee first name |
+| ↳ `last_name` | string | Invitee last name |
+| ↳ `status` | string | Invitee status \(active or canceled\) |
+| ↳ `timezone` | string | Invitee timezone |
+| ↳ `event` | string | Scheduled event URI |
+| ↳ `text_reminder_number` | string | Phone number for text reminders |
+| ↳ `rescheduled` | boolean | Whether this invitee rescheduled |
+| ↳ `old_invitee` | string | URI of the old invitee \(if rescheduled\) |
+| ↳ `new_invitee` | string | URI of the new invitee \(if rescheduled\) |
+| ↳ `cancel_url` | string | URL to cancel the event |
+| ↳ `reschedule_url` | string | URL to reschedule the event |
+| ↳ `created_at` | string | Invitee creation timestamp |
+| ↳ `updated_at` | string | Invitee last update timestamp |
+| ↳ `canceled` | boolean | Whether the event was canceled |
+| ↳ `cancellation` | object | Cancellation details |
+| ↳ `canceled_by` | string | Who canceled the event |
+| ↳ `reason` | string | Cancellation reason |
+| ↳ `payment` | object | Payment details |
+| ↳ `id` | string | Payment ID |
+| ↳ `provider` | string | Payment provider |
+| ↳ `amount` | number | Payment amount |
+| ↳ `currency` | string | Payment currency |
+| ↳ `terms` | string | Payment terms |
+| ↳ `successful` | boolean | Whether payment was successful |
+| ↳ `no_show` | object | No-show details |
+| ↳ `created_at` | string | No-show marked timestamp |
+| ↳ `reconfirmation` | object | Reconfirmation details |
+| ↳ `created_at` | string | Reconfirmation timestamp |
+| ↳ `confirmed_at` | string | Confirmation timestamp |
+
+
+---
+
+### Calendly Invitee Created
+
+Trigger workflow when someone schedules a new event on Calendly
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Personal Access Token |
+| `organization` | string | Yes | Organization URI for the webhook subscription. Get this from |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | Event type \(invitee.created or invitee.canceled\) |
+| `created_at` | string | Webhook event creation timestamp |
+| `created_by` | string | URI of the Calendly user who created this webhook |
+| `payload` | object | payload output from the tool |
+| ↳ `uri` | string | Invitee URI |
+| ↳ `email` | string | Invitee email address |
+| ↳ `name` | string | Invitee full name |
+| ↳ `first_name` | string | Invitee first name |
+| ↳ `last_name` | string | Invitee last name |
+| ↳ `status` | string | Invitee status \(active or canceled\) |
+| ↳ `timezone` | string | Invitee timezone |
+| ↳ `event` | string | Scheduled event URI |
+| ↳ `text_reminder_number` | string | Phone number for text reminders |
+| ↳ `rescheduled` | boolean | Whether this invitee rescheduled |
+| ↳ `old_invitee` | string | URI of the old invitee \(if rescheduled\) |
+| ↳ `new_invitee` | string | URI of the new invitee \(if rescheduled\) |
+| ↳ `cancel_url` | string | URL to cancel the event |
+| ↳ `reschedule_url` | string | URL to reschedule the event |
+| ↳ `created_at` | string | Invitee creation timestamp |
+| ↳ `updated_at` | string | Invitee last update timestamp |
+| ↳ `canceled` | boolean | Whether the event was canceled |
+| ↳ `cancellation` | object | Cancellation details |
+| ↳ `canceled_by` | string | Who canceled the event |
+| ↳ `reason` | string | Cancellation reason |
+| ↳ `payment` | object | Payment details |
+| ↳ `id` | string | Payment ID |
+| ↳ `provider` | string | Payment provider |
+| ↳ `amount` | number | Payment amount |
+| ↳ `currency` | string | Payment currency |
+| ↳ `terms` | string | Payment terms |
+| ↳ `successful` | boolean | Whether payment was successful |
+| ↳ `no_show` | object | No-show details |
+| ↳ `created_at` | string | No-show marked timestamp |
+| ↳ `reconfirmation` | object | Reconfirmation details |
+| ↳ `created_at` | string | Reconfirmation timestamp |
+| ↳ `confirmed_at` | string | Confirmation timestamp |
+
+
+---
+
+### Calendly Routing Form Submitted
+
+Trigger workflow when someone submits a Calendly routing form
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Personal Access Token |
+| `organization` | string | Yes | Organization URI for the webhook subscription. Get this from |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | Event type \(routing_form_submission.created\) |
+| `created_at` | string | Webhook event creation timestamp |
+| `created_by` | string | URI of the Calendly user who created this webhook |
+| `payload` | object | payload output from the tool |
+| ↳ `uri` | string | Routing form submission URI |
+| ↳ `routing_form` | string | Routing form URI |
+| ↳ `submitter` | object | Submitter details |
+| ↳ `uri` | string | Submitter URI |
+| ↳ `email` | string | Submitter email address |
+| ↳ `name` | string | Submitter full name |
+| ↳ `submitter_type` | string | Type of submitter |
+| ↳ `result` | object | Routing result details |
+| ↳ `type` | string | Result type \(event_type, custom_message, or external_url\) |
+| ↳ `value` | string | Result value \(event type URI, message, or URL\) |
+| ↳ `created_at` | string | Submission creation timestamp |
+| ↳ `updated_at` | string | Submission last update timestamp |
+
+
+---
+
+### Calendly Webhook
+
+Trigger workflow from any Calendly webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Personal Access Token |
+| `organization` | string | Yes | Organization URI for the webhook subscription. Get this from |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | Event type \(invitee.created, invitee.canceled, or routing_form_submission.created\) |
+| `created_at` | string | Webhook event creation timestamp |
+| `created_by` | string | URI of the Calendly user who created this webhook |
+| `payload` | object | Complete event payload \(structure varies by event type\) |
+
diff --git a/apps/docs/content/docs/en/triggers/circleback.mdx b/apps/docs/content/docs/en/triggers/circleback.mdx
new file mode 100644
index 00000000000..28e389317ea
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/circleback.mdx
@@ -0,0 +1,163 @@
+---
+title: Circleback
+description: Available Circleback triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Circleback provides 3 triggers for automating workflows based on events.
+
+## Triggers
+
+### Circleback Meeting Completed
+
+Trigger workflow when a meeting is processed and ready in Circleback
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from Circleback using HMAC-SHA256. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | number | Circleback meeting ID |
+| `name` | string | Meeting title/name |
+| `url` | string | URL of the virtual meeting \(Zoom, Google Meet, Teams, etc.\) |
+| `createdAt` | string | ISO8601 timestamp when meeting was created |
+| `duration` | number | Meeting duration in seconds |
+| `recordingUrl` | string | Recording URL \(valid for 24 hours, if enabled\) |
+| `tags` | array | Array of tag strings |
+| `icalUid` | string | Calendar event identifier |
+| `attendees` | array | Array of attendee objects with name and email |
+| ↳ `name` | string | Attendee name |
+| ↳ `email` | string | Attendee email address |
+| `notes` | string | Meeting notes in Markdown format |
+| `actionItems` | array | Array of action item objects |
+| ↳ `id` | number | Action item ID |
+| ↳ `title` | string | Action item title |
+| ↳ `description` | string | Action item description |
+| ↳ `assignee` | object | Person assigned to the action item \(or null\) |
+| ↳ `name` | string | Assignee name |
+| ↳ `email` | string | Assignee email |
+| ↳ `status` | string | Status: PENDING or DONE |
+| `transcript` | array | Array of transcript segments |
+| ↳ `speaker` | string | Speaker name |
+| ↳ `text` | string | Transcript text |
+| ↳ `timestamp` | number | Timestamp in seconds |
+| `insights` | object | User-created insights keyed by insight name |
+| `meeting` | object | Full meeting payload object |
+| ↳ `id` | number | Meeting ID |
+| ↳ `name` | string | Meeting name |
+| ↳ `url` | string | Meeting URL |
+| ↳ `duration` | number | Duration in seconds |
+| ↳ `createdAt` | string | Creation timestamp |
+| ↳ `recordingUrl` | string | Recording URL |
+
+
+---
+
+### Circleback Meeting Notes Ready
+
+Trigger workflow when meeting notes and action items are ready
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from Circleback using HMAC-SHA256. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | number | Circleback meeting ID |
+| `name` | string | Meeting title/name |
+| `url` | string | URL of the virtual meeting \(Zoom, Google Meet, Teams, etc.\) |
+| `createdAt` | string | ISO8601 timestamp when meeting was created |
+| `duration` | number | Meeting duration in seconds |
+| `recordingUrl` | string | Recording URL \(valid for 24 hours, if enabled\) |
+| `tags` | array | Array of tag strings |
+| `icalUid` | string | Calendar event identifier |
+| `attendees` | array | Array of attendee objects with name and email |
+| ↳ `name` | string | Attendee name |
+| ↳ `email` | string | Attendee email address |
+| `notes` | string | Meeting notes in Markdown format |
+| `actionItems` | array | Array of action item objects |
+| ↳ `id` | number | Action item ID |
+| ↳ `title` | string | Action item title |
+| ↳ `description` | string | Action item description |
+| ↳ `assignee` | object | Person assigned to the action item \(or null\) |
+| ↳ `name` | string | Assignee name |
+| ↳ `email` | string | Assignee email |
+| ↳ `status` | string | Status: PENDING or DONE |
+| `transcript` | array | Array of transcript segments |
+| ↳ `speaker` | string | Speaker name |
+| ↳ `text` | string | Transcript text |
+| ↳ `timestamp` | number | Timestamp in seconds |
+| `insights` | object | User-created insights keyed by insight name |
+| `meeting` | object | Full meeting payload object |
+| ↳ `id` | number | Meeting ID |
+| ↳ `name` | string | Meeting name |
+| ↳ `url` | string | Meeting URL |
+| ↳ `duration` | number | Duration in seconds |
+| ↳ `createdAt` | string | Creation timestamp |
+| ↳ `recordingUrl` | string | Recording URL |
+
+
+---
+
+### Circleback Webhook
+
+Generic webhook trigger for all Circleback events
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from Circleback using HMAC-SHA256. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | number | Circleback meeting ID |
+| `name` | string | Meeting title/name |
+| `url` | string | URL of the virtual meeting \(Zoom, Google Meet, Teams, etc.\) |
+| `createdAt` | string | ISO8601 timestamp when meeting was created |
+| `duration` | number | Meeting duration in seconds |
+| `recordingUrl` | string | Recording URL \(valid for 24 hours, if enabled\) |
+| `tags` | array | Array of tag strings |
+| `icalUid` | string | Calendar event identifier |
+| `attendees` | array | Array of attendee objects with name and email |
+| ↳ `name` | string | Attendee name |
+| ↳ `email` | string | Attendee email address |
+| `notes` | string | Meeting notes in Markdown format |
+| `actionItems` | array | Array of action item objects |
+| ↳ `id` | number | Action item ID |
+| ↳ `title` | string | Action item title |
+| ↳ `description` | string | Action item description |
+| ↳ `assignee` | object | Person assigned to the action item \(or null\) |
+| ↳ `name` | string | Assignee name |
+| ↳ `email` | string | Assignee email |
+| ↳ `status` | string | Status: PENDING or DONE |
+| `transcript` | array | Array of transcript segments |
+| ↳ `speaker` | string | Speaker name |
+| ↳ `text` | string | Transcript text |
+| ↳ `timestamp` | number | Timestamp in seconds |
+| `insights` | object | User-created insights keyed by insight name |
+| `meeting` | object | Full meeting payload object |
+| ↳ `id` | number | Meeting ID |
+| ↳ `name` | string | Meeting name |
+| ↳ `url` | string | Meeting URL |
+| ↳ `duration` | number | Duration in seconds |
+| ↳ `createdAt` | string | Creation timestamp |
+| ↳ `recordingUrl` | string | Recording URL |
+
diff --git a/apps/docs/content/docs/en/triggers/confluence.mdx b/apps/docs/content/docs/en/triggers/confluence.mdx
new file mode 100644
index 00000000000..e0e9420af8b
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/confluence.mdx
@@ -0,0 +1,476 @@
+---
+title: Confluence
+description: Available Confluence triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Confluence provides 16 triggers for automating workflows based on events.
+
+## Triggers
+
+### Confluence Attachment Created
+
+Trigger workflow when an attachment is uploaded in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+| `confluenceEmail` | string | No | Your Atlassian account email. Required together with API token to download attachment files. |
+| `confluenceApiToken` | string | No | API token from https://id.atlassian.com/manage-profile/security/api-tokens. Required to download attachment file content. |
+| `includeFileContent` | boolean | No | Download and include actual file content from attachments. Requires email, API token, and domain. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `id` | number | Content ID |
+| `title` | string | Content title |
+| `contentType` | string | Content type \(page, blogpost, comment, attachment\) |
+| `version` | number | Version number |
+| `spaceKey` | string | Space key the content belongs to |
+| `creatorAccountId` | string | Account ID of the creator |
+| `lastModifierAccountId` | string | Account ID of the last modifier |
+| `self` | string | URL link to the content |
+| `creationDate` | number | Creation timestamp \(Unix epoch milliseconds\) |
+| `modificationDate` | number | Last modification timestamp \(Unix epoch milliseconds\) |
+| `attachment` | object | attachment output from the tool |
+| ↳ `mediaType` | string | MIME type of the attachment |
+| ↳ `fileSize` | number | File size in bytes |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | number | Container page/blog ID |
+| ↳ `title` | string | Container page/blog title |
+| ↳ `contentType` | string | Container content type |
+| `files` | file[] | Attachment file content downloaded from Confluence \(if includeFileContent is enabled with credentials\) |
+
+
+---
+
+### Confluence Attachment Removed
+
+Trigger workflow when an attachment is removed in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+| `confluenceEmail` | string | No | Your Atlassian account email. Required together with API token to download attachment files. |
+| `confluenceApiToken` | string | No | API token from https://id.atlassian.com/manage-profile/security/api-tokens. Required to download attachment file content. |
+| `includeFileContent` | boolean | No | Download and include actual file content from attachments. Requires email, API token, and domain. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `id` | number | Content ID |
+| `title` | string | Content title |
+| `contentType` | string | Content type \(page, blogpost, comment, attachment\) |
+| `version` | number | Version number |
+| `spaceKey` | string | Space key the content belongs to |
+| `creatorAccountId` | string | Account ID of the creator |
+| `lastModifierAccountId` | string | Account ID of the last modifier |
+| `self` | string | URL link to the content |
+| `creationDate` | number | Creation timestamp \(Unix epoch milliseconds\) |
+| `modificationDate` | number | Last modification timestamp \(Unix epoch milliseconds\) |
+| `attachment` | object | attachment output from the tool |
+| ↳ `mediaType` | string | MIME type of the attachment |
+| ↳ `fileSize` | number | File size in bytes |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | number | Container page/blog ID |
+| ↳ `title` | string | Container page/blog title |
+| ↳ `contentType` | string | Container content type |
+| `files` | file[] | Attachment file content downloaded from Confluence \(if includeFileContent is enabled with credentials\) |
+
+
+---
+
+### Confluence Blog Post Created
+
+Trigger workflow when a blog post is created in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Blog Post Removed
+
+Trigger workflow when a blog post is removed in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Blog Post Updated
+
+Trigger workflow when a blog post is updated in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Comment Created
+
+Trigger workflow when a comment is created in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `id` | number | Content ID |
+| `title` | string | Content title |
+| `contentType` | string | Content type \(page, blogpost, comment, attachment\) |
+| `version` | number | Version number |
+| `spaceKey` | string | Space key the content belongs to |
+| `creatorAccountId` | string | Account ID of the creator |
+| `lastModifierAccountId` | string | Account ID of the last modifier |
+| `self` | string | URL link to the content |
+| `creationDate` | number | Creation timestamp \(Unix epoch milliseconds\) |
+| `modificationDate` | number | Last modification timestamp \(Unix epoch milliseconds\) |
+| `comment` | object | comment output from the tool |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | number | Parent page/blog ID |
+| ↳ `title` | string | Parent page/blog title |
+| ↳ `contentType` | string | Parent content type \(page or blogpost\) |
+| ↳ `spaceKey` | string | Space key of the parent |
+| ↳ `self` | string | URL link to the parent content |
+
+
+---
+
+### Confluence Comment Removed
+
+Trigger workflow when a comment is removed in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `id` | number | Content ID |
+| `title` | string | Content title |
+| `contentType` | string | Content type \(page, blogpost, comment, attachment\) |
+| `version` | number | Version number |
+| `spaceKey` | string | Space key the content belongs to |
+| `creatorAccountId` | string | Account ID of the creator |
+| `lastModifierAccountId` | string | Account ID of the last modifier |
+| `self` | string | URL link to the content |
+| `creationDate` | number | Creation timestamp \(Unix epoch milliseconds\) |
+| `modificationDate` | number | Last modification timestamp \(Unix epoch milliseconds\) |
+| `comment` | object | comment output from the tool |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | number | Parent page/blog ID |
+| ↳ `title` | string | Parent page/blog title |
+| ↳ `contentType` | string | Parent content type \(page or blogpost\) |
+| ↳ `spaceKey` | string | Space key of the parent |
+| ↳ `self` | string | URL link to the parent content |
+
+
+---
+
+### Confluence Label Added
+
+Trigger workflow when a label is added to content in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `label` | object | label output from the tool |
+| ↳ `name` | string | Label name |
+| ↳ `id` | string | Label ID |
+| ↳ `prefix` | string | Label prefix \(global, my, team\) |
+| `content` | object | content output from the tool |
+| ↳ `id` | number | Content ID the label was added to or removed from |
+| ↳ `title` | string | Content title |
+| ↳ `contentType` | string | Content type \(page, blogpost\) |
+
+
+---
+
+### Confluence Label Removed
+
+Trigger workflow when a label is removed from content in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `label` | object | label output from the tool |
+| ↳ `name` | string | Label name |
+| ↳ `id` | string | Label ID |
+| ↳ `prefix` | string | Label prefix \(global, my, team\) |
+| `content` | object | content output from the tool |
+| ↳ `id` | number | Content ID the label was added to or removed from |
+| ↳ `title` | string | Content title |
+| ↳ `contentType` | string | Content type \(page, blogpost\) |
+
+
+---
+
+### Confluence Page Created
+
+Trigger workflow when a new page is created in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Page Moved
+
+Trigger workflow when a page is moved in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Page Removed
+
+Trigger workflow when a page is removed or trashed in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Page Updated
+
+Trigger workflow when a page is updated in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+
+
+---
+
+### Confluence Space Created
+
+Trigger workflow when a new space is created in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `space` | object | space output from the tool |
+| ↳ `key` | string | Space key |
+| ↳ `name` | string | Space name |
+| ↳ `self` | string | URL link to the space |
+
+
+---
+
+### Confluence Space Updated
+
+Trigger workflow when a space is updated in Confluence
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `space` | object | space output from the tool |
+| ↳ `key` | string | Space key |
+| ↳ `name` | string | Space name |
+| ↳ `self` | string | URL link to the space |
+
+
+---
+
+### Confluence Webhook (All Events)
+
+Trigger workflow on any Confluence webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Confluence using HMAC signature |
+| `confluenceDomain` | string | No | Your Confluence Cloud domain |
+| `confluenceEmail` | string | No | Your Atlassian account email. Required together with API token to download attachment files. |
+| `confluenceApiToken` | string | No | API token from https://id.atlassian.com/manage-profile/security/api-tokens. Required to download attachment file content. |
+| `includeFileContent` | boolean | No | Download and include actual file content from attachments. Requires email, API token, and domain. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `timestamp` | number | Timestamp of the webhook event \(Unix epoch milliseconds\) |
+| `userAccountId` | string | Account ID of the user who triggered the event |
+| `accountType` | string | Account type \(e.g., customer\) |
+| `page` | json | Page object \(present in page events\) |
+| `comment` | json | Comment object \(present in comment events\) |
+| `blog` | json | Blog post object \(present in blog events\) |
+| `attachment` | json | Attachment object \(present in attachment events\) |
+| `space` | json | Space object \(present in space events\) |
+| `label` | json | Label object \(present in label events\) |
+| `content` | json | Content object \(present in label events\) |
+| `files` | file[] | Attachment file content \(present in attachment events when includeFileContent is enabled\) |
+
diff --git a/apps/docs/content/docs/en/triggers/fathom.mdx b/apps/docs/content/docs/en/triggers/fathom.mdx
new file mode 100644
index 00000000000..9c4a173aca2
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/fathom.mdx
@@ -0,0 +1,95 @@
+---
+title: Fathom
+description: Available Fathom triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Fathom provides 2 triggers for automating workflows based on events.
+
+## Triggers
+
+### Fathom New Meeting Content
+
+Trigger workflow when new meeting content is ready in Fathom
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Fathom. |
+| `triggeredFor` | string | No | Which recording types should trigger this webhook. |
+| `includeSummary` | boolean | No | Include the meeting summary in the webhook payload. |
+| `includeTranscript` | boolean | No | Include the full transcript in the webhook payload. |
+| `includeActionItems` | boolean | No | Include action items extracted from the meeting. |
+| `includeCrmMatches` | boolean | No | Include matched CRM contacts, companies, and deals from your linked CRM. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `title` | string | Meeting title |
+| `meeting_title` | string | Calendar event title |
+| `recording_id` | number | Unique recording ID |
+| `url` | string | URL to view the meeting in Fathom |
+| `share_url` | string | Shareable URL for the meeting |
+| `created_at` | string | ISO 8601 creation timestamp |
+| `scheduled_start_time` | string | Scheduled start time |
+| `scheduled_end_time` | string | Scheduled end time |
+| `recording_start_time` | string | Recording start time |
+| `recording_end_time` | string | Recording end time |
+| `transcript_language` | string | Language of the transcript |
+| `calendar_invitees_domains_type` | string | Domain type: only_internal or one_or_more_external |
+| `recorded_by` | object | Recorder details |
+| `calendar_invitees` | array | Array of calendar invitees with name and email |
+| `default_summary` | object | Meeting summary |
+| `transcript` | array | Array of transcript entries with speaker, text, and timestamp |
+| `action_items` | array | Array of action items extracted from the meeting |
+| `crm_matches` | json | Matched CRM contacts, companies, and deals from linked CRM |
+
+
+---
+
+### Fathom Webhook
+
+Generic webhook trigger for all Fathom events
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Fathom. |
+| `triggeredFor` | string | No | Which recording types should trigger this webhook. |
+| `includeSummary` | boolean | No | Include the meeting summary in the webhook payload. |
+| `includeTranscript` | boolean | No | Include the full transcript in the webhook payload. |
+| `includeActionItems` | boolean | No | Include action items extracted from the meeting. |
+| `includeCrmMatches` | boolean | No | Include matched CRM contacts, companies, and deals from your linked CRM. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `title` | string | Meeting title |
+| `meeting_title` | string | Calendar event title |
+| `recording_id` | number | Unique recording ID |
+| `url` | string | URL to view the meeting in Fathom |
+| `share_url` | string | Shareable URL for the meeting |
+| `created_at` | string | ISO 8601 creation timestamp |
+| `scheduled_start_time` | string | Scheduled start time |
+| `scheduled_end_time` | string | Scheduled end time |
+| `recording_start_time` | string | Recording start time |
+| `recording_end_time` | string | Recording end time |
+| `transcript_language` | string | Language of the transcript |
+| `calendar_invitees_domains_type` | string | Domain type: only_internal or one_or_more_external |
+| `recorded_by` | object | Recorder details |
+| `calendar_invitees` | array | Array of calendar invitees with name and email |
+| `default_summary` | object | Meeting summary |
+| `transcript` | array | Array of transcript entries with speaker, text, and timestamp |
+| `action_items` | array | Array of action items extracted from the meeting |
+| `crm_matches` | json | Matched CRM contacts, companies, and deals from linked CRM |
+
diff --git a/apps/docs/content/docs/en/triggers/fireflies.mdx b/apps/docs/content/docs/en/triggers/fireflies.mdx
new file mode 100644
index 00000000000..563f6608509
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/fireflies.mdx
@@ -0,0 +1,34 @@
+---
+title: Fireflies
+description: Available Fireflies triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Fireflies provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Fireflies Transcription Complete
+
+Trigger workflow when a Fireflies meeting transcription is complete
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Secret key for HMAC signature verification \(set in Fireflies dashboard\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `meetingId` | string | The ID of the transcribed meeting |
+| `eventType` | string | The type of event \(Transcription completed\) |
+| `clientReferenceId` | string | Custom reference ID if set during upload |
+
diff --git a/apps/docs/content/docs/en/triggers/github.mdx b/apps/docs/content/docs/en/triggers/github.mdx
new file mode 100644
index 00000000000..26d4f8ace44
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/github.mdx
@@ -0,0 +1,1186 @@
+---
+title: GitHub
+description: Available GitHub triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+GitHub provides 12 triggers for automating workflows based on events.
+
+## Triggers
+
+### GitHub Actions Workflow Run
+
+Trigger workflow when a GitHub Actions workflow run is requested, in progress, or completed
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., workflow_run\) |
+| `action` | string | Action performed \(requested, in_progress, completed\) |
+| `workflow_run` | object | workflow_run output from the tool |
+| ↳ `id` | number | Workflow run ID |
+| ↳ `node_id` | string | Workflow run node ID |
+| ↳ `name` | string | Workflow name |
+| ↳ `workflow_id` | number | Workflow ID |
+| ↳ `run_number` | number | Run number for this workflow |
+| ↳ `run_attempt` | number | Attempt number for this run |
+| ↳ `event` | string | Event that triggered the workflow \(push, pull_request, etc.\) |
+| ↳ `status` | string | Current status \(queued, in_progress, completed\) |
+| ↳ `conclusion` | string | Conclusion \(success, failure, cancelled, skipped, timed_out, action_required\) |
+| ↳ `head_branch` | string | Branch name |
+| ↳ `head_sha` | string | Commit SHA that triggered the workflow |
+| ↳ `path` | string | Path to the workflow file |
+| ↳ `display_title` | string | Display title for the run |
+| ↳ `run_started_at` | string | Timestamp when the run started |
+| ↳ `created_at` | string | Workflow run creation timestamp |
+| ↳ `updated_at` | string | Workflow run last update timestamp |
+| ↳ `html_url` | string | Workflow run HTML URL |
+| ↳ `check_suite_id` | number | Associated check suite ID |
+| ↳ `check_suite_node_id` | string | Associated check suite node ID |
+| ↳ `url` | string | Workflow run API URL |
+| ↳ `actor` | object | actor output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `triggering_actor` | object | triggering_actor output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name |
+| ↳ `private` | boolean | Whether repository is private |
+| ↳ `head_repository` | object | head_repository output from the tool |
+| ↳ `id` | number | Head repository ID |
+| ↳ `node_id` | string | Head repository node ID |
+| ↳ `name` | string | Head repository name |
+| ↳ `full_name` | string | Head repository full name |
+| ↳ `private` | boolean | Whether repository is private |
+| ↳ `head_commit` | object | head_commit output from the tool |
+| ↳ `id` | string | Commit SHA |
+| ↳ `tree_id` | string | Tree ID |
+| ↳ `message` | string | Commit message |
+| ↳ `timestamp` | string | Commit timestamp |
+| ↳ `author` | object | author output from the tool |
+| ↳ `name` | string | Author name |
+| ↳ `email` | string | Author email |
+| ↳ `committer` | object | committer output from the tool |
+| ↳ `name` | string | Committer name |
+| ↳ `email` | string | Committer email |
+| ↳ `pull_requests` | array | Array of associated pull requests |
+| ↳ `referenced_workflows` | array | Array of referenced workflow runs |
+| `workflow` | object | workflow output from the tool |
+| ↳ `id` | number | Workflow ID |
+| ↳ `node_id` | string | Workflow node ID |
+| ↳ `name` | string | Workflow name |
+| ↳ `path` | string | Path to workflow file |
+| ↳ `state` | string | Workflow state \(active, deleted, disabled_fork, etc.\) |
+| ↳ `created_at` | string | Workflow creation timestamp |
+| ↳ `updated_at` | string | Workflow last update timestamp |
+| ↳ `url` | string | Workflow API URL |
+| ↳ `html_url` | string | Workflow HTML URL |
+| ↳ `badge_url` | string | Workflow badge URL |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub Issue Closed
+
+Trigger workflow when an issue is closed in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., issues, pull_request, push\) |
+| `action` | string | Action performed \(opened, closed, reopened, edited, etc.\) |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | number | Issue ID |
+| ↳ `node_id` | string | Issue node ID |
+| ↳ `number` | number | Issue number |
+| ↳ `title` | string | Issue title |
+| ↳ `body` | string | Issue body/description |
+| ↳ `state` | string | Issue state \(open, closed\) |
+| ↳ `state_reason` | string | Reason for state \(completed, not_planned, reopened\) |
+| ↳ `html_url` | string | Issue HTML URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `milestone` | object | Milestone object if assigned |
+| ↳ `created_at` | string | Issue creation timestamp |
+| ↳ `updated_at` | string | Issue last update timestamp |
+| ↳ `closed_at` | string | Issue closed timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub Issue Comment
+
+Trigger workflow when a comment is added to an issue (not pull requests)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., issue_comment\) |
+| `action` | string | Action performed \(created, edited, deleted\) |
+| `issue` | object | issue output from the tool |
+| ↳ `number` | number | Issue number |
+| ↳ `title` | string | Issue title |
+| ↳ `state` | string | Issue state \(open, closed\) |
+| ↳ `html_url` | string | Issue HTML URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| `comment` | object | comment output from the tool |
+| ↳ `id` | number | Comment ID |
+| ↳ `node_id` | string | Comment node ID |
+| ↳ `body` | string | Comment text |
+| ↳ `html_url` | string | Comment HTML URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `created_at` | string | Comment creation timestamp |
+| ↳ `updated_at` | string | Comment last update timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub Issue Opened
+
+Trigger workflow when a new issue is opened in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., issues, pull_request, push\) |
+| `action` | string | Action performed \(opened, closed, reopened, edited, etc.\) |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | number | Issue ID |
+| ↳ `node_id` | string | Issue node ID |
+| ↳ `number` | number | Issue number |
+| ↳ `title` | string | Issue title |
+| ↳ `body` | string | Issue body/description |
+| ↳ `state` | string | Issue state \(open, closed\) |
+| ↳ `state_reason` | string | Reason for state \(completed, not_planned, reopened\) |
+| ↳ `html_url` | string | Issue HTML URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `milestone` | object | Milestone object if assigned |
+| ↳ `created_at` | string | Issue creation timestamp |
+| ↳ `updated_at` | string | Issue last update timestamp |
+| ↳ `closed_at` | string | Issue closed timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub PR Closed
+
+Trigger workflow when a pull request is closed without being merged (e.g., abandoned) in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., pull_request\) |
+| `action` | string | Action performed \(opened, closed, synchronize, reopened, edited, etc.\) |
+| `number` | number | Pull request number |
+| `pull_request` | object | pull_request output from the tool |
+| ↳ `id` | number | Pull request ID |
+| ↳ `node_id` | string | Pull request node ID |
+| ↳ `number` | number | Pull request number |
+| ↳ `title` | string | Pull request title |
+| ↳ `body` | string | Pull request description |
+| ↳ `state` | string | Pull request state \(open, closed\) |
+| ↳ `merged` | boolean | Whether the PR was merged |
+| ↳ `merged_at` | string | Timestamp when PR was merged |
+| ↳ `merged_by` | object | merged_by output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `draft` | boolean | Whether the PR is a draft |
+| ↳ `html_url` | string | Pull request HTML URL |
+| ↳ `diff_url` | string | Pull request diff URL |
+| ↳ `patch_url` | string | Pull request patch URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `head` | object | head output from the tool |
+| ↳ `ref` | string | Source branch name |
+| ↳ `sha` | string | Source branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Source repository name |
+| ↳ `full_name` | string | Source repository full name |
+| ↳ `base` | object | base output from the tool |
+| ↳ `ref` | string | Target branch name |
+| ↳ `sha` | string | Target branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Target repository name |
+| ↳ `full_name` | string | Target repository full name |
+| ↳ `additions` | number | Number of lines added |
+| ↳ `deletions` | number | Number of lines deleted |
+| ↳ `changed_files` | number | Number of files changed |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `requested_reviewers` | array | Array of requested reviewers |
+| ↳ `created_at` | string | Pull request creation timestamp |
+| ↳ `updated_at` | string | Pull request last update timestamp |
+| ↳ `closed_at` | string | Pull request closed timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub PR Comment
+
+Trigger workflow when a comment is added to a pull request in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., issue_comment\) |
+| `action` | string | Action performed \(created, edited, deleted\) |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | number | Issue ID |
+| ↳ `node_id` | string | Issue node ID |
+| ↳ `number` | number | Issue/PR number |
+| ↳ `title` | string | Issue/PR title |
+| ↳ `body` | string | Issue/PR description |
+| ↳ `state` | string | Issue/PR state \(open, closed\) |
+| ↳ `html_url` | string | Issue/PR HTML URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `pull_request` | object | pull_request output from the tool |
+| ↳ `url` | string | Pull request API URL \(present only for PR comments\) |
+| ↳ `html_url` | string | Pull request HTML URL |
+| ↳ `diff_url` | string | Pull request diff URL |
+| ↳ `patch_url` | string | Pull request patch URL |
+| ↳ `created_at` | string | Issue/PR creation timestamp |
+| ↳ `updated_at` | string | Issue/PR last update timestamp |
+| `comment` | object | comment output from the tool |
+| ↳ `id` | number | Comment ID |
+| ↳ `node_id` | string | Comment node ID |
+| ↳ `url` | string | Comment API URL |
+| ↳ `html_url` | string | Comment HTML URL |
+| ↳ `body` | string | Comment text |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `created_at` | string | Comment creation timestamp |
+| ↳ `updated_at` | string | Comment last update timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub PR Merged
+
+Trigger workflow when a pull request is successfully merged in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., pull_request\) |
+| `action` | string | Action performed \(opened, closed, synchronize, reopened, edited, etc.\) |
+| `number` | number | Pull request number |
+| `pull_request` | object | pull_request output from the tool |
+| ↳ `id` | number | Pull request ID |
+| ↳ `node_id` | string | Pull request node ID |
+| ↳ `number` | number | Pull request number |
+| ↳ `title` | string | Pull request title |
+| ↳ `body` | string | Pull request description |
+| ↳ `state` | string | Pull request state \(open, closed\) |
+| ↳ `merged` | boolean | Whether the PR was merged |
+| ↳ `merged_at` | string | Timestamp when PR was merged |
+| ↳ `merged_by` | object | merged_by output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `draft` | boolean | Whether the PR is a draft |
+| ↳ `html_url` | string | Pull request HTML URL |
+| ↳ `diff_url` | string | Pull request diff URL |
+| ↳ `patch_url` | string | Pull request patch URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `head` | object | head output from the tool |
+| ↳ `ref` | string | Source branch name |
+| ↳ `sha` | string | Source branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Source repository name |
+| ↳ `full_name` | string | Source repository full name |
+| ↳ `base` | object | base output from the tool |
+| ↳ `ref` | string | Target branch name |
+| ↳ `sha` | string | Target branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Target repository name |
+| ↳ `full_name` | string | Target repository full name |
+| ↳ `additions` | number | Number of lines added |
+| ↳ `deletions` | number | Number of lines deleted |
+| ↳ `changed_files` | number | Number of files changed |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `requested_reviewers` | array | Array of requested reviewers |
+| ↳ `created_at` | string | Pull request creation timestamp |
+| ↳ `updated_at` | string | Pull request last update timestamp |
+| ↳ `closed_at` | string | Pull request closed timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub PR Opened
+
+Trigger workflow when a new pull request is opened in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., pull_request\) |
+| `action` | string | Action performed \(opened, closed, synchronize, reopened, edited, etc.\) |
+| `number` | number | Pull request number |
+| `pull_request` | object | pull_request output from the tool |
+| ↳ `id` | number | Pull request ID |
+| ↳ `node_id` | string | Pull request node ID |
+| ↳ `number` | number | Pull request number |
+| ↳ `title` | string | Pull request title |
+| ↳ `body` | string | Pull request description |
+| ↳ `state` | string | Pull request state \(open, closed\) |
+| ↳ `merged` | boolean | Whether the PR was merged |
+| ↳ `merged_at` | string | Timestamp when PR was merged |
+| ↳ `merged_by` | object | merged_by output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `draft` | boolean | Whether the PR is a draft |
+| ↳ `html_url` | string | Pull request HTML URL |
+| ↳ `diff_url` | string | Pull request diff URL |
+| ↳ `patch_url` | string | Pull request patch URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `head` | object | head output from the tool |
+| ↳ `ref` | string | Source branch name |
+| ↳ `sha` | string | Source branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Source repository name |
+| ↳ `full_name` | string | Source repository full name |
+| ↳ `base` | object | base output from the tool |
+| ↳ `ref` | string | Target branch name |
+| ↳ `sha` | string | Target branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Target repository name |
+| ↳ `full_name` | string | Target repository full name |
+| ↳ `additions` | number | Number of lines added |
+| ↳ `deletions` | number | Number of lines deleted |
+| ↳ `changed_files` | number | Number of files changed |
+| ↳ `labels` | array | Array of label objects |
+| ↳ `assignees` | array | Array of assigned users |
+| ↳ `requested_reviewers` | array | Array of requested reviewers |
+| ↳ `created_at` | string | Pull request creation timestamp |
+| ↳ `updated_at` | string | Pull request last update timestamp |
+| ↳ `closed_at` | string | Pull request closed timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub PR Reviewed
+
+Trigger workflow when a pull request review is submitted, edited, or dismissed in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., pull_request_review\) |
+| `action` | string | Action performed \(submitted, edited, dismissed\) |
+| `review` | object | review output from the tool |
+| ↳ `id` | number | Review ID |
+| ↳ `node_id` | string | Review node ID |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | Reviewer username |
+| ↳ `id` | number | Reviewer user ID |
+| ↳ `node_id` | string | Reviewer node ID |
+| ↳ `avatar_url` | string | Reviewer avatar URL |
+| ↳ `html_url` | string | Reviewer profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `body` | string | Review comment text |
+| ↳ `state` | string | Review state \(approved, changes_requested, commented, dismissed\) |
+| ↳ `html_url` | string | Review HTML URL |
+| ↳ `submitted_at` | string | Review submission timestamp |
+| ↳ `commit_id` | string | Commit SHA that was reviewed |
+| ↳ `author_association` | string | Author association \(OWNER, MEMBER, COLLABORATOR, CONTRIBUTOR, etc.\) |
+| `pull_request` | object | pull_request output from the tool |
+| ↳ `id` | number | Pull request ID |
+| ↳ `node_id` | string | Pull request node ID |
+| ↳ `number` | number | Pull request number |
+| ↳ `title` | string | Pull request title |
+| ↳ `body` | string | Pull request description |
+| ↳ `state` | string | Pull request state \(open, closed\) |
+| ↳ `merged` | boolean | Whether the PR was merged |
+| ↳ `draft` | boolean | Whether the PR is a draft |
+| ↳ `html_url` | string | Pull request HTML URL |
+| ↳ `diff_url` | string | Pull request diff URL |
+| ↳ `patch_url` | string | Pull request patch URL |
+| ↳ `user` | object | user output from the tool |
+| ↳ `login` | string | PR author username |
+| ↳ `id` | number | PR author user ID |
+| ↳ `node_id` | string | PR author node ID |
+| ↳ `avatar_url` | string | PR author avatar URL |
+| ↳ `html_url` | string | PR author profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `head` | object | head output from the tool |
+| ↳ `ref` | string | Source branch name |
+| ↳ `sha` | string | Source branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Source repository name |
+| ↳ `full_name` | string | Source repository full name |
+| ↳ `base` | object | base output from the tool |
+| ↳ `ref` | string | Target branch name |
+| ↳ `sha` | string | Target branch commit SHA |
+| ↳ `repo` | object | repo output from the tool |
+| ↳ `name` | string | Target repository name |
+| ↳ `full_name` | string | Target repository full name |
+| ↳ `created_at` | string | Pull request creation timestamp |
+| ↳ `updated_at` | string | Pull request last update timestamp |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub Push
+
+Trigger workflow when code is pushed to a repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., push\) |
+| `branch` | string | Branch name derived from ref \(e.g., main from refs/heads/main\) |
+| `ref` | string | Git reference that was pushed \(e.g., refs/heads/main\) |
+| `before` | string | SHA of the commit before the push |
+| `after` | string | SHA of the commit after the push |
+| `created` | boolean | Whether this push created a new branch or tag |
+| `deleted` | boolean | Whether this push deleted a branch or tag |
+| `forced` | boolean | Whether this was a force push |
+| `base_ref` | string | Base reference for the push |
+| `compare` | string | URL to compare the changes |
+| `commits` | array | Array of commit objects included in this push |
+| `head_commit` | object | head_commit output from the tool |
+| ↳ `id` | string | Commit SHA of the most recent commit |
+| ↳ `tree_id` | string | Git tree SHA |
+| ↳ `distinct` | boolean | Whether this commit is distinct |
+| ↳ `message` | string | Commit message |
+| ↳ `timestamp` | string | Commit timestamp |
+| ↳ `url` | string | Commit URL |
+| ↳ `author` | object | author output from the tool |
+| ↳ `name` | string | Author name |
+| ↳ `email` | string | Author email |
+| ↳ `username` | string | Author GitHub username |
+| ↳ `committer` | object | committer output from the tool |
+| ↳ `name` | string | Committer name |
+| ↳ `email` | string | Committer email |
+| ↳ `username` | string | Committer GitHub username |
+| ↳ `added` | array | Array of file paths added in this commit |
+| ↳ `removed` | array | Array of file paths removed in this commit |
+| ↳ `modified` | array | Array of file paths modified in this commit |
+| `pusher` | object | pusher output from the tool |
+| ↳ `name` | string | Pusher name |
+| ↳ `email` | string | Pusher email |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+
+
+---
+
+### GitHub Release Published
+
+Trigger workflow when a new release is published in a GitHub repository
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_type` | string | GitHub event type from X-GitHub-Event header \(e.g., release\) |
+| `action` | string | Action performed \(published, unpublished, created, edited, deleted, prereleased, released\) |
+| `release` | object | release output from the tool |
+| ↳ `id` | number | Release ID |
+| ↳ `node_id` | string | Release node ID |
+| ↳ `tag_name` | string | Git tag name for the release |
+| ↳ `target_commitish` | string | Target branch or commit SHA |
+| ↳ `name` | string | Release name/title |
+| ↳ `body` | string | Release description/notes in markdown format |
+| ↳ `draft` | boolean | Whether the release is a draft |
+| ↳ `prerelease` | boolean | Whether the release is a pre-release |
+| ↳ `created_at` | string | Release creation timestamp |
+| ↳ `published_at` | string | Release publication timestamp |
+| ↳ `url` | string | Release API URL |
+| ↳ `html_url` | string | Release HTML URL |
+| ↳ `assets_url` | string | Release assets API URL |
+| ↳ `upload_url` | string | URL for uploading release assets |
+| ↳ `tarball_url` | string | Source code tarball download URL |
+| ↳ `zipball_url` | string | Source code zipball download URL |
+| ↳ `discussion_url` | string | Discussion URL if available |
+| ↳ `author` | object | author output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `gravatar_id` | string | Gravatar ID |
+| ↳ `url` | string | User API URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `followers_url` | string | Followers API URL |
+| ↳ `following_url` | string | Following API URL |
+| ↳ `gists_url` | string | Gists API URL |
+| ↳ `starred_url` | string | Starred repositories API URL |
+| ↳ `subscriptions_url` | string | Subscriptions API URL |
+| ↳ `organizations_url` | string | Organizations API URL |
+| ↳ `repos_url` | string | Repositories API URL |
+| ↳ `events_url` | string | Events API URL |
+| ↳ `received_events_url` | string | Received events API URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `site_admin` | boolean | Whether user is a site administrator |
+| ↳ `assets` | array | Array of release asset objects with download URLs |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `repo_description` | string | Repository description |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `archive_url` | string | Archive API URL |
+| ↳ `assignees_url` | string | Assignees API URL |
+| ↳ `blobs_url` | string | Blobs API URL |
+| ↳ `branches_url` | string | Branches API URL |
+| ↳ `collaborators_url` | string | Collaborators API URL |
+| ↳ `comments_url` | string | Comments API URL |
+| ↳ `commits_url` | string | Commits API URL |
+| ↳ `compare_url` | string | Compare API URL |
+| ↳ `contents_url` | string | Contents API URL |
+| ↳ `contributors_url` | string | Contributors API URL |
+| ↳ `deployments_url` | string | Deployments API URL |
+| ↳ `downloads_url` | string | Downloads API URL |
+| ↳ `events_url` | string | Events API URL |
+| ↳ `forks_url` | string | Forks API URL |
+| ↳ `git_commits_url` | string | Git commits API URL |
+| ↳ `git_refs_url` | string | Git refs API URL |
+| ↳ `git_tags_url` | string | Git tags API URL |
+| ↳ `hooks_url` | string | Hooks API URL |
+| ↳ `issue_comment_url` | string | Issue comment API URL |
+| ↳ `issue_events_url` | string | Issue events API URL |
+| ↳ `issues_url` | string | Issues API URL |
+| ↳ `keys_url` | string | Keys API URL |
+| ↳ `labels_url` | string | Labels API URL |
+| ↳ `languages_url` | string | Languages API URL |
+| ↳ `merges_url` | string | Merges API URL |
+| ↳ `milestones_url` | string | Milestones API URL |
+| ↳ `notifications_url` | string | Notifications API URL |
+| ↳ `pulls_url` | string | Pull requests API URL |
+| ↳ `releases_url` | string | Releases API URL |
+| ↳ `stargazers_url` | string | Stargazers API URL |
+| ↳ `statuses_url` | string | Statuses API URL |
+| ↳ `subscribers_url` | string | Subscribers API URL |
+| ↳ `subscription_url` | string | Subscription API URL |
+| ↳ `tags_url` | string | Tags API URL |
+| ↳ `teams_url` | string | Teams API URL |
+| ↳ `trees_url` | string | Trees API URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size in KB |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `has_issues` | boolean | Whether issues are enabled |
+| ↳ `has_projects` | boolean | Whether projects are enabled |
+| ↳ `has_downloads` | boolean | Whether downloads are enabled |
+| ↳ `has_wiki` | boolean | Whether wiki is enabled |
+| ↳ `has_pages` | boolean | Whether GitHub Pages is enabled |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `mirror_url` | string | Mirror URL if repository is a mirror |
+| ↳ `archived` | boolean | Whether the repository is archived |
+| ↳ `disabled` | boolean | Whether the repository is disabled |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `license` | object | license output from the tool |
+| ↳ `key` | string | License key |
+| ↳ `name` | string | License name |
+| ↳ `spdx_id` | string | SPDX license identifier |
+| ↳ `url` | string | License API URL |
+| ↳ `node_id` | string | License node ID |
+| ↳ `allow_forking` | boolean | Whether forking is allowed |
+| ↳ `is_template` | boolean | Whether repository is a template |
+| ↳ `topics` | array | Array of repository topics |
+| ↳ `visibility` | string | Repository visibility \(public, private, internal\) |
+| ↳ `forks` | number | Number of forks |
+| ↳ `open_issues` | number | Number of open issues |
+| ↳ `watchers` | number | Number of watchers |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `created_at` | string | Repository creation timestamp |
+| ↳ `updated_at` | string | Repository last update timestamp |
+| ↳ `pushed_at` | string | Repository last push timestamp |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `gravatar_id` | string | Owner gravatar ID |
+| ↳ `url` | string | Owner API URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `followers_url` | string | Followers API URL |
+| ↳ `following_url` | string | Following API URL |
+| ↳ `gists_url` | string | Gists API URL |
+| ↳ `starred_url` | string | Starred repositories API URL |
+| ↳ `subscriptions_url` | string | Subscriptions API URL |
+| ↳ `organizations_url` | string | Organizations API URL |
+| ↳ `repos_url` | string | Repositories API URL |
+| ↳ `events_url` | string | Events API URL |
+| ↳ `received_events_url` | string | Received events API URL |
+| ↳ `owner_type` | string | Owner type \(User, Organization\) |
+| ↳ `site_admin` | boolean | Whether owner is a site administrator |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Username |
+| ↳ `id` | number | User ID |
+| ↳ `node_id` | string | User node ID |
+| ↳ `avatar_url` | string | Avatar URL |
+| ↳ `gravatar_id` | string | Gravatar ID |
+| ↳ `url` | string | User API URL |
+| ↳ `html_url` | string | Profile URL |
+| ↳ `followers_url` | string | Followers API URL |
+| ↳ `following_url` | string | Following API URL |
+| ↳ `gists_url` | string | Gists API URL |
+| ↳ `starred_url` | string | Starred repositories API URL |
+| ↳ `subscriptions_url` | string | Subscriptions API URL |
+| ↳ `organizations_url` | string | Organizations API URL |
+| ↳ `repos_url` | string | Repositories API URL |
+| ↳ `events_url` | string | Events API URL |
+| ↳ `received_events_url` | string | Received events API URL |
+| ↳ `user_type` | string | User type \(User, Bot, Organization\) |
+| ↳ `site_admin` | boolean | Whether user is a site administrator |
+
+
+---
+
+### GitHub Webhook
+
+Trigger workflow from GitHub events like push, pull requests, issues, and more
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `contentType` | string | Yes | Format GitHub will use when sending the webhook payload. |
+| `webhookSecret` | string | No | Validates that webhook deliveries originate from GitHub. |
+| `sslVerification` | string | Yes | GitHub verifies SSL certificates when delivering webhooks. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `ref` | string | Git reference \(e.g., refs/heads/fix/telegram-wh\) |
+| `before` | string | SHA of the commit before the push |
+| `after` | string | SHA of the commit after the push |
+| `created` | boolean | Whether the push created the reference |
+| `deleted` | boolean | Whether the push deleted the reference |
+| `forced` | boolean | Whether the push was forced |
+| `base_ref` | string | Base reference for the push |
+| `compare` | string | URL to compare the changes |
+| `repository` | object | repository output from the tool |
+| ↳ `id` | number | Repository ID |
+| ↳ `node_id` | string | Repository node ID |
+| ↳ `name` | string | Repository name |
+| ↳ `full_name` | string | Repository full name \(owner/repo\) |
+| ↳ `private` | boolean | Whether the repository is private |
+| ↳ `html_url` | string | Repository HTML URL |
+| ↳ `fork` | boolean | Whether the repository is a fork |
+| ↳ `url` | string | Repository API URL |
+| ↳ `created_at` | number | Repository creation timestamp |
+| ↳ `updated_at` | string | Repository last updated time |
+| ↳ `pushed_at` | number | Repository last push timestamp |
+| ↳ `git_url` | string | Repository git URL |
+| ↳ `ssh_url` | string | Repository SSH URL |
+| ↳ `clone_url` | string | Repository clone URL |
+| ↳ `homepage` | string | Repository homepage URL |
+| ↳ `size` | number | Repository size |
+| ↳ `stargazers_count` | number | Number of stars |
+| ↳ `watchers_count` | number | Number of watchers |
+| ↳ `language` | string | Primary programming language |
+| ↳ `forks_count` | number | Number of forks |
+| ↳ `archived` | boolean | Whether the repository is archived |
+| ↳ `disabled` | boolean | Whether the repository is disabled |
+| ↳ `open_issues_count` | number | Number of open issues |
+| ↳ `topics` | array | Repository topics |
+| ↳ `visibility` | string | Repository visibility \(public, private\) |
+| ↳ `forks` | number | Number of forks |
+| ↳ `open_issues` | number | Number of open issues |
+| ↳ `watchers` | number | Number of watchers |
+| ↳ `default_branch` | string | Default branch name |
+| ↳ `stargazers` | number | Number of stargazers |
+| ↳ `master_branch` | string | Master branch name |
+| ↳ `owner` | object | owner output from the tool |
+| ↳ `name` | string | Owner name |
+| ↳ `email` | string | Owner email |
+| ↳ `login` | string | Owner username |
+| ↳ `id` | number | Owner ID |
+| ↳ `node_id` | string | Owner node ID |
+| ↳ `avatar_url` | string | Owner avatar URL |
+| ↳ `gravatar_id` | string | Owner gravatar ID |
+| ↳ `url` | string | Owner API URL |
+| ↳ `html_url` | string | Owner profile URL |
+| ↳ `user_view_type` | string | User view type |
+| ↳ `site_admin` | boolean | Whether the owner is a site admin |
+| ↳ `license` | object | Repository license information |
+| `pusher` | object | Information about who pushed the changes |
+| `sender` | object | sender output from the tool |
+| ↳ `login` | string | Sender username |
+| ↳ `id` | number | Sender ID |
+| ↳ `node_id` | string | Sender node ID |
+| ↳ `avatar_url` | string | Sender avatar URL |
+| ↳ `gravatar_id` | string | Sender gravatar ID |
+| ↳ `url` | string | Sender API URL |
+| ↳ `html_url` | string | Sender profile URL |
+| ↳ `user_view_type` | string | User view type |
+| ↳ `site_admin` | boolean | Whether the sender is a site admin |
+| `commits` | array | Array of commit objects |
+| `head_commit` | object | Head commit object |
+| `event_type` | string | Type of GitHub event \(e.g., push, pull_request, issues\) |
+| `action` | string | The action that was performed \(e.g., opened, closed, synchronize\) |
+| `branch` | string | Branch name extracted from ref |
+
diff --git a/apps/docs/content/docs/en/triggers/gmail.mdx b/apps/docs/content/docs/en/triggers/gmail.mdx
new file mode 100644
index 00000000000..f71569a9c1c
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/gmail.mdx
@@ -0,0 +1,52 @@
+---
+title: Gmail
+description: Available Gmail triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Gmail provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### Gmail Email Trigger
+
+Triggers when new emails are received in Gmail (requires Gmail credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires google email credentials to access your account. |
+| `labelIds` | string | No | Choose which Gmail labels to monitor. Leave empty to monitor all emails. |
+| `labelFilterBehavior` | string | Yes | Include only emails with selected labels, or exclude emails with selected labels |
+| `searchQuery` | string | No | Optional Gmail search query to filter emails. Use the same format as Gmail search box \(e.g., |
+| `markAsRead` | boolean | No | Automatically mark emails as read after processing |
+| `includeAttachments` | boolean | No | Download and include email attachments in the trigger payload |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `email` | object | email output from the tool |
+| ↳ `id` | string | Gmail message ID |
+| ↳ `threadId` | string | Gmail thread ID |
+| ↳ `subject` | string | Email subject line |
+| ↳ `from` | string | Sender email address |
+| ↳ `to` | string | Recipient email address |
+| ↳ `cc` | string | CC recipients |
+| ↳ `date` | string | Email date in ISO format |
+| ↳ `bodyText` | string | Plain text email body |
+| ↳ `bodyHtml` | string | HTML email body |
+| ↳ `labels` | string | Email labels array |
+| ↳ `hasAttachments` | boolean | Whether email has attachments |
+| ↳ `attachments` | file[] | Array of email attachments as files \(if includeAttachments is enabled\) |
+| `timestamp` | string | Event timestamp |
+
diff --git a/apps/docs/content/docs/en/triggers/gong.mdx b/apps/docs/content/docs/en/triggers/gong.mdx
new file mode 100644
index 00000000000..1885f7ffc70
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/gong.mdx
@@ -0,0 +1,109 @@
+---
+title: Gong
+description: Available Gong triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Gong provides 2 triggers for automating workflows based on events.
+
+## Triggers
+
+### Gong Call Completed
+
+Trigger workflow when a call is completed and processed in Gong
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `gongJwtPublicKeyPem` | string | No | Required only when your Gong rule uses **Signed JWT header**. Sim verifies RS256, `webhook_url`, and `body_sha256` per Gong. If empty, only the webhook URL path authenticates the request. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | Constant identifier for automation-rule webhooks \(`gong.automation_rule`\). Gong does not send distinct event names in the payload. |
+| `callId` | string | Gong call ID \(same value as metaData.id when present\) |
+| `isTest` | boolean | Whether this is a test webhook from the Gong UI |
+| `callData` | json | Full call data object |
+| `metaData` | object | metaData output from the tool |
+| ↳ `id` | string | Gong call ID |
+| ↳ `url` | string | URL to the call in Gong |
+| ↳ `title` | string | Call title |
+| ↳ `scheduled` | string | Scheduled start time \(ISO 8601\) |
+| ↳ `started` | string | Actual start time \(ISO 8601\) |
+| ↳ `duration` | number | Call duration in seconds |
+| ↳ `primaryUserId` | string | Primary Gong user ID |
+| ↳ `workspaceId` | string | Gong workspace ID |
+| ↳ `direction` | string | Call direction \(Inbound, Outbound, etc.\) |
+| ↳ `system` | string | Communication platform used \(e.g. Zoom, Teams\) |
+| ↳ `scope` | string | Call scope \(Internal, External, or Unknown\) |
+| ↳ `media` | string | Media type \(Video or Audio\) |
+| ↳ `language` | string | Language code \(ISO-639-2B\) |
+| ↳ `sdrDisposition` | string | SDR disposition classification \(when present\) |
+| ↳ `clientUniqueId` | string | Call identifier from the origin recording system \(when present\) |
+| ↳ `customData` | string | Custom metadata from call creation \(when present\) |
+| ↳ `purpose` | string | Call purpose \(when present\) |
+| ↳ `meetingUrl` | string | Web conference provider URL \(when present\) |
+| ↳ `isPrivate` | boolean | Whether the call is private \(when present\) |
+| ↳ `calendarEventId` | string | Calendar event identifier \(when present\) |
+| `parties` | array | Array of call participants with name, email, title, and affiliation |
+| `context` | array | Array of CRM context objects \(Salesforce opportunities, accounts, etc.\) |
+| `trackers` | array | Keyword and smart trackers from call content \(same shape as Gong extensive-calls `content.trackers`\) |
+| `topics` | array | Topic segments with durations from call content \(`content.topics`\) |
+| `highlights` | array | AI-generated highlights from call content \(`content.highlights`\) |
+
+
+---
+
+### Gong Webhook
+
+Generic webhook trigger for all Gong events
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `gongJwtPublicKeyPem` | string | No | Required only when your Gong rule uses **Signed JWT header**. Sim verifies RS256, `webhook_url`, and `body_sha256` per Gong. If empty, only the webhook URL path authenticates the request. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | Constant identifier for automation-rule webhooks \(`gong.automation_rule`\). Gong does not send distinct event names in the payload. |
+| `callId` | string | Gong call ID \(same value as metaData.id when present\) |
+| `isTest` | boolean | Whether this is a test webhook from the Gong UI |
+| `callData` | json | Full call data object |
+| `metaData` | object | metaData output from the tool |
+| ↳ `id` | string | Gong call ID |
+| ↳ `url` | string | URL to the call in Gong |
+| ↳ `title` | string | Call title |
+| ↳ `scheduled` | string | Scheduled start time \(ISO 8601\) |
+| ↳ `started` | string | Actual start time \(ISO 8601\) |
+| ↳ `duration` | number | Call duration in seconds |
+| ↳ `primaryUserId` | string | Primary Gong user ID |
+| ↳ `workspaceId` | string | Gong workspace ID |
+| ↳ `direction` | string | Call direction \(Inbound, Outbound, etc.\) |
+| ↳ `system` | string | Communication platform used \(e.g. Zoom, Teams\) |
+| ↳ `scope` | string | Call scope \(Internal, External, or Unknown\) |
+| ↳ `media` | string | Media type \(Video or Audio\) |
+| ↳ `language` | string | Language code \(ISO-639-2B\) |
+| ↳ `sdrDisposition` | string | SDR disposition classification \(when present\) |
+| ↳ `clientUniqueId` | string | Call identifier from the origin recording system \(when present\) |
+| ↳ `customData` | string | Custom metadata from call creation \(when present\) |
+| ↳ `purpose` | string | Call purpose \(when present\) |
+| ↳ `meetingUrl` | string | Web conference provider URL \(when present\) |
+| ↳ `isPrivate` | boolean | Whether the call is private \(when present\) |
+| ↳ `calendarEventId` | string | Calendar event identifier \(when present\) |
+| `parties` | array | Array of call participants with name, email, title, and affiliation |
+| `context` | array | Array of CRM context objects \(Salesforce opportunities, accounts, etc.\) |
+| `trackers` | array | Keyword and smart trackers from call content \(same shape as Gong extensive-calls `content.trackers`\) |
+| `topics` | array | Topic segments with durations from call content \(`content.topics`\) |
+| `highlights` | array | AI-generated highlights from call content \(`content.highlights`\) |
+
diff --git a/apps/docs/content/docs/en/triggers/google-calendar.mdx b/apps/docs/content/docs/en/triggers/google-calendar.mdx
new file mode 100644
index 00000000000..0d8bd87211b
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/google-calendar.mdx
@@ -0,0 +1,54 @@
+---
+title: Google Calendar
+description: Available Google Calendar triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Google Calendar provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### Google Calendar Event Trigger
+
+Triggers when events are created, updated, or cancelled in Google Calendar
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Connect your Google account to access Google Calendar. |
+| `calendarId` | file-selector | No | The calendar to monitor for event changes. |
+| `manualCalendarId` | string | No | The calendar to monitor for event changes. |
+| `eventTypeFilter` | string | No | Only trigger for specific event types. Defaults to all events. |
+| `searchTerm` | string | No | Optional: Filter events by text match across title, description, location, and attendees. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | object | event output from the tool |
+| ↳ `id` | string | Calendar event ID |
+| ↳ `status` | string | Event status \(confirmed, tentative, cancelled\) |
+| ↳ `eventType` | string | Change type: "created", "updated", or "cancelled" |
+| ↳ `summary` | string | Event title |
+| ↳ `eventDescription` | string | Event description |
+| ↳ `location` | string | Event location |
+| ↳ `htmlLink` | string | Link to event in Google Calendar |
+| ↳ `start` | json | Event start time |
+| ↳ `end` | json | Event end time |
+| ↳ `created` | string | Event creation time |
+| ↳ `updated` | string | Event last updated time |
+| ↳ `attendees` | json | Event attendees |
+| ↳ `creator` | json | Event creator |
+| ↳ `organizer` | json | Event organizer |
+| `calendarId` | string | Calendar ID |
+| `timestamp` | string | Event processing timestamp in ISO format |
+
diff --git a/apps/docs/content/docs/en/triggers/google-drive.mdx b/apps/docs/content/docs/en/triggers/google-drive.mdx
new file mode 100644
index 00000000000..80105f62f4a
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/google-drive.mdx
@@ -0,0 +1,52 @@
+---
+title: Google Drive
+description: Available Google Drive triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Google Drive provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### Google Drive File Trigger
+
+Triggers when files are created, modified, or deleted in Google Drive
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Connect your Google account to access Google Drive. |
+| `folderId` | file-selector | No | Optional: The folder to monitor. Leave empty to monitor all files in Drive. |
+| `manualFolderId` | string | No | Optional: The folder ID from the Google Drive URL to monitor. Leave empty to monitor all files. |
+| `mimeTypeFilter` | string | No | Optional: Only trigger for specific file types. |
+| `eventTypeFilter` | string | No | Only trigger for specific change types. Defaults to all changes. |
+| `includeSharedDrives` | boolean | No | Include files from shared \(team\) drives. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `file` | object | file output from the tool |
+| ↳ `id` | string | Google Drive file ID |
+| ↳ `name` | string | File name |
+| ↳ `mimeType` | string | File MIME type |
+| ↳ `modifiedTime` | string | Last modified time \(ISO\) |
+| ↳ `createdTime` | string | File creation time \(ISO\) |
+| ↳ `size` | string | File size in bytes |
+| ↳ `webViewLink` | string | URL to view file in browser |
+| ↳ `parents` | json | Parent folder IDs |
+| ↳ `lastModifyingUser` | json | User who last modified the file |
+| ↳ `shared` | boolean | Whether file is shared |
+| ↳ `starred` | boolean | Whether file is starred |
+| `eventType` | string | Change type: "created", "modified", or "deleted" |
+| `timestamp` | string | Event timestamp in ISO format |
+
diff --git a/apps/docs/content/docs/en/triggers/google-sheets.mdx b/apps/docs/content/docs/en/triggers/google-sheets.mdx
new file mode 100644
index 00000000000..eb48e512006
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/google-sheets.mdx
@@ -0,0 +1,46 @@
+---
+title: Google Sheets
+description: Available Google Sheets triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Google Sheets provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### Google Sheets New Row Trigger
+
+Triggers when new rows are added to a Google Sheet
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | Connect your Google account to access Google Sheets. |
+| `spreadsheetId` | file-selector | Yes | The spreadsheet to monitor for new rows. |
+| `manualSpreadsheetId` | string | Yes | The spreadsheet to monitor for new rows. |
+| `sheetName` | sheet-selector | Yes | The sheet tab to monitor for new rows. |
+| `manualSheetName` | string | Yes | The sheet tab to monitor for new rows. |
+| `valueRenderOption` | string | No | How values are rendered. Formatted returns display strings, Unformatted returns raw numbers/booleans, Formula returns the formula text. |
+| `dateTimeRenderOption` | string | No | How dates and times are rendered. Only applies when Value Render is not |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `row` | json | Row data mapped to column headers from row 1 |
+| `rawRow` | json | Raw row values as an array |
+| `headers` | json | Column headers from row 1 |
+| `rowNumber` | number | The 1-based row number of the new row |
+| `spreadsheetId` | string | The spreadsheet ID |
+| `sheetName` | string | The sheet tab name |
+| `timestamp` | string | Event timestamp in ISO format |
+
diff --git a/apps/docs/content/docs/en/triggers/google_forms.mdx b/apps/docs/content/docs/en/triggers/google_forms.mdx
new file mode 100644
index 00000000000..767d243316a
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/google_forms.mdx
@@ -0,0 +1,41 @@
+---
+title: Google Forms
+description: Available Google Forms triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Google Forms provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Google Forms Webhook
+
+Trigger workflow from Google Form submissions (via Apps Script forwarder)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `token` | string | Yes | We validate requests using this secret. Send it as Authorization: Bearer <token> or a custom header. |
+| `secretHeaderName` | string | No | If set, the webhook will validate this header equals your Shared Secret instead of Authorization. |
+| `triggerFormId` | string | No | Optional, for clarity and matching in workflows. Not required for webhook to work. |
+| `includeRawPayload` | boolean | No | Include the original payload from Apps Script in the workflow input. |
+| `setupScript` | string | No | Copy this code and paste it into your Google Forms Apps Script editor |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `responseId` | string | Unique response identifier \(if available\) |
+| `createTime` | string | Response creation timestamp |
+| `lastSubmittedTime` | string | Last submitted timestamp |
+| `formId` | string | Google Form ID |
+| `answers` | object | Normalized map of question -> answer |
+| `raw` | object | Original payload \(when enabled\) |
+
diff --git a/apps/docs/content/docs/en/triggers/grain.mdx b/apps/docs/content/docs/en/triggers/grain.mdx
new file mode 100644
index 00000000000..849326f20c1
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/grain.mdx
@@ -0,0 +1,239 @@
+---
+title: Grain
+description: Available Grain triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Grain provides 8 triggers for automating workflows based on events.
+
+## Triggers
+
+### Grain All Events
+
+Trigger on all actions (added, updated, removed) in a Grain view
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., recording_added\) |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | Event data object \(recording, highlight, etc.\) |
+
+
+---
+
+### Grain Highlight Created
+
+Trigger workflow when a new highlight/clip is created in Grain
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Highlight UUID |
+| ↳ `recording_id` | string | Parent recording UUID |
+| ↳ `text` | string | Highlight title/description |
+| ↳ `transcript` | string | Transcript text of the clip |
+| ↳ `speakers` | array | Array of speaker names |
+| ↳ `timestamp` | number | Start timestamp in ms |
+| ↳ `duration` | number | Duration in ms |
+| ↳ `tags` | array | Array of tag strings |
+| ↳ `url` | string | URL to view in Grain |
+| ↳ `thumbnail_url` | string | Thumbnail URL |
+| ↳ `created_datetime` | string | ISO8601 creation timestamp |
+
+
+---
+
+### Grain Highlight Updated
+
+Trigger workflow when a highlight/clip is updated in Grain
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Highlight UUID |
+| ↳ `recording_id` | string | Parent recording UUID |
+| ↳ `text` | string | Highlight title/description |
+| ↳ `transcript` | string | Transcript text of the clip |
+| ↳ `speakers` | array | Array of speaker names |
+| ↳ `timestamp` | number | Start timestamp in ms |
+| ↳ `duration` | number | Duration in ms |
+| ↳ `tags` | array | Array of tag strings |
+| ↳ `url` | string | URL to view in Grain |
+| ↳ `thumbnail_url` | string | Thumbnail URL |
+| ↳ `created_datetime` | string | ISO8601 creation timestamp |
+
+
+---
+
+### Grain Item Added
+
+Trigger when a new item is added to a Grain view (recording, highlight, or story)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., recording_added\) |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | Event data object \(recording, highlight, etc.\) |
+
+
+---
+
+### Grain Item Updated
+
+Trigger when an item is updated in a Grain view (recording, highlight, or story)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., recording_added\) |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | Event data object \(recording, highlight, etc.\) |
+
+
+---
+
+### Grain Recording Created
+
+Trigger workflow when a new recording is added in Grain
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Recording UUID |
+| ↳ `title` | string | Recording title |
+| ↳ `start_datetime` | string | ISO8601 start timestamp |
+| ↳ `end_datetime` | string | ISO8601 end timestamp |
+| ↳ `duration_ms` | number | Duration in milliseconds |
+| ↳ `media_type` | string | audio, transcript, or video |
+| ↳ `source` | string | Recording source \(zoom, meet, local_capture, etc.\) |
+| ↳ `url` | string | URL to view in Grain |
+| ↳ `thumbnail_url` | string | Thumbnail URL \(nullable\) |
+| ↳ `tags` | array | Array of tag strings |
+| ↳ `teams` | array | Array of team objects |
+| ↳ `meeting_type` | object | Meeting type info with id, name, scope \(nullable\) |
+
+
+---
+
+### Grain Recording Updated
+
+Trigger workflow when a recording is updated in Grain
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Recording UUID |
+| ↳ `title` | string | Recording title |
+| ↳ `start_datetime` | string | ISO8601 start timestamp |
+| ↳ `end_datetime` | string | ISO8601 end timestamp |
+| ↳ `duration_ms` | number | Duration in milliseconds |
+| ↳ `media_type` | string | audio, transcript, or video |
+| ↳ `source` | string | Recording source \(zoom, meet, local_capture, etc.\) |
+| ↳ `url` | string | URL to view in Grain |
+| ↳ `thumbnail_url` | string | Thumbnail URL \(nullable\) |
+| ↳ `tags` | array | Array of tag strings |
+| ↳ `teams` | array | Array of team objects |
+| ↳ `meeting_type` | object | Meeting type info with id, name, scope \(nullable\) |
+
+
+---
+
+### Grain Story Created
+
+Trigger workflow when a new story is created in Grain
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Grain. |
+| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type |
+| `user_id` | string | User UUID who triggered the event |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Story UUID |
+| ↳ `title` | string | Story title |
+| ↳ `url` | string | URL to view in Grain |
+| ↳ `created_datetime` | string | ISO8601 creation timestamp |
+
diff --git a/apps/docs/content/docs/en/triggers/greenhouse.mdx b/apps/docs/content/docs/en/triggers/greenhouse.mdx
new file mode 100644
index 00000000000..d8b55bcbbf5
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/greenhouse.mdx
@@ -0,0 +1,295 @@
+---
+title: Greenhouse
+description: Available Greenhouse triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Greenhouse provides 8 triggers for automating workflows based on events.
+
+## Triggers
+
+### Greenhouse Candidate Hired
+
+Trigger workflow when a candidate is hired
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(hire_candidate\) |
+| `payload` | object | payload output from the tool |
+| ↳ `application` | object | application output from the tool |
+| ↳ `id` | number | Application ID |
+| ↳ `status` | string | Application status |
+| ↳ `prospect` | boolean | Whether the applicant is a prospect |
+| ↳ `applied_at` | string | When the application was submitted |
+| ↳ `url` | string | Application URL in Greenhouse |
+| ↳ `current_stage` | object | current_stage output from the tool |
+| ↳ `id` | number | Current stage ID |
+| ↳ `name` | string | Current stage name |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | number | Candidate ID |
+| ↳ `first_name` | string | First name |
+| ↳ `last_name` | string | Last name |
+| ↳ `title` | string | Current title |
+| ↳ `company` | string | Current company |
+| ↳ `email_addresses` | json | Email addresses |
+| ↳ `phone_numbers` | json | Phone numbers |
+| ↳ `recruiter` | json | Assigned recruiter |
+| ↳ `coordinator` | json | Assigned coordinator |
+| ↳ `jobs` | json | Associated jobs \(array\) |
+| ↳ `offer` | object | offer output from the tool |
+| ↳ `id` | number | Offer ID |
+| ↳ `version` | number | Offer version |
+| ↳ `starts_at` | string | Offer start date |
+| ↳ `custom_fields` | json | Offer custom fields |
+| ↳ `custom_fields` | json | Application custom fields |
+
+
+---
+
+### Greenhouse Candidate Rejected
+
+Trigger workflow when a candidate is rejected
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(reject_candidate\) |
+| `payload` | object | payload output from the tool |
+| ↳ `application` | object | application output from the tool |
+| ↳ `id` | number | Application ID |
+| ↳ `status` | string | Application status \(rejected\) |
+| ↳ `prospect` | boolean | Whether the applicant is a prospect |
+| ↳ `applied_at` | string | When the application was submitted |
+| ↳ `rejected_at` | string | When the candidate was rejected |
+| ↳ `url` | string | Application URL in Greenhouse |
+| ↳ `current_stage` | object | current_stage output from the tool |
+| ↳ `id` | number | Stage ID where rejected |
+| ↳ `name` | string | Stage name where rejected |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | number | Candidate ID |
+| ↳ `first_name` | string | First name |
+| ↳ `last_name` | string | Last name |
+| ↳ `email_addresses` | json | Email addresses |
+| ↳ `phone_numbers` | json | Phone numbers |
+| ↳ `jobs` | json | Associated jobs \(array\) |
+| ↳ `rejection_reason` | json | Rejection reason object with id, name, and type fields |
+| ↳ `rejection_details` | json | Rejection details with custom fields |
+| ↳ `custom_fields` | json | Application custom fields |
+
+
+---
+
+### Greenhouse Candidate Stage Change
+
+Trigger workflow when a candidate changes interview stages
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(candidate_stage_change\) |
+| `payload` | object | payload output from the tool |
+| ↳ `application` | object | application output from the tool |
+| ↳ `id` | number | Application ID |
+| ↳ `status` | string | Application status |
+| ↳ `prospect` | boolean | Whether the applicant is a prospect |
+| ↳ `applied_at` | string | When the application was submitted |
+| ↳ `url` | string | Application URL in Greenhouse |
+| ↳ `current_stage` | object | current_stage output from the tool |
+| ↳ `id` | number | Current stage ID |
+| ↳ `name` | string | Current stage name |
+| ↳ `interviews` | json | Interviews in this stage |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | number | Candidate ID |
+| ↳ `first_name` | string | First name |
+| ↳ `last_name` | string | Last name |
+| ↳ `title` | string | Current title |
+| ↳ `company` | string | Current company |
+| ↳ `email_addresses` | json | Email addresses |
+| ↳ `phone_numbers` | json | Phone numbers |
+| ↳ `jobs` | json | Associated jobs \(array\) |
+| ↳ `custom_fields` | json | Application custom fields |
+
+
+---
+
+### Greenhouse Job Created
+
+Trigger workflow when a new job is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(job_created\) |
+
+
+---
+
+### Greenhouse Job Updated
+
+Trigger workflow when a job is updated
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(job_updated\) |
+
+
+---
+
+### Greenhouse New Application
+
+Trigger workflow when a new application is submitted
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(new_candidate_application\) |
+| `payload` | object | payload output from the tool |
+| ↳ `application` | object | application output from the tool |
+| ↳ `id` | number | Application ID |
+| ↳ `status` | string | Application status |
+| ↳ `prospect` | boolean | Whether the applicant is a prospect |
+| ↳ `applied_at` | string | When the application was submitted |
+| ↳ `url` | string | Application URL in Greenhouse |
+| ↳ `current_stage` | object | current_stage output from the tool |
+| ↳ `id` | number | Current stage ID |
+| ↳ `name` | string | Current stage name |
+| ↳ `candidate` | object | candidate output from the tool |
+| ↳ `id` | number | Candidate ID |
+| ↳ `first_name` | string | First name |
+| ↳ `last_name` | string | Last name |
+| ↳ `title` | string | Current title |
+| ↳ `company` | string | Current company |
+| ↳ `created_at` | string | When the candidate was created |
+| ↳ `email_addresses` | json | Email addresses |
+| ↳ `phone_numbers` | json | Phone numbers |
+| ↳ `tags` | json | Candidate tags |
+| ↳ `jobs` | json | Associated jobs \(array\) |
+| ↳ `answers` | json | Application question answers |
+| ↳ `attachments` | json | Application attachments |
+| ↳ `custom_fields` | json | Application custom fields |
+
+
+---
+
+### Greenhouse Offer Created
+
+Trigger workflow when a new offer is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type \(offer_created\) |
+| `payload` | object | payload output from the tool |
+| ↳ `id` | number | Offer ID |
+| ↳ `application_id` | number | Associated application ID |
+| ↳ `job_id` | number | Associated job ID |
+| ↳ `user_id` | number | User who created the offer |
+| ↳ `version` | number | Offer version number |
+| ↳ `sent_on` | string | When the offer was sent |
+| ↳ `resolved_at` | string | When the offer was resolved |
+| ↳ `start_date` | string | Offer start date |
+| ↳ `notes` | string | Offer notes |
+| ↳ `offer_status` | string | Offer status |
+| ↳ `custom_fields` | json | Custom field values |
+
+
+---
+
+### Greenhouse Webhook (Endpoint Events)
+
+Trigger on whichever event types you select for this URL in Greenhouse. Sim does not filter deliveries for this trigger.
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretKey` | string | No | When set, requests must include a valid Signature header \(HMAC-SHA256\). If left empty, the endpoint does not verify signatures—only use on a private URL you fully control. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `applicationId` | number | Application id when present \(`payload.application.id` or flat `payload.application_id` on offers\) |
+| `candidateId` | number | Candidate id when `payload.application.candidate.id` is present |
+| `jobId` | number | Job id from `payload.job.id` or flat `payload.job_id` when present |
+| `action` | string | The webhook event type |
+| `payload` | json | Full event payload |
+
diff --git a/apps/docs/content/docs/en/triggers/hubspot.mdx b/apps/docs/content/docs/en/triggers/hubspot.mdx
new file mode 100644
index 00000000000..886f39e8e63
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/hubspot.mdx
@@ -0,0 +1,1144 @@
+---
+title: HubSpot
+description: Available HubSpot triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+HubSpot provides 27 triggers for automating workflows based on events.
+
+## Triggers
+
+### HubSpot Company Created
+
+Trigger workflow when a new company is created in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Company Deleted
+
+Trigger workflow when a company is deleted in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Company Merged
+
+Trigger workflow when companies are merged in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing merge event details |
+| ↳ `objectId` | number | HubSpot object ID \(winning/primary record\) |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `mergedObjectIds` | array | IDs of the objects that were merged into the primary record |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_contact_merged\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+
+
+---
+
+### HubSpot Company Property Changed
+
+Trigger workflow when any property of a company is updated in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+| `propertyName` | string | No | Optional: Filter to only trigger when a specific property changes. Leave empty to trigger on any property change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Company Restored
+
+Trigger workflow when a deleted company is restored in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Contact Created
+
+Trigger workflow when a new contact is created in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Contact Deleted
+
+Trigger workflow when a contact is deleted in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Contact Merged
+
+Trigger workflow when contacts are merged in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing merge event details |
+| ↳ `objectId` | number | HubSpot object ID \(winning/primary record\) |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `mergedObjectIds` | array | IDs of the objects that were merged into the primary record |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_contact_merged\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+
+
+---
+
+### HubSpot Contact Privacy Deleted
+
+Trigger workflow when a contact is deleted for privacy compliance (GDPR, CCPA, etc.) in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Contact Property Changed
+
+Trigger workflow when any property of a contact is updated in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+| `propertyName` | string | No | Optional: Filter to only trigger when a specific property changes. Leave empty to trigger on any property change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Contact Restored
+
+Trigger workflow when a deleted contact is restored in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Conversation Creation
+
+Trigger workflow when a new conversation is created in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Conversation Deletion
+
+Trigger workflow when a conversation is deleted in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Conversation New Message
+
+Trigger workflow when a new message is added to a conversation in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Conversation Privacy Deletion
+
+Trigger workflow when a conversation is deleted for privacy compliance (GDPR, CCPA, etc.) in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Conversation Property Changed
+
+Trigger workflow when any property of a conversation is updated in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+| `propertyName` | string | No | Optional: Filter to only trigger when a specific property changes. Leave empty to trigger on any property change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Deal Created
+
+Trigger workflow when a new deal is created in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Deal Deleted
+
+Trigger workflow when a deal is deleted in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Deal Merged
+
+Trigger workflow when deals are merged in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing merge event details |
+| ↳ `objectId` | number | HubSpot object ID \(winning/primary record\) |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `mergedObjectIds` | array | IDs of the objects that were merged into the primary record |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_contact_merged\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+
+
+---
+
+### HubSpot Deal Property Changed
+
+Trigger workflow when any property of a deal is updated in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+| `propertyName` | string | No | Optional: Filter to only trigger when a specific property changes. Leave empty to trigger on any property change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Deal Restored
+
+Trigger workflow when a deleted deal is restored in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Ticket Created
+
+Trigger workflow when a new ticket is created in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Ticket Deleted
+
+Trigger workflow when a ticket is deleted in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Ticket Merged
+
+Trigger workflow when tickets are merged in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing merge event details |
+| ↳ `objectId` | number | HubSpot object ID \(winning/primary record\) |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `mergedObjectIds` | array | IDs of the objects that were merged into the primary record |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_contact_merged\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+
+
+---
+
+### HubSpot Ticket Property Changed
+
+Trigger workflow when any property of a ticket is updated in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+| `propertyName` | string | No | Optional: Filter to only trigger when a specific property changes. Leave empty to trigger on any property change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Ticket Restored
+
+Trigger workflow when a deleted ticket is restored in HubSpot
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
+
+---
+
+### HubSpot Webhook (All Events)
+
+Trigger workflow on any HubSpot webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `clientId` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `clientSecret` | string | Yes | Found in your HubSpot app settings under Auth tab |
+| `appId` | string | Yes | Found in your HubSpot app settings. Used to identify your app. |
+| `developerApiKey` | string | Yes | Used for making API calls to HubSpot. Found in your HubSpot app settings. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `payload` | array | Full webhook payload array from HubSpot containing event details |
+| ↳ `objectId` | number | HubSpot object ID |
+| ↳ `subscriptionType` | string | Type of subscription event |
+| ↳ `portalId` | number | HubSpot portal ID |
+| ↳ `occurredAt` | number | Timestamp when event occurred \(ms\) |
+| ↳ `attemptNumber` | number | Webhook delivery attempt number |
+| ↳ `eventId` | number | Event ID |
+| ↳ `changeSource` | string | Source of the change |
+| ↳ `propertyName` | string | Property name \(for propertyChange events\) |
+| ↳ `propertyValue` | string | New property value \(for propertyChange events\) |
+| `provider` | string | Provider name \(hubspot\) |
+| `providerConfig` | object | Provider configuration |
+| ↳ `appId` | string | HubSpot App ID |
+| ↳ `clientId` | string | HubSpot Client ID |
+| ↳ `triggerId` | string | Trigger ID \(e.g., hubspot_company_created\) |
+| ↳ `clientSecret` | string | HubSpot Client Secret |
+| ↳ `developerApiKey` | string | HubSpot Developer API Key |
+| ↳ `curlSetWebhookUrl` | string | curl command to set webhook URL |
+| ↳ `curlCreateSubscription` | string | curl command to create subscription |
+| ↳ `webhookUrlDisplay` | string | Webhook URL display value |
+| ↳ `propertyName` | string | Optional property name filter \(for property change triggers\) |
+
diff --git a/apps/docs/content/docs/en/triggers/imap.mdx b/apps/docs/content/docs/en/triggers/imap.mdx
new file mode 100644
index 00000000000..9ef6e2fb07c
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/imap.mdx
@@ -0,0 +1,54 @@
+---
+title: IMAP
+description: Available IMAP triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+IMAP provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### IMAP Email Trigger
+
+Triggers when new emails are received via IMAP (works with any email provider)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `host` | string | Yes | IMAP server hostname \(e.g., imap.gmail.com, outlook.office365.com\) |
+| `port` | string | Yes | IMAP port \(993 for SSL/TLS, 143 for STARTTLS\) |
+| `secure` | boolean | No | Enable SSL/TLS encryption \(recommended for port 993\) |
+| `username` | string | Yes | Email address or username for authentication |
+| `password` | string | Yes | Password or app-specific password \(for Gmail, use an App Password\) |
+| `mailbox` | string | No | Choose which mailbox/folder\(s\) to monitor for new emails. Leave empty to monitor INBOX. |
+| `searchCriteria` | string | No | ImapFlow search criteria as JSON object. Default: unseen messages only. |
+| `markAsRead` | boolean | No | Automatically mark emails as read \(SEEN\) after processing |
+| `includeAttachments` | boolean | No | Download and include email attachments in the trigger payload |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `email` | object | email output from the tool |
+| ↳ `messageId` | string | RFC Message-ID header |
+| ↳ `subject` | string | Email subject line |
+| ↳ `from` | string | Sender email address |
+| ↳ `to` | string | Recipient email address |
+| ↳ `cc` | string | CC recipients |
+| ↳ `date` | string | Email date in ISO format |
+| ↳ `bodyText` | string | Plain text email body |
+| ↳ `bodyHtml` | string | HTML email body |
+| ↳ `mailbox` | string | Mailbox/folder where email was received |
+| ↳ `hasAttachments` | boolean | Whether email has attachments |
+| ↳ `attachments` | file[] | Array of email attachments as files \(if includeAttachments is enabled\) |
+| `timestamp` | string | Event timestamp |
+
diff --git a/apps/docs/content/docs/en/triggers/intercom.mdx b/apps/docs/content/docs/en/triggers/intercom.mdx
new file mode 100644
index 00000000000..e377f21adbe
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/intercom.mdx
@@ -0,0 +1,163 @@
+---
+title: Intercom
+description: Available Intercom triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Intercom provides 6 triggers for automating workflows based on events.
+
+## Triggers
+
+### Intercom Contact Created
+
+Trigger workflow when a new lead is created in Intercom
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
+
+---
+
+### Intercom Conversation Closed
+
+Trigger workflow when a conversation is closed in Intercom
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
+
+---
+
+### Intercom Conversation Created
+
+Trigger workflow when a new conversation is created in Intercom
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
+
+---
+
+### Intercom Conversation Reply
+
+Trigger workflow when someone replies to an Intercom conversation
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
+
+---
+
+### Intercom User Created
+
+Trigger workflow when a new user is created in Intercom
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
+
+---
+
+### Intercom Webhook (All Events)
+
+Trigger workflow on any Intercom webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Your app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `topic` | string | The webhook topic \(e.g., conversation.user.created\) |
+| `id` | string | Unique notification ID |
+| `app_id` | string | Your Intercom app ID |
+| `created_at` | number | Unix timestamp when the event occurred |
+| `delivery_attempts` | number | Number of delivery attempts for this notification |
+| `first_sent_at` | number | Unix timestamp of first delivery attempt |
+| `data` | json | data output from the tool |
+
diff --git a/apps/docs/content/docs/en/triggers/jira.mdx b/apps/docs/content/docs/en/triggers/jira.mdx
new file mode 100644
index 00000000000..08ac88bc82f
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/jira.mdx
@@ -0,0 +1,392 @@
+---
+title: Jira
+description: Available Jira triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Jira provides 6 triggers for automating workflows based on events.
+
+## Triggers
+
+### Jira Issue Commented
+
+Trigger workflow when a comment is added to a Jira issue
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+| `jqlFilter` | string | No | Filter which issue comments trigger this workflow using JQL |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `webhookEvent` | string | The webhook event type \(e.g., jira:issue_created, comment_created, worklog_created\) |
+| `timestamp` | number | Timestamp of the webhook event |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | string | Jira issue ID |
+| ↳ `key` | string | Jira issue key \(e.g., PROJ-123\) |
+| ↳ `self` | string | REST API URL for this issue |
+| ↳ `fields` | object | fields output from the tool |
+| ↳ `votes` | json | Votes on this issue |
+| ↳ `labels` | array | Array of labels applied to this issue |
+| ↳ `status` | object | status output from the tool |
+| ↳ `name` | string | Status name |
+| ↳ `id` | string | Status ID |
+| ↳ `statusCategory` | json | Status category information |
+| ↳ `created` | string | Issue creation date \(ISO format\) |
+| ↳ `creator` | object | creator output from the tool |
+| ↳ `displayName` | string | Creator display name |
+| ↳ `accountId` | string | Creator account ID |
+| ↳ `emailAddress` | string | Creator email address |
+| ↳ `duedate` | string | Due date for the issue |
+| ↳ `project` | object | project output from the tool |
+| ↳ `key` | string | Project key |
+| ↳ `name` | string | Project name |
+| ↳ `id` | string | Project ID |
+| ↳ `summary` | string | Issue summary/title |
+| ↳ `updated` | string | Last updated date \(ISO format\) |
+| ↳ `watches` | json | Watchers information |
+| ↳ `assignee` | object | assignee output from the tool |
+| ↳ `displayName` | string | Assignee display name |
+| ↳ `accountId` | string | Assignee account ID |
+| ↳ `emailAddress` | string | Assignee email address |
+| ↳ `priority` | object | priority output from the tool |
+| ↳ `name` | string | Priority name |
+| ↳ `id` | string | Priority ID |
+| ↳ `progress` | json | Progress tracking information |
+| ↳ `reporter` | object | reporter output from the tool |
+| ↳ `displayName` | string | Reporter display name |
+| ↳ `accountId` | string | Reporter account ID |
+| ↳ `emailAddress` | string | Reporter email address |
+| ↳ `security` | string | Security level |
+| ↳ `subtasks` | array | Array of subtask objects |
+| ↳ `versions` | array | Array of affected versions |
+| ↳ `issuetype` | object | issuetype output from the tool |
+| ↳ `name` | string | Issue type name |
+| ↳ `id` | string | Issue type ID |
+| `comment` | object | comment output from the tool |
+| ↳ `id` | string | Comment ID |
+| ↳ `body` | string | Comment text/body |
+| ↳ `author` | object | author output from the tool |
+| ↳ `displayName` | string | Comment author display name |
+| ↳ `accountId` | string | Comment author account ID |
+| ↳ `emailAddress` | string | Comment author email address |
+| ↳ `created` | string | Comment creation date \(ISO format\) |
+| ↳ `updated` | string | Comment last updated date \(ISO format\) |
+
+
+---
+
+### Jira Issue Created
+
+Trigger workflow when a new issue is created in Jira
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+| `jqlFilter` | string | No | Filter which issues trigger this workflow using JQL \(Jira Query Language\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `webhookEvent` | string | The webhook event type \(e.g., jira:issue_created, comment_created, worklog_created\) |
+| `timestamp` | number | Timestamp of the webhook event |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | string | Jira issue ID |
+| ↳ `key` | string | Jira issue key \(e.g., PROJ-123\) |
+| ↳ `self` | string | REST API URL for this issue |
+| ↳ `fields` | object | fields output from the tool |
+| ↳ `votes` | json | Votes on this issue |
+| ↳ `labels` | array | Array of labels applied to this issue |
+| ↳ `status` | object | status output from the tool |
+| ↳ `name` | string | Status name |
+| ↳ `id` | string | Status ID |
+| ↳ `statusCategory` | json | Status category information |
+| ↳ `created` | string | Issue creation date \(ISO format\) |
+| ↳ `creator` | object | creator output from the tool |
+| ↳ `displayName` | string | Creator display name |
+| ↳ `accountId` | string | Creator account ID |
+| ↳ `emailAddress` | string | Creator email address |
+| ↳ `duedate` | string | Due date for the issue |
+| ↳ `project` | object | project output from the tool |
+| ↳ `key` | string | Project key |
+| ↳ `name` | string | Project name |
+| ↳ `id` | string | Project ID |
+| ↳ `summary` | string | Issue summary/title |
+| ↳ `updated` | string | Last updated date \(ISO format\) |
+| ↳ `watches` | json | Watchers information |
+| ↳ `assignee` | object | assignee output from the tool |
+| ↳ `displayName` | string | Assignee display name |
+| ↳ `accountId` | string | Assignee account ID |
+| ↳ `emailAddress` | string | Assignee email address |
+| ↳ `priority` | object | priority output from the tool |
+| ↳ `name` | string | Priority name |
+| ↳ `id` | string | Priority ID |
+| ↳ `progress` | json | Progress tracking information |
+| ↳ `reporter` | object | reporter output from the tool |
+| ↳ `displayName` | string | Reporter display name |
+| ↳ `accountId` | string | Reporter account ID |
+| ↳ `emailAddress` | string | Reporter email address |
+| ↳ `security` | string | Security level |
+| ↳ `subtasks` | array | Array of subtask objects |
+| ↳ `versions` | array | Array of affected versions |
+| ↳ `issuetype` | object | issuetype output from the tool |
+| ↳ `name` | string | Issue type name |
+| ↳ `id` | string | Issue type ID |
+| `issue_event_type_name` | string | Issue event type name from Jira \(only present in issue events\) |
+
+
+---
+
+### Jira Issue Deleted
+
+Trigger workflow when an issue is deleted in Jira
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+| `jqlFilter` | string | No | Filter which issue deletions trigger this workflow using JQL |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `webhookEvent` | string | The webhook event type \(e.g., jira:issue_created, comment_created, worklog_created\) |
+| `timestamp` | number | Timestamp of the webhook event |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | string | Jira issue ID |
+| ↳ `key` | string | Jira issue key \(e.g., PROJ-123\) |
+| ↳ `self` | string | REST API URL for this issue |
+| ↳ `fields` | object | fields output from the tool |
+| ↳ `votes` | json | Votes on this issue |
+| ↳ `labels` | array | Array of labels applied to this issue |
+| ↳ `status` | object | status output from the tool |
+| ↳ `name` | string | Status name |
+| ↳ `id` | string | Status ID |
+| ↳ `statusCategory` | json | Status category information |
+| ↳ `created` | string | Issue creation date \(ISO format\) |
+| ↳ `creator` | object | creator output from the tool |
+| ↳ `displayName` | string | Creator display name |
+| ↳ `accountId` | string | Creator account ID |
+| ↳ `emailAddress` | string | Creator email address |
+| ↳ `duedate` | string | Due date for the issue |
+| ↳ `project` | object | project output from the tool |
+| ↳ `key` | string | Project key |
+| ↳ `name` | string | Project name |
+| ↳ `id` | string | Project ID |
+| ↳ `summary` | string | Issue summary/title |
+| ↳ `updated` | string | Last updated date \(ISO format\) |
+| ↳ `watches` | json | Watchers information |
+| ↳ `assignee` | object | assignee output from the tool |
+| ↳ `displayName` | string | Assignee display name |
+| ↳ `accountId` | string | Assignee account ID |
+| ↳ `emailAddress` | string | Assignee email address |
+| ↳ `priority` | object | priority output from the tool |
+| ↳ `name` | string | Priority name |
+| ↳ `id` | string | Priority ID |
+| ↳ `progress` | json | Progress tracking information |
+| ↳ `reporter` | object | reporter output from the tool |
+| ↳ `displayName` | string | Reporter display name |
+| ↳ `accountId` | string | Reporter account ID |
+| ↳ `emailAddress` | string | Reporter email address |
+| ↳ `security` | string | Security level |
+| ↳ `subtasks` | array | Array of subtask objects |
+| ↳ `versions` | array | Array of affected versions |
+| ↳ `issuetype` | object | issuetype output from the tool |
+| ↳ `name` | string | Issue type name |
+| ↳ `id` | string | Issue type ID |
+| `issue_event_type_name` | string | Issue event type name from Jira \(only present in issue events\) |
+
+
+---
+
+### Jira Issue Updated
+
+Trigger workflow when an issue is updated in Jira
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+| `jqlFilter` | string | No | Filter which issue updates trigger this workflow using JQL |
+| `fieldFilters` | string | No | Comma-separated list of fields to monitor. Only trigger when these fields change. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `webhookEvent` | string | The webhook event type \(e.g., jira:issue_created, comment_created, worklog_created\) |
+| `timestamp` | number | Timestamp of the webhook event |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | string | Jira issue ID |
+| ↳ `key` | string | Jira issue key \(e.g., PROJ-123\) |
+| ↳ `self` | string | REST API URL for this issue |
+| ↳ `fields` | object | fields output from the tool |
+| ↳ `votes` | json | Votes on this issue |
+| ↳ `labels` | array | Array of labels applied to this issue |
+| ↳ `status` | object | status output from the tool |
+| ↳ `name` | string | Status name |
+| ↳ `id` | string | Status ID |
+| ↳ `statusCategory` | json | Status category information |
+| ↳ `created` | string | Issue creation date \(ISO format\) |
+| ↳ `creator` | object | creator output from the tool |
+| ↳ `displayName` | string | Creator display name |
+| ↳ `accountId` | string | Creator account ID |
+| ↳ `emailAddress` | string | Creator email address |
+| ↳ `duedate` | string | Due date for the issue |
+| ↳ `project` | object | project output from the tool |
+| ↳ `key` | string | Project key |
+| ↳ `name` | string | Project name |
+| ↳ `id` | string | Project ID |
+| ↳ `summary` | string | Issue summary/title |
+| ↳ `updated` | string | Last updated date \(ISO format\) |
+| ↳ `watches` | json | Watchers information |
+| ↳ `assignee` | object | assignee output from the tool |
+| ↳ `displayName` | string | Assignee display name |
+| ↳ `accountId` | string | Assignee account ID |
+| ↳ `emailAddress` | string | Assignee email address |
+| ↳ `priority` | object | priority output from the tool |
+| ↳ `name` | string | Priority name |
+| ↳ `id` | string | Priority ID |
+| ↳ `progress` | json | Progress tracking information |
+| ↳ `reporter` | object | reporter output from the tool |
+| ↳ `displayName` | string | Reporter display name |
+| ↳ `accountId` | string | Reporter account ID |
+| ↳ `emailAddress` | string | Reporter email address |
+| ↳ `security` | string | Security level |
+| ↳ `subtasks` | array | Array of subtask objects |
+| ↳ `versions` | array | Array of affected versions |
+| ↳ `issuetype` | object | issuetype output from the tool |
+| ↳ `name` | string | Issue type name |
+| ↳ `id` | string | Issue type ID |
+| `issue_event_type_name` | string | Issue event type name from Jira \(only present in issue events\) |
+| `changelog` | object | changelog output from the tool |
+| ↳ `id` | string | Changelog ID |
+
+
+---
+
+### Jira Webhook (All Events)
+
+Trigger workflow on any Jira webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `changelog` | object | changelog output from the tool |
+| ↳ `id` | string | Changelog ID |
+| `comment` | object | comment output from the tool |
+| ↳ `id` | string | Comment ID |
+| ↳ `body` | string | Comment text/body |
+| ↳ `author` | object | author output from the tool |
+| ↳ `displayName` | string | Comment author display name |
+| ↳ `accountId` | string | Comment author account ID |
+| ↳ `emailAddress` | string | Comment author email address |
+| ↳ `created` | string | Comment creation date \(ISO format\) |
+| ↳ `updated` | string | Comment last updated date \(ISO format\) |
+| `worklog` | object | worklog output from the tool |
+| ↳ `id` | string | Worklog entry ID |
+| ↳ `author` | object | author output from the tool |
+| ↳ `displayName` | string | Worklog author display name |
+| ↳ `accountId` | string | Worklog author account ID |
+| ↳ `emailAddress` | string | Worklog author email address |
+| ↳ `timeSpent` | string | Time spent \(e.g., "2h 30m"\) |
+| ↳ `timeSpentSeconds` | number | Time spent in seconds |
+| ↳ `comment` | string | Worklog comment/description |
+| ↳ `started` | string | When the work was started \(ISO format\) |
+
+
+---
+
+### Jira Worklog Created
+
+Trigger workflow when time is logged on a Jira issue
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | Optional secret to validate webhook deliveries from Jira using HMAC signature |
+| `jqlFilter` | string | No | Filter which worklog entries trigger this workflow using JQL |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `webhookEvent` | string | The webhook event type \(e.g., jira:issue_created, comment_created, worklog_created\) |
+| `timestamp` | number | Timestamp of the webhook event |
+| `issue` | object | issue output from the tool |
+| ↳ `id` | string | Jira issue ID |
+| ↳ `key` | string | Jira issue key \(e.g., PROJ-123\) |
+| ↳ `self` | string | REST API URL for this issue |
+| ↳ `fields` | object | fields output from the tool |
+| ↳ `votes` | json | Votes on this issue |
+| ↳ `labels` | array | Array of labels applied to this issue |
+| ↳ `status` | object | status output from the tool |
+| ↳ `name` | string | Status name |
+| ↳ `id` | string | Status ID |
+| ↳ `statusCategory` | json | Status category information |
+| ↳ `created` | string | Issue creation date \(ISO format\) |
+| ↳ `creator` | object | creator output from the tool |
+| ↳ `displayName` | string | Creator display name |
+| ↳ `accountId` | string | Creator account ID |
+| ↳ `emailAddress` | string | Creator email address |
+| ↳ `duedate` | string | Due date for the issue |
+| ↳ `project` | object | project output from the tool |
+| ↳ `key` | string | Project key |
+| ↳ `name` | string | Project name |
+| ↳ `id` | string | Project ID |
+| ↳ `summary` | string | Issue summary/title |
+| ↳ `updated` | string | Last updated date \(ISO format\) |
+| ↳ `watches` | json | Watchers information |
+| ↳ `assignee` | object | assignee output from the tool |
+| ↳ `displayName` | string | Assignee display name |
+| ↳ `accountId` | string | Assignee account ID |
+| ↳ `emailAddress` | string | Assignee email address |
+| ↳ `priority` | object | priority output from the tool |
+| ↳ `name` | string | Priority name |
+| ↳ `id` | string | Priority ID |
+| ↳ `progress` | json | Progress tracking information |
+| ↳ `reporter` | object | reporter output from the tool |
+| ↳ `displayName` | string | Reporter display name |
+| ↳ `accountId` | string | Reporter account ID |
+| ↳ `emailAddress` | string | Reporter email address |
+| ↳ `security` | string | Security level |
+| ↳ `subtasks` | array | Array of subtask objects |
+| ↳ `versions` | array | Array of affected versions |
+| ↳ `issuetype` | object | issuetype output from the tool |
+| ↳ `name` | string | Issue type name |
+| ↳ `id` | string | Issue type ID |
+| `worklog` | object | worklog output from the tool |
+| ↳ `id` | string | Worklog entry ID |
+| ↳ `author` | object | author output from the tool |
+| ↳ `displayName` | string | Worklog author display name |
+| ↳ `accountId` | string | Worklog author account ID |
+| ↳ `emailAddress` | string | Worklog author email address |
+| ↳ `timeSpent` | string | Time spent \(e.g., "2h 30m"\) |
+| ↳ `timeSpentSeconds` | number | Time spent in seconds |
+| ↳ `comment` | string | Worklog comment/description |
+| ↳ `started` | string | When the work was started \(ISO format\) |
+
diff --git a/apps/docs/content/docs/en/triggers/lemlist.mdx b/apps/docs/content/docs/en/triggers/lemlist.mdx
new file mode 100644
index 00000000000..1af50a5d6d0
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/lemlist.mdx
@@ -0,0 +1,366 @@
+---
+title: Lemlist
+description: Available Lemlist triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Lemlist provides 9 triggers for automating workflows based on events.
+
+## Triggers
+
+### Lemlist Email Bounced
+
+Trigger workflow when an email bounces
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `messageId` | string | Email message ID that bounced |
+| `errorMessage` | string | Bounce error message |
+
+
+---
+
+### Lemlist Email Clicked
+
+Trigger workflow when a lead clicks a link in an email
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `messageId` | string | Email message ID containing the clicked link |
+| `clickedUrl` | string | URL that was clicked |
+
+
+---
+
+### Lemlist Email Opened
+
+Trigger workflow when a lead opens an email
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `messageId` | string | Email message ID that was opened |
+
+
+---
+
+### Lemlist Email Replied
+
+Trigger workflow when a lead replies to an email
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `subject` | string | Email subject line |
+| `text` | string | Email body content \(HTML\) |
+| `messageId` | string | Email message ID \(RFC 2822 format\) |
+| `emailId` | string | Lemlist email identifier |
+
+
+---
+
+### Lemlist Email Sent
+
+Trigger workflow when an email is sent
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `subject` | string | Email subject line |
+| `text` | string | Email body content \(HTML\) |
+| `messageId` | string | Email message ID \(RFC 2822 format\) |
+| `emailId` | string | Lemlist email identifier |
+
+
+---
+
+### Lemlist Lead Interested
+
+Trigger workflow when a lead is marked as interested
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+
+
+---
+
+### Lemlist Lead Not Interested
+
+Trigger workflow when a lead is marked as not interested
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+
+
+---
+
+### Lemlist LinkedIn Replied
+
+Trigger workflow when a lead replies to a LinkedIn message
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `text` | string | LinkedIn message content |
+
+
+---
+
+### Lemlist Webhook (All Events)
+
+Trigger workflow on any Lemlist webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Lemlist. |
+| `campaignId` | string | No | Optionally scope the webhook to a specific campaign |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `_id` | string | Unique activity identifier |
+| `type` | string | Activity type \(e.g., emailsSent, emailsReplied\) |
+| `createdAt` | string | Activity creation timestamp \(ISO 8601\) |
+| `teamId` | string | Lemlist team identifier |
+| `leadId` | string | Lead identifier \(only present for campaign activities\) |
+| `campaignId` | string | Campaign identifier \(only present for campaign activities\) |
+| `campaignName` | string | Campaign name \(only present for campaign activities\) |
+| `email` | string | Lead email address |
+| `firstName` | string | Lead first name |
+| `lastName` | string | Lead last name |
+| `companyName` | string | Lead company name |
+| `linkedinUrl` | string | Lead LinkedIn profile URL |
+| `sequenceId` | string | Sequence identifier |
+| `sequenceStep` | number | Current step in the sequence \(0-indexed\) |
+| `totalSequenceStep` | number | Total number of steps in the sequence |
+| `isFirst` | boolean | Whether this is the first activity of this type for this step |
+| `sendUserId` | string | Sender user identifier |
+| `sendUserEmail` | string | Sender email address |
+| `sendUserName` | string | Sender display name |
+| `subject` | string | Email subject line |
+| `text` | string | Email body content \(HTML\) |
+| `messageId` | string | Email message ID \(RFC 2822 format\) |
+| `emailId` | string | Lemlist email identifier |
+| `clickedUrl` | string | URL that was clicked \(for emailsClicked events\) |
+| `errorMessage` | string | Error message \(for bounce/failed events\) |
+
diff --git a/apps/docs/content/docs/en/triggers/linear.mdx b/apps/docs/content/docs/en/triggers/linear.mdx
new file mode 100644
index 00000000000..6d9e41d807e
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/linear.mdx
@@ -0,0 +1,703 @@
+---
+title: Linear
+description: Available Linear triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Linear provides 15 triggers for automating workflows based on events.
+
+## Triggers
+
+### Linear Comment Created
+
+Trigger workflow when a new comment is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Comment\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Comment ID |
+| ↳ `body` | string | Comment body text |
+| ↳ `edited` | boolean | Whether the comment body has been edited \(Linear webhook payload field\) |
+| ↳ `url` | string | Comment URL |
+| ↳ `issueId` | string | Issue ID this comment belongs to |
+| ↳ `userId` | string | User ID of the comment author |
+| ↳ `editedAt` | string | Last edited timestamp |
+| ↳ `createdAt` | string | Comment creation timestamp |
+| ↳ `updatedAt` | string | Comment last update timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `resolvedAt` | string | Resolved timestamp \(for comment threads\) |
+| ↳ `parent` | object | Parent comment object \(if this is a reply\) |
+| ↳ `reactionData` | object | Reaction data for the comment |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Comment Updated
+
+Trigger workflow when a comment is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Comment\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Comment ID |
+| ↳ `body` | string | Comment body text |
+| ↳ `edited` | boolean | Whether the comment body has been edited \(Linear webhook payload field\) |
+| ↳ `url` | string | Comment URL |
+| ↳ `issueId` | string | Issue ID this comment belongs to |
+| ↳ `userId` | string | User ID of the comment author |
+| ↳ `editedAt` | string | Last edited timestamp |
+| ↳ `createdAt` | string | Comment creation timestamp |
+| ↳ `updatedAt` | string | Comment last update timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `resolvedAt` | string | Resolved timestamp \(for comment threads\) |
+| ↳ `parent` | object | Parent comment object \(if this is a reply\) |
+| ↳ `reactionData` | object | Reaction data for the comment |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Customer Request Created
+
+Trigger workflow when a new customer request is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(CustomerNeed\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Customer request ID |
+| ↳ `body` | string | Request body content \(Markdown\) |
+| ↳ `priority` | number | Request priority \(0 = Not important, 1 = Important\) |
+| ↳ `customerId` | string | Customer ID |
+| ↳ `issueId` | string | Linked issue ID |
+| ↳ `projectId` | string | Associated project ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `url` | string | Customer request URL |
+| ↳ `createdAt` | string | Request creation timestamp |
+| ↳ `updatedAt` | string | Request last update timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Customer Request Updated
+
+Trigger workflow when a customer request is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(CustomerNeed\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Customer request ID |
+| ↳ `body` | string | Request body content \(Markdown\) |
+| ↳ `priority` | number | Request priority \(0 = Not important, 1 = Important\) |
+| ↳ `customerId` | string | Customer ID |
+| ↳ `issueId` | string | Linked issue ID |
+| ↳ `projectId` | string | Associated project ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `url` | string | Customer request URL |
+| ↳ `createdAt` | string | Request creation timestamp |
+| ↳ `updatedAt` | string | Request last update timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Cycle Created
+
+Trigger workflow when a new cycle is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Cycle\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Cycle ID |
+| ↳ `number` | number | Cycle number |
+| ↳ `name` | string | Cycle name |
+| ↳ `description` | string | Cycle description |
+| ↳ `teamId` | string | Team ID |
+| ↳ `startsAt` | string | Cycle start date |
+| ↳ `endsAt` | string | Cycle end date |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `autoArchivedAt` | string | Auto-archived timestamp |
+| ↳ `createdAt` | string | Cycle creation timestamp |
+| ↳ `updatedAt` | string | Cycle last update timestamp |
+| ↳ `progress` | number | Cycle progress \(0-1\) |
+| ↳ `scopeHistory` | array | History of scope changes |
+| ↳ `completedScopeHistory` | array | History of completed scope |
+| ↳ `inProgressScopeHistory` | array | History of in-progress scope |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Cycle Updated
+
+Trigger workflow when a cycle is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Cycle\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Cycle ID |
+| ↳ `number` | number | Cycle number |
+| ↳ `name` | string | Cycle name |
+| ↳ `description` | string | Cycle description |
+| ↳ `teamId` | string | Team ID |
+| ↳ `startsAt` | string | Cycle start date |
+| ↳ `endsAt` | string | Cycle end date |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `autoArchivedAt` | string | Auto-archived timestamp |
+| ↳ `createdAt` | string | Cycle creation timestamp |
+| ↳ `updatedAt` | string | Cycle last update timestamp |
+| ↳ `progress` | number | Cycle progress \(0-1\) |
+| ↳ `scopeHistory` | array | History of scope changes |
+| ↳ `completedScopeHistory` | array | History of completed scope |
+| ↳ `inProgressScopeHistory` | array | History of in-progress scope |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Issue Created
+
+Trigger workflow when a new issue is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Issue\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Issue ID |
+| ↳ `title` | string | Issue title |
+| ↳ `description` | string | Issue description |
+| ↳ `identifier` | string | Issue identifier \(e.g., ENG-123\) |
+| ↳ `number` | number | Issue number |
+| ↳ `priority` | number | Issue priority \(0 = None, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low\) |
+| ↳ `estimate` | number | Issue estimate |
+| ↳ `sortOrder` | number | Issue sort order |
+| ↳ `teamId` | string | Team ID |
+| ↳ `stateId` | string | Workflow state ID |
+| ↳ `assigneeId` | string | Assignee user ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `projectId` | string | Project ID |
+| ↳ `cycleId` | string | Cycle ID |
+| ↳ `parentId` | string | Parent issue ID \(for sub-issues\) |
+| ↳ `labelIds` | array | Array of label IDs |
+| ↳ `subscriberIds` | array | Array of subscriber user IDs |
+| ↳ `url` | string | Issue URL |
+| ↳ `branchName` | string | Git branch name |
+| ↳ `customerTicketCount` | number | Number of customer tickets |
+| ↳ `dueDate` | string | Issue due date |
+| ↳ `snoozedUntilAt` | string | Snoozed until timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `canceledAt` | string | Canceled timestamp |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `startedAt` | string | Started timestamp |
+| ↳ `triagedAt` | string | Triaged timestamp |
+| ↳ `createdAt` | string | Issue creation timestamp |
+| ↳ `updatedAt` | string | Issue last update timestamp |
+| ↳ `autoArchivedAt` | string | Auto-archived timestamp |
+| ↳ `autoClosedAt` | string | Auto-closed timestamp |
+| ↳ `previousIdentifiers` | array | Array of previous issue identifiers \(when an issue is moved between teams\) |
+| ↳ `integrationSourceType` | string | Integration source type \(if created from an integration\) |
+| ↳ `slaStartedAt` | string | SLA timer started timestamp |
+| ↳ `slaBreachesAt` | string | SLA breach timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Issue Removed
+
+Trigger workflow when an issue is removed/deleted in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Issue\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Issue ID |
+| ↳ `title` | string | Issue title |
+| ↳ `description` | string | Issue description |
+| ↳ `identifier` | string | Issue identifier \(e.g., ENG-123\) |
+| ↳ `number` | number | Issue number |
+| ↳ `priority` | number | Issue priority \(0 = None, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low\) |
+| ↳ `estimate` | number | Issue estimate |
+| ↳ `sortOrder` | number | Issue sort order |
+| ↳ `teamId` | string | Team ID |
+| ↳ `stateId` | string | Workflow state ID |
+| ↳ `assigneeId` | string | Assignee user ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `projectId` | string | Project ID |
+| ↳ `cycleId` | string | Cycle ID |
+| ↳ `parentId` | string | Parent issue ID \(for sub-issues\) |
+| ↳ `labelIds` | array | Array of label IDs |
+| ↳ `subscriberIds` | array | Array of subscriber user IDs |
+| ↳ `url` | string | Issue URL |
+| ↳ `branchName` | string | Git branch name |
+| ↳ `customerTicketCount` | number | Number of customer tickets |
+| ↳ `dueDate` | string | Issue due date |
+| ↳ `snoozedUntilAt` | string | Snoozed until timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `canceledAt` | string | Canceled timestamp |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `startedAt` | string | Started timestamp |
+| ↳ `triagedAt` | string | Triaged timestamp |
+| ↳ `createdAt` | string | Issue creation timestamp |
+| ↳ `updatedAt` | string | Issue last update timestamp |
+| ↳ `autoArchivedAt` | string | Auto-archived timestamp |
+| ↳ `autoClosedAt` | string | Auto-closed timestamp |
+| ↳ `previousIdentifiers` | array | Array of previous issue identifiers \(when an issue is moved between teams\) |
+| ↳ `integrationSourceType` | string | Integration source type \(if created from an integration\) |
+| ↳ `slaStartedAt` | string | SLA timer started timestamp |
+| ↳ `slaBreachesAt` | string | SLA breach timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Issue Updated
+
+Trigger workflow when an issue is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Issue\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Issue ID |
+| ↳ `title` | string | Issue title |
+| ↳ `description` | string | Issue description |
+| ↳ `identifier` | string | Issue identifier \(e.g., ENG-123\) |
+| ↳ `number` | number | Issue number |
+| ↳ `priority` | number | Issue priority \(0 = None, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low\) |
+| ↳ `estimate` | number | Issue estimate |
+| ↳ `sortOrder` | number | Issue sort order |
+| ↳ `teamId` | string | Team ID |
+| ↳ `stateId` | string | Workflow state ID |
+| ↳ `assigneeId` | string | Assignee user ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `projectId` | string | Project ID |
+| ↳ `cycleId` | string | Cycle ID |
+| ↳ `parentId` | string | Parent issue ID \(for sub-issues\) |
+| ↳ `labelIds` | array | Array of label IDs |
+| ↳ `subscriberIds` | array | Array of subscriber user IDs |
+| ↳ `url` | string | Issue URL |
+| ↳ `branchName` | string | Git branch name |
+| ↳ `customerTicketCount` | number | Number of customer tickets |
+| ↳ `dueDate` | string | Issue due date |
+| ↳ `snoozedUntilAt` | string | Snoozed until timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `canceledAt` | string | Canceled timestamp |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `startedAt` | string | Started timestamp |
+| ↳ `triagedAt` | string | Triaged timestamp |
+| ↳ `createdAt` | string | Issue creation timestamp |
+| ↳ `updatedAt` | string | Issue last update timestamp |
+| ↳ `autoArchivedAt` | string | Auto-archived timestamp |
+| ↳ `autoClosedAt` | string | Auto-closed timestamp |
+| ↳ `previousIdentifiers` | array | Array of previous issue identifiers \(when an issue is moved between teams\) |
+| ↳ `integrationSourceType` | string | Integration source type \(if created from an integration\) |
+| ↳ `slaStartedAt` | string | SLA timer started timestamp |
+| ↳ `slaBreachesAt` | string | SLA breach timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Label Created
+
+Trigger workflow when a new label is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(IssueLabel\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Label ID |
+| ↳ `name` | string | Label name |
+| ↳ `description` | string | Label description |
+| ↳ `color` | string | Label color \(hex code\) |
+| ↳ `organizationId` | string | Organization ID |
+| ↳ `teamId` | string | Team ID \(if team-specific label\) |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `isGroup` | boolean | Whether this is a label group |
+| ↳ `parentId` | string | Parent label ID \(for nested labels\) |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `createdAt` | string | Label creation timestamp |
+| ↳ `updatedAt` | string | Label last update timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Label Updated
+
+Trigger workflow when a label is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(IssueLabel\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Label ID |
+| ↳ `name` | string | Label name |
+| ↳ `description` | string | Label description |
+| ↳ `color` | string | Label color \(hex code\) |
+| ↳ `organizationId` | string | Organization ID |
+| ↳ `teamId` | string | Team ID \(if team-specific label\) |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `isGroup` | boolean | Whether this is a label group |
+| ↳ `parentId` | string | Parent label ID \(for nested labels\) |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `createdAt` | string | Label creation timestamp |
+| ↳ `updatedAt` | string | Label last update timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Project Created
+
+Trigger workflow when a new project is created in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Project\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| ↳ `description` | string | Project description |
+| ↳ `icon` | string | Project icon |
+| ↳ `color` | string | Project color |
+| ↳ `state` | string | Project state \(planned, started, completed, canceled, backlog\) |
+| ↳ `slugId` | string | Project slug ID |
+| ↳ `url` | string | Project URL |
+| ↳ `leadId` | string | Project lead user ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `memberIds` | array | Array of member user IDs |
+| ↳ `teamIds` | array | Array of team IDs |
+| ↳ `priority` | number | Project priority |
+| ↳ `sortOrder` | number | Project sort order |
+| ↳ `startDate` | string | Project start date |
+| ↳ `targetDate` | string | Project target date |
+| ↳ `startedAt` | string | Started timestamp |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `canceledAt` | string | Canceled timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `createdAt` | string | Project creation timestamp |
+| ↳ `updatedAt` | string | Project last update timestamp |
+| ↳ `progress` | number | Project progress \(0-1\) |
+| ↳ `scope` | number | Project scope estimate |
+| ↳ `statusId` | string | Project status ID |
+| ↳ `bodyData` | object | Project body data \(rich text content\) |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Project Update Created
+
+Trigger workflow when a new project update is posted in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(ProjectUpdate\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Project update ID |
+| ↳ `body` | string | Update body content |
+| ↳ `url` | string | Project update URL |
+| ↳ `projectId` | string | Project ID |
+| ↳ `userId` | string | User ID of the author |
+| ↳ `health` | string | Project health \(onTrack, atRisk, offTrack\) |
+| ↳ `editedAt` | string | Last edited timestamp |
+| ↳ `createdAt` | string | Update creation timestamp |
+| ↳ `updatedAt` | string | Update last update timestamp |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Project Updated
+
+Trigger workflow when a project is updated in Linear
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Project\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | data output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| ↳ `description` | string | Project description |
+| ↳ `icon` | string | Project icon |
+| ↳ `color` | string | Project color |
+| ↳ `state` | string | Project state \(planned, started, completed, canceled, backlog\) |
+| ↳ `slugId` | string | Project slug ID |
+| ↳ `url` | string | Project URL |
+| ↳ `leadId` | string | Project lead user ID |
+| ↳ `creatorId` | string | Creator user ID |
+| ↳ `memberIds` | array | Array of member user IDs |
+| ↳ `teamIds` | array | Array of team IDs |
+| ↳ `priority` | number | Project priority |
+| ↳ `sortOrder` | number | Project sort order |
+| ↳ `startDate` | string | Project start date |
+| ↳ `targetDate` | string | Project target date |
+| ↳ `startedAt` | string | Started timestamp |
+| ↳ `completedAt` | string | Completed timestamp |
+| ↳ `canceledAt` | string | Canceled timestamp |
+| ↳ `archivedAt` | string | Archived timestamp |
+| ↳ `createdAt` | string | Project creation timestamp |
+| ↳ `updatedAt` | string | Project last update timestamp |
+| ↳ `progress` | number | Project progress \(0-1\) |
+| ↳ `scope` | number | Project scope estimate |
+| ↳ `statusId` | string | Project status ID |
+| ↳ `bodyData` | object | Project body data \(rich text content\) |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
+
+---
+
+### Linear Webhook
+
+Trigger workflow from Linear events you select when creating the webhook in Linear (not guaranteed to be every model or event type).
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | API Key |
+| `teamId` | string | No | Team ID |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `action` | string | Action performed \(create, update, remove\) |
+| `type` | string | Entity type \(Issue, Comment, Project, Cycle, IssueLabel, ProjectUpdate, etc.\) |
+| `webhookId` | string | Webhook ID |
+| `webhookTimestamp` | number | Webhook timestamp \(milliseconds\) |
+| `organizationId` | string | Organization ID |
+| `createdAt` | string | Event creation timestamp |
+| `url` | string | URL of the subject entity in Linear \(top-level webhook payload\) |
+| `data` | object | Complete entity data object |
+| `updatedFrom` | object | Previous values for changed fields \(only present on update\) |
+
diff --git a/apps/docs/content/docs/en/triggers/meta.json b/apps/docs/content/docs/en/triggers/meta.json
index 47b2a08968f..d04467626b1 100644
--- a/apps/docs/content/docs/en/triggers/meta.json
+++ b/apps/docs/content/docs/en/triggers/meta.json
@@ -1,3 +1,48 @@
{
- "pages": ["index", "start", "schedule", "webhook", "rss"]
+ "pages": [
+ "index",
+ "start",
+ "schedule",
+ "webhook",
+ "rss",
+ "airtable",
+ "ashby",
+ "attio",
+ "calcom",
+ "calendly",
+ "circleback",
+ "confluence",
+ "fathom",
+ "fireflies",
+ "github",
+ "gmail",
+ "gong",
+ "google-calendar",
+ "google-drive",
+ "google-sheets",
+ "google_forms",
+ "grain",
+ "greenhouse",
+ "hubspot",
+ "imap",
+ "intercom",
+ "jira",
+ "lemlist",
+ "linear",
+ "microsoft-teams",
+ "notion",
+ "outlook",
+ "resend",
+ "salesforce",
+ "servicenow",
+ "slack",
+ "stripe",
+ "telegram",
+ "twilio_voice",
+ "typeform",
+ "vercel",
+ "webflow",
+ "whatsapp",
+ "zoom"
+ ]
}
diff --git a/apps/docs/content/docs/en/triggers/microsoft-teams.mdx b/apps/docs/content/docs/en/triggers/microsoft-teams.mdx
new file mode 100644
index 00000000000..4bef68927b1
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/microsoft-teams.mdx
@@ -0,0 +1,92 @@
+---
+title: Microsoft Teams
+description: Available Microsoft Teams triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Microsoft Teams provides 2 triggers for automating workflows based on events.
+
+## Triggers
+
+### Microsoft Teams Channel
+
+Trigger workflow from Microsoft Teams channel messages via outgoing webhooks
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `hmacSecret` | string | Yes | The security token provided by Teams when creating an outgoing webhook. Used to verify request authenticity. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `from` | object | from output from the tool |
+| ↳ `id` | string | Sender ID |
+| ↳ `name` | string | Sender name |
+| ↳ `aadObjectId` | string | AAD Object ID |
+| `message` | object | message output from the tool |
+| ↳ `raw` | object | raw output from the tool |
+| ↳ `attachments` | json | Array of attachments |
+| ↳ `channelData` | object | channelData output from the tool |
+| ↳ `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| ↳ `tenant` | object | tenant output from the tool |
+| ↳ `id` | string | Tenant ID |
+| ↳ `channel` | object | channel output from the tool |
+| ↳ `id` | string | Channel ID |
+| ↳ `teamsTeamId` | string | Teams team ID |
+| ↳ `teamsChannelId` | string | Teams channel ID |
+| ↳ `conversation` | object | conversation output from the tool |
+| ↳ `id` | string | Composite conversation ID |
+| ↳ `name` | string | Conversation name \(nullable\) |
+| ↳ `isGroup` | boolean | Is group conversation |
+| ↳ `tenantId` | string | Tenant ID |
+| ↳ `aadObjectId` | string | AAD Object ID \(nullable\) |
+| ↳ `conversationType` | string | Conversation type \(channel\) |
+| ↳ `text` | string | Message text content |
+| ↳ `messageType` | string | Message type |
+| ↳ `channelId` | string | Channel ID \(msteams\) |
+| ↳ `timestamp` | string | Timestamp |
+| `activity` | object | Activity payload |
+| `conversation` | object | conversation output from the tool |
+| ↳ `id` | string | Composite conversation ID |
+| ↳ `name` | string | Conversation name \(nullable\) |
+| ↳ `isGroup` | boolean | Is group conversation |
+| ↳ `tenantId` | string | Tenant ID |
+| ↳ `aadObjectId` | string | AAD Object ID \(nullable\) |
+| ↳ `conversationType` | string | Conversation type \(channel\) |
+
+
+---
+
+### Microsoft Teams Chat
+
+Trigger workflow from new messages in Microsoft Teams chats via Microsoft Graph subscriptions
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires microsoft teams credentials to access your account. |
+| `triggerChatId` | string | Yes | The ID of the Teams chat to monitor |
+| `includeAttachments` | boolean | No | Fetch hosted contents and upload to storage |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message_id` | string | Message ID |
+| `chat_id` | string | Chat ID |
+| `from_name` | string | Sender display name |
+| `text` | string | Message body \(HTML or text\) |
+| `created_at` | string | Message timestamp |
+| `attachments` | file[] | Uploaded attachments as files |
+
diff --git a/apps/docs/content/docs/en/triggers/notion.mdx b/apps/docs/content/docs/en/triggers/notion.mdx
new file mode 100644
index 00000000000..552a1e77fb1
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/notion.mdx
@@ -0,0 +1,331 @@
+---
+title: Notion
+description: Available Notion triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Notion provides 9 triggers for automating workflows based on events.
+
+## Triggers
+
+### Notion Comment Created
+
+Trigger workflow when a comment or suggested edit is added in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `entity` | object | entity output from the tool |
+| ↳ `id` | string | Comment ID |
+| ↳ `entity_type` | string | Entity type \(comment\) |
+| `data` | object | data output from the tool |
+| ↳ `page_id` | string | Page ID that owns the comment thread |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page or block ID |
+| ↳ `parent_type` | string | Parent type \(page or block\) |
+
+
+---
+
+### Notion Database Created
+
+Trigger workflow when a new database is created in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Database properties updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace, or space ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `workspace`, or `space` |
+
+
+---
+
+### Notion Database Deleted
+
+Trigger workflow when a database is deleted in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Database properties updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace, or space ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `workspace`, or `space` |
+
+
+---
+
+### Notion Database Schema Updated
+
+Trigger workflow when a database schema is modified in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Database properties updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace, or space ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `workspace`, or `space` |
+
+
+---
+
+### Notion Page Content Updated
+
+Trigger workflow when page content is changed in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Property IDs updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace \(space\), or block ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `block`, `workspace`, or `space` |
+
+
+---
+
+### Notion Page Created
+
+Trigger workflow when a new page is created in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Property IDs updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace \(space\), or block ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `block`, `workspace`, or `space` |
+
+
+---
+
+### Notion Page Deleted
+
+Trigger workflow when a page is deleted in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Property IDs updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace \(space\), or block ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `block`, `workspace`, or `space` |
+
+
+---
+
+### Notion Page Properties Updated
+
+Trigger workflow when page properties are modified in Notion
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Property IDs updated as part of the event, when provided by Notion |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent page, database, workspace \(space\), or block ID |
+| ↳ `parent_type` | string | Parent type: `page`, `database`, `block`, `workspace`, or `space` |
+
+
+---
+
+### Notion Webhook (All Events)
+
+Trigger workflow on any Notion webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | No | The verification_token sent by Notion during webhook setup. This same token is used to verify X-Notion-Signature HMAC headers on all subsequent webhook deliveries. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Webhook event ID |
+| `type` | string | Event type \(e.g., page.created, database.schema_updated\) |
+| `timestamp` | string | ISO 8601 timestamp of the event |
+| `api_version` | string | Notion API version included with the event |
+| `workspace_id` | string | Workspace ID where the event occurred |
+| `workspace_name` | string | Workspace name |
+| `subscription_id` | string | Webhook subscription ID |
+| `integration_id` | string | Integration ID that received the event |
+| `attempt_number` | number | Delivery attempt number \(1-8 per Notion retries\) |
+| `accessible_by` | array | Users and bots with access to the entity \(`id` + `type` per object\); `type` is `person` or `bot`. Omitted on some deliveries \(treat as empty\). |
+| `authors` | array | Actors who triggered the event \(`id` + `type` per object\); `type` is `person`, `bot`, or `agent` per Notion |
+| `data` | object | data output from the tool |
+| ↳ `parent` | object | parent output from the tool |
+| ↳ `id` | string | Parent entity ID, when provided by Notion |
+| ↳ `parent_type` | string | Parent type \(`page`, `database`, `block`, `workspace`, `space`, …\), when present |
+| ↳ `page_id` | string | Page ID related to the event, when present |
+| ↳ `updated_blocks` | array | Blocks updated as part of the event, when provided by Notion |
+| ↳ `updated_properties` | array | Updated properties included with the event, when provided by Notion |
+
diff --git a/apps/docs/content/docs/en/triggers/outlook.mdx b/apps/docs/content/docs/en/triggers/outlook.mdx
new file mode 100644
index 00000000000..42f1f9a54fe
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/outlook.mdx
@@ -0,0 +1,54 @@
+---
+title: Outlook
+description: Available Outlook triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Outlook provides 1 trigger for automating workflows based on events.
+
+All triggers below are **polling-based** — they check for new data on a schedule rather than receiving push notifications.
+
+## Triggers
+
+### Outlook Email Trigger
+
+Triggers when new emails are received in Outlook (requires Microsoft credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires outlook credentials to access your account. |
+| `folderIds` | string | No | Choose which Outlook folders to monitor. Leave empty to monitor all emails. |
+| `folderFilterBehavior` | string | Yes | Include only emails from selected folders, or exclude emails from selected folders |
+| `markAsRead` | boolean | No | Automatically mark emails as read after processing |
+| `includeAttachments` | boolean | No | Download and include email attachments in the trigger payload |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `email` | object | email output from the tool |
+| ↳ `id` | string | Outlook message ID |
+| ↳ `conversationId` | string | Outlook conversation ID |
+| ↳ `subject` | string | Email subject line |
+| ↳ `from` | string | Sender email address |
+| ↳ `to` | string | Recipient email address |
+| ↳ `cc` | string | CC recipients |
+| ↳ `date` | string | Email date in ISO format |
+| ↳ `bodyText` | string | Plain text email body |
+| ↳ `bodyHtml` | string | HTML email body |
+| ↳ `hasAttachments` | boolean | Whether email has attachments |
+| ↳ `attachments` | file[] | Array of email attachments as files \(if includeAttachments is enabled\) |
+| ↳ `isRead` | boolean | Whether email is read |
+| ↳ `folderId` | string | Outlook folder ID where email is located |
+| ↳ `messageId` | string | Message ID for threading |
+| ↳ `threadId` | string | Thread ID for conversation threading |
+| `timestamp` | string | Event timestamp |
+
diff --git a/apps/docs/content/docs/en/triggers/resend.mdx b/apps/docs/content/docs/en/triggers/resend.mdx
new file mode 100644
index 00000000000..630640b03bc
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/resend.mdx
@@ -0,0 +1,259 @@
+---
+title: Resend
+description: Available Resend triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Resend provides 8 triggers for automating workflows based on events.
+
+## Triggers
+
+### Resend Email Bounced
+
+Trigger workflow when an email bounces
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+| `bounceType` | string | Bounce type \(e.g., Permanent\) |
+| `bounceSubType` | string | Bounce sub-type \(e.g., Suppressed\) |
+| `bounceMessage` | string | Bounce error message |
+
+
+---
+
+### Resend Email Clicked
+
+Trigger workflow when a link in an email is clicked
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+| `clickIpAddress` | string | IP address of the click |
+| `clickLink` | string | URL that was clicked |
+| `clickTimestamp` | string | Click timestamp \(ISO 8601\) |
+| `clickUserAgent` | string | Browser user agent string |
+
+
+---
+
+### Resend Email Complained
+
+Trigger workflow when an email is marked as spam
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+
+
+---
+
+### Resend Email Delivered
+
+Trigger workflow when an email is delivered
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+
+
+---
+
+### Resend Email Failed
+
+Trigger workflow when an email fails to send
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+
+
+---
+
+### Resend Email Opened
+
+Trigger workflow when an email is opened
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+
+
+---
+
+### Resend Email Sent
+
+Trigger workflow when an email is sent
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+
+
+---
+
+### Resend Webhook (All Events)
+
+Trigger on Resend webhook events we subscribe to (email lifecycle, contacts, domains—see Resend docs). Flattened email fields may be null for non-email events; use data for the full payload.
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Resend. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., email.sent, email.delivered\) |
+| `created_at` | string | Webhook event creation timestamp \(ISO 8601\), top-level `created_at` |
+| `data_created_at` | string | Email record timestamp from payload `data.created_at` \(ISO 8601\), when present — distinct from top-level `created_at` |
+| `email_id` | string | Unique email identifier |
+| `broadcast_id` | string | Broadcast ID associated with the email, when sent as part of a broadcast |
+| `template_id` | string | Template ID used to send the email, when applicable |
+| `tags` | json | Tag key/value metadata attached to the email \(payload `data.tags`\) |
+| `from` | string | Sender email address |
+| `subject` | string | Email subject line |
+| `to` | json | Array of recipient email addresses |
+| `data` | json | Raw event `data` from Resend \(shape varies by event type: email, contact, domain, etc.\) |
+| `bounceType` | string | Bounce type \(e.g., Permanent\) |
+| `bounceSubType` | string | Bounce sub-type \(e.g., Suppressed\) |
+| `bounceMessage` | string | Bounce error message |
+| `clickIpAddress` | string | IP address of the click |
+| `clickLink` | string | URL that was clicked |
+| `clickTimestamp` | string | Click timestamp \(ISO 8601\) |
+| `clickUserAgent` | string | Browser user agent string |
+
diff --git a/apps/docs/content/docs/en/triggers/salesforce.mdx b/apps/docs/content/docs/en/triggers/salesforce.mdx
new file mode 100644
index 00000000000..bd228cf073b
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/salesforce.mdx
@@ -0,0 +1,208 @@
+---
+title: Salesforce
+description: Available Salesforce triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Salesforce provides 6 triggers for automating workflows based on events.
+
+## Triggers
+
+### Salesforce Case Status Changed
+
+Trigger workflow when a case status changes
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type \(Case\) |
+| `recordId` | string | Case ID |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | object | record output from the tool |
+| ↳ `Id` | string | Case ID |
+| ↳ `Subject` | string | Case subject |
+| ↳ `Status` | string | Current case status |
+| ↳ `Priority` | string | Case priority |
+| ↳ `CaseNumber` | string | Case number |
+| ↳ `AccountId` | string | Related Account ID |
+| ↳ `ContactId` | string | Related Contact ID |
+| ↳ `OwnerId` | string | Case owner ID |
+| `previousStatus` | string | Previous case status |
+| `newStatus` | string | New case status |
+| `payload` | json | Full webhook payload |
+
+
+---
+
+### Salesforce Opportunity Stage Changed
+
+Trigger workflow when an opportunity stage changes
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type \(Opportunity\) |
+| `recordId` | string | Opportunity ID |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | object | record output from the tool |
+| ↳ `Id` | string | Opportunity ID |
+| ↳ `Name` | string | Opportunity name |
+| ↳ `StageName` | string | Current stage name |
+| ↳ `Amount` | string | Deal amount |
+| ↳ `CloseDate` | string | Expected close date |
+| ↳ `Probability` | string | Win probability |
+| ↳ `AccountId` | string | Related Account ID \(standard Opportunity field\) |
+| ↳ `OwnerId` | string | Opportunity owner ID |
+| `previousStage` | string | Previous stage name |
+| `newStage` | string | New stage name |
+| `payload` | json | Full webhook payload |
+
+
+---
+
+### Salesforce Record Created
+
+Trigger workflow when a Salesforce record is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+| `objectType` | string | No | When set, the payload must include matching object type metadata \(for example objectType, sobjectType, or attributes.type\) or the event is rejected. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g., created, updated, deleted\) |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type \(e.g., Account, Contact, Lead\) |
+| `recordId` | string | ID of the affected record |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | object | record output from the tool |
+| ↳ `Id` | string | Record ID |
+| ↳ `Name` | string | Record name |
+| ↳ `CreatedDate` | string | Record creation date |
+| ↳ `LastModifiedDate` | string | Last modification date |
+| ↳ `OwnerId` | string | Record owner ID \(standard field when sent in the Flow body\) |
+| ↳ `SystemModstamp` | string | System modstamp from the record \(ISO 8601\) when included in the payload |
+| `changedFields` | json | Fields that were changed \(for update events\) |
+| `payload` | json | Full webhook payload |
+
+
+---
+
+### Salesforce Record Deleted
+
+Trigger workflow when a Salesforce record is deleted
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+| `objectType` | string | No | When set, the payload must include matching object type metadata \(for example objectType, sobjectType, or attributes.type\) or the event is rejected. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g., created, updated, deleted\) |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type \(e.g., Account, Contact, Lead\) |
+| `recordId` | string | ID of the affected record |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | object | record output from the tool |
+| ↳ `Id` | string | Record ID |
+| ↳ `Name` | string | Record name |
+| ↳ `CreatedDate` | string | Record creation date |
+| ↳ `LastModifiedDate` | string | Last modification date |
+| ↳ `OwnerId` | string | Record owner ID \(standard field when sent in the Flow body\) |
+| ↳ `SystemModstamp` | string | System modstamp from the record \(ISO 8601\) when included in the payload |
+| `changedFields` | json | Fields that were changed \(for update events\) |
+| `payload` | json | Full webhook payload |
+
+
+---
+
+### Salesforce Record Updated
+
+Trigger workflow when a Salesforce record is updated
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+| `objectType` | string | No | When set, the payload must include matching object type metadata \(for example objectType, sobjectType, or attributes.type\) or the event is rejected. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event \(e.g., created, updated, deleted\) |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type \(e.g., Account, Contact, Lead\) |
+| `recordId` | string | ID of the affected record |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | object | record output from the tool |
+| ↳ `Id` | string | Record ID |
+| ↳ `Name` | string | Record name |
+| ↳ `CreatedDate` | string | Record creation date |
+| ↳ `LastModifiedDate` | string | Last modification date |
+| ↳ `OwnerId` | string | Record owner ID \(standard field when sent in the Flow body\) |
+| ↳ `SystemModstamp` | string | System modstamp from the record \(ISO 8601\) when included in the payload |
+| `changedFields` | json | Fields that were changed \(for update events\) |
+| `payload` | json | Full webhook payload |
+
+
+---
+
+### Salesforce Webhook (All Events)
+
+Trigger workflow on any Salesforce webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your Salesforce HTTP Callout as Bearer token or X-Sim-Webhook-Secret. |
+| `objectType` | string | No | When set, the payload must include matching object type metadata \(for example objectType, sobjectType, or attributes.type\) or the event is rejected. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | The type of event |
+| `simEventType` | string | Optional alias from the payload \(`simEventType`\). Empty when only `eventType` is sent. |
+| `objectType` | string | Salesforce object type |
+| `recordId` | string | ID of the affected record |
+| `timestamp` | string | When the event occurred \(ISO 8601\) |
+| `record` | json | Full record data |
+| `payload` | json | Full webhook payload |
+
diff --git a/apps/docs/content/docs/en/triggers/servicenow.mdx b/apps/docs/content/docs/en/triggers/servicenow.mdx
new file mode 100644
index 00000000000..9e9060e4b3d
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/servicenow.mdx
@@ -0,0 +1,210 @@
+---
+title: ServiceNow
+description: Available ServiceNow triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+ServiceNow provides 5 triggers for automating workflows based on events.
+
+## Triggers
+
+### ServiceNow Change Request Created
+
+Trigger workflow when a new change request is created in ServiceNow
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your ServiceNow Business Rule as Bearer token or X-Sim-Webhook-Secret. |
+| `tableName` | string | No | Optionally filter to a specific ServiceNow table |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `sysId` | string | Unique system ID of the record |
+| `number` | string | Record number \(e.g., INC0010001, CHG0010001\) |
+| `tableName` | string | ServiceNow table name |
+| `shortDescription` | string | Short description of the record |
+| `description` | string | Full description of the record |
+| `state` | string | Current state of the record |
+| `priority` | string | Priority level \(1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning\) |
+| `assignedTo` | string | User assigned to this record |
+| `assignmentGroup` | string | Group assigned to this record |
+| `createdBy` | string | User who created the record |
+| `createdOn` | string | When the record was created \(ISO 8601\) |
+| `updatedBy` | string | User who last updated the record |
+| `updatedOn` | string | When the record was last updated \(ISO 8601\) |
+| `type` | string | Change type \(Normal, Standard, Emergency\) |
+| `risk` | string | Risk level of the change |
+| `impact` | string | Impact level of the change |
+| `approval` | string | Approval status |
+| `startDate` | string | Planned start date |
+| `endDate` | string | Planned end date |
+| `category` | string | Change category |
+| `record` | json | Full change request record data |
+
+
+---
+
+### ServiceNow Change Request Updated
+
+Trigger workflow when a change request is updated in ServiceNow
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your ServiceNow Business Rule as Bearer token or X-Sim-Webhook-Secret. |
+| `tableName` | string | No | Optionally filter to a specific ServiceNow table |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `sysId` | string | Unique system ID of the record |
+| `number` | string | Record number \(e.g., INC0010001, CHG0010001\) |
+| `tableName` | string | ServiceNow table name |
+| `shortDescription` | string | Short description of the record |
+| `description` | string | Full description of the record |
+| `state` | string | Current state of the record |
+| `priority` | string | Priority level \(1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning\) |
+| `assignedTo` | string | User assigned to this record |
+| `assignmentGroup` | string | Group assigned to this record |
+| `createdBy` | string | User who created the record |
+| `createdOn` | string | When the record was created \(ISO 8601\) |
+| `updatedBy` | string | User who last updated the record |
+| `updatedOn` | string | When the record was last updated \(ISO 8601\) |
+| `type` | string | Change type \(Normal, Standard, Emergency\) |
+| `risk` | string | Risk level of the change |
+| `impact` | string | Impact level of the change |
+| `approval` | string | Approval status |
+| `startDate` | string | Planned start date |
+| `endDate` | string | Planned end date |
+| `category` | string | Change category |
+| `record` | json | Full change request record data |
+
+
+---
+
+### ServiceNow Incident Created
+
+Trigger workflow when a new incident is created in ServiceNow
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your ServiceNow Business Rule as Bearer token or X-Sim-Webhook-Secret. |
+| `tableName` | string | No | Optionally filter to a specific ServiceNow table |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `sysId` | string | Unique system ID of the record |
+| `number` | string | Record number \(e.g., INC0010001, CHG0010001\) |
+| `tableName` | string | ServiceNow table name |
+| `shortDescription` | string | Short description of the record |
+| `description` | string | Full description of the record |
+| `state` | string | Current state of the record |
+| `priority` | string | Priority level \(1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning\) |
+| `assignedTo` | string | User assigned to this record |
+| `assignmentGroup` | string | Group assigned to this record |
+| `createdBy` | string | User who created the record |
+| `createdOn` | string | When the record was created \(ISO 8601\) |
+| `updatedBy` | string | User who last updated the record |
+| `updatedOn` | string | When the record was last updated \(ISO 8601\) |
+| `urgency` | string | Urgency level \(1=High, 2=Medium, 3=Low\) |
+| `impact` | string | Impact level \(1=High, 2=Medium, 3=Low\) |
+| `category` | string | Incident category |
+| `subcategory` | string | Incident subcategory |
+| `caller` | string | Caller/requester of the incident |
+| `resolvedBy` | string | User who resolved the incident |
+| `resolvedAt` | string | When the incident was resolved |
+| `closeNotes` | string | Notes added when the incident was closed |
+| `record` | json | Full incident record data |
+
+
+---
+
+### ServiceNow Incident Updated
+
+Trigger workflow when an incident is updated in ServiceNow
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your ServiceNow Business Rule as Bearer token or X-Sim-Webhook-Secret. |
+| `tableName` | string | No | Optionally filter to a specific ServiceNow table |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `sysId` | string | Unique system ID of the record |
+| `number` | string | Record number \(e.g., INC0010001, CHG0010001\) |
+| `tableName` | string | ServiceNow table name |
+| `shortDescription` | string | Short description of the record |
+| `description` | string | Full description of the record |
+| `state` | string | Current state of the record |
+| `priority` | string | Priority level \(1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning\) |
+| `assignedTo` | string | User assigned to this record |
+| `assignmentGroup` | string | Group assigned to this record |
+| `createdBy` | string | User who created the record |
+| `createdOn` | string | When the record was created \(ISO 8601\) |
+| `updatedBy` | string | User who last updated the record |
+| `updatedOn` | string | When the record was last updated \(ISO 8601\) |
+| `urgency` | string | Urgency level \(1=High, 2=Medium, 3=Low\) |
+| `impact` | string | Impact level \(1=High, 2=Medium, 3=Low\) |
+| `category` | string | Incident category |
+| `subcategory` | string | Incident subcategory |
+| `caller` | string | Caller/requester of the incident |
+| `resolvedBy` | string | User who resolved the incident |
+| `resolvedAt` | string | When the incident was resolved |
+| `closeNotes` | string | Notes added when the incident was closed |
+| `record` | json | Full incident record data |
+
+
+---
+
+### ServiceNow Webhook (All Events)
+
+Trigger workflow on any ServiceNow webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookSecret` | string | Yes | Required. Use the same value in your ServiceNow Business Rule as Bearer token or X-Sim-Webhook-Secret. |
+| `tableName` | string | No | Optionally filter to a specific ServiceNow table |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `sysId` | string | Unique system ID of the record |
+| `number` | string | Record number \(e.g., INC0010001, CHG0010001\) |
+| `tableName` | string | ServiceNow table name |
+| `shortDescription` | string | Short description of the record |
+| `description` | string | Full description of the record |
+| `state` | string | Current state of the record |
+| `priority` | string | Priority level \(1=Critical, 2=High, 3=Moderate, 4=Low, 5=Planning\) |
+| `assignedTo` | string | User assigned to this record |
+| `assignmentGroup` | string | Group assigned to this record |
+| `createdBy` | string | User who created the record |
+| `createdOn` | string | When the record was created \(ISO 8601\) |
+| `updatedBy` | string | User who last updated the record |
+| `updatedOn` | string | When the record was last updated \(ISO 8601\) |
+| `eventType` | string | The type of event that triggered this workflow \(e.g., insert, update, delete\) |
+| `category` | string | Record category |
+| `record` | json | Full record data from the webhook payload |
+
diff --git a/apps/docs/content/docs/en/triggers/slack.mdx b/apps/docs/content/docs/en/triggers/slack.mdx
new file mode 100644
index 00000000000..cdffda257ac
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/slack.mdx
@@ -0,0 +1,51 @@
+---
+title: Slack
+description: Available Slack triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Slack provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Slack Webhook
+
+Trigger workflow from Slack events like mentions, messages, and reactions
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `signingSecret` | string | Yes | The signing secret from your Slack app to validate request authenticity. |
+| `botToken` | string | No | The bot token from your Slack app. Required for downloading files attached to messages. |
+| `includeFiles` | boolean | No | Download and include file attachments from messages. Requires a bot token with files:read scope. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | object | Slack event data |
+| ↳ `event_type` | string | Type of Slack event \(e.g., app_mention, message\) |
+| ↳ `subtype` | string | Message subtype \(e.g., channel_join, channel_leave, bot_message, file_share\). Null for regular user messages |
+| ↳ `channel` | string | Slack channel ID where the event occurred |
+| ↳ `channel_name` | string | Human-readable channel name |
+| ↳ `channel_type` | string | Type of channel \(e.g., channel, group, im, mpim\). Useful for distinguishing DMs from public channels |
+| ↳ `user` | string | User ID who triggered the event |
+| ↳ `user_name` | string | Username who triggered the event |
+| ↳ `bot_id` | string | Bot ID if the message was sent by a bot. Null for human users |
+| ↳ `text` | string | Message text content |
+| ↳ `timestamp` | string | Message timestamp from the triggering event |
+| ↳ `thread_ts` | string | Parent thread timestamp \(if message is in a thread\) |
+| ↳ `team_id` | string | Slack workspace/team ID |
+| ↳ `event_id` | string | Unique event identifier |
+| ↳ `reaction` | string | Emoji reaction name \(e.g., thumbsup\). Present for reaction_added/reaction_removed events |
+| ↳ `item_user` | string | User ID of the original message author. Present for reaction_added/reaction_removed events |
+| ↳ `hasFiles` | boolean | Whether the message has file attachments |
+| ↳ `files` | file[] | File attachments downloaded from the message \(if includeFiles is enabled and bot token is provided\) |
+
diff --git a/apps/docs/content/docs/en/triggers/stripe.mdx b/apps/docs/content/docs/en/triggers/stripe.mdx
new file mode 100644
index 00000000000..4d3763b81fc
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/stripe.mdx
@@ -0,0 +1,41 @@
+---
+title: Stripe
+description: Available Stripe triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Stripe provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Stripe Webhook
+
+Triggers when Stripe events occur (payments, subscriptions, invoices, etc.)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `eventTypes` | string | No | Select specific Stripe events to filter. Leave empty to receive all events from Stripe. |
+| `webhookSecret` | string | No | Your webhook signing secret from Stripe Dashboard. Used to verify webhook authenticity. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `id` | string | Unique identifier for the event |
+| `type` | string | Event type \(e.g., payment_intent.succeeded, customer.created, invoice.paid\) |
+| `object` | string | Always "event" |
+| `api_version` | string | Stripe API version used to render the event |
+| `created` | number | Unix timestamp when the event was created |
+| `data` | json | Event data containing the affected Stripe object. Structure varies by event type - access via data.object for the resource \(PaymentIntent, Customer, Invoice, etc.\) |
+| `livemode` | boolean | Whether this event occurred in live mode \(true\) or test mode \(false\) |
+| `pending_webhooks` | number | Number of webhooks yet to be delivered for this event |
+| `request` | json | Information about the API request that triggered this event \(id, idempotency_key\) |
+
diff --git a/apps/docs/content/docs/en/triggers/telegram.mdx b/apps/docs/content/docs/en/triggers/telegram.mdx
new file mode 100644
index 00000000000..5447bf20792
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/telegram.mdx
@@ -0,0 +1,65 @@
+---
+title: Telegram
+description: Available Telegram triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Telegram provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Telegram Webhook
+
+Trigger workflow from Telegram bot messages and events
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot Token from BotFather |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | object | Telegram message data |
+| ↳ `id` | number | Telegram message ID |
+| ↳ `text` | string | Message text content \(if present\) |
+| ↳ `date` | number | Date the message was sent \(Unix timestamp\) |
+| ↳ `messageType` | string | Detected content type: text, photo, document, audio, video, voice, sticker, location, contact, poll |
+| ↳ `raw` | object | Raw Telegram message object |
+| ↳ `message_id` | number | Original Telegram message_id |
+| ↳ `date` | number | Original Telegram message date \(Unix timestamp\) |
+| ↳ `text` | string | Original Telegram text \(if present\) |
+| ↳ `caption` | string | Original Telegram caption \(if present\) |
+| ↳ `chat` | object | Chat information |
+| ↳ `id` | number | Chat identifier |
+| ↳ `username` | string | Chat username \(if available\) |
+| ↳ `first_name` | string | First name \(for private chats\) |
+| ↳ `last_name` | string | Last name \(for private chats\) |
+| ↳ `title` | string | Chat title \(for groups/channels\) |
+| ↳ `from` | object | Sender information |
+| ↳ `id` | number | Sender user ID |
+| ↳ `is_bot` | boolean | Whether the sender is a bot |
+| ↳ `first_name` | string | Sender first name |
+| ↳ `last_name` | string | Sender last name |
+| ↳ `username` | string | Sender username |
+| ↳ `language_code` | string | Sender language code \(if available\) |
+| ↳ `reply_to_message` | object | Original message being replied to |
+| ↳ `entities` | array | Message entities \(mentions, hashtags, URLs, etc.\) |
+| `sender` | object | Sender information |
+| ↳ `id` | number | Sender user ID |
+| ↳ `username` | string | Sender username \(if available\) |
+| ↳ `firstName` | string | Sender first name |
+| ↳ `lastName` | string | Sender last name |
+| ↳ `languageCode` | string | Sender language code \(if available\) |
+| ↳ `isBot` | boolean | Whether the sender is a bot |
+| `updateId` | number | Update ID for this webhook delivery |
+| `updateType` | string | Type of update: message, edited_message, channel_post, edited_channel_post, unknown |
+
diff --git a/apps/docs/content/docs/en/triggers/twilio_voice.mdx b/apps/docs/content/docs/en/triggers/twilio_voice.mdx
new file mode 100644
index 00000000000..9522006aaa1
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/twilio_voice.mdx
@@ -0,0 +1,66 @@
+---
+title: Twilio Voice
+description: Available Twilio Voice triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Twilio Voice provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Twilio Voice Webhook
+
+Trigger workflow when phone calls are received via Twilio Voice
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `accountSid` | string | Yes | Your Twilio Account SID from the Twilio Console |
+| `authToken` | string | Yes | Your Twilio Auth Token for webhook signature verification |
+| `twimlResponse` | string | No | TwiML instructions to return immediately to Twilio. Use square brackets instead of angle brackets \(e.g., \[Response\] instead of <Response>\). This controls what happens when the call comes in \(e.g., play a message, record, gather input\). Your workflow will execute in the background. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `callSid` | string | Unique identifier for this call |
+| `accountSid` | string | Twilio Account SID |
+| `from` | string | Caller's phone number \(E.164 format\) |
+| `to` | string | Recipient phone number \(your Twilio number\) |
+| `callStatus` | string | Status of the call \(queued, ringing, in-progress, completed, etc.\) |
+| `direction` | string | Call direction: inbound or outbound |
+| `apiVersion` | string | Twilio API version |
+| `callerName` | string | Caller ID name if available |
+| `forwardedFrom` | string | Phone number that forwarded this call |
+| `digits` | string | DTMF digits entered by caller \(from <Gather>\) |
+| `speechResult` | string | Speech recognition result \(if using <Gather> with speech\) |
+| `recordingUrl` | string | URL of call recording if available |
+| `recordingSid` | string | Recording SID if available |
+| `called` | string | Phone number that was called \(same as "to"\) |
+| `caller` | string | Phone number of the caller \(same as "from"\) |
+| `toCity` | string | City of the called number |
+| `toState` | string | State/province of the called number |
+| `toZip` | string | Zip/postal code of the called number |
+| `toCountry` | string | Country of the called number |
+| `fromCity` | string | City of the caller |
+| `fromState` | string | State/province of the caller |
+| `fromZip` | string | Zip/postal code of the caller |
+| `fromCountry` | string | Country of the caller |
+| `calledCity` | string | City of the called number \(same as toCity\) |
+| `calledState` | string | State of the called number \(same as toState\) |
+| `calledZip` | string | Zip code of the called number \(same as toZip\) |
+| `calledCountry` | string | Country of the called number \(same as toCountry\) |
+| `callerCity` | string | City of the caller \(same as fromCity\) |
+| `callerState` | string | State of the caller \(same as fromState\) |
+| `callerZip` | string | Zip code of the caller \(same as fromZip\) |
+| `callerCountry` | string | Country of the caller \(same as fromCountry\) |
+| `callToken` | string | Twilio call token for authentication |
+| `raw` | string | Complete raw webhook payload from Twilio as JSON string |
+
diff --git a/apps/docs/content/docs/en/triggers/typeform.mdx b/apps/docs/content/docs/en/triggers/typeform.mdx
new file mode 100644
index 00000000000..e6fdae33b00
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/typeform.mdx
@@ -0,0 +1,78 @@
+---
+title: Typeform
+description: Available Typeform triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Typeform provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### Typeform Webhook
+
+Trigger workflow when a Typeform submission is received
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `formId` | string | Yes | The unique identifier for your Typeform. Find it in the form URL or form settings. |
+| `apiKey` | string | Yes | Required to automatically register the webhook with Typeform. Get yours at https://admin.typeform.com/account#/section/tokens |
+| `secret` | string | No | A secret string used to verify webhook authenticity. Highly recommended for security. Generate a secure random string \(min 20 characters recommended\). |
+| `includeDefinition` | boolean | No | Include the complete form structure \(questions, fields, endings\) in your workflow variables. Note: Typeform always sends this data, but enabling this makes it accessible in your workflow. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event_id` | string | Unique identifier for this webhook event |
+| `event_type` | string | Type of event \(always "form_response" for form submissions\) |
+| `form_id` | string | Typeform form identifier |
+| `token` | string | Unique response/submission identifier |
+| `submitted_at` | string | ISO timestamp when the form was submitted |
+| `landed_at` | string | ISO timestamp when the user first landed on the form |
+| `calculated` | object | Calculated values from the form |
+| ↳ `score` | number | Calculated score value |
+| `variables` | array | Array of dynamic variables |
+| ↳ `key` | string | Variable key |
+| ↳ `number` | number | Numeric value \(if type is number\) |
+| ↳ `text` | string | Text value \(if type is text\) |
+| `hidden` | object | Hidden fields passed to the form \(e.g., UTM parameters\) |
+| `answers` | array | Array of respondent answers \(only includes answered questions\) |
+| ↳ `text` | string | Text answer value |
+| ↳ `email` | string | Email answer value |
+| ↳ `number` | number | Number answer value |
+| ↳ `boolean` | boolean | Boolean answer value |
+| ↳ `date` | string | Date answer value \(ISO format\) |
+| ↳ `url` | string | URL answer value |
+| ↳ `file_url` | string | File URL answer value |
+| ↳ `choice` | object | Single choice answer |
+| ↳ `id` | string | Choice ID |
+| ↳ `ref` | string | Choice reference |
+| ↳ `label` | string | Choice label |
+| ↳ `choices` | object | Multiple choices answer |
+| ↳ `ids` | array | Array of choice IDs |
+| ↳ `refs` | array | Array of choice refs |
+| ↳ `labels` | array | Array of choice labels |
+| ↳ `field` | object | Field reference |
+| ↳ `id` | string | Field ID |
+| ↳ `ref` | string | Field reference |
+| `definition` | object | Form definition \(only included when "Include Form Definition" is enabled\) |
+| ↳ `id` | string | Form ID |
+| ↳ `title` | string | Form title |
+| ↳ `fields` | array | Array of form fields |
+| ↳ `id` | string | Field ID |
+| ↳ `ref` | string | Field reference |
+| ↳ `title` | string | Field title |
+| ↳ `endings` | array | Array of form endings |
+| `ending` | object | Ending screen information |
+| ↳ `id` | string | Ending screen ID |
+| ↳ `ref` | string | Ending screen reference |
+| `raw` | object | Complete original webhook payload from Typeform |
+
diff --git a/apps/docs/content/docs/en/triggers/vercel.mdx b/apps/docs/content/docs/en/triggers/vercel.mdx
new file mode 100644
index 00000000000..bf96dcadbeb
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/vercel.mdx
@@ -0,0 +1,356 @@
+---
+title: Vercel
+description: Available Vercel triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Vercel provides 8 triggers for automating workflows based on events.
+
+## Triggers
+
+### Vercel Deployment Canceled
+
+Trigger workflow when a deployment is canceled
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+| `target` | string | Deployment target \(production, staging, or preview\) |
+| `plan` | string | Account plan type |
+| `domain` | object | domain output from the tool |
+| ↳ `name` | string | Domain name |
+| ↳ `delegated` | boolean | Whether the domain was delegated/shared when present on the payload |
+
+
+---
+
+### Vercel Deployment Created
+
+Trigger workflow when a new deployment is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+| `target` | string | Deployment target \(production, staging, or preview\) |
+| `plan` | string | Account plan type |
+| `domain` | object | domain output from the tool |
+| ↳ `name` | string | Domain name |
+| ↳ `delegated` | boolean | Whether the domain was delegated/shared when present on the payload |
+
+
+---
+
+### Vercel Deployment Error
+
+Trigger workflow when a deployment fails
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+| `target` | string | Deployment target \(production, staging, or preview\) |
+| `plan` | string | Account plan type |
+| `domain` | object | domain output from the tool |
+| ↳ `name` | string | Domain name |
+| ↳ `delegated` | boolean | Whether the domain was delegated/shared when present on the payload |
+
+
+---
+
+### Vercel Deployment Ready
+
+Trigger workflow when a deployment is ready to serve traffic
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+| `target` | string | Deployment target \(production, staging, or preview\) |
+| `plan` | string | Account plan type |
+| `domain` | object | domain output from the tool |
+| ↳ `name` | string | Domain name |
+| ↳ `delegated` | boolean | Whether the domain was delegated/shared when present on the payload |
+
+
+---
+
+### Vercel Domain Created
+
+Trigger workflow when a domain is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `domain` | object | domain output from the tool |
+| ↳ `name` | string | Domain name |
+| ↳ `delegated` | boolean | Whether the domain was delegated/shared \(domain.created\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+
+
+---
+
+### Vercel Project Created
+
+Trigger workflow when a new project is created
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+
+
+---
+
+### Vercel Project Removed
+
+Trigger workflow when a project is removed
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `payload` | json | Raw event payload from Vercel |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `project` | object | project output from the tool |
+| ↳ `id` | string | Project ID |
+| ↳ `name` | string | Project name |
+| `team` | object | team output from the tool |
+| ↳ `id` | string | Team ID |
+| `user` | object | user output from the tool |
+| ↳ `id` | string | User ID |
+
+
+---
+
+### Vercel Webhook (Common Events)
+
+Trigger on a curated set of common Vercel events (deployments, projects, domains, edge config). Pick a specific trigger to listen to one event type only.
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `apiKey` | string | Yes | Required to create the webhook in Vercel. |
+| `teamId` | string | No | Scope webhook to a specific team |
+| `filterProjectIds` | string | No | Limit webhook to specific projects |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `type` | string | Event type \(e.g., deployment.created\) |
+| `id` | string | Unique webhook delivery ID \(string\) |
+| `createdAt` | number | Event timestamp in milliseconds |
+| `region` | string | Region where the event occurred |
+| `links` | object | links output from the tool |
+| ↳ `deployment` | string | Vercel Dashboard URL for the deployment |
+| ↳ `project` | string | Vercel Dashboard URL for the project |
+| `regions` | json | Regions associated with the deployment \(array\), when provided by Vercel |
+| `deployment` | object | deployment output from the tool |
+| ↳ `id` | string | Deployment ID |
+| ↳ `url` | string | Deployment URL |
+| ↳ `name` | string | Deployment name |
+| ↳ `meta` | json | Deployment metadata map \(e.g. Git metadata\), per Vercel Webhooks API |
+| `payload` | json | Full event payload |
+
diff --git a/apps/docs/content/docs/en/triggers/webflow.mdx b/apps/docs/content/docs/en/triggers/webflow.mdx
new file mode 100644
index 00000000000..c72b6f49577
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/webflow.mdx
@@ -0,0 +1,131 @@
+---
+title: Webflow
+description: Available Webflow triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Webflow provides 4 triggers for automating workflows based on events.
+
+## Triggers
+
+### Collection Item Changed
+
+Trigger workflow when an item is updated in a Webflow CMS collection (requires Webflow credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires webflow credentials to access your account. |
+| `triggerSiteId` | string | Yes | The Webflow site to monitor |
+| `triggerCollectionId` | string | No | Optionally filter to monitor only a specific collection |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `siteId` | string | The site ID where the event occurred |
+| `collectionId` | string | The collection ID where the item was changed |
+| `payload` | object | payload output from the tool |
+| ↳ `id` | string | The ID of the changed item |
+| ↳ `cmsLocaleId` | string | CMS locale ID |
+| ↳ `lastPublished` | string | Last published timestamp |
+| ↳ `lastUpdated` | string | Last updated timestamp |
+| ↳ `createdOn` | string | Timestamp when the item was created |
+| ↳ `isArchived` | boolean | Whether the item is archived |
+| ↳ `isDraft` | boolean | Whether the item is a draft |
+| ↳ `fieldData` | object | The updated field data of the item |
+
+
+---
+
+### Collection Item Created
+
+Trigger workflow when a new item is created in a Webflow CMS collection (requires Webflow credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires webflow credentials to access your account. |
+| `triggerSiteId` | string | Yes | The Webflow site to monitor |
+| `triggerCollectionId` | string | No | Optionally filter to monitor only a specific collection |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `siteId` | string | The site ID where the event occurred |
+| `collectionId` | string | The collection ID where the item was created |
+| `payload` | object | payload output from the tool |
+| ↳ `id` | string | The ID of the created item |
+| ↳ `cmsLocaleId` | string | CMS locale ID |
+| ↳ `lastPublished` | string | Last published timestamp |
+| ↳ `lastUpdated` | string | Last updated timestamp |
+| ↳ `createdOn` | string | Timestamp when the item was created |
+| ↳ `isArchived` | boolean | Whether the item is archived |
+| ↳ `isDraft` | boolean | Whether the item is a draft |
+| ↳ `fieldData` | object | The field data of the item |
+
+
+---
+
+### Collection Item Deleted
+
+Trigger workflow when an item is deleted from a Webflow CMS collection (requires Webflow credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires webflow credentials to access your account. |
+| `triggerSiteId` | string | Yes | The Webflow site to monitor |
+| `triggerCollectionId` | string | No | Optionally filter to monitor only a specific collection |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `siteId` | string | The site ID where the event occurred |
+| `collectionId` | string | The collection ID where the item was deleted |
+| `payload` | object | payload output from the tool |
+| ↳ `id` | string | The ID of the deleted item |
+| ↳ `deletedOn` | string | Timestamp when the item was deleted |
+
+
+---
+
+### Form Submission
+
+Trigger workflow when a form is submitted on a Webflow site (requires Webflow credentials)
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `triggerCredentials` | string | Yes | This trigger requires webflow credentials to access your account. |
+| `triggerSiteId` | string | Yes | The Webflow site to monitor |
+| `formName` | string | No | The name of the specific form to monitor \(optional - leave empty for all forms\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `siteId` | string | The site ID where the form was submitted |
+| `formId` | string | The form ID |
+| `name` | string | The name of the form |
+| `id` | string | The unique ID of the form submission |
+| `submittedAt` | string | Timestamp when the form was submitted |
+| `data` | object | The form submission field data \(keys are field names, values are submitted data\) |
+| `schema` | array | Form schema describing each field |
+| ↳ `fieldName` | string | Name of the form field |
+| ↳ `fieldType` | string | Type of input \(e.g., FormTextInput, FormEmail\) |
+| ↳ `fieldElementId` | string | Unique identifier for the form element \(UUID\) |
+| `formElementId` | string | The form element ID |
+
diff --git a/apps/docs/content/docs/en/triggers/whatsapp.mdx b/apps/docs/content/docs/en/triggers/whatsapp.mdx
new file mode 100644
index 00000000000..e6a1122a244
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/whatsapp.mdx
@@ -0,0 +1,49 @@
+---
+title: WhatsApp
+description: Available WhatsApp triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+WhatsApp provides 1 trigger for automating workflows based on events.
+
+## Triggers
+
+### WhatsApp Webhook
+
+Trigger workflow from WhatsApp incoming messages and message status webhooks
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `verificationToken` | string | Yes | Enter any secure token here. You |
+| `appSecret` | string | Yes | Required for WhatsApp POST signature verification. Sim uses it to validate the X-Hub-Signature-256 header on every webhook delivery. |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `eventType` | string | Webhook classification such as incoming_message, message_status, or mixed |
+| `messageId` | string | First WhatsApp message identifier \(wamid\) found in the webhook batch |
+| `from` | string | Sender phone number from the first incoming message in the batch |
+| `recipientId` | string | Recipient phone number from the first status update in the batch |
+| `phoneNumberId` | string | Business phone number ID from the first message or status item in the batch |
+| `displayPhoneNumber` | string | Business display phone number from the first message or status item in the batch |
+| `text` | string | Text body from the first incoming text message in the batch |
+| `timestamp` | string | Timestamp from the first message or status item in the batch |
+| `messageType` | string | Type of the first incoming message in the batch \(text, image, system, etc.\) |
+| `status` | string | First outgoing message status in the batch, such as sent, delivered, read, or failed |
+| `contact` | json | First sender contact in the batch \(wa_id, profile.name\) |
+| `webhookContacts` | json | All sender contact profiles from the webhook batch |
+| `messages` | json | All incoming message objects from the webhook batch, flattened across entries/changes |
+| `statuses` | json | All message status objects from the webhook batch, flattened across entries/changes |
+| `conversation` | json | Conversation metadata from the first status update in the batch \(id, expiration_timestamp, origin.type\) |
+| `pricing` | json | Pricing metadata from the first status update in the batch \(billable, pricing_model, category\) |
+| `raw` | json | Complete structured webhook payload from WhatsApp |
+
diff --git a/apps/docs/content/docs/en/triggers/zoom.mdx b/apps/docs/content/docs/en/triggers/zoom.mdx
new file mode 100644
index 00000000000..64175a96c34
--- /dev/null
+++ b/apps/docs/content/docs/en/triggers/zoom.mdx
@@ -0,0 +1,149 @@
+---
+title: Zoom
+description: Available Zoom triggers for automating workflows
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+Zoom provides 6 triggers for automating workflows based on events.
+
+## Triggers
+
+### Zoom Meeting Ended
+
+Trigger workflow when a Zoom meeting ends
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(e.g., meeting.started\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | object | payload output from the tool |
+| ↳ `account_id` | string | Zoom account ID |
+| ↳ `object` | object | Meeting details \(shape aligns with Zoom Meetings webhook object fields\) |
+
+
+---
+
+### Zoom Meeting Started
+
+Trigger workflow when a Zoom meeting starts
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(e.g., meeting.started\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | object | payload output from the tool |
+| ↳ `account_id` | string | Zoom account ID |
+| ↳ `object` | object | Meeting details \(shape aligns with Zoom Meetings webhook object fields\) |
+
+
+---
+
+### Zoom Participant Joined
+
+Trigger workflow when a participant joins a Zoom meeting
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(e.g., meeting.participant_joined\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | object | payload output from the tool |
+| ↳ `account_id` | string | Zoom account ID |
+| ↳ `object` | object | Meeting and participant details |
+
+
+---
+
+### Zoom Participant Left
+
+Trigger workflow when a participant leaves a Zoom meeting
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(e.g., meeting.participant_joined\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | object | payload output from the tool |
+| ↳ `account_id` | string | Zoom account ID |
+| ↳ `object` | object | Meeting and participant details |
+
+
+---
+
+### Zoom Recording Completed
+
+Trigger workflow when a Zoom cloud recording is completed
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(recording.completed\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | object | payload output from the tool |
+| ↳ `account_id` | string | Zoom account ID |
+| ↳ `object` | object | Cloud recording details \(aligns with Zoom cloud recording objects\) |
+
+
+---
+
+### Zoom Webhook (All Events)
+
+Trigger workflow on any Zoom webhook event
+
+#### Configuration
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `secretToken` | string | Yes | Found in your Zoom app |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `event` | string | The webhook event type \(e.g., meeting.started, recording.completed\) |
+| `event_ts` | number | Unix timestamp in milliseconds when the event occurred |
+| `payload` | json | Complete webhook payload \(structure varies by event type\) |
+
diff --git a/apps/docs/content/docs/en/variables/index.mdx b/apps/docs/content/docs/en/variables/index.mdx
new file mode 100644
index 00000000000..0596e08a75c
--- /dev/null
+++ b/apps/docs/content/docs/en/variables/index.mdx
@@ -0,0 +1,90 @@
+---
+title: Variables
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Card, Cards } from 'fumadocs-ui/components/card'
+import { FAQ } from '@/components/ui/faq'
+
+Sim has two systems for injecting dynamic values into your workflows: **workflow variables** for in-run state and **environment variables** for secrets and configuration.
+
+## Variable Syntax at a Glance
+
+| Syntax | What it references | Example |
+|--------|-------------------|---------|
+| `` | Workflow variable | `` |
+| `` | Nested property | `` |
+| `` | Block output | `` |
+| `` | Loop iteration (inside loop) | `` |
+| `` | Parallel instance (inside parallel) | `` |
+| `{{KEY}}` | Environment variable | `{{OPENAI_API_KEY}}` |
+
+Type `<` in any block text field to open the variable picker and browse available references.
+
+## Workflow Variables
+
+Workflow variables are a global store that any block can read or update during execution. They're defined in the **Variables** panel in the sidebar and support text, numbers, booleans, objects, and arrays.
+
+Key behaviors:
+- **Global scope**: Accessible from any block in the workflow
+- **Run-scoped persistence**: Changes during a run are visible to subsequent blocks, but each new execution resets variables to their initial values
+- **Nested access**: Use dot notation for object properties (``)
+- **Updated via the Variables block**: Use the [Variables block](/blocks/variables) to modify variable values mid-workflow
+
+
+ Full guide on creating, accessing, and updating workflow variables
+
+
+## Environment Variables
+
+Environment variables store sensitive values like API keys, tokens, and configuration that should never appear in logs or be visible in the workflow canvas.
+
+### Creating Environment Variables
+
+1. Go to **Settings** in your workspace
+2. Open the **Secrets** tab
+3. Click **Add** and enter a key-value pair
+
+### Personal vs. Workspace
+
+| Scope | Visibility | Use case |
+|-------|-----------|----------|
+| **Workspace** | All workspace members | Shared API keys, team configuration |
+| **Personal** | Only you | Your personal tokens, dev credentials |
+
+When both a workspace and personal variable share the same key, the workspace value takes precedence.
+
+### Using Environment Variables
+
+Reference them with double curly braces in any block field:
+
+```
+{{API_KEY}}
+```
+
+
+ Environment variable names must start with a letter or underscore and contain only letters, numbers, and underscores (e.g., `MY_API_KEY`).
+
+
+### Environment Variables vs. Credentials
+
+| | Environment Variables | Credentials |
+|--|----------------------|-------------|
+| **Format** | Key-value string pairs | OAuth tokens, API keys with provider context |
+| **Syntax** | `{{KEY}}` | Selected via dropdown in block config |
+| **Best for** | Custom API keys, configuration values, feature flags | OAuth services (Slack, GitHub, Google), managed connections |
+| **Management** | Settings → Secrets | Settings → Credentials |
+
+Use environment variables when you have a raw API key or config value. Use [credentials](/credentials) when connecting to a service that needs OAuth or managed token refresh.
+
+## Name Conflicts
+
+If a workflow variable and a block output share the same name, Sim resolves the reference in a fixed priority order: loop and parallel context first, then workflow variables, then environment variables, then block outputs. To avoid confusion, use distinct names for your variables and blocks.
+
+ syntax. Environment variables store sensitive configuration like API keys using {{KEY}} syntax. They never appear in logs and are managed at the workspace or personal level." },
+ { question: "Can I use environment variables in the Function block?", answer: "Yes. Use the double curly brace syntax {{KEY}} directly in your code. The value is substituted before execution, so the actual secret never appears in logs or outputs." },
+ { question: "How do I share an API key with my team?", answer: "Create a workspace-scoped environment variable in Settings → Secrets. All workspace members will be able to use it in their workflows via {{KEY}} syntax." },
+ { question: "What happens if a variable name has spaces or mixed case?", answer: "Variable resolution is case-insensitive and ignores spaces. A variable named 'My Counter' can be referenced as or . However, using consistent naming (like camelCase) is recommended." },
+ { question: "Can I reference environment variables in the Agent system prompt?", answer: "Yes. You can use {{KEY}} syntax in any text field, including system prompts, to inject environment variable values." },
+]} />
diff --git a/apps/docs/content/docs/en/variables/meta.json b/apps/docs/content/docs/en/variables/meta.json
new file mode 100644
index 00000000000..00b2a1dc9e0
--- /dev/null
+++ b/apps/docs/content/docs/en/variables/meta.json
@@ -0,0 +1,5 @@
+{
+ "title": "Variables",
+ "pages": ["index", "workflow-variables"],
+ "defaultOpen": false
+}
diff --git a/apps/docs/content/docs/en/variables/workflow-variables.mdx b/apps/docs/content/docs/en/variables/workflow-variables.mdx
index f196f1d81c6..0cf4aa56613 100644
--- a/apps/docs/content/docs/en/variables/workflow-variables.mdx
+++ b/apps/docs/content/docs/en/variables/workflow-variables.mdx
@@ -5,6 +5,7 @@ title: Workflow Variables
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
+import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
import { FAQ } from '@/components/ui/faq'
@@ -42,11 +43,33 @@ The Variables feature serves as a central data store for your workflow, enabling
## Creating Variables
-You can create and manage variables from the Variables panel in the sidebar. Each variable has:
+To open the Variables panel, click **⋯ → Variables** in the top-right of the workflow editor.
+
+
+
+
+
+Each variable has:
- **Name**: A unique identifier used to reference the variable
-- **Value**: The data stored in the variable (supports various data types)
-- **Description** (optional): A note explaining the variable's purpose
+- **Type**: The data type (Plain, Number, Boolean, Object, Array)
+- **Value**: The data stored in the variable
+
+
+
+
## Accessing Variables
@@ -69,12 +92,12 @@ Variables can be accessed from any block in your workflow using the variable dro
Variables in Sim can store various types of data:
-
+
```
"Hello, World!"
```
- Text variables store strings of characters. They're useful for storing messages, names, and other text data.
+ Plain variables store strings of characters. They're useful for storing messages, names, and other text data.
```
diff --git a/apps/docs/next.config.ts b/apps/docs/next.config.ts
index af723788898..f3a1aad5d89 100644
--- a/apps/docs/next.config.ts
+++ b/apps/docs/next.config.ts
@@ -5,6 +5,9 @@ const withMDX = createMDX()
const config: NextConfig = {
reactStrictMode: true,
+ images: {
+ unoptimized: true,
+ },
experimental: {
webpackMemoryOptimizations: true,
webpackBuildWorker: true,
diff --git a/apps/docs/public/static/api-deployment/api-info.png b/apps/docs/public/static/api-deployment/api-info.png
new file mode 100644
index 00000000000..9a88b089aee
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-info.png differ
diff --git a/apps/docs/public/static/api-deployment/api-select-outputs.png b/apps/docs/public/static/api-deployment/api-select-outputs.png
new file mode 100644
index 00000000000..24267bcd8f1
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-select-outputs.png differ
diff --git a/apps/docs/public/static/api-deployment/api-tab.png b/apps/docs/public/static/api-deployment/api-tab.png
new file mode 100644
index 00000000000..bf6f3bb2316
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-tab.png differ
diff --git a/apps/docs/public/static/api-deployment/api-update-button.png b/apps/docs/public/static/api-deployment/api-update-button.png
new file mode 100644
index 00000000000..d0faef49abf
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-update-button.png differ
diff --git a/apps/docs/public/static/api-deployment/api-versions-menu.png b/apps/docs/public/static/api-deployment/api-versions-menu.png
new file mode 100644
index 00000000000..ff148326326
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-versions-menu.png differ
diff --git a/apps/docs/public/static/api-deployment/api-versions.png b/apps/docs/public/static/api-deployment/api-versions.png
new file mode 100644
index 00000000000..595091daf37
Binary files /dev/null and b/apps/docs/public/static/api-deployment/api-versions.png differ
diff --git a/apps/docs/public/static/blocks/custom-tool-schema.png b/apps/docs/public/static/blocks/custom-tool-schema.png
new file mode 100644
index 00000000000..ef005eeaefd
Binary files /dev/null and b/apps/docs/public/static/blocks/custom-tool-schema.png differ
diff --git a/apps/docs/public/static/blocks/function-python.png b/apps/docs/public/static/blocks/function-python.png
new file mode 100644
index 00000000000..2a610dedabc
Binary files /dev/null and b/apps/docs/public/static/blocks/function-python.png differ
diff --git a/apps/docs/public/static/blocks/mcp-add-modal.png b/apps/docs/public/static/blocks/mcp-add-modal.png
new file mode 100644
index 00000000000..f80bc53f9bf
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-add-modal.png differ
diff --git a/apps/docs/public/static/blocks/mcp-agent-dropdown.png b/apps/docs/public/static/blocks/mcp-agent-dropdown.png
new file mode 100644
index 00000000000..580286a18b6
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-agent-dropdown.png differ
diff --git a/apps/docs/public/static/blocks/mcp-agent-tools.png b/apps/docs/public/static/blocks/mcp-agent-tools.png
new file mode 100644
index 00000000000..31242e894ce
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-agent-tools.png differ
diff --git a/apps/docs/public/static/blocks/mcp-client-config.png b/apps/docs/public/static/blocks/mcp-client-config.png
new file mode 100644
index 00000000000..40887f50051
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-client-config.png differ
diff --git a/apps/docs/public/static/blocks/mcp-deploy-modal.png b/apps/docs/public/static/blocks/mcp-deploy-modal.png
new file mode 100644
index 00000000000..efb51451ace
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-deploy-modal.png differ
diff --git a/apps/docs/public/static/blocks/mcp-server-add-modal.png b/apps/docs/public/static/blocks/mcp-server-add-modal.png
new file mode 100644
index 00000000000..55b59a227f7
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-server-add-modal.png differ
diff --git a/apps/docs/public/static/blocks/mcp-server-details.png b/apps/docs/public/static/blocks/mcp-server-details.png
new file mode 100644
index 00000000000..b454438d897
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-server-details.png differ
diff --git a/apps/docs/public/static/blocks/mcp-servers-settings.png b/apps/docs/public/static/blocks/mcp-servers-settings.png
new file mode 100644
index 00000000000..b75ad706447
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-servers-settings.png differ
diff --git a/apps/docs/public/static/blocks/mcp-settings.png b/apps/docs/public/static/blocks/mcp-settings.png
new file mode 100644
index 00000000000..cb4c420814c
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-settings.png differ
diff --git a/apps/docs/public/static/blocks/mcp-tool-block.png b/apps/docs/public/static/blocks/mcp-tool-block.png
new file mode 100644
index 00000000000..d4c28cacb0d
Binary files /dev/null and b/apps/docs/public/static/blocks/mcp-tool-block.png differ
diff --git a/apps/docs/public/static/blocks/triggers.png b/apps/docs/public/static/blocks/triggers.png
index f8c52d639dd..0ef1d5a69ec 100644
Binary files a/apps/docs/public/static/blocks/triggers.png and b/apps/docs/public/static/blocks/triggers.png differ
diff --git a/apps/docs/public/static/blocks/variables-menu.png b/apps/docs/public/static/blocks/variables-menu.png
new file mode 100644
index 00000000000..90e0c7dcf5d
Binary files /dev/null and b/apps/docs/public/static/blocks/variables-menu.png differ
diff --git a/apps/docs/public/static/blocks/variables-panel.png b/apps/docs/public/static/blocks/variables-panel.png
new file mode 100644
index 00000000000..66152d886ee
Binary files /dev/null and b/apps/docs/public/static/blocks/variables-panel.png differ
diff --git a/apps/docs/public/static/chat/chat-deploy-access-email.png b/apps/docs/public/static/chat/chat-deploy-access-email.png
new file mode 100644
index 00000000000..ee66eefa850
Binary files /dev/null and b/apps/docs/public/static/chat/chat-deploy-access-email.png differ
diff --git a/apps/docs/public/static/chat/chat-deploy-config.png b/apps/docs/public/static/chat/chat-deploy-config.png
new file mode 100644
index 00000000000..98b19a1d576
Binary files /dev/null and b/apps/docs/public/static/chat/chat-deploy-config.png differ
diff --git a/apps/docs/public/static/chat/chat-deploy-output.png b/apps/docs/public/static/chat/chat-deploy-output.png
new file mode 100644
index 00000000000..31d59fe8f01
Binary files /dev/null and b/apps/docs/public/static/chat/chat-deploy-output.png differ
diff --git a/apps/docs/public/static/chat/chat-live.png b/apps/docs/public/static/chat/chat-live.png
new file mode 100644
index 00000000000..2d33ecef4e1
Binary files /dev/null and b/apps/docs/public/static/chat/chat-live.png differ
diff --git a/apps/docs/public/static/connectors/connectors-excluded.png b/apps/docs/public/static/connectors/connectors-excluded.png
new file mode 100644
index 00000000000..51605d86f1b
Binary files /dev/null and b/apps/docs/public/static/connectors/connectors-excluded.png differ
diff --git a/apps/docs/public/static/connectors/connectors-list.png b/apps/docs/public/static/connectors/connectors-list.png
new file mode 100644
index 00000000000..638a0c70a9d
Binary files /dev/null and b/apps/docs/public/static/connectors/connectors-list.png differ
diff --git a/apps/docs/public/static/connectors/connectors-sources.png b/apps/docs/public/static/connectors/connectors-sources.png
new file mode 100644
index 00000000000..0ac2323ba54
Binary files /dev/null and b/apps/docs/public/static/connectors/connectors-sources.png differ
diff --git a/apps/docs/public/static/connectors/connectors-sync-history.png b/apps/docs/public/static/connectors/connectors-sync-history.png
new file mode 100644
index 00000000000..2daa122ea4c
Binary files /dev/null and b/apps/docs/public/static/connectors/connectors-sync-history.png differ
diff --git a/apps/docs/public/static/execution/deployment-version-preview.png b/apps/docs/public/static/execution/deployment-version-preview.png
new file mode 100644
index 00000000000..f6bcb8c54cb
Binary files /dev/null and b/apps/docs/public/static/execution/deployment-version-preview.png differ
diff --git a/apps/docs/public/static/execution/deployment-versions-table.png b/apps/docs/public/static/execution/deployment-versions-table.png
new file mode 100644
index 00000000000..6b4e0eeafcf
Binary files /dev/null and b/apps/docs/public/static/execution/deployment-versions-table.png differ
diff --git a/apps/docs/public/static/integrations/connect-modal.png b/apps/docs/public/static/integrations/connect-modal.png
new file mode 100644
index 00000000000..94a32119911
Binary files /dev/null and b/apps/docs/public/static/integrations/connect-modal.png differ
diff --git a/apps/docs/public/static/integrations/connect-service-picker.png b/apps/docs/public/static/integrations/connect-service-picker.png
new file mode 100644
index 00000000000..fd964a28187
Binary files /dev/null and b/apps/docs/public/static/integrations/connect-service-picker.png differ
diff --git a/apps/docs/public/static/integrations/copy-credential-id.png b/apps/docs/public/static/integrations/copy-credential-id.png
new file mode 100644
index 00000000000..9b634e0bba1
Binary files /dev/null and b/apps/docs/public/static/integrations/copy-credential-id.png differ
diff --git a/apps/docs/public/static/integrations/integration-details.png b/apps/docs/public/static/integrations/integration-details.png
new file mode 100644
index 00000000000..c3dd10bff19
Binary files /dev/null and b/apps/docs/public/static/integrations/integration-details.png differ
diff --git a/apps/docs/public/static/integrations/integrations-list.png b/apps/docs/public/static/integrations/integrations-list.png
new file mode 100644
index 00000000000..30de700a28a
Binary files /dev/null and b/apps/docs/public/static/integrations/integrations-list.png differ
diff --git a/apps/docs/public/static/integrations/manual-credential-id.png b/apps/docs/public/static/integrations/manual-credential-id.png
new file mode 100644
index 00000000000..acf9a56a2ee
Binary files /dev/null and b/apps/docs/public/static/integrations/manual-credential-id.png differ
diff --git a/apps/docs/public/static/integrations/switch-to-manual-id.png b/apps/docs/public/static/integrations/switch-to-manual-id.png
new file mode 100644
index 00000000000..66f27994c7c
Binary files /dev/null and b/apps/docs/public/static/integrations/switch-to-manual-id.png differ
diff --git a/apps/docs/public/static/secrets/secret-details.png b/apps/docs/public/static/secrets/secret-details.png
new file mode 100644
index 00000000000..a71ba5d15df
Binary files /dev/null and b/apps/docs/public/static/secrets/secret-details.png differ
diff --git a/apps/docs/public/static/secrets/secrets-list.png b/apps/docs/public/static/secrets/secrets-list.png
new file mode 100644
index 00000000000..05aa439c84d
Binary files /dev/null and b/apps/docs/public/static/secrets/secrets-list.png differ
diff --git a/apps/docs/public/static/start.png b/apps/docs/public/static/start.png
index 1443ce2fc38..5b43e721567 100644
Binary files a/apps/docs/public/static/start.png and b/apps/docs/public/static/start.png differ
diff --git a/apps/docs/public/static/tags/tags-create.png b/apps/docs/public/static/tags/tags-create.png
new file mode 100644
index 00000000000..8504eee9e26
Binary files /dev/null and b/apps/docs/public/static/tags/tags-create.png differ
diff --git a/apps/docs/public/static/tags/tags-document-list.png b/apps/docs/public/static/tags/tags-document-list.png
new file mode 100644
index 00000000000..11f5281263a
Binary files /dev/null and b/apps/docs/public/static/tags/tags-document-list.png differ
diff --git a/apps/docs/public/static/tags/tags-kb-menu.png b/apps/docs/public/static/tags/tags-kb-menu.png
new file mode 100644
index 00000000000..6f29272469a
Binary files /dev/null and b/apps/docs/public/static/tags/tags-kb-menu.png differ
diff --git a/apps/docs/public/static/tags/tags-knowledge-block.png b/apps/docs/public/static/tags/tags-knowledge-block.png
new file mode 100644
index 00000000000..b5ed5bef238
Binary files /dev/null and b/apps/docs/public/static/tags/tags-knowledge-block.png differ
diff --git a/apps/sim/providers/anthropic/core.ts b/apps/sim/providers/anthropic/core.ts
index 8fe7785c41c..01e8c08aa27 100644
--- a/apps/sim/providers/anthropic/core.ts
+++ b/apps/sim/providers/anthropic/core.ts
@@ -78,12 +78,15 @@ const THINKING_BUDGET_TOKENS: Record = {
/**
* Checks if a model supports adaptive thinking (thinking.type: "adaptive").
- * Per the Anthropic API, only Opus 4.6 and Sonnet 4.6 support adaptive thinking.
+ * Opus 4.7 supports ONLY adaptive thinking (no extended thinking / budget_tokens).
+ * Opus 4.6 and Sonnet 4.6 support both extended and adaptive thinking — use adaptive.
* Opus 4.5 supports effort but NOT adaptive thinking — it uses budget_tokens with type: "enabled".
*/
function supportsAdaptiveThinking(modelId: string): boolean {
const normalizedModel = modelId.toLowerCase()
return (
+ normalizedModel.includes('opus-4-7') ||
+ normalizedModel.includes('opus-4.7') ||
normalizedModel.includes('opus-4-6') ||
normalizedModel.includes('opus-4.6') ||
normalizedModel.includes('sonnet-4-6') ||
@@ -94,6 +97,7 @@ function supportsAdaptiveThinking(modelId: string): boolean {
/**
* Builds the thinking configuration for the Anthropic API based on model capabilities and level.
*
+ * - Opus 4.7: Uses adaptive thinking only (no extended thinking support)
* - Opus 4.6, Sonnet 4.6: Uses adaptive thinking with effort parameter
* - Other models: Uses budget_tokens-based extended thinking
*
diff --git a/apps/sim/providers/models.ts b/apps/sim/providers/models.ts
index 61b073e9dcc..49cf756f43a 100644
--- a/apps/sim/providers/models.ts
+++ b/apps/sim/providers/models.ts
@@ -519,6 +519,26 @@ export const PROVIDER_DEFINITIONS: Record = {
toolUsageControl: true,
},
models: [
+ {
+ id: 'claude-opus-4-7',
+ pricing: {
+ input: 5.0,
+ cachedInput: 0.5,
+ output: 25.0,
+ updatedAt: '2026-04-16',
+ },
+ capabilities: {
+ temperature: { min: 0, max: 1 },
+ nativeStructuredOutputs: true,
+ maxOutputTokens: 128000,
+ thinking: {
+ levels: ['low', 'medium', 'high', 'max'],
+ default: 'high',
+ },
+ },
+ contextWindow: 1000000,
+ releaseDate: '2026-04-16',
+ },
{
id: 'claude-opus-4-6',
pricing: {
diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts
index 4aead0642e2..93b794d8762 100755
--- a/scripts/generate-docs.ts
+++ b/scripts/generate-docs.ts
@@ -26,6 +26,68 @@ const LANDING_INTEGRATIONS_DATA_PATH = path.join(
'apps/sim/app/(landing)/integrations/data'
)
const TRIGGERS_PATH = path.join(rootDir, 'apps/sim/triggers')
+const TRIGGER_DOCS_OUTPUT_PATH = path.join(rootDir, 'apps/docs/content/docs/en/triggers')
+
+/** Trigger doc pages that are hand-written and must never be overwritten. */
+const HANDWRITTEN_TRIGGER_DOCS = new Set(['index', 'start', 'schedule', 'webhook', 'rss'])
+
+/** Providers whose docs are already covered by hand-written pages. */
+const SKIP_TRIGGER_PROVIDERS = new Set(['generic', 'rss'])
+
+/**
+ * Maps trigger provider names (from TriggerConfig.provider) to their
+ * corresponding block type when the two differ. Used to resolve icon
+ * colours from the block registry.
+ */
+const PROVIDER_TO_BLOCK_TYPE: Record = {
+ 'microsoft-teams': 'microsoft_teams',
+ 'google-calendar': 'google_calendar',
+ 'google-drive': 'google_drive',
+ 'google-sheets': 'google_sheets',
+}
+
+/** Human-readable display names for trigger providers. */
+const TRIGGER_PROVIDER_DISPLAY_NAMES: Record = {
+ airtable: 'Airtable',
+ ashby: 'Ashby',
+ attio: 'Attio',
+ calcom: 'Cal.com',
+ calendly: 'Calendly',
+ circleback: 'Circleback',
+ confluence: 'Confluence',
+ fathom: 'Fathom',
+ fireflies: 'Fireflies',
+ github: 'GitHub',
+ gmail: 'Gmail',
+ gong: 'Gong',
+ 'google-calendar': 'Google Calendar',
+ 'google-drive': 'Google Drive',
+ 'google-sheets': 'Google Sheets',
+ google_forms: 'Google Forms',
+ grain: 'Grain',
+ greenhouse: 'Greenhouse',
+ hubspot: 'HubSpot',
+ imap: 'IMAP',
+ intercom: 'Intercom',
+ jira: 'Jira',
+ lemlist: 'Lemlist',
+ linear: 'Linear',
+ 'microsoft-teams': 'Microsoft Teams',
+ notion: 'Notion',
+ outlook: 'Outlook',
+ resend: 'Resend',
+ salesforce: 'Salesforce',
+ servicenow: 'ServiceNow',
+ slack: 'Slack',
+ stripe: 'Stripe',
+ telegram: 'Telegram',
+ twilio_voice: 'Twilio Voice',
+ typeform: 'Typeform',
+ vercel: 'Vercel',
+ webflow: 'Webflow',
+ whatsapp: 'WhatsApp',
+ zoom: 'Zoom',
+}
if (!fs.existsSync(DOCS_OUTPUT_PATH)) {
fs.mkdirSync(DOCS_OUTPUT_PATH, { recursive: true })
@@ -80,6 +142,25 @@ interface TriggerInfo {
description: string
}
+interface TriggerConfigField {
+ id: string
+ title: string
+ type: string
+ required: boolean
+ description?: string
+ placeholder?: string
+}
+
+interface TriggerFullInfo {
+ id: string
+ name: string
+ description: string
+ provider: string
+ polling: boolean
+ outputs: Record
+ configFields: TriggerConfigField[]
+}
+
interface OperationInfo {
name: string
description: string
@@ -238,14 +319,24 @@ function writeIconMapping(iconMapping: Record): void {
try {
const iconMappingPath = path.join(rootDir, 'apps/docs/components/ui/icon-mapping.ts')
+ // Add bare-name aliases for versioned block types so trigger provider names resolve correctly.
+ // e.g. github_v2 → github, fireflies_v2 → fireflies, gmail_v2 → gmail
+ const withAliases: Record = { ...iconMapping }
+ for (const [blockType, iconName] of Object.entries(iconMapping)) {
+ const baseType = stripVersionSuffix(blockType)
+ if (baseType !== blockType && !withAliases[baseType]) {
+ withAliases[baseType] = iconName
+ }
+ }
+
// Get unique icon names, sorted to match Biome's organizeImports
- const iconNames = [...new Set(Object.values(iconMapping))].sort(biomeSortCompare)
+ const iconNames = [...new Set(Object.values(withAliases))].sort(biomeSortCompare)
// Generate imports
const imports = iconNames.map((icon) => ` ${icon},`).join('\n')
// Generate mapping with direct references (no dynamic access for tree shaking)
- const mappingEntries = Object.entries(iconMapping)
+ const mappingEntries = Object.entries(withAliases)
.sort(([a], [b]) => a.localeCompare(b))
.map(([blockType, iconName]) => ` ${blockType}: ${iconName},`)
.join('\n')
@@ -1372,18 +1463,15 @@ function resolveConstFromTypesContent(
* Handles single quotes, double quotes, and backticks, preserving internal quotes.
*/
function extractDescription(fieldContent: string): string | null {
- // Try single-quoted string (can contain double quotes)
- const singleQuoteMatch = fieldContent.match(/description\s*:\s*'([^']*)'/)
- if (singleQuoteMatch) return singleQuoteMatch[1]
-
- // Try double-quoted string (can contain single quotes)
- const doubleQuoteMatch = fieldContent.match(/description\s*:\s*"([^"]*)"/)
- if (doubleQuoteMatch) return doubleQuoteMatch[1]
-
- // Try backtick string
- const backtickMatch = fieldContent.match(/description\s*:\s*`([^`]*)`/)
- if (backtickMatch) return backtickMatch[1]
-
+ // Walk through all `description:` matches and return the first one at depth 0.
+ // This prevents accidentally picking up `description:` keys inside nested child objects.
+ const descRegex = /description\s*:\s*('([^']*)'|"([^"]*)"|`([^`]*)`)/g
+ let m: RegExpExecArray | null
+ while ((m = descRegex.exec(fieldContent)) !== null) {
+ if (isAtDepthZero(fieldContent, m.index)) {
+ return m[2] ?? m[3] ?? m[4] ?? null
+ }
+ }
return null
}
@@ -1960,8 +2048,31 @@ function parseToolOutputsField(outputsContent: string, toolPrefix?: string): Rec
return outputs
}
+/**
+ * Returns true if the regex match at `matchIndex` within `content` is at brace depth 0.
+ * Used to distinguish top-level keys from keys nested inside child objects.
+ */
+function isAtDepthZero(content: string, matchIndex: number): boolean {
+ let depth = 0
+ for (let i = 0; i < matchIndex; i++) {
+ if (content[i] === '{') depth++
+ else if (content[i] === '}') depth--
+ }
+ return depth === 0
+}
+
function parseFieldContent(fieldContent: string, toolPrefix?: string): any {
- const typeMatch = fieldContent.match(/type\s*:\s*['"]([^'"]+)['"]/)
+ // Only match `type:` that is at the top level of fieldContent (depth 0).
+ // Child objects like `title: { type: 'string', ... }` also contain `type:` but at depth 1.
+ const typeRegex = /type\s*:\s*['"]([^'"]+)['"]/g
+ let typeMatch: RegExpExecArray | null = null
+ let m: RegExpExecArray | null
+ while ((m = typeRegex.exec(fieldContent)) !== null) {
+ if (isAtDepthZero(fieldContent, m.index)) {
+ typeMatch = m
+ break
+ }
+ }
const description = extractDescription(fieldContent)
// Check for spread operator at the start of field content (e.g., ...SUBSCRIPTION_OUTPUT)
@@ -1981,7 +2092,20 @@ function parseFieldContent(fieldContent: string, toolPrefix?: string): any {
}
}
- if (!typeMatch) return null
+ if (!typeMatch) {
+ // No top-level `type` key — check if the content contains named child fields that each
+ // have their own `type` property. This is the "implicit object" pattern used in trigger
+ // outputs (e.g., Cal.com's `payload`, Linear's `data`).
+ const properties = parsePropertiesContent(fieldContent, toolPrefix)
+ if (Object.keys(properties).length > 0) {
+ return {
+ type: 'object',
+ description: description || '',
+ properties,
+ }
+ }
+ return null
+ }
const fieldType = typeMatch[1]
@@ -2776,6 +2900,803 @@ function cleanupHiddenBlockDocs(hiddenTypes: Set, visibleDisplayNames: S
}
}
+// ============================================================================
+// Trigger Documentation Generation
+// ============================================================================
+
+/**
+ * Format a trigger provider name for display, falling back to Title Case.
+ */
+function formatTriggerProviderName(provider: string): string {
+ if (TRIGGER_PROVIDER_DISPLAY_NAMES[provider]) {
+ return TRIGGER_PROVIDER_DISPLAY_NAMES[provider]
+ }
+ return provider.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase())
+}
+
+/**
+ * Escape text for use inside an MDX table cell.
+ */
+function escapeMdxCell(text: string): string {
+ return text
+ .replace(/\|/g, '\\|')
+ .replace(/\{/g, '\\{')
+ .replace(/\}/g, '\\}')
+ .replace(/\(/g, '\\(')
+ .replace(/\)/g, '\\)')
+ .replace(/\[/g, '\\[')
+ .replace(/\]/g, '\\]')
+ .replace(//g, '>')
+}
+
+/**
+ * Resolve a module-level `const varName = { ... }` declaration.
+ * Handles nested spreads of other const variables (but not property-access values).
+ * Used to expand variable spreads inside builder function return bodies.
+ */
+function resolveConstVariable(
+ varName: string,
+ primaryContent: string,
+ utilsContent: string,
+ depth = 0
+): Record {
+ if (depth > 8) return {}
+
+ // Match `const varName = {` (with optional type annotation)
+ const varRegex = new RegExp(`(? = {}
+
+ // Resolve nested variable spreads within this const (no parens = variable reference)
+ const nestedSpreadRegex = /\.\.\.\s*([a-zA-Z_]\w*)\b(?!\s*\()/g
+ let nestedMatch: RegExpExecArray | null
+ while ((nestedMatch = nestedSpreadRegex.exec(varBody)) !== null) {
+ const nested = resolveConstVariable(nestedMatch[1], primaryContent, utilsContent, depth + 1)
+ Object.assign(result, nested)
+ }
+
+ // Parse any inline `field: { type, description }` definitions
+ // (strip spread lines first; property-access values like `foo: bar.baz` are skipped by parser)
+ const bodyWithoutVarSpreads = varBody.replace(/\.\.\.\s*\w+\b(?!\s*\()\s*,?\s*/g, '')
+ const inlineOutputs = parseToolOutputsField(bodyWithoutVarSpreads)
+ Object.assign(result, inlineOutputs)
+
+ return result
+ }
+
+ return {}
+}
+
+/**
+ * Recursively resolve a trigger output builder function.
+ * Handles the common pattern where builders spread other builders:
+ * `return { ...buildBaseOutputs(), fieldA: { type: 'string', ... } }`
+ * Also handles variable spreads:
+ * `return { ...coreOutputs, ...deploymentOutputs }`
+ *
+ * Searches for the function definition in `primaryContent` first, then `utilsContent`.
+ * Recursion depth is capped to avoid infinite loops.
+ */
+function resolveTriggerBuilderFunction(
+ funcName: string,
+ primaryContent: string,
+ utilsContent: string,
+ depth = 0
+): Record {
+ if (depth > 8) return {}
+
+ const funcRegex = new RegExp(`(?:export\\s+)?function\\s+${funcName}\\s*\\(`)
+ let funcBody: string | null = null
+
+ for (const content of [primaryContent, utilsContent]) {
+ const funcMatch = funcRegex.exec(content)
+ if (!funcMatch) continue
+
+ const bodyStart = content.indexOf('{', funcMatch.index)
+ if (bodyStart === -1) continue
+
+ const bodyEnd = findMatchingClose(content, bodyStart)
+ if (bodyEnd === -1) continue
+
+ funcBody = content.substring(bodyStart + 1, bodyEnd - 1)
+ break
+ }
+
+ if (!funcBody) return {}
+
+ // Handle `return anotherFunc(...)` — full delegation to another builder,
+ // with or without arguments (argument values are ignored; only structure matters).
+ const returnFuncCallMatch = /\breturn\s+([a-z][a-zA-Z0-9_]*)\s*\(/.exec(funcBody.trim())
+ if (returnFuncCallMatch) {
+ return resolveTriggerBuilderFunction(
+ returnFuncCallMatch[1],
+ primaryContent,
+ utilsContent,
+ depth + 1
+ )
+ }
+
+ // Handle `return { ... }` — inline object literal
+ const returnMatch = /\breturn\s*\{/.exec(funcBody)
+ if (!returnMatch) return {}
+
+ const returnObjStart = funcBody.indexOf('{', returnMatch.index)
+ const returnObjEnd = findMatchingClose(funcBody, returnObjStart)
+ if (returnObjEnd === -1) return {}
+
+ const returnBody = funcBody.substring(returnObjStart + 1, returnObjEnd - 1).trim()
+
+ const result: Record = {}
+
+ // Expand function-call spreads first: ...innerFuncName()
+ const spreadFuncRegex = /\.\.\.\s*(\w+)\s*\(\s*\)/g
+ let spreadMatch: RegExpExecArray | null
+ while ((spreadMatch = spreadFuncRegex.exec(returnBody)) !== null) {
+ const innerFuncName = spreadMatch[1]
+ const resolved = resolveTriggerBuilderFunction(
+ innerFuncName,
+ primaryContent,
+ utilsContent,
+ depth + 1
+ )
+ Object.assign(result, resolved)
+ }
+
+ // Expand variable spreads: ...varName (no parentheses — const references)
+ const spreadVarRegex = /\.\.\.\s*([a-zA-Z_]\w*)\b(?!\s*\()/g
+ let spreadVarMatch: RegExpExecArray | null
+ while ((spreadVarMatch = spreadVarRegex.exec(returnBody)) !== null) {
+ const varName = spreadVarMatch[1]
+ const resolved = resolveConstVariable(varName, primaryContent, utilsContent, depth + 1)
+ Object.assign(result, resolved)
+ }
+
+ // Then parse any inline field definitions (strip all spread lines first)
+ const bodyWithoutSpreads = returnBody
+ .replace(/\.\.\.\s*\w+\s*\(\s*\)\s*,?\s*/g, '') // function call spreads
+ .replace(/\.\.\.\s*\w+\b(?!\s*\()\s*,?\s*/g, '') // variable spreads
+ const inlineOutputs = parseToolOutputsField(bodyWithoutSpreads)
+ Object.assign(result, inlineOutputs)
+
+ return result
+}
+
+/**
+ * Extract the outputs object from a TriggerConfig segment.
+ * Handles both inline `outputs: { ... }` and function-call patterns
+ * like `outputs: buildIssueOutputs()`, resolving builder functions
+ * from the trigger file itself and its sibling `utils.ts`.
+ */
+function extractTriggerOutputs(
+ segment: string,
+ fileContent: string,
+ utilsContent: string
+): Record {
+ // 1. Inline outputs: outputs: { ... }
+ const outputsMatch = /\boutputs\s*:\s*\{/.exec(segment)
+ if (outputsMatch) {
+ const openPos = segment.indexOf('{', outputsMatch.index + outputsMatch[0].length - 1)
+ if (openPos !== -1) {
+ const closePos = findMatchingClose(segment, openPos)
+ if (closePos !== -1) {
+ const outputsContent = segment.substring(openPos + 1, closePos - 1).trim()
+ return parseToolOutputsField(outputsContent)
+ }
+ }
+ }
+
+ // 2. Function-call outputs: outputs: buildFoo()
+ const funcCallMatch = /\boutputs\s*:\s*(\w+)\s*\(\s*\)/.exec(segment)
+ if (funcCallMatch) {
+ return resolveTriggerBuilderFunction(funcCallMatch[1], fileContent, utilsContent)
+ }
+
+ return {}
+}
+
+/**
+ * Lazy-loaded cache of all TypeScript files in `lib/webhooks/providers/`.
+ * Used to resolve exported string constants that are imported by trigger utils files
+ * (e.g. `GONG_JWT_PUBLIC_KEY_CONFIG_KEY` from `lib/webhooks/providers/gong.ts`).
+ */
+let _webhookProviderConstantsCache: string | null = null
+function getWebhookProviderConstants(): string {
+ if (_webhookProviderConstantsCache === null) {
+ const dir = path.join(rootDir, 'apps/sim/lib/webhooks/providers')
+ if (fs.existsSync(dir)) {
+ _webhookProviderConstantsCache = fs
+ .readdirSync(dir)
+ .filter((f) => f.endsWith('.ts'))
+ .map((f) => fs.readFileSync(path.join(dir, f), 'utf-8'))
+ .join('\n')
+ } else {
+ _webhookProviderConstantsCache = ''
+ }
+ }
+ return _webhookProviderConstantsCache
+}
+
+/**
+ * Try to resolve a SCREAMING_SNAKE_CASE constant to its string value by
+ * searching in the given content AND the webhook provider constants cache.
+ */
+function resolveConstStringValue(constName: string, content: string): string | null {
+ const pattern = new RegExp(`\\b${constName}\\s*=\\s*['"]([^'"]+)['"]`)
+ return pattern.exec(content)?.[1] ?? pattern.exec(getWebhookProviderConstants())?.[1] ?? null
+}
+
+/**
+ * Parse a single SubBlockConfig object literal into a TriggerConfigField.
+ * Returns null for blocks that should be skipped (UI-only IDs, text type, readOnly).
+ * Accepts optional `resolverContent` to resolve const-reference field IDs.
+ */
+function parseSubBlockObject(
+ obj: string,
+ uiOnlyIds: Set,
+ resolverContent?: string
+): TriggerConfigField | null {
+ let id: string | undefined = /\bid\s*:\s*['"]([^'"]+)['"]/.exec(obj)?.[1]
+
+ // Handle const-reference ids: `id: SCREAMING_CASE_IDENTIFIER`
+ if (!id) {
+ const constRefMatch = /\bid\s*:\s*([A-Z][A-Z0-9_]+)\b/.exec(obj)
+ if (constRefMatch) {
+ id = resolveConstStringValue(constRefMatch[1], resolverContent ?? '') ?? undefined
+ }
+ }
+
+ if (!id || uiOnlyIds.has(id)) return null
+
+ const typeMatch = /\btype\s*:\s*['"]([^'"]+)['"]/.exec(obj)
+ if (typeMatch?.[1] === 'text') return null
+ if (/\breadOnly\s*:\s*true/.test(obj)) return null
+
+ const titleMatch = /\btitle\s*:\s*['"]([^'"]+)['"]/.exec(obj)
+ const requiredMatch = /\brequired\s*:\s*(true)/.exec(obj)
+ const placeholderMatch = /\bplaceholder\s*:\s*['"]([^'"]+)['"]/.exec(obj)
+ const descMatch = /\bdescription\s*:\s*['"]([^'"]+)['"]/.exec(obj)
+
+ // Use title as description fallback so oauth-input and other fields without
+ // an explicit description still show something meaningful in the docs table.
+ const description = descMatch?.[1] ?? (titleMatch ? `${titleMatch[1]}` : undefined)
+
+ return {
+ id,
+ title: titleMatch?.[1] ?? id,
+ type: typeMatch?.[1] ?? 'short-input',
+ required: Boolean(requiredMatch),
+ placeholder: placeholderMatch?.[1],
+ description,
+ }
+}
+
+/**
+ * Resolve a SubBlockConfig builder function to its field definitions.
+ * Handles `return [...]`, `return {...}`, and `blocks.push(...)` patterns.
+ * Searches `utilsContent` first, then `primaryContent`.
+ */
+function resolveSubBlockBuilderFunction(
+ funcName: string,
+ utilsContent: string,
+ primaryContent?: string
+): TriggerConfigField[] {
+ const UI_ONLY_IDS = new Set(['webhookUrlDisplay', 'triggerInstructions', 'selectedTriggerId'])
+
+ for (const content of [utilsContent, primaryContent ?? '']) {
+ if (!content) continue
+ const funcRegex = new RegExp(`(?:export\\s+)?function\\s+${funcName}\\s*\\(`)
+ const funcMatch = funcRegex.exec(content)
+ if (!funcMatch) continue
+
+ // Find the closing ')' of the parameter list, then the '{' that opens the function body.
+ // Using just indexOf('{') would pick up '{' inside object-type parameters.
+ const openParen = content.indexOf('(', funcMatch.index)
+ if (openParen === -1) continue
+ const closeParen = findMatchingClose(content, openParen, '(', ')')
+ if (closeParen === -1) continue
+ const bodyStart = content.indexOf('{', closeParen)
+ if (bodyStart === -1) continue
+ const bodyEnd = findMatchingClose(content, bodyStart)
+ if (bodyEnd === -1) continue
+
+ const funcBody = content.substring(bodyStart + 1, bodyEnd - 1)
+
+ // Pattern 1: `return [...]`
+ const returnArrayMatch = /\breturn\s*\[/.exec(funcBody)
+ if (returnArrayMatch) {
+ const arrayStart = funcBody.indexOf('[', returnArrayMatch.index)
+ const arrayEnd = findMatchingClose(funcBody, arrayStart, '[', ']')
+ if (arrayEnd !== -1) {
+ return parseSubBlockArrayContent(
+ funcBody.substring(arrayStart + 1, arrayEnd - 1),
+ UI_ONLY_IDS,
+ content
+ )
+ }
+ }
+
+ // Pattern 2: `return { ... }` (single object)
+ const returnObjMatch = /\breturn\s*\{/.exec(funcBody)
+ if (returnObjMatch) {
+ const objStart = funcBody.indexOf('{', returnObjMatch.index)
+ const objEnd = findMatchingClose(funcBody, objStart)
+ if (objEnd !== -1) {
+ const field = parseSubBlockObject(
+ funcBody.substring(objStart, objEnd),
+ UI_ONLY_IDS,
+ content
+ )
+ return field ? [field] : []
+ }
+ }
+
+ // Pattern 3: `blocks.push({...})`
+ const pushFields: TriggerConfigField[] = []
+ const pushRegex = /\bblocks\.push\s*\(/g
+ let pushMatch: RegExpExecArray | null
+ while ((pushMatch = pushRegex.exec(funcBody)) !== null) {
+ const parenStart = pushMatch.index + pushMatch[0].length - 1
+ const parenEnd = findMatchingClose(funcBody, parenStart, '(', ')')
+ if (parenEnd === -1) continue
+ const pushArg = funcBody.substring(parenStart + 1, parenEnd - 1).trim()
+ if (pushArg.startsWith('{')) {
+ const field = parseSubBlockObject(pushArg, UI_ONLY_IDS, content)
+ if (field) pushFields.push(field)
+ }
+ }
+ if (pushFields.length > 0) return pushFields
+ }
+
+ return []
+}
+
+/**
+ * Parse SubBlockConfig items from within an array body (between the brackets).
+ * Handles inline `{...}` objects and function calls `funcName(...)`.
+ */
+function parseSubBlockArrayContent(
+ arrayContent: string,
+ uiOnlyIds: Set,
+ utilsContent: string
+): TriggerConfigField[] {
+ const fields: TriggerConfigField[] = []
+ let i = 0
+
+ while (i < arrayContent.length) {
+ if (arrayContent[i] === '{') {
+ const j = findMatchingClose(arrayContent, i)
+ if (j === -1) break
+ const field = parseSubBlockObject(arrayContent.substring(i, j), uiOnlyIds, utilsContent)
+ if (field) fields.push(field)
+ i = j
+ } else if (/[a-zA-Z_]/.test(arrayContent[i])) {
+ // Possible function call: funcName(args)
+ const funcCallMatch = /^(\w+)\s*\(/.exec(arrayContent.substring(i))
+ if (funcCallMatch && utilsContent) {
+ const funcName = funcCallMatch[1]
+ if (funcName !== 'true' && funcName !== 'false' && funcName !== 'null') {
+ fields.push(...resolveSubBlockBuilderFunction(funcName, utilsContent))
+ }
+ // Advance past the function call's closing paren
+ const openIdx = arrayContent.indexOf('(', i + funcName.length)
+ if (openIdx !== -1) {
+ const closeIdx = findMatchingClose(arrayContent, openIdx, '(', ')')
+ i = closeIdx !== -1 ? closeIdx : openIdx + 1
+ } else {
+ i += funcName.length
+ }
+ } else {
+ i++
+ }
+ } else {
+ i++
+ }
+ }
+
+ return fields
+}
+
+/**
+ * Extract user-facing configuration fields from a TriggerConfig subBlocks definition.
+ * Handles both inline arrays (`subBlocks: [...]`) and builder function calls
+ * (`subBlocks: buildXSubBlocks({...})`), resolving them from the trigger file and utils.ts.
+ */
+function extractTriggerConfigFields(
+ segment: string,
+ primaryContent?: string,
+ utilsContent?: string
+): TriggerConfigField[] {
+ const UI_ONLY_IDS = new Set(['webhookUrlDisplay', 'triggerInstructions', 'selectedTriggerId'])
+ const allContent = utilsContent || primaryContent || ''
+
+ // Case 1: Inline subBlocks: [...]
+ const subBlocksMatch = /\bsubBlocks\s*:\s*\[/.exec(segment)
+ if (subBlocksMatch) {
+ const arrayStart = subBlocksMatch.index + subBlocksMatch[0].length - 1
+ const arrayEnd = findMatchingClose(segment, arrayStart, '[', ']')
+ if (arrayEnd === -1) return []
+ return parseSubBlockArrayContent(
+ segment.substring(arrayStart + 1, arrayEnd - 1),
+ UI_ONLY_IDS,
+ allContent
+ )
+ }
+
+ // Case 2: Builder function call — subBlocks: buildXFunc(...)
+ if (!allContent) return []
+ const builderCallMatch = /\bsubBlocks\s*:\s*(\w+)\s*\(/.exec(segment)
+ if (!builderCallMatch) return []
+
+ const funcName = builderCallMatch[1]
+
+ // Special case: buildTriggerSubBlocks — user config lives in the `extraFields` parameter
+ if (funcName === 'buildTriggerSubBlocks') {
+ const openParen = builderCallMatch.index + builderCallMatch[0].length - 1
+ const closeParen = findMatchingClose(segment, openParen, '(', ')')
+ if (closeParen === -1) return []
+
+ const argsBody = segment.substring(openParen + 1, closeParen - 1)
+ const extraFieldsMatch = /\bextraFields\s*:\s*/.exec(argsBody)
+ if (!extraFieldsMatch) return []
+
+ // Find first non-whitespace char after "extraFields:"
+ let valuePos = extraFieldsMatch.index + extraFieldsMatch[0].length
+ while (valuePos < argsBody.length && /\s/.test(argsBody[valuePos])) valuePos++
+
+ if (argsBody[valuePos] === '[') {
+ // extraFields: [...] — inline array, may contain function calls
+ const arrayEnd = findMatchingClose(argsBody, valuePos, '[', ']')
+ if (arrayEnd === -1) return []
+ return parseSubBlockArrayContent(
+ argsBody.substring(valuePos + 1, arrayEnd - 1),
+ UI_ONLY_IDS,
+ allContent
+ )
+ }
+
+ // extraFields: buildXFunc(args) — resolve the builder function
+ const extraFuncMatch = /^(\w+)\s*\(/.exec(argsBody.substring(valuePos))
+ if (!extraFuncMatch) return []
+ return resolveSubBlockBuilderFunction(extraFuncMatch[1], allContent)
+ }
+
+ // For all other builders, resolve the function body directly
+ return resolveSubBlockBuilderFunction(funcName, allContent)
+}
+
+/**
+ * Build the full trigger registry: id → TriggerFullInfo.
+ * Parses every trigger source file for config fields and output schemas.
+ */
+async function buildFullTriggerRegistry(): Promise