NodeCategory
NodeCapabilities
NodeMetadata
Client-safe metadata (no executor). Used for UI rendering.Unique node type identifier.
Human-readable display name.
Description shown in the editor palette.
One of
action, logic, integration, transform.Estimated execution time in seconds.
Feature flags for the node.
NodeDefinition<TInput, TOutput>
Complete node definition. ExtendsNodeMetadata with schemas and executor.
Zod schema for validating node inputs.
Zod schema for validating node outputs.
Async function that executes the node logic.
NodeExecutionContext
Passed to every node executor.The user running the workflow.
Optional project/campaign context.
Unique identifier for this workflow run.
All workflow variables (includes upstream node outputs).
Resolve dot-notation paths like
contact.email against variables.Injected service implementations.
NodeExecutionResult<TOutput>
Returned by every node executor.Whether execution succeeded.
The node’s output data (must match
outputSchema).Error message if
success is false.For conditional branching — which node to execute next.
Request human approval before continuing.
Emit a notification with
title, message, and optional data.NodeExecutor<TInput, TOutput>
NodeApprovalRequest
BaseNodeConfig / Approval / Notifications
Optional config any node can include:NodeServices
All optional. Host applications inject implementations viacontext.services.
Service Interfaces
| Service | Key Methods |
|---|---|
ApolloClient | searchContacts(params), enrichContact(contactId) |
DataForSeoClient | getOnPageInstant(url, options?), getRelatedKeywords(keywords, options?) |
TwitterClient | searchTweets(query, options?) |
ForumScoutClient | searchLinkedIn(keywords, options?) |
OpenAIClient | generateVideo(params), generateImage(params) |
AnthropicClient | generateText(params), generateStructured<T>(params) |
NotificationService | send(params) |
EmailDraftsService | createDraft(params) |
AnalyzedPostsStorage | storePosts(params) |
StorageService | save<T>(key, data), get<T>(key), delete(key) |
CacheService | get<T>(key), set<T>(key, value, ttlSeconds?), delete(key) |

