openapi: 3.2.0 info: description: Workflow management API for B3OS title: B3OS Workflow Agent Runs API version: '1.0' tags: - name: agent-runs paths: /v1/agent-runs: post: description: 'Spawns a first-party containerized agent (e.g. the workflow-builder deep-agent) on the runtime worker. The org + user are taken from the authenticated request; the server mints the worker session.' requestBody: content: application/json: schema: oneOf: - type: object - $ref: '#/components/schemas/StartAgentRunParams' summary: body description: Agent run request description: Agent run request required: true responses: '200': content: application/json: schema: allOf: - $ref: '#/components/schemas/data' properties: code: type: integer data: {} message: type: string requestId: type: string type: object description: OK security: - BearerAuth: [] summary: Start an agent run tags: - agent-runs /v1/agent-runs/agents: get: description: 'Returns the enabled first-party agents the deep-agent runtime can run. Each item''s `agentType` is the value to pass as StartAgentRunParams.agentType. Use this to discover what''s available before starting a run.' responses: '200': content: application/json: schema: allOf: - $ref: '#/components/schemas/data' properties: code: type: integer data: {} message: type: string requestId: type: string type: object description: OK security: - BearerAuth: [] summary: List available agent types tags: - agent-runs /v1/agent-runs/artifacts: get: description: 'Returns the durable list of served web-app artifacts built by completed app-builder runs in the given Caddie conversation. The organization is taken from the authenticated request; the conversation is scoped to it. Each item carries the run id and the absolute, browser-openable served URL.' parameters: - description: Conversation ID in: query name: conversationId required: true schema: type: string - description: Max items to return (default 20, max 100) in: query name: limit schema: type: integer - description: Items to skip (default 0) in: query name: offset schema: type: integer responses: '200': content: application/json: schema: allOf: - $ref: '#/components/schemas/data' properties: code: type: integer data: {} message: type: string requestId: type: string type: object description: OK security: - BearerAuth: [] summary: List a conversation's app artifacts tags: - agent-runs /v1/agent-runs/{id}: get: description: 'Returns the run''s status plus the append-only event log rows after the `since` sequence number. Poll this to stream a run''s progress.' parameters: - description: Run ID in: path name: id required: true schema: type: string - description: Return events with seq greater than this (default 0) in: query name: since schema: type: integer responses: '200': content: application/json: schema: allOf: - $ref: '#/components/schemas/data' properties: code: type: integer data: {} message: type: string requestId: type: string type: object description: OK security: - BearerAuth: [] summary: Get an agent run tags: - agent-runs components: schemas: github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.CommentReply: properties: createdAt: type: string createdBy: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteUser' id: type: string text: type: string updatedAt: type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteSize: properties: height: type: number width: type: number type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowInput: properties: description: type: string key: type: string required: type: boolean type: description: '"string", "number", "boolean", "object", "array"' type: string type: object StartAgentRunParams: properties: agentType: description: 'AgentType selects which registered first-party agent to run. Required — the caller picks one from GET /v1/agent-runs/agents (the worker''s enabled-agent discovery list). There is no default: routing an empty type to a fixed agent risks dispatching to a disabled one (an opaque 403).' type: string conversationId: description: 'Optional. Threads the run into an existing agent conversation; when empty the server generates a fresh conversation id (an independent thread).' type: string payload: additionalProperties: {} description: 'Payload is agent-type-specific input passed opaquely to the runtime (e.g. app-builder build params: workflowId, manifest, archetypeHint, parentBuildId, recentBuilds). workflow-builder ignores it.' type: object prompt: type: string required: - agentType - prompt type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowNode: properties: blockContext: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockNodeContext' branch: description: '"then"/"else" (if parent), "resumed"/"timed_out" (wait parent)' type: string children: items: type: string type: array uniqueItems: false connector: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.ConnectorReference' description: description: AI-generated 1-sentence description type: string loopBody: description: Loop body nodes (only for for-each nodes) items: type: string type: array uniqueItems: false payload: additionalProperties: {} type: object resultSchema: additionalProperties: {} description: 'ResultSchema describes the output structure of this node (populated dynamically for x402 endpoints). This is used by the frontend to show available output variables in the variable picker.' type: object titleOverride: description: AI-generated short title (2-6 words), only when more descriptive than default type: string type: type: string required: - payload - type type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockOutputProperty: properties: description: type: string properties: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockOutputProperty' type: object type: type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropVisibleWhen: description: 'VisibleWhen controls conditional visibility: show this prop only when the referenced prop has the specified value.' properties: propKey: type: string value: {} type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchemaSummaryAggregate: properties: column: description: Column key in PropSchema.Columns. type: string label: description: 'Optional override for the displayed label. If empty, the frontend derives a label from the column + reducer (e.g. "Total amount").' type: string reduce: description: 'Reducer name. Matches the key in the frontend cell-spec''s `aggregate` map (currently: "sum", "count"). Unknown reducers are silently skipped on the frontend.' type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateProp: properties: default: {} description: type: string key: type: string name: type: string properties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchema' required: type: boolean sensitive: type: boolean type: description: '"string", "number", "integer", "boolean", "object" (for csvTable)' type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateVisibility: enum: - org - public - org - public type: string x-enum-comments: TemplateVisibilityOrg: Only visible to organization members TemplateVisibilityPublic: Visible to everyone x-enum-varnames: - TemplateVisibilityOrg - TemplateVisibilityPublic github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSource: properties: fieldPath: type: string nodeId: type: string nodeLabel: type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNote: properties: color: type: string createdAt: type: string createdBy: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteUser' id: type: string position: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.NodePosition' size: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteSize' text: type: string updatedAt: type: string zIndex: type: integer type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowDefinition: description: 'Definition is the inline workflow graph to analyze. Same shape as a saved workflow''s definition. Unlike the ephemeral-run endpoint there is no trigger restriction — analysis is read-only and method-agnostic.' properties: blockExpansions: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockExpansionMeta' description: Set on run snapshots only (not workflow DB) type: object inputSchema: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowInput' type: array uniqueItems: false nodes: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowNode' type: object sensitivePropKeys: description: 'Legacy: kept for old runs; no longer populated for new workflows' items: type: string type: array uniqueItems: false triggerNodeIds: description: 'TriggerNodeIDs lists the node IDs that are trigger (root) nodes. Every workflow declares this — single-trigger workflows ship ["root"] (the legacy node id), multi-trigger workflows list every trigger node id. Treating single-trigger as a forest-of-1 removes the two-path branching throughout the BE + FE; older rows without the field are backfilled by migration 000282 and the field-missing path stays as a read-side safety net (see FindTriggerNodeIDs) but is no longer exercised by saves. "root" is also a runtime alias for "the trigger that fired this run" — {{root.X}} variable references resolve to the firing trigger regardless of which trigger fired. Don''t repurpose the literal "root" as a trigger id on a multi-trigger workflow.' items: type: string type: array uniqueItems: false variableDefs: description: 'VariableDefs is a snapshot of the workflow''s declared variables at run creation time. The canonical source lives on the workflows row (Workflow.VariableDefs column). Snapshotted into the run definition so the worker can resolve {{$vars.x}} lookups and route variable-action writes to the right scope without an extra DB round trip.' items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableDef' type: array uniqueItems: false required: - nodes type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockNodeContext: description: 'BlockContext is set on nodes that were expanded from a block. It traces the node back to its source block and carries the inputMapping needed to resolve {{$inputs.key}} references at execution time.' properties: blockId: description: Block entity ID type: string blockNodeId: description: Original block node ID in the workflow type: string blockVersion: description: Pinned block version type: integer inputMapping: additionalProperties: {} description: From block node payload (consumer-authored) type: object type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchemaSummary: description: 'Summary drives the csvTable footer summary. Nil means no summary is rendered. See PropSchemaSummary for details.' properties: aggregates: description: Aggregates declared in display order, left-to-right. items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchemaSummaryAggregate' type: array uniqueItems: false position: description: 'Position in the grid. "footer" (default) renders inline under the table. "none" suppresses even when aggregates are declared — use to disable inherited summaries. Other values reserved.' type: string type: object ? github_com_b3-fun_b3-mono_services_b3os-workflow_PaginatedData-github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity_Template : properties: hasMore: type: boolean items: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Template' type: array uniqueItems: false limit: type: integer offset: type: integer type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteUser: properties: clientId: type: string name: type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TableSchema: properties: columns: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.ColumnSchema' type: array uniqueItems: false type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableDef: properties: default: {} description: type: string lifetime: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableLifetime' name: type: string type: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableType' type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchema: properties: accountType: description: 'AccountType filters the wallet picker by account type on inputType="walletConnector" fields (e.g. "polymarket_deposit_wallet").' type: string allowWalletPicker: description: 'AllowWalletPicker controls the org-wallet picker on inputType="address" fields. When false, the frontend hides the inline "Wallets" badge and the org-wallet autocomplete popover. Use for third-party address fields (e.g. a deployer filter) where suggesting org wallets is misleading. Pointer so explicit false survives JSON round-trip (default true on FE).' type: boolean allowedChannels: description: 'AllowedChannels constrains the notification-channel picker (inputType: "notification-channel") to a subset of channels. Used by templates whose downstream nodes only work with one channel type (e.g. ["slack"] for a Slack-only approval flow). Frontend ignores unknown keys; a length-1 list auto-selects in the picker.' items: type: string type: array uniqueItems: false autoFillFromWallet: description: 'AutoFillFromWallet, when true, auto-fills this prop with the selected workflow wallet address and hides it from the form. Pointer so an explicit false survives the JSON round-trip (same rationale as AllowWalletPicker).' type: boolean bindsConnectorNodes: description: 'BindsConnectorNodes lists workflow node IDs whose wallet-type connector should be prefilled from this prop''s picked wallet (inputType: "walletConnector"). The connector stays a plain, editable connector — this is a prefill, not a permanent bind.' items: type: string type: array uniqueItems: false chainId: description: 'For tokenAmount: hardcoded chain ID' type: integer chainPropKey: description: 'For tokenSelector/tokenAmount: prop key providing chainId' type: string columns: description: 'Columns describes a csvTable prop (inputType: "csvTable"). The stored value is an object-of-columnar-arrays: {colKey: []value}. Payload templates reference each column via {{$props..}}.' items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropColumn' type: array uniqueItems: false dex: description: 'For hyperliquidAsset: hardcoded DEX name (fallback when no dexPropKey)' type: string dexPropKey: description: 'For hyperliquidAsset: prop key providing HIP-3 DEX name' type: string enum: items: {} type: array uniqueItems: false enumLabels: items: type: string type: array uniqueItems: false excludeNative: description: 'For tokenSelector/multiTokenSelector: hide native tokens (field only accepts ERC-20 contract addresses)' type: boolean groupKey: description: Groups related props for unified UI rendering type: string inputType: description: 'InputType is a UI rendering hint. The frontend uses it to pick a rich selector component instead of a plain text input. Unknown values are silently ignored (falls back to default input). Valid values: chainSelector, tokenSelector, multiTokenSelector, tokenAmount, coinSelector, multiCoinSelector, address, contractAddress, recipientAddress, email, telegram-chat, slack-channel, pushover-recipient, pushbullet-device, webpush-subscription, textarea, password, polymarketUser, twitterUsername, storkAsset, hyperliquidAsset, morphoVault, morphoMarket, csvTable, notification-channel, googleSheetUrl, rrule, walletConnector' type: string maxRows: description: 'csvTable: maximum allowed rows (0 = no cap)' type: integer maximum: type: number minRows: description: 'csvTable: minimum required rows (0 = default 1)' type: integer minimum: type: number pattern: type: string placeholder: type: string showWalletBalances: description: 'For tokenSelector: show wallet balances (useful for "sell" tokens)' type: boolean sources: description: 'Sources lists the workflow node fields this prop was created from. Each entry identifies a node + field path so the frontend can reliably match props back to their source fields on reload. Multiple entries indicate the prop was merged from fields with identical values across different nodes.' items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSource' type: array uniqueItems: false summary: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropSchemaSummary' tokenAddress: description: 'For tokenAmount: hardcoded token address' type: string tokenAddressPropKey: description: 'For tokenAmount: prop key providing tokenAddress' type: string visibleWhen: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropVisibleWhen' type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.ColumnSchema: properties: default: type: string name: type: string notNull: type: boolean primaryKey: type: boolean type: type: string unique: type: boolean type: object data: properties: data: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_PaginatedData-github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity_Template' type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Template: properties: archived: type: boolean category: description: 'Deprecated: Use Tags instead' type: string cooldownMs: type: integer createdAt: type: string createdBy: type: string definition: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowDefinition' description: type: string forkCount: type: integer generatedAppId: description: 'Generated-app attachment (nil when the template ships no app). On adoption the referenced app is CLONED into the adopting org''s new workflow. GeneratedAppVersionID optionally pins a specific version whose manifest is used as the clone source.' type: string generatedAppVersionId: type: string id: type: string isPromoted: type: boolean maxRuns: type: integer moderationStatus: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateModerationStatus' name: type: string organizationDescription: type: string organizationId: description: Fields for user-generated templates (nil for built-in templates) type: string organizationName: type: string organizationPhoto: type: string promotedAt: type: string promotedBy: type: string promotedOrder: type: integer rejectionReason: type: string reviewedAt: type: string reviewedBy: type: string slug: type: string sourceWorkflowId: description: Source workflow link (nil for built-in or legacy templates) type: string submittedAt: type: string tableSchemas: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TableSchema' type: object tags: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Tag' type: array uniqueItems: false templateProps: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateProp' type: array uniqueItems: false uiMetadata: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowUIMetadata' updatedAt: type: string updatedBy: type: string version: type: integer visibility: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateVisibility' type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.ConnectorReference: description: nil if action doesn't need connector properties: chainId: type: integer id: type: string type: type: string walletAddress: description: 'WalletAddress is the wallet''s on-chain address, only meaningful for type:"wallet" refs. Not used by ConnectorResolver (which resolves the address from the wallet DB record); exists for frontend round-trip fidelity.' type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableLifetime: enum: - persist - reset type: string x-enum-varnames: - VariableLifetimePersist - VariableLifetimeReset github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockExpansionMeta: properties: blockId: type: string blockVersion: type: integer entryNodeIds: description: Subset of ExpandedIDs that are entry points items: type: string type: array uniqueItems: false expandedIds: description: All namespaced node IDs produced by expansion items: type: string type: array uniqueItems: false outputSchema: description: Block's output schema for reference items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockOutput' type: array uniqueItems: false type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.VariableType: enum: - number - text - boolean - list - object type: string x-enum-varnames: - VariableTypeNumber - VariableTypeText - VariableTypeBoolean - VariableTypeList - VariableTypeObject github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockOutput: properties: description: description: Human-readable description for the variable picker type: string key: description: Output field name exposed to consumers type: string properties: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.BlockOutputProperty' description: Nested schema for object/array outputs (shown in variable picker) type: object sourceField: description: Field path from the source node's result (e.g., "balance") type: string sourceNode: description: Node ID within the block definition type: string type: description: '"string", "number", "boolean", "object", "array"' type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.WorkflowUIMetadata: properties: comments: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Comment' type: array uniqueItems: false nodePositions: additionalProperties: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.NodePosition' type: object stickyNotes: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNote' type: array uniqueItems: false type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.NodePosition: properties: x: type: number y: type: number type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Comment: properties: createdAt: type: string createdBy: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.StickyNoteUser' id: type: string nodeId: type: string position: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.NodePosition' replies: items: $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.CommentReply' type: array uniqueItems: false resolved: type: boolean text: type: string updatedAt: type: string type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.Tag: properties: categories: description: e.g., ["blockchain", "finance"] items: type: string type: array uniqueItems: false count: description: 'Scope-dependent: template, action, trigger, or connector count' type: integer createdAt: type: string description: type: string id: type: string imageUrl: type: string name: type: string promotedTemplateCount: type: integer publicTemplateCount: type: integer slug: type: string updatedAt: type: string weight: description: Higher weight = more prominent type: integer type: object github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.TemplateModerationStatus: description: 'Moderation fields (B3-4168). Only meaningful for public templates; org templates are always approved.' enum: - pending - approved - rejected type: string x-enum-varnames: - TemplateModerationStatusPending - TemplateModerationStatusApproved - TemplateModerationStatusRejected github_com_b3-fun_b3-mono_services_b3os-workflow_internal_pkg_entity.PropColumn: properties: chainId: type: integer chainPropKey: description: For tokenAmount cells type: string inputType: description: address, recipientAddress, tokenAmount, text (see frontend CELL_REGISTRY) type: string key: type: string name: type: string pattern: type: string placeholder: type: string required: type: boolean tokenAddress: type: string tokenAddressPropKey: description: For tokenAmount cells type: string type: description: '"string", "number", "integer"' type: string type: object