{"openapi":"3.1.0","info":{"title":"Interactly API","description":"API for building interactly.ai services","version":"1.1.0","contact":{"name":"Interactly","url":"https://interactly.ai","email":"developers@interactly.ai"}},"servers":[{"url":"https://api-qa.interactly.ai","description":"API Server"}],"paths":{"/workflows/v1/nodes/types":{"get":{"tags":["Nodes"],"summary":"Get Node Types","description":"Endpoint to retrieve the available node types.","operationId":"workflow_service_get_node_types_v1_nodes_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/nodes/schema/{node_type}":{"get":{"tags":["Nodes"],"summary":"Get Node Schema","description":"Endpoint to retrieve the schema for a specific node type.","operationId":"workflow_service_get_node_schema_v1_nodes_schema__node_type__get","parameters":[{"name":"node_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NodeType"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/nodes":{"post":{"tags":["Nodes"],"summary":"Create Node","description":"Endpoint to create a new node.","operationId":"workflow_service_create_node_v1_nodes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/WorkerLLMNodeConfig-Input"},{"$ref":"#/components/schemas/SayLLMNodeConfig-Input"},{"$ref":"#/components/schemas/SayStaticMessageNodeConfig-Input"},{"$ref":"#/components/schemas/SuperNodeConfig-Input"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeConfig-Input"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Input"},{"$ref":"#/components/schemas/ToolNodeConfig-Input"},{"$ref":"#/components/schemas/StartConversationNodeConfig-Input"},{"$ref":"#/components/schemas/EndConversationNodeConfig-Input"},{"$ref":"#/components/schemas/SendSMSNodeConfig-Input"},{"$ref":"#/components/schemas/GoogleDocsNodeConfig-Input"},{"$ref":"#/components/schemas/HttpRequestNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Input"},{"$ref":"#/components/schemas/DeduplicateNodeConfig-Input"},{"$ref":"#/components/schemas/FieldExtractorNodeConfig-Input"},{"$ref":"#/components/schemas/NoOpNodeConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"worker_llm":"#/components/schemas/WorkerLLMNodeConfig-Input","say_llm":"#/components/schemas/SayLLMNodeConfig-Input","say_static":"#/components/schemas/SayStaticMessageNodeConfig-Input","super_node":"#/components/schemas/SuperNodeConfig-Input","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeConfig-Input","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Input","tool_node":"#/components/schemas/ToolNodeConfig-Input","start_conversation":"#/components/schemas/StartConversationNodeConfig-Input","end_conversation":"#/components/schemas/EndConversationNodeConfig-Input","send_sms":"#/components/schemas/SendSMSNodeConfig-Input","google_docs":"#/components/schemas/GoogleDocsNodeConfig-Input","http_request":"#/components/schemas/HttpRequestNodeConfig-Input","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeConfig-Input","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeConfig-Input","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Input","athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Input","deduplicate":"#/components/schemas/DeduplicateNodeConfig-Input","field_extractor":"#/components/schemas/FieldExtractorNodeConfig-Input","no_op":"#/components/schemas/NoOpNodeConfig-Input"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Nodes"],"summary":"Get Nodes","description":"Endpoint to retrieve all nodes.\nIf version_number is not provided but workflow_id is, defaults to the workflow's active_version_number.","operationId":"workflow_service_get_nodes_v1_nodes_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/NodeFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/nodes/{node_id}":{"get":{"tags":["Nodes"],"summary":"Get Node","description":"Endpoint to retrieve a node configuration by its ID.\nOptionally verify the node belongs to a specific version number.","operationId":"workflow_service_get_node_v1_nodes__node_id__get","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify node belongs to this version number (0 includes legacy nodes)","title":"Version Number"},"description":"Verify node belongs to this version number (0 includes legacy nodes)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Nodes"],"summary":"Update Node","description":"Endpoint to update a node by its ID.\nOptionally verify the node belongs to a specific version number before updating.","operationId":"workflow_service_update_node_v1_nodes__node_id__patch","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify node belongs to this version number before updating (0 includes legacy nodes)","title":"Version Number"},"description":"Verify node belongs to this version number before updating (0 includes legacy nodes)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Nodes"],"summary":"Delete Node","description":"Endpoint to delete a node by its ID.","operationId":"workflow_service_delete_node_v1_nodes__node_id__delete","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify node belongs to this version number before deleting (0 includes legacy nodes)","title":"Version Number"},"description":"Verify node belongs to this version number before deleting (0 includes legacy nodes)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/edges/types":{"get":{"tags":["Edges"],"summary":"Get Edge Types","description":"Endpoint to retrieve the available edge types.","operationId":"workflow_service_get_edge_types_v1_edges_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/edges/schema/{edge_type}":{"get":{"tags":["Edges"],"summary":"Get Edge Schema","description":"Endpoint to retrieve the schema for a specific edge type.","operationId":"workflow_service_get_edge_schema_v1_edges_schema__edge_type__get","parameters":[{"name":"edge_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EdgeType"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/edges":{"post":{"tags":["Edges"],"summary":"Create Edge","description":"Endpoint to create a new edge.","operationId":"workflow_service_create_edge_v1_edges_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DirectEdgeConfig-Input"},{"$ref":"#/components/schemas/ConditionalEdgeConfig-Input"},{"$ref":"#/components/schemas/CompanionEdgeConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"direct":"#/components/schemas/DirectEdgeConfig-Input","conditional":"#/components/schemas/ConditionalEdgeConfig-Input","companion":"#/components/schemas/CompanionEdgeConfig-Input"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Edges"],"summary":"Get Edges","description":"Endpoint to retrieve all edges.\nIf version_number is not provided but workflow_id is, defaults to the workflow's active_version_number.","operationId":"workflow_service_get_edges_v1_edges_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/EdgeFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/edges/{edge_id}":{"get":{"tags":["Edges"],"summary":"Get Edge","description":"Endpoint to retrieve an edge configuration by its ID.\nOptionally verify the edge belongs to a specific version.","operationId":"workflow_service_get_edge_v1_edges__edge_id__get","parameters":[{"name":"edge_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify edge belongs to this version number (0 includes legacy edges)","title":"Version Number"},"description":"Verify edge belongs to this version number (0 includes legacy edges)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Edges"],"summary":"Update Edge","description":"Endpoint to update a edge by its ID.\nOptionally verify the edge belongs to a specific version number before updating.","operationId":"workflow_service_update_edge_v1_edges__edge_id__patch","parameters":[{"name":"edge_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify edge belongs to this version number before updating (0 includes legacy edges)","title":"Version Number"},"description":"Verify edge belongs to this version number before updating (0 includes legacy edges)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Edges"],"summary":"Delete Edge","description":"Endpoint to delete an edge by its ID.\nOptionally verify the edge belongs to a specific version number before deleting.","operationId":"workflow_service_delete_edge_v1_edges__edge_id__delete","parameters":[{"name":"edge_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Verify edge belongs to this version number before deleting (0 includes legacy edges)","title":"Version Number"},"description":"Verify edge belongs to this version number before deleting (0 includes legacy edges)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/schema":{"get":{"tags":["Workflows"],"summary":"Get Workflow Schema","description":"Endpoint to retrieve the schema for workflow","operationId":"workflow_service_get_workflow_schema_v1_workflows_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/schemas/global-node-config":{"get":{"tags":["Workflows"],"summary":"Get Global Node Config Schema","description":"Endpoint to retrieve the JSON schema for ``GlobalNodeConfig``.\n\nConsumed by the dashboard's Super Node dialog to render the Routing & Guardrails\nsub-form via ``SchemaDrivenForm`` instead of hand-rolled MUI controls. Returning\nthe Pydantic-derived schema keeps every leaf field (``condition_freeform``,\n``condition_expression``, ``args_schema``, ``static_messages_config``,\n``dynamic_messages_config``, ``reverse_conditional_edge``, etc.) automatically\nin sync with the runtime config.","operationId":"workflow_service_get_global_node_config_schema_v1_workflows_schemas_global_node_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/dynamic-variables/{workflow_id}":{"get":{"tags":["Workflows"],"summary":"Get Workflow Dynamic Variables","description":"Endpoint to retrieve a workflow's dynamic variables by its ID.\n\nParameters:\n- version_number: Optional version number to fetch dynamic variables from.\n                 If not provided, returns dynamic variables from the parent workflow's current configuration (legacy behavior).","operationId":"workflow_service_get_workflow_dynamic_variables_v1_workflows_dynamic_variables__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Version number to fetch dynamic variables from","title":"Version Number"},"description":"Version number to fetch dynamic variables from"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsDynamicVariablesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows":{"post":{"tags":["Workflows"],"summary":"Create Workflow","description":"Endpoint to create a new workflow.\nIf a WorkflowConfigFullyHydrated is provided, creates the workflow and all its nodes/edges atomically.\nOtherwise, creates an initial version of the workflow with version number 0.","operationId":"workflow_service_create_workflow_v1_workflows_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Input","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},{"$ref":"#/components/schemas/WorkflowConfig-Input"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Workflows"],"summary":"Get Workflows","description":"Endpoint to retrieve all workflows.","operationId":"workflow_service_get_workflows_v1_workflows_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/WorkflowsFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/clone":{"post":{"tags":["Workflows"],"summary":"Clone Workflow Endpoint","description":"Endpoint to clone a workflow, optionally including specific versions.","operationId":"workflow_service_clone_workflow_endpoint_v1_workflows__workflow_id__clone_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloneWorkflowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}":{"get":{"tags":["Workflows"],"summary":"Get Workflow","description":"Endpoint to retrieve a workflow configuration by its ID.\n\nParameters:\n- version_number: Fetch a specific version snapshot (returns WorkflowVersionResponse)\n- find_active_version: Explicitly fetch parent workflow with active_version_number (returns WorkflowsResponse)\n- Neither: Returns parent workflow for backward compatibility (deprecated - use explicit parameters)\nNote: version_number and find_active_version are mutually exclusive.","operationId":"workflow_service_get_workflow_v1_workflows__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Version number to retrieve","title":"Version Number"},"description":"Version number to retrieve"},{"name":"find_active_version","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Fetch parent workflow to get active_version_number","title":"Find Active Version"},"description":"Fetch parent workflow to get active_version_number"},{"name":"fully_hydrate","in":"query","required":false,"schema":{"type":"boolean","description":"Whether to fully hydrate the workflow","default":false,"title":"Fully Hydrate"},"description":"Whether to fully hydrate the workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowsResponse"},{"$ref":"#/components/schemas/WorkflowVersionResponse"}],"title":"Response Get Workflow V1 Workflows  Workflow Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Workflows"],"summary":"Update Workflow","description":"Update a workflow's configuration.\nBehavior:\n- If version_number is provided: Updates the specific WorkflowVersionModel (for versioned workflows)\n  or falls back to parent WorkflowsModel (for legacy workflows without version models)\n- If version_number is NOT provided: Updates parent WorkflowsModel (legacy/backward compatibility)\nReturns:\n- WorkflowVersionResponse if updating a version model\n- WorkflowsResponse if updating parent workflow (legacy)","operationId":"workflow_service_update_workflow_v1_workflows__workflow_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Version number to update","title":"Version Number"},"description":"Version number to update"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowsResponse"},{"$ref":"#/components/schemas/WorkflowVersionResponse"}],"title":"Response Update Workflow V1 Workflows  Workflow Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflows"],"summary":"Delete Workflow","description":"Endpoint to delete a workflow by its ID.","operationId":"workflow_service_delete_workflow_v1_workflows__workflow_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/lints":{"get":{"tags":["Workflows"],"summary":"Get Workflow Lints","description":"Every advisory lint for a stored workflow, run against the whole graph.\n\nThese same checks run on a fully-hydrated create and their findings come back on that response. Most\nediting does not go through that route: the editor saves a node or an edge at a time, and a request\nbody holding one node cannot answer a question about the graph around it. Two of the checks are\n*only* answerable graph-wide — whether a cross-thread reference names a thread that exists, and\nwhether a conditional edge evaluated while waiting could ever fire — so for a workflow built up in\nthe editor they have had nothing to run against and have reported to nobody.\n\nRead-only, and separate from any save. That is what lets it lint a workflow nobody is editing, and it\nis the same shape as the realtime-compatibility route next to this one: an author asks a question and\ngets an answer, rather than being told something while trying to do something else.\n\nLinted **after super-node expansion**, so a finding inside an inlined sub-workflow is reported\nagainst the graph that would actually run. If expansion fails the outer graph is linted anyway and\nthe response says so, because a partial answer beats none — the same fallback the realtime route\nmakes, for the same reason.","operationId":"workflow_service_get_workflow_lints_v1_workflows__workflow_id__lints_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Version to lint; defaults to the active one","title":"Version Number"},"description":"Version to lint; defaults to the active one"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/realtime-compatibility":{"get":{"tags":["Workflows"],"summary":"Get Workflow Realtime Compatibility","description":"Report whether this workflow can run its voice calls on a realtime (speech-to-speech) model.\n\nRead-only and opt-in: nothing calls this unless a user asks. That matters — realtime is not the\ndefault path, and warning every author about a mode they never selected is how a check gets\nignored. The dashboard calls it when someone picks a realtime Voice Config for this workflow,\nwhich is the moment the question is live, and authors can call it directly beforehand.\n\nAnalysed **after super-node expansion**, so the verdict describes the graph that would actually\nrun rather than the one on the canvas. If expansion fails, the unexpanded graph is analysed\ninstead and each unexpandable super node is reported as `indeterminate` rather than assumed fine.","operationId":"workflow_service_get_workflow_realtime_compatibility_v1_workflows__workflow_id__realtime_compatibility_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Version to analyse; defaults to the active one","title":"Version Number"},"description":"Version to analyse; defaults to the active one"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/concurrency":{"patch":{"tags":["Workflows"],"summary":"Update Workflow Concurrency","description":"Update the per-workflow concurrency limit.\n\n- Set `max_concurrent_runs` to a positive integer to cap concurrent executions for this workflow.\n- Set to `0` or `null` to remove the per-workflow limit (only team-level limit applies).","operationId":"workflow_service_update_workflow_concurrency_v1_workflows__workflow_id__concurrency_patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConcurrencyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConcurrencyConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/export":{"get":{"tags":["Workflows"],"summary":"Export Workflow Bundle","operationId":"workflow_service_export_workflow_bundle_v1_workflows__workflow_id__export_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_numbers","in":"query","required":true,"schema":{"type":"array","items":{"type":"integer"},"description":"List of version numbers to export","title":"Version Numbers"},"description":"List of version numbers to export"},{"name":"active_version_number","in":"query","required":true,"schema":{"type":"integer","description":"The active version number among the exported versions","title":"Active Version Number"},"description":"The active version number among the exported versions"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBundleExportResponse-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/import/bundle":{"post":{"tags":["Workflows"],"summary":"Import Workflow Bundle Endpoint","operationId":"workflow_service_import_workflow_bundle_endpoint_v1_workflows_import_bundle_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBundleImportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/versions/active":{"get":{"tags":["Workflow Versions"],"summary":"List Team Active Versions","description":"Returns active workflow versions for the team with pagination.\nSupports combined filters: favorites, created_by_me, category, categories, logical_id.\nEvery item includes an `is_favorite` flag regardless of filter.\nOnly workflows with a non-null active_version_number are included.","operationId":"workflow_service_list_team_active_versions_v1_workflows_versions_active_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/WorkflowsFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionsWithFavoriteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/versions":{"post":{"tags":["Workflow Versions"],"summary":"Create Workflow Version","operationId":"workflow_service_create_workflow_version_v1_workflows__workflow_id__versions_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Workflow Versions"],"summary":"List Workflow Versions","operationId":"workflow_service_list_workflow_versions_v1_workflows__workflow_id__versions_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/versions/{version_number}/activate":{"post":{"tags":["Workflow Versions"],"summary":"Set Active Workflow Version","description":"Sets a specific version as the active version for the workflow.\nThe frontend/runner will use this version by default.","operationId":"workflow_service_set_active_workflow_version_v1_workflows__workflow_id__versions__version_number__activate_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"path","required":true,"schema":{"type":"integer","title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/versions/{version_number}":{"patch":{"tags":["Workflow Versions"],"summary":"Update Workflow Version Name","operationId":"workflow_service_update_workflow_version_name_v1_workflows__workflow_id__versions__version_number__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"path","required":true,"schema":{"type":"integer","title":"Version Number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVersionNameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Versions"],"summary":"Delete Workflow Version","operationId":"workflow_service_delete_workflow_version_v1_workflows__workflow_id__versions__version_number__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"path","required":true,"schema":{"type":"integer","title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/versions/{version_number}/config":{"patch":{"tags":["Workflow Versions"],"summary":"Update Workflow Version Config","description":"Update a specific version's workflow_config.\nThis allows editing workflow settings (name, description, global LLM config, etc.) for a specific version.","operationId":"workflow_service_update_workflow_version_config_v1_workflows__workflow_id__versions__version_number__config_patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"path","required":true,"schema":{"type":"integer","title":"Version Number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/versions/{version1_number}/diff/{version2_number}":{"get":{"tags":["Workflow Versions"],"summary":"Compare Workflow Versions","description":"Compare two workflow versions and return a detailed diff.\n\nArgs:\n    workflow_id: The workflow ID\n    version1_number: First version number (typically the older version)\n    version2_number: Second version number (typically the newer version)\n\nReturns:\n    VersionDiffResponse with workflow config changes, node changes, and edge changes","operationId":"workflow_service_compare_workflow_versions_v1_workflows__workflow_id__versions__version1_number__diff__version2_number__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version1_number","in":"path","required":true,"schema":{"type":"integer","title":"Version1 Number"}},{"name":"version2_number","in":"path","required":true,"schema":{"type":"integer","title":"Version2 Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionDiffResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/favorite":{"post":{"tags":["Workflow Favorites"],"summary":"Mark Workflow Favorite","description":"Mark a workflow as favorite for the current user. Idempotent.","operationId":"workflow_service_mark_workflow_favorite_v1_workflows__workflow_id__favorite_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Favorites"],"summary":"Unmark Workflow Favorite","description":"Remove a workflow from the current user's favorites.","operationId":"workflow_service_unmark_workflow_favorite_v1_workflows__workflow_id__favorite_delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-categories":{"get":{"tags":["Workflow Categories"],"summary":"Get Workflow Categories","description":"Retrieve all available workflow categories for the current team.\nReturns merged global defaults + team-specific custom categories, deduplicated.","operationId":"workflow_service_get_workflow_categories_v1_workflow_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCategoriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/types":{"get":{"tags":["Tools"],"summary":"Get Tool Types","description":"Endpoint to retrieve the available tool types.","operationId":"workflow_service_get_tool_types_v1_tools_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/schema/{tool_type}":{"get":{"tags":["Tools"],"summary":"Get Tool Schema","description":"Endpoint to retrieve the schema for a specific tool type.","operationId":"workflow_service_get_tool_schema_v1_tools_schema__tool_type__get","parameters":[{"name":"tool_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ToolType"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/configurable-inbuilt":{"get":{"tags":["Tools"],"summary":"Get Configurable Inbuilt Tools","description":"List all configurable inbuilt tools from the catalogue.\n\nReturns a list of entries, each containing:\n- ``key``: the stable configurable_key (e.g. ``\"call_forward\"``).\n- ``title``: human-readable display name.\n- ``registry_tool_id``: the TOOL_REGISTRY key for the underlying function.\n- ``config_schema``: JSON schema of the extra user-configurable fields.","operationId":"workflow_service_get_configurable_inbuilt_tools_v1_tools_configurable_inbuilt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/configurable-inbuilt/{key}":{"get":{"tags":["Tools"],"summary":"Get Configurable Inbuilt Tool Schema","description":"Return the extra-config JSON schema for a single configurable inbuilt tool.\n\nUsed by the frontend after the user selects a tool from the picker so it\ncan render a form for the tool-specific configurable fields.","operationId":"workflow_service_get_configurable_inbuilt_tool_schema_v1_tools_configurable_inbuilt__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/inbuilt":{"get":{"tags":["Tools"],"summary":"Get Inbuilt Tools","description":"Endpoint to retrieve all inbuilt tools from the registry.\nThis is a helper endpoint for debugging and understanding available inbuilt tools.\n\nThe shaping lives in ``agentic_workflow_framework.copilot_tools.platform_tools`` so this endpoint and the\ncopilot's ``platform_list_inbuilt_tools`` describe the registry identically rather than drifting.","operationId":"workflow_service_get_inbuilt_tools_v1_tools_inbuilt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools":{"post":{"tags":["Tools"],"summary":"Create Tool","description":"Endpoint to create a new tool.","operationId":"workflow_service_create_tool_v1_tools_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"discriminator":{"propertyName":"type","mapping":{"inline_python":"#/components/schemas/InlinePythonToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","external_api":"#/components/schemas/ExternalAPIToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Tools"],"summary":"Get Tools","description":"Endpoint to retrieve all tools including custom tools and inbuilt tools.","operationId":"workflow_service_get_tools_v1_tools_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/ToolsFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/import":{"post":{"tags":["Tools"],"summary":"Import Tool","description":"Create a new tool from an exported bundle (see GET /tools/{tool_id}/export).\n\nRe-injects redacted secrets from ``secret_overrides``, resolves non-portable\nreferences, assigns a fresh identity to the importing team, and persists through\nthe same validation path as create_tool.","operationId":"workflow_service_import_tool_v1_tools_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolBundleImportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/execute":{"post":{"tags":["Tools"],"summary":"Execute Tool Inline","description":"Execute a fully inline tool config (not yet persisted) against the supplied argument values and\nreturn its output.\n\nRuntime failures (bad args, thrown exceptions, timeouts) are returned as HTTP 200 with\n``success=False`` and a clean ``error`` message rather than a 500, so callers can render them inline.\n\nNote: inline-Python tools run their code via ``exec`` server-side and are not sandboxed. This endpoint\nis intended for authoring/debugging within a team's own workspace.","operationId":"workflow_service_execute_tool_inline_v1_tools_execute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteInlineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/{tool_id}/execute":{"post":{"tags":["Tools"],"summary":"Execute Tool","description":"Execute a saved custom tool against the supplied argument values and return its output.\n\nRuntime failures are returned as HTTP 200 with ``success=False`` and a clean ``error`` message\n(see :func:`execute_tool_inline`).","operationId":"workflow_service_execute_tool_v1_tools__tool_id__execute_post","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/{tool_id}":{"get":{"tags":["Tools"],"summary":"Get Tool","description":"Endpoint to retrieve a tool configuration by its ID.\nChecks both custom tools in the database and inbuilt tools from the registry.","operationId":"workflow_service_get_tool_v1_tools__tool_id__get","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Tools"],"summary":"Update Tool","operationId":"workflow_service_update_tool_v1_tools__tool_id__patch","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Tools"],"summary":"Delete Tool","description":"Endpoint to delete a tool by its ID.\nOnly custom tools can be deleted; inbuilt tools cannot be deleted.","operationId":"workflow_service_delete_tool_v1_tools__tool_id__delete","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/tools/{tool_id}/export":{"get":{"tags":["Tools"],"summary":"Export Tool","description":"Export a saved custom tool as a self-describing JSON bundle.\n\nIdentity/audit fields are stripped and secret-bearing fields (external_api\nheaders/body) are redacted; the recipient re-supplies them on import. Inbuilt\ntools are not exportable.","operationId":"workflow_service_export_tool_v1_tools__tool_id__export_get","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolBundleExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/schemas/llm-config":{"get":{"tags":["LLM Configs"],"summary":"Get Llm Config Schema","description":"Endpoint to retrieve the schema for LLM config.","operationId":"workflow_service_get_llm_config_schema_v1_schemas_llm_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/llm-configs":{"post":{"tags":["LLM Configs"],"summary":"Create Llm Config","description":"Endpoint to create a new LLM configuration.","operationId":"workflow_service_create_llm_config_v1_llm_configs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["LLM Configs"],"summary":"Get Llm Configs","description":"Endpoint to retrieve LLM configurations for a team, paginated and optionally filtered by a\nsearch term matching name, description, or provider.","operationId":"workflow_service_get_llm_configs_v1_llm_configs_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/llm-configs/default":{"get":{"tags":["LLM Configs"],"summary":"Get Default Llm Config","description":"Endpoint to retrieve the default LLM configuration for a team.","operationId":"workflow_service_get_default_llm_config_v1_llm_configs_default_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/llm-configs/{llm_config_id}":{"get":{"tags":["LLM Configs"],"summary":"Get Llm Config","description":"Endpoint to retrieve a specific LLM configuration by ID.","operationId":"workflow_service_get_llm_config_v1_llm_configs__llm_config_id__get","parameters":[{"name":"llm_config_id","in":"path","required":true,"schema":{"type":"string","title":"Llm Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["LLM Configs"],"summary":"Update Llm Config","description":"Endpoint to update a specific LLM configuration.","operationId":"workflow_service_update_llm_config_v1_llm_configs__llm_config_id__patch","parameters":[{"name":"llm_config_id","in":"path","required":true,"schema":{"type":"string","title":"Llm Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["LLM Configs"],"summary":"Delete Llm Config","description":"Endpoint to delete a specific LLM configuration.","operationId":"workflow_service_delete_llm_config_v1_llm_configs__llm_config_id__delete","parameters":[{"name":"llm_config_id","in":"path","required":true,"schema":{"type":"string","title":"Llm Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/llm-configs/{llm_config_id}/test":{"post":{"tags":["LLM Configs"],"summary":"Test Llm Config","description":"Run a one-shot test invocation against an LLM configuration and return the model's reply.\n\nThe call runs entirely server-side against the persisted config so the (write-only, redacted)\napi_key never leaves the server. An optional inline ``config`` override lets the UI test unsaved\nedits; a redacted override (api_key=None) reuses the stored secret, mirroring ``update_llm_config``.\n\nProvider/runtime failures are returned as HTTP 200 with ``success=False`` and a clean ``error``\nmessage (rather than a 500), so the dashboard can render them inline.","operationId":"workflow_service_test_llm_config_v1_llm_configs__llm_config_id__test_post","parameters":[{"name":"llm_config_id","in":"path","required":true,"schema":{"type":"string","title":"Llm Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/llm-configs/test":{"post":{"tags":["LLM Configs"],"summary":"Test Llm Config Inline","description":"Run a one-shot test invocation against a fully inline LLM configuration that has not been persisted\nyet (the create flow), and return the model's reply.\n\nBecause there is no stored record to recover secrets from, the provider api_key must be supplied in\n``body.config`` (or omitted to fall back to the team's stored vendor credentials). Provider/runtime\nfailures are returned as HTTP 200 with ``success=False`` and a clean ``error`` message, mirroring the\nsaved-config test endpoint, so the dashboard can render them inline.","operationId":"workflow_service_test_llm_config_inline_v1_llm_configs_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigTestInlineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/global-variables":{"post":{"tags":["Global Variables"],"summary":"Create Global Variable Endpoint","description":"Create a new global variable for the team.","operationId":"workflow_service_create_global_variable_endpoint_v1_global_variables_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGlobalVariableRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalVariableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Global Variables"],"summary":"List Global Variables Endpoint","description":"List all global variables for the team, including the system-provided ones. Secrets are masked.","operationId":"workflow_service_list_global_variables_endpoint_v1_global_variables_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by variable name","title":"Search"},"description":"Search by variable name"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalVariablesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/global-variables/resolve":{"get":{"tags":["Global Variables"],"summary":"Resolve Global Variables Endpoint","description":"Resolve all global variables for the team into a {name: value} dict.\n\nUI-facing, so every credential is masked — via ``resolve_global_variables_split``, which classifies on\n``is_secret`` as well as the system names. The previous ``_mask_system_secrets`` masked only the system\nnames, so a team's *own* variable marked secret came back in clear from this route. Execution services\nuse the internal route below.","operationId":"workflow_service_resolve_global_variables_endpoint_v1_global_variables_resolve_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedGlobalVariablesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/global-variables/{variable_id}":{"get":{"tags":["Global Variables"],"summary":"Get Global Variable Endpoint","description":"Get a single global variable by ID (full value, including secrets for editing).","operationId":"workflow_service_get_global_variable_endpoint_v1_global_variables__variable_id__get","parameters":[{"name":"variable_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalVariableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Global Variables"],"summary":"Update Global Variable Endpoint","description":"Update a global variable.","operationId":"workflow_service_update_global_variable_endpoint_v1_global_variables__variable_id__patch","parameters":[{"name":"variable_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGlobalVariableRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalVariableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Global Variables"],"summary":"Delete Global Variable Endpoint","description":"Delete a global variable.","operationId":"workflow_service_delete_global_variable_endpoint_v1_global_variables__variable_id__delete","parameters":[{"name":"variable_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/global-variables/bulk":{"post":{"tags":["Global Variables"],"summary":"Bulk Create Global Variables Endpoint","description":"Bulk create/upsert global variables for the team.","operationId":"workflow_service_bulk_create_global_variables_endpoint_v1_global_variables_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateGlobalVariablesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/secure-notifications":{"post":{"tags":["Secure Notifications"],"summary":"Create My Secure Notification","description":"Create a secure notification from the dashboard \"Create\" tab.\n\nThe 4-digit code is auto-generated server-side (same behavior as the internal AI create tool);\nthe only optional input is the approval window. ``created_by`` records the acting user for audit.","operationId":"workflow_service_create_my_secure_notification_v1_secure_notifications_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CreateSecureNotificationRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Secure Notifications"],"summary":"List Secure Notifications","description":"List secure notifications (global, most recent first).","operationId":"workflow_service_list_secure_notifications_v1_secure_notifications_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SecureNotificationStatus"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureNotificationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/secure-notifications/approvals":{"post":{"tags":["Secure Notifications"],"summary":"Approve My Secure Notifications By Code","description":"Public twin of the internal approve-by-code route, reachable through the gateway.\n\nExists for the same reason as the public read route: the gateway only proxies ``/workflows/v1``, so\nan AI tool configured with an FQDN cannot reach the internal surface at all.","operationId":"workflow_service_approve_my_secure_notifications_by_code_v1_secure_notifications_approvals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveSecureNotificationsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveSecureNotificationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/secure-notifications/{notification_id}":{"get":{"tags":["Secure Notifications"],"summary":"Get My Secure Notification","description":"Single status read over the public surface.\n\nSame behavior as the internal read route — this exists so the AI ``check_secure_notification_status``\ntool can be configured with a fully-qualified endpoint (``https://<host>/workflows/v1/...``): the\ngateway only proxies ``/workflows/v1``, so the internal route is not reachable by FQDN.","operationId":"workflow_service_get_my_secure_notification_v1_secure_notifications__notification_id__get","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/secure-notifications/{notification_id}/approve":{"post":{"tags":["Secure Notifications"],"summary":"Approve Secure Notification","description":"Approve a notification. Enforces that it is still pending/unexpired.","operationId":"workflow_service_approve_secure_notification_v1_secure_notifications__notification_id__approve_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/secure-notifications/{notification_id}/decline":{"post":{"tags":["Secure Notifications"],"summary":"Decline Secure Notification","description":"Decline a notification.","operationId":"workflow_service_decline_secure_notification_v1_secure_notifications__notification_id__decline_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/super-nodes":{"get":{"tags":["Super Nodes"],"summary":"List Super Nodes","description":"List all super nodes published for this team.\n\nReturns all active published super nodes across all workflow versions.\nMultiple entries for the same workflow ID may appear if different versions\nhave been published.","operationId":"workflow_service_list_super_nodes_v1_super_nodes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SuperNodeSummary"},"type":"array","title":"Response List Super Nodes V1 Super Nodes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/super-nodes/{workflow_id}":{"get":{"tags":["Super Nodes"],"summary":"Get Super Node Interface","description":"Return the full super node definition for a workflow version.\n\nIf version_number is omitted, resolves to the workflow's active_version_number.\nThe response includes the stored hydrated snapshot captured at publish time —\nno live DB re-fetch of the workflow is required.","operationId":"workflow_service_get_super_node_interface_v1_super_nodes__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuperNodeDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/super-nodes/{workflow_id}/schema":{"get":{"tags":["Super Nodes"],"summary":"Get Super Node Schema","description":"Return the JSON Schema for the super node's input fields.\n\nIf version_number is omitted, resolves to the workflow's active_version_number.\nThe schema describes the shape of the `field_values` dict that a calling workflow\nmust populate when instantiating this super node. Useful for UI form rendering.","operationId":"workflow_service_get_super_node_schema_v1_super_nodes__workflow_id__schema_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/super-node-interface":{"put":{"tags":["Super Nodes"],"summary":"Publish As Super Node","description":"Publish a workflow version as a reusable super node by defining its interface.\n\nIf version_number is omitted, resolves to the workflow's active_version_number.\nCreates (or updates) a SuperNodesModel document for this (workflow, version) pair.\nThe workflow itself is not modified — the encapsulated workflow remains unaware of\nits super node status.\n\nCaptures a fully-hydrated snapshot of the workflow at publish time and stores it\nalongside the interface so the GET endpoint can serve it without a DB re-fetch.\n\nValidates that:\n- All NODE_CONFIG_FIELD and EDGE_CONFIG_FIELD references exist in the workflow version\n- All WORKFLOW_CONFIG_FIELD paths have a valid top-level WorkflowConfig key","operationId":"workflow_service_publish_as_super_node_v1_workflows__workflow_id__super_node_interface_put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishSuperNodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishSuperNodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Super Nodes"],"summary":"Unpublish Super Node","description":"Unpublish a workflow version as a super node.\n\nIf version_number is omitted, resolves to the workflow's active_version_number.\nSets is_active=False on the SuperNodesModel document for that (workflow, version) pair.\nThe workflow itself is not modified. Also warns about any workflows in this team that\ncurrently embed this super node — those will fail at execution time once the interface\nsnapshot they hold diverges or becomes stale.\n\nWhen dry_run=true, the SuperNodesModel document is left untouched and only the list of\nreferencing workflows is returned. This lets the dashboard show a confirmation prompt\nbefore performing the destructive call.","operationId":"workflow_service_unpublish_super_node_v1_workflows__workflow_id__super_node_interface_delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"When true, do not actually unpublish — only return the list of workflows that currently reference this super node. Used by the UI to surface a confirmation dialog.","default":false,"title":"Dry Run"},"description":"When true, do not actually unpublish — only return the list of workflows that currently reference this super node. Used by the UI to surface a confirmation dialog."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpublishSuperNodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/super-node-dependents":{"get":{"tags":["Super Nodes"],"summary":"Get Super Node Dependents","description":"Paginated list of workflows that embed the given workflow as a super node.\n\nSurfaces the same data that ``DELETE /super-node-interface`` previously capped at 100,\nbut in a dedicated endpoint with pagination. Used by the dashboard to power the\n\"See dependents\" view and to gate unpublish confirmation.","operationId":"workflow_service_get_super_node_dependents_v1_workflows__workflow_id__super_node_dependents_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/super-node-snapshot-status":{"get":{"tags":["Super Nodes"],"summary":"Get Super Node Snapshot Status","description":"Report whether each SuperNodeConfig inside the requested workflow version still\nmatches the latest active publish of its sub-workflow.\n\nUsed by the dashboard to flag parent workflows whose embedded snapshots have\ndrifted, so the user can re-select the sub-workflow and capture a fresh snapshot.\nRead-only — does not mutate any state.","operationId":"workflow_service_get_super_node_snapshot_status_v1_workflows__workflow_id__super_node_snapshot_status_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSnapshotStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/expand-preview":{"post":{"tags":["Super Nodes"],"summary":"Expand Preview","description":"Server-side super-node expansion for canvas previewing.\n\nRuns ``expand_super_nodes`` on the requested workflow version and returns the\nfully-flat ``WorkflowConfigFullyHydrated`` payload, plus the distinct list of\nsuper-node origin logical IDs encountered during expansion. The dashboard renders\nthis as a read-only \"expanded view\" where each previously-collapsed super node is\ndrawn as a bounding group around its inlined nodes.","operationId":"workflow_service_expand_preview_v1_workflows__workflow_id__expand_preview_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpandPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/schema":{"get":{"tags":["Workflow Runs"],"summary":"Get Workflow Run Schema","description":"Endpoint to retrieve the schema for a workflow run.","operationId":"workflow_service_get_workflow_run_schema_v1_workflow_runs_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs":{"get":{"tags":["Workflow Runs"],"summary":"Get Workflow Runs","description":"Endpoint to retrieve workflow runs for a specific workflow if workflow_id is provided.\nElse, all workflow runs for the team are retrieved.","operationId":"workflow_service_get_workflow_runs_v1_workflow_runs_get","parameters":[{"name":"filters","in":"query","required":true,"schema":{"$ref":"#/components/schemas/WorkflowRunFilter"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRunsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}":{"get":{"tags":["Workflow Runs"],"summary":"Get Workflow Run","description":"Endpoint to retrieve a workflow run by its ID.","operationId":"workflow_service_get_workflow_run_v1_workflow_runs__workflow_run_id__get","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRunsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run","description":"Endpoint to delete a workflow run by its ID.","operationId":"workflow_service_delete_workflow_run_v1_workflow_runs__workflow_run_id__delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/evaluation-result":{"get":{"tags":["Workflow Runs"],"summary":"Get Workflow Run Evaluation Result","description":"Endpoint to retrieve the evaluation result for a workflow run.\n\nThis endpoint fetches the evaluation workflow run linked to the source workflow run\nand extracts the last WorkflowShowStateEvent's runtime_variables as the evaluation result.\n\nReturns:\n    - evaluation_workflow_run_id: ID of the evaluation run\n    - status: Current status of the evaluation run\n    - evaluation_result: The runtime_variables from the last WorkflowShowStateEvent,\n      or None if no such event exists (e.g., evaluation still in progress)","operationId":"workflow_service_get_workflow_run_evaluation_result_v1_workflow_runs__workflow_run_id__evaluation_result_get","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRunEvaluationResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/comments":{"post":{"tags":["Workflow Runs"],"summary":"Add Comment To Workflow Run","description":"Endpoint to add a comment to a workflow run.","operationId":"workflow_service_add_comment_to_workflow_run_v1_workflow_runs__workflow_run_id__comments_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/events/{event_logical_id}/comments":{"post":{"tags":["Workflow Runs"],"summary":"Add Comment To Workflow Run Event","description":"Endpoint to add a comment to a workflow run.","operationId":"workflow_service_add_comment_to_workflow_run_event_v1_workflow_runs__workflow_run_id__events__event_logical_id__comments_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"event_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Event Logical Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/comments/{comment_logical_id}":{"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run Comment","description":"Endpoint to delete a comment from a workflow run.","operationId":"workflow_service_delete_workflow_run_comment_v1_workflow_runs__workflow_run_id__comments__comment_logical_id__delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"comment_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Comment Logical Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/events/{event_logical_id}/comments/{comment_logical_id}":{"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run Event Comment","description":"Endpoint to delete a comment from a specific event in a workflow run.","operationId":"workflow_service_delete_workflow_run_event_comment_v1_workflow_runs__workflow_run_id__events__event_logical_id__comments__comment_logical_id__delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"event_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Event Logical Id"}},{"name":"comment_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Comment Logical Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/events/{event_logical_id}/rating":{"put":{"tags":["Workflow Runs"],"summary":"Set Workflow Run Event Rating","description":"Endpoint to set the calling user's rating on a specific event in a workflow run.\n\nUpsert, not append: a user has at most one rating per event, so re-rating replaces their\nprevious value while keeping its logical_id and createdAt.","operationId":"workflow_service_set_workflow_run_event_rating_v1_workflow_runs__workflow_run_id__events__event_logical_id__rating_put","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"event_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Event Logical Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run Event Rating","description":"Endpoint to clear the calling user's rating on a specific event. Other users' ratings are left\nuntouched — a reviewer can only retract their own judgement.","operationId":"workflow_service_delete_workflow_run_event_rating_v1_workflow_runs__workflow_run_id__events__event_logical_id__rating_delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"event_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Event Logical Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/rating":{"put":{"tags":["Workflow Runs"],"summary":"Set Workflow Run Turn Rating","description":"Endpoint to set the calling user's rating on a whole turn (one input/output pair).\n\nA turn rating is a judgement of the turn itself — it deliberately does not fan out onto the\nturn's individual events, which carry their own independent ratings.","operationId":"workflow_service_set_workflow_run_turn_rating_v1_workflow_runs__workflow_run_id__turns__turn_index__rating_put","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run Turn Rating","description":"Endpoint to clear the calling user's rating on a whole turn.","operationId":"workflow_service_delete_workflow_run_turn_rating_v1_workflow_runs__workflow_run_id__turns__turn_index__rating_delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/comments":{"post":{"tags":["Workflow Runs"],"summary":"Add Comment To Workflow Run Turn","description":"Endpoint to add a comment to a whole turn (one input/output pair) of a workflow run.","operationId":"workflow_service_add_comment_to_workflow_run_turn_v1_workflow_runs__workflow_run_id__turns__turn_index__comments_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/comments/{comment_logical_id}":{"delete":{"tags":["Workflow Runs"],"summary":"Delete Workflow Run Turn Comment","description":"Endpoint to delete a comment from a whole turn of a workflow run.","operationId":"workflow_service_delete_workflow_run_turn_comment_v1_workflow_runs__workflow_run_id__turns__turn_index__comments__comment_logical_id__delete","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}},{"name":"comment_logical_id","in":"path","required":true,"schema":{"type":"string","title":"Comment Logical Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/execute":{"post":{"tags":["Workflow Execution"],"summary":"Execute Workflow","description":"Execute a workflow interactively over standard HTTP POST.\n\nFirst turn (``run_id`` absent in request body):\n    Starts a new interactive session, runs until pause/terminal, and returns a\n    ``run_id`` the client must echo back on all subsequent requests.\n\nSubsequent turns (``run_id`` present):\n    Resumes the paused session with new user input, runs until the next pause or\n    terminal state.\n\nCancellation (``run_id`` present, ``run_input.command = \"stop\"``):\n    Cancels the session, flushes state to MongoDB, returns ``status=CANCELLED``.","operationId":"workflow_service_execute_workflow_v1_workflows__workflow_id__execute_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Workflow version to run.  Applies to the first turn only; subsequent turns always use the version from the initial turn.","title":"Version"},"description":"Workflow version to run.  Applies to the first turn only; subsequent turns always use the version from the initial turn."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/runs/{run_id}/pump-companions":{"post":{"tags":["Workflow Execution"],"summary":"Pump Companions","description":"Advance any due background work for a paused interactive run, WITHOUT consuming a user turn: due fork\ncompanions, then any armed conditional-edge evaluations on parked threads. A scheduler (or the client)\ncalls this on an interval while ``has_background_work`` is True to realize background progress for the\nrequest/response Interactive REST driver. Returns the events produced — which may include MAIN-thread\nassistant output if a waiting condition matched — and whether more background work remains.","operationId":"workflow_service_pump_companions_v1_workflows__workflow_id__runs__run_id__pump_companions_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/rerunnable-turns":{"get":{"tags":["Workflow Re-run"],"summary":"Get Rerunnable Turns","description":"Per-turn re-runnability for a whole run, in one call.\n\nThe alternative — the UI deciding for itself from the run document — means duplicating the\ncompanion-thread rule on the client, where it would quietly drift from the server's.","operationId":"workflow_service_get_rerunnable_turns_v1_workflow_runs__workflow_run_id__rerunnable_turns_get","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunnableTurnsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/rerun-preflight":{"post":{"tags":["Workflow Re-run"],"summary":"Rerun Preflight","description":"What a re-run would carry over and what it would drop. **No side effects.**\n\nSafe to call on every dropdown change and every edit to the node mapping — that live feedback is\nwhat makes the remapping table comprehensible rather than a form filled in blind.","operationId":"workflow_service_rerun_preflight_v1_workflow_runs__workflow_run_id__turns__turn_index__rerun_preflight_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunTargetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunPreflightResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/rerun-token":{"post":{"tags":["Workflow Re-run"],"summary":"Create Rerun Token","description":"Prepare a re-run and hand back an opaque handle for the editor to redeem.\n\nNothing executes here. The projection is computed and stored server-side; the client receives an\nid it cannot read or forge, which it passes on the websocket ``start`` message.","operationId":"workflow_service_create_rerun_token_v1_workflow_runs__workflow_run_id__turns__turn_index__rerun_token_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunTargetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/rerun-token/{rerun_token}":{"get":{"tags":["Workflow Re-run"],"summary":"Preview Rerun Token","description":"Show what a re-run token restores, without starting anything and without counting a redemption.\n\nThe editor needs this because the restored transcript otherwise arrives on the websocket ``start``\nacknowledgement — so it only appears *after* the run has begun, and the chat panel opens empty on top of\nfully restored state. That reads as the feature having failed rather than worked.\n\nUses ``peek`` rather than ``redeem`` deliberately. Both are non-consuming, but ``redeem`` increments the\ncounter behind ``redemption_ordinal``, which exists to tell us how often one re-run link is actually used.\nThis endpoint fires on every page load, so redeeming here would redefine that metric as \"page views\".\n\nThe token is also checked against the run and turn in the path. That is not authorisation — the token's\nown team scoping is — but a token issued for a different turn rendered under this URL would show a\ntranscript that does not match the page around it, and silently.","operationId":"workflow_service_preview_rerun_token_v1_workflow_runs__workflow_run_id__turns__turn_index__rerun_token__rerun_token__get","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}},{"name":"rerun_token","in":"path","required":true,"schema":{"type":"string","title":"Rerun Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunTokenPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Workflow Re-run"],"summary":"Amend Rerun Token","description":"Change what an already-issued re-run will start from: its variables, its transcript, or both.\n\n**The client sends a delta, never state.** That is what keeps editing inside the invariant the websocket\nenforces with close code 4006: the server still authors ``initial_state``, validates the delta against the\npayload it already holds, and does the writing itself. For a message that means the client says which\nthread, which displayed turn and what the text should be — never a message object, an id or a position. A\nrequest naming a field this endpoint does not understand is refused outright (``extra=\"forbid\"``) rather\nthan partially applied.\n\nReturns the same shape as the preview endpoint, so a caller re-renders from server state rather than from\nits own optimistic guess about what the edit did. For messages that matters twice over: the response is\nwhere an appended turn's server-minted id first becomes visible.\n\nFour consequences of editing, all applied here rather than left to the caller:\n\n* ``edited`` is set, which makes ``effective_mode`` report ``EDITED`` everywhere the mode is shown or\n  recorded. ``resolved_mode`` is deliberately left alone — see ``RerunTokenPayload.edited``.\n* ``inherit_source_pairs`` falls to false **only when the conversation changed**. The source run's turns\n  joining the new run's log is coherent while the transcript is still the one those turns describe; edit,\n  extend or trim it and the log would show the original conversation beside a run that started from a\n  different one. A variable change leaves the transcript exactly as it was, so it keeps its inherited pairs.\n* ``message_ids`` is recomputed for every thread whose messages changed, never patched — a stale or missing\n  id is a turn the runtime's deduplication drops at run time, with nothing raised and nothing logged.\n* A **delete takes the tool results answering it**, and ``removed_message_count`` records how many turns\n  went. That counter is stored rather than derived because a removal, unlike an append, leaves nothing in\n  the transcript to count.","operationId":"workflow_service_amend_rerun_token_v1_workflow_runs__workflow_run_id__turns__turn_index__rerun_token__rerun_token__patch","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}},{"name":"rerun_token","in":"path","required":true,"schema":{"type":"string","title":"Rerun Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunAmendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunTokenPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-runs/{workflow_run_id}/turns/{turn_index}/rerun":{"post":{"tags":["Workflow Re-run"],"summary":"Execute Rerun","description":"Re-run a turn server-side and hand back the new run.\n\nThe counterpart to the token flow: this is \"show me the result\", where the token is \"give me the\ncontrols\". Both go through the same projection, so they cannot disagree about what carries over.","operationId":"workflow_service_execute_rerun_v1_workflow_runs__workflow_run_id__turns__turn_index__rerun_post","parameters":[{"name":"workflow_run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"turn_index","in":"path","required":true,"schema":{"type":"integer","title":"Turn Index"}},{"name":"async","in":"query","required":false,"schema":{"type":"boolean","description":"Execute in the background and answer 202 immediately. The default, and what the dashboard uses: a re-run onto a different config can take longer than a request may live.","default":true,"title":"Async"},"description":"Execute in the background and answer 202 immediately. The default, and what the dashboard uses: a re-run onto a different config can take longer than a request may live."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunExecuteRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerunStartedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-webhooks":{"post":{"tags":["Workflow Webhooks"],"summary":"Create Workflow Webhook","operationId":"workflow_service_create_workflow_webhook_v1_workflow_webhooks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Workflow Webhooks"],"summary":"List Workflow Webhooks","operationId":"workflow_service_list_workflow_webhooks_v1_workflow_webhooks_get","parameters":[{"name":"enabled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowWebhookAction"},{"type":"null"}],"title":"Action"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-webhooks/{webhook_id}":{"patch":{"tags":["Workflow Webhooks"],"summary":"Update Workflow Webhook","operationId":"workflow_service_update_workflow_webhook_v1_workflow_webhooks__webhook_id__patch","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Webhooks"],"summary":"Delete Workflow Webhook","operationId":"workflow_service_delete_workflow_webhook_v1_workflow_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-webhooks/events":{"get":{"tags":["Workflow Webhooks"],"summary":"List Workflow Webhook Events","operationId":"workflow_service_list_workflow_webhook_events_v1_workflow_webhooks_events_get","parameters":[{"name":"subscription_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Subscription Id"}},{"name":"workflow_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow Id"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowWebhookAction"},{"type":"null"}],"title":"Action"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowWebhookEventStatus"},{"type":"null"}],"title":"Status"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookEventsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-webhooks/events/{event_id}/attempts":{"get":{"tags":["Workflow Webhooks"],"summary":"List Workflow Webhook Attempts","operationId":"workflow_service_list_workflow_webhook_attempts_v1_workflow_webhooks_events__event_id__attempts_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowWebhookAttemptsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-webhooks/events/{event_doc_id}/retry":{"post":{"tags":["Workflow Webhooks"],"summary":"Retry Workflow Webhook Event","operationId":"workflow_service_retry_workflow_webhook_event_v1_workflow_webhooks_events__event_doc_id__retry_post","parameters":[{"name":"event_doc_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/schedules":{"post":{"tags":["Workflow Schedules"],"summary":"Create Workflow Schedule","description":"Schedule a workflow to run at a future time.","operationId":"workflow_service_create_workflow_schedule_v1_workflows__workflow_id__schedules_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_workflow_schedule_v1_workflows__workflow_id__schedules_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowScheduledRunsModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Workflow Schedules"],"summary":"List Workflow Schedules","description":"List scheduled runs for a workflow.","operationId":"workflow_service_list_workflow_schedules_v1_workflows__workflow_id__schedules_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowScheduleStatus"},{"type":"null"}],"title":"Status"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheduledRunsModel"},"title":"Response List Workflow Schedules V1 Workflows  Workflow Id  Schedules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-schedules":{"get":{"tags":["Workflow Schedules"],"summary":"List Team Workflow Schedules","description":"List all scheduled runs for the entire team.","operationId":"workflow_service_list_team_workflow_schedules_v1_workflow_schedules_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowScheduleStatus"},{"type":"null"}],"title":"Status"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowScheduledRunsModel"},"title":"Response List Team Workflow Schedules V1 Workflow Schedules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflow-schedules/{schedule_id}":{"get":{"tags":["Workflow Schedules"],"summary":"Get Workflow Schedule","description":"Get a single scheduled run by ID.","operationId":"workflow_service_get_workflow_schedule_v1_workflow_schedules__schedule_id__get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowScheduledRunsModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Workflow Schedules"],"summary":"Update Workflow Schedule","description":"Modify a pending scheduled run (time, inputs, or version).","operationId":"workflow_service_update_workflow_schedule_v1_workflow_schedules__schedule_id__patch","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_workflow_schedule_v1_workflow_schedules__schedule_id__patch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowScheduledRunsModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Schedules"],"summary":"Cancel Workflow Schedule","description":"Cancel a pending scheduled run.","operationId":"workflow_service_cancel_workflow_schedule_v1_workflow_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/node-libraries/schema":{"get":{"tags":["Node Libraries"],"summary":"Get Node Library Schema","description":"Endpoint to retrieve the schema for node libraries.","operationId":"workflow_service_get_node_library_schema_v1_node_libraries_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/node-libraries":{"post":{"tags":["Node Libraries"],"summary":"Create Node Library","description":"Endpoint to create a new node library.","operationId":"workflow_service_create_node_library_v1_node_libraries_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeLibraryConfig-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeLibraryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Node Libraries"],"summary":"Get Node Libraries","description":"Endpoint to retrieve all node libraries.","operationId":"workflow_service_get_node_libraries_v1_node_libraries_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"},{"name":"access_level","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"const":"all","type":"string"},{"type":"null"}],"description":"Access level filter for the node library. Use 'all' to retrieve all nodes regardless of access level.","default":"all","title":"Access Level"},"description":"Access level filter for the node library. Use 'all' to retrieve all nodes regardless of access level."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeLibraryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/node-libraries/{node_library_id}":{"get":{"tags":["Node Libraries"],"summary":"Get Node Library","description":"Endpoint to retrieve a node library configuration by its ID.","operationId":"workflow_service_get_node_library_v1_node_libraries__node_library_id__get","parameters":[{"name":"node_library_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeLibraryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Node Libraries"],"summary":"Update Node Library","description":"Endpoint to update a Node library by its ID.","operationId":"workflow_service_update_node_library_v1_node_libraries__node_library_id__patch","parameters":[{"name":"node_library_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeLibraryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Node Libraries"],"summary":"Delete Node Library","description":"Endpoint to delete a node library by its ID.","operationId":"workflow_service_delete_node_library_v1_node_libraries__node_library_id__delete","parameters":[{"name":"node_library_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/templates/schema":{"get":{"tags":["Workflow Templates"],"summary":"Get Workflow Template Schema","description":"Endpoint to retrieve the schema for workflow templates.","operationId":"workflow_service_get_workflow_template_schema_v1_templates_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/templates":{"post":{"tags":["Workflow Templates"],"summary":"Create Workflow Template","description":"Endpoint to create a new workflow template.","operationId":"workflow_service_create_workflow_template_v1_templates_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTemplateConfig-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Workflow Templates"],"summary":"Get Workflow Templates","description":"Endpoint to retrieve all workflow templates.","operationId":"workflow_service_get_workflow_templates_v1_templates_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"},{"name":"logical_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id"}},{"name":"workflow_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow Id"}},{"name":"access_level","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTemplateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/templates/{workflow_template_id}":{"get":{"tags":["Workflow Templates"],"summary":"Get Workflow Template","description":"Endpoint to retrieve a workflow template by its ID.","operationId":"workflow_service_get_workflow_template_v1_templates__workflow_template_id__get","parameters":[{"name":"workflow_template_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Workflow Templates"],"summary":"Update Workflow Template","description":"Endpoint to update a Workflow template by its ID.","operationId":"workflow_service_update_workflow_template_v1_templates__workflow_template_id__patch","parameters":[{"name":"workflow_template_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Workflow Templates"],"summary":"Delete Workflow Template","description":"Endpoint to delete a workflow template by its ID.","operationId":"workflow_service_delete_workflow_template_v1_templates__workflow_template_id__delete","parameters":[{"name":"workflow_template_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations/schema":{"get":{"tags":["Simulations"],"summary":"Get Simulation Schema","description":"Endpoint to retrieve the schema for simulations.","operationId":"workflow_service_get_simulation_schema_v1_simulations_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations":{"post":{"tags":["Simulations"],"summary":"Create Simulation","description":"Endpoint to create a new simulation.","operationId":"workflow_service_create_simulation_v1_simulations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationConfig-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"get":{"tags":["Simulations"],"summary":"Get Simulations","description":"Endpoint to retrieve all simulations.","operationId":"workflow_service_get_simulations_v1_simulations_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"},{"name":"logical_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id"}},{"name":"selected_workflow_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Selected Workflow Id"}},{"name":"counter_workflow_id","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Counter Workflow Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SimulationStatus"},{"type":"null"}],"title":"Status"}},{"name":"selected_version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Selected Version Number"}},{"name":"counter_version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Counter Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations/{simulation_id}":{"get":{"tags":["Simulations"],"summary":"Get Simulation","description":"Endpoint to retrieve a simulation by its ID.","operationId":"workflow_service_get_simulation_v1_simulations__simulation_id__get","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"patch":{"tags":["Simulations"],"summary":"Update Simulation","description":"Endpoint to update a simulation by its ID.","operationId":"workflow_service_update_simulation_v1_simulations__simulation_id__patch","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]},"delete":{"tags":["Simulations"],"summary":"Delete Simulation","description":"Endpoint to delete a simulation by its ID.","operationId":"workflow_service_delete_simulation_v1_simulations__simulation_id__delete","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations/{simulation_id}/run":{"post":{"tags":["Simulations"],"summary":"Run Simulation","description":"Trigger a new simulation batch run from a configuration.","operationId":"workflow_service_run_simulation_v1_simulations__simulation_id__run_post","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunSimulationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations/{simulation_id}/runs":{"get":{"tags":["Simulations"],"summary":"Get Simulation Runs","description":"List all run groups for a simulation configuration.","operationId":"workflow_service_get_simulation_runs_v1_simulations__simulation_id__runs_get","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationGroupListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulation-runs/{run_id}":{"get":{"tags":["Simulations"],"summary":"Get Simulation Run Details","description":"Get details of a specific simulation group run.","operationId":"workflow_service_get_simulation_run_details_v1_simulation_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulation-runs/{run_id}/stop":{"post":{"tags":["Simulations"],"summary":"Stop Simulation Run","description":"Stop/Cancel a simulation group run.","operationId":"workflow_service_stop_simulation_run_v1_simulation_runs__run_id__stop_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulation-runs/{group_id}/executions":{"get":{"tags":["Simulations"],"summary":"Get Individual Runs For Group","description":"List individual executions (runs) within a simulation group.","operationId":"workflow_service_get_individual_runs_for_group_v1_simulation_runs__group_id__executions_get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualSimulationRunListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulations/{simulation_id}/evaluation-summary":{"get":{"tags":["Simulations"],"summary":"Get Simulation Evaluation Summary Endpoint","description":"Get aggregated evaluation results for a simulation across all runs.\n\nReturns summary statistics for both selected and counter workflow evaluations including:\n- Total runs, successful/failed/pending evaluation counts\n- Average scores for each numeric metric\n- Score distribution across ranges (0-20, 21-40, 41-60, 61-80, 81-100)\n\nOptional: Filter by specific group_id to get summary for one batch run.","operationId":"workflow_service_get_simulation_evaluation_summary_endpoint_v1_simulations__simulation_id__evaluation_summary_get","parameters":[{"name":"simulation_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"group_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationEvaluationSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/simulation-runs/{group_id}/executions/detailed":{"get":{"tags":["Simulations"],"summary":"Get Detailed Individual Runs For Group","description":"List individual executions within a simulation group with hydrated workflow run details.\n\nThis endpoint provides enriched data for each individual run including:\n- Links to selected and counter workflow runs\n- Workflow names and statuses\n- Evaluation run IDs and statuses (if configured)","operationId":"workflow_service_get_detailed_individual_runs_for_group_v1_simulation_runs__group_id__executions_detailed_get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of items per page","default":300,"title":"Size"},"description":"Number of items per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keywords","title":"Search"},"description":"Search keywords"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start time (ISO 8601 format)","title":"Start"},"description":"Filter by start time (ISO 8601 format)"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end time (ISO 8601 format)","title":"End"},"description":"Filter by end time (ISO 8601 format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedIndividualRunListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/counter-workflow/generate":{"post":{"tags":["Counter Workflows","Counter Workflows"],"summary":"Generate Counter Workflow","description":"Generate a simulated-caller counter workflow from this workflow's own configuration.\n\nReturns immediately; generation runs in the background because it makes several LLM calls.\nPoll ``GET /workflows/{workflow_id}/counter-workflow`` for progress and the result.","operationId":"workflow_service_generate_counter_workflow_v1_workflows__workflow_id__counter_workflow_generate_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterWorkflowGenerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterWorkflowGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}},"/workflows/v1/workflows/{workflow_id}/counter-workflow":{"get":{"tags":["Counter Workflows","Counter Workflows"],"summary":"Get Existing Counter Workflow","description":"The counter workflow for this workflow, plus the state of the newest generation run.\n\nOne call answers both questions the UI has: is a run in flight, and is there already a\ncounter workflow to open instead of generating another.","operationId":"workflow_service_get_existing_counter_workflow_v1_workflows__workflow_id__counter_workflow_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PydanticObjectId"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExistingCounterWorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]}]}}},"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"Bearer","type":"http","description":"Retrieve your API Key from [Dashboard API Keys Section](https://dashboard-qa.interactly.ai/api-keys)."}},"schemas":{"AIMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"ai","title":"Type","default":"ai"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"tool_calls":{"items":{"$ref":"#/components/schemas/ToolCall"},"type":"array","title":"Tool Calls"},"invalid_tool_calls":{"items":{"$ref":"#/components/schemas/InvalidToolCall"},"type":"array","title":"Invalid Tool Calls"},"usage_metadata":{"anyOf":[{"$ref":"#/components/schemas/UsageMetadata"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["content"],"title":"AIMessage","description":"Message from an AI.\n\nAn `AIMessage` is returned from a chat model as a response to a prompt.\n\nThis message represents the output of the model and consists of both\nthe raw output as returned by the model and standardized fields\n(e.g., tool calls, usage metadata) added by the LangChain framework."},"AIMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"AIMessageChunk","title":"Type","default":"AIMessageChunk"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"tool_calls":{"items":{"$ref":"#/components/schemas/ToolCall"},"type":"array","title":"Tool Calls"},"invalid_tool_calls":{"items":{"$ref":"#/components/schemas/InvalidToolCall"},"type":"array","title":"Invalid Tool Calls"},"usage_metadata":{"anyOf":[{"$ref":"#/components/schemas/UsageMetadata"},{"type":"null"}]},"tool_call_chunks":{"items":{"$ref":"#/components/schemas/ToolCallChunk"},"type":"array","title":"Tool Call Chunks"},"chunk_position":{"anyOf":[{"type":"string","const":"last"},{"type":"null"}],"title":"Chunk Position"}},"additionalProperties":true,"type":"object","required":["content"],"title":"AIMessageChunk","description":"Message chunk from an AI (yielded when streaming)."},"ANTHROPICModel":{"type":"string","enum":["claude-opus-5","claude-sonnet-5","claude-fable-5","claude-opus-4-8","claude-opus-4-7","claude-opus-4-6","claude-opus-4-5-20251101","claude-opus-4-1-20250805","claude-sonnet-4-6","claude-sonnet-4-5-20250929","claude-haiku-4-5","claude-haiku-4-5-20251001"],"title":"ANTHROPICModel"},"APIMethodType":{"type":"string","enum":["GET","POST","PUT","DELETE"],"title":"APIMethodType","description":"Enumeration of HTTP methods for API calls."},"AZUREOPENAIModel":{"type":"string","enum":["gpt-5-chat","gpt-5-mini","gpt-5-nano","gpt-4.1-nano","gpt-4.1-mini","gpt-4.1"],"title":"AZUREOPENAIModel"},"AccessControlLevel":{"type":"string","enum":["personal","team","system"],"title":"AccessControlLevel","description":"Enum representing different access control levels."},"AnthropicLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"anthropic","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/ANTHROPICModel"},{"type":"null"}],"title":"Anthropic Model","description":"Name of the Anthropic Claude model to use","default":"claude-sonnet-4-6"},"type":{"type":"string","const":"anthropic_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"anthropic_llm","input_field_not_visible":true},"thinking_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Thinking Budget (tokens)","description":"Token budget for Claude's extended thinking feature. Set to 0 to disable. When enabled, Claude will show its reasoning process before providing a final answer.","default":0}},"type":"object","title":"Anthropic"},"AnthropicLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"anthropic","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/ANTHROPICModel"},{"type":"null"}],"title":"Anthropic Model","description":"Name of the Anthropic Claude model to use","default":"claude-sonnet-4-6"},"type":{"type":"string","const":"anthropic_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"anthropic_llm","input_field_not_visible":true},"thinking_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Thinking Budget (tokens)","description":"Token budget for Claude's extended thinking feature. Set to 0 to disable. When enabled, Claude will show its reasoning process before providing a final answer.","default":0}},"type":"object","title":"Anthropic"},"ApproveSecureNotificationsRequest":{"properties":{"notification_code":{"type":"string","title":"Notification Code","description":"The 4-digit code read to the caller (not the notification id)"}},"type":"object","required":["notification_code"],"title":"ApproveSecureNotificationsRequest","description":"Body for the AI ``approve_secure_notification`` tool.\n\n``notification_code`` is the short code **read aloud to the caller**, not the ``notification_id``.\nThe two are easy to confuse and behave completely differently: an id names exactly one notification\nfor all time, while a code names whichever notification is currently pending with it."},"ApproveSecureNotificationsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"notification_code":{"type":"string","title":"Notification Code"},"processed_count":{"type":"integer","title":"Processed Count"},"approved_count":{"type":"integer","title":"Approved Count"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"notifications":{"items":{"$ref":"#/components/schemas/SecureNotificationResponse"},"type":"array","title":"Notifications"}},"type":"object","required":["success","notification_code","processed_count","approved_count","notifications"],"title":"ApproveSecureNotificationsResponse","description":"Outcome of approving by code.\n\n``notifications`` carries one row per notification actually processed, each with its resulting\nstatus, so a caller can see exactly what happened rather than inferring it from a single flag."},"AthenaAppointmentsCreateNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_appointments_create","title":"Node Type","description":"Type of the node. Must be 'athena_appointments_create'","default":"athena_appointments_create","input_field_not_visible":true},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appointment Title","description":"Title of the appointment"},"patient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient ID","description":"ID of the patient to create the appointment for"},"practitioner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Practitioner ID","description":"ID of the practitioner for the appointment"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time","description":"Start time of the appointment"},"duration_in_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration in Minutes","description":"Duration of the appointment in minutes","default":15}},"type":"object","title":"Athena Appointments Create Node"},"AthenaAppointmentsCreateNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_appointments_create","title":"Node Type","description":"Type of the node. Must be 'athena_appointments_create'","default":"athena_appointments_create","input_field_not_visible":true},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appointment Title","description":"Title of the appointment"},"patient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient ID","description":"ID of the patient to create the appointment for"},"practitioner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Practitioner ID","description":"ID of the practitioner for the appointment"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time","description":"Start time of the appointment"},"duration_in_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration in Minutes","description":"Duration of the appointment in minutes","default":15}},"type":"object","title":"Athena Appointments Create Node"},"AthenaAppointmentsCreateNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_appointments_create","title":"Type","description":"Discriminator field which must always be 'athena_appointments_create'","default":"athena_appointments_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaAppointmentsCreateNodeRunInput"},"AthenaAppointmentsCreateNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_appointments_create","title":"Type","description":"Discriminator field which must always be 'athena_appointments_create'","default":"athena_appointments_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaAppointmentsCreateNodeRunInput"},"AthenaAppointmentsCreateNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"athena_appointments_create","title":"Type","description":"Discriminator field which must always be 'athena_appointments_create'","default":"athena_appointments_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Athena Node Successful","description":"Indicates whether the Athena node was successful","default":false},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code","description":"Status code returned by the Athena node"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"Response data from the Athena node"}},"type":"object","title":"AthenaAppointmentsCreateNodeRunOutput"},"AthenaPatientsCreateNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_create","title":"Node Type","description":"Type of the node. Must be 'athena_patients_create'","default":"athena_patients_create","input_field_not_visible":true},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient First Name","description":"First name of the patient to create"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Last Name","description":"Last name of the patient to create"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to create"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to retrieve"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"title":"Patient Gender","description":"Gender of the patient to create","default":"Male"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Email","description":"Email of the patient to create"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Notes","description":"Notes about the patient to create"},"mobile_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Mobile Number ex: mobile","description":"Mobile number of the patient to create"}},"type":"object","title":"Athena Patients Create Node"},"AthenaPatientsCreateNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_create","title":"Node Type","description":"Type of the node. Must be 'athena_patients_create'","default":"athena_patients_create","input_field_not_visible":true},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient First Name","description":"First name of the patient to create"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Last Name","description":"Last name of the patient to create"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to create"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to retrieve"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"title":"Patient Gender","description":"Gender of the patient to create","default":"Male"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Email","description":"Email of the patient to create"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Notes","description":"Notes about the patient to create"},"mobile_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Mobile Number ex: mobile","description":"Mobile number of the patient to create"}},"type":"object","title":"Athena Patients Create Node"},"AthenaPatientsCreateNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_create","title":"Type","description":"Discriminator field which must always be 'athena_patients_create'","default":"athena_patients_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsCreateNodeRunInput"},"AthenaPatientsCreateNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_create","title":"Type","description":"Discriminator field which must always be 'athena_patients_create'","default":"athena_patients_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsCreateNodeRunInput"},"AthenaPatientsCreateNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"athena_patients_create","title":"Type","description":"Discriminator field which must always be 'athena_patients_create'","default":"athena_patients_create"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Athena Node Successful","description":"Indicates whether the Athena node was successful","default":false},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code","description":"Status code returned by the Athena node"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"Response data from the Athena node"}},"type":"object","title":"AthenaPatientsCreateNodeRunOutput"},"AthenaPatientsSearchNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_search","title":"Node Type","description":"Type of the node. Must be 'athena_patients_search'","default":"athena_patients_search","input_field_not_visible":true},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to create"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Full Name","description":"Full name of the patient to retrieve"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to retrieve"}},"type":"object","title":"Athena Patients Search Node"},"AthenaPatientsSearchNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_search","title":"Node Type","description":"Type of the node. Must be 'athena_patients_search'","default":"athena_patients_search","input_field_not_visible":true},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to create"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Full Name","description":"Full name of the patient to retrieve"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to retrieve"}},"type":"object","title":"Athena Patients Search Node"},"AthenaPatientsSearchNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_search","title":"Type","description":"Discriminator field which must always be 'athena_patients_search'","default":"athena_patients_search"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsSearchNodeRunInput"},"AthenaPatientsSearchNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_search","title":"Type","description":"Discriminator field which must always be 'athena_patients_search'","default":"athena_patients_search"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsSearchNodeRunInput"},"AthenaPatientsSearchNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"athena_patients_search","title":"Type","description":"Discriminator field which must always be 'athena_patients_search'","default":"athena_patients_search"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Athena Node Successful","description":"Indicates whether the Athena node was successful","default":false},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code","description":"Status code returned by the Athena node"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"Response data from the Athena node"}},"type":"object","title":"AthenaPatientsSearchNodeRunOutput"},"AthenaPatientsUpdateNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_update","title":"Node Type","description":"Type of the node. Must be 'athena_patients_update'","default":"athena_patients_update","input_field_not_visible":true},"patient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient ID","description":"ID of the patient to update"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient First Name","description":"First name of the patient to update"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Last Name","description":"Last name of the patient to update"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to update"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to update (YYYY-MM-DD)"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"title":"Patient Gender","description":"Gender of the patient to update","default":"Male"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Email","description":"Email of the patient to update"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Notes","description":"Notes about the patient to update"},"notes_action":{"type":"string","enum":["append","replace"],"title":"Notes Action","description":"Action to perform on notes field","default":"append"},"mobile_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Mobile Number ex: mobile","description":"Mobile number of the patient to update"}},"type":"object","title":"Athena Patients Update Node"},"AthenaPatientsUpdateNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Athena","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"EHR Integrations","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source ID","description":"Source ID of the node"},"department_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Department ID","description":"Department ID of the node"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key for the node"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone in IANA format ex: 'America/New_York'","default":"America/New_York"},"reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminders","description":"Whether to send reminders for the node","default":false,"input_field_not_visible":true},"slotfill_outreach":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Slot Fill Outreach","description":"Whether to enable slot fill outreach for the node","default":false,"input_field_not_visible":true},"working_hours":{"anyOf":[{"$ref":"#/components/schemas/WorkingHours"},{"type":"null"}],"title":"Working Hours","description":"Working hours for the node","input_field_not_visible":true},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","title":"Use Cases","description":"Use cases for the node","input_field_not_visible":true},"type":{"type":"string","const":"athena_patients_update","title":"Node Type","description":"Type of the node. Must be 'athena_patients_update'","default":"athena_patients_update","input_field_not_visible":true},"patient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient ID","description":"ID of the patient to update"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient First Name","description":"First name of the patient to update"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Last Name","description":"Last name of the patient to update"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Phone Number ex: home","description":"Phone number of the patient to update"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Birthdate","description":"Birthdate of the patient to update (YYYY-MM-DD)"},"gender":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"title":"Patient Gender","description":"Gender of the patient to update","default":"Male"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Email","description":"Email of the patient to update"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Notes","description":"Notes about the patient to update"},"notes_action":{"type":"string","enum":["append","replace"],"title":"Notes Action","description":"Action to perform on notes field","default":"append"},"mobile_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Patient Mobile Number ex: mobile","description":"Mobile number of the patient to update"}},"type":"object","title":"Athena Patients Update Node"},"AthenaPatientsUpdateNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_update","title":"Type","description":"Discriminator field which must always be 'athena_patients_update'","default":"athena_patients_update"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsUpdateNodeRunInput"},"AthenaPatientsUpdateNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"athena_patients_update","title":"Type","description":"Discriminator field which must always be 'athena_patients_update'","default":"athena_patients_update"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override API Key","description":"Override API key for the node"}},"type":"object","title":"AthenaPatientsUpdateNodeRunInput"},"AthenaPatientsUpdateNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"athena_patients_update","title":"Type","description":"Discriminator field which must always be 'athena_patients_update'","default":"athena_patients_update"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Athena Node Successful","description":"Indicates whether the Athena node was successful","default":false},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code","description":"Status code returned by the Athena node"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"Response data from the Athena node"}},"type":"object","title":"AthenaPatientsUpdateNodeRunOutput"},"AzureOpenAILLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"azure_openai","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/AZUREOPENAIModel"},{"type":"null"}],"title":"Azure OpenAI Model","description":"Name of the Azure OpenAI model to use","default":"gpt-5-mini"},"type":{"type":"string","const":"azure_openai_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"azure_openai_llm","field_visibility_level":"developer","input_field_not_visible":true},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure OpenAI Endpoint","description":"Endpoint URL for Azure OpenAI API requests. Automatically inferred from env var `AZURE_OPENAI_ENDPOINT` if not provided.","field_visibility_level":"developer"},"api_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure OpenAI API Version","description":"Azure OpenAI API version. Falls back to `OPENAI_API_VERSION` env var if not provided.","field_visibility_level":"developer"},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'low', 'medium', 'high'.","default":"low"}},"type":"object","title":"Azure OpenAI"},"AzureOpenAILLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"azure_openai","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/AZUREOPENAIModel"},{"type":"null"}],"title":"Azure OpenAI Model","description":"Name of the Azure OpenAI model to use","default":"gpt-5-mini"},"type":{"type":"string","const":"azure_openai_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"azure_openai_llm","field_visibility_level":"developer","input_field_not_visible":true},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure OpenAI Endpoint","description":"Endpoint URL for Azure OpenAI API requests. Automatically inferred from env var `AZURE_OPENAI_ENDPOINT` if not provided.","field_visibility_level":"developer"},"api_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure OpenAI API Version","description":"Azure OpenAI API version. Falls back to `OPENAI_API_VERSION` env var if not provided.","field_visibility_level":"developer"},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'low', 'medium', 'high'.","default":"low"}},"type":"object","title":"Azure OpenAI"},"BEDROCKModel":{"type":"string","enum":["zai.glm-5","zai.glm-4.7","zai.glm-4.7-flash","moonshotai.kimi-k2.5","moonshot.kimi-k2-thinking","qwen.qwen3-vl-235b-a22b","qwen.qwen3-32b-v1:0"],"title":"BEDROCKModel"},"BaseNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"base_node","title":"Type","description":"Discriminator field which must always be 'base_node'","default":"base_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"BaseNodeRunInput"},"BaseNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"base_node","title":"Type","description":"Discriminator field which must always be 'base_node'","default":"base_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"BaseNodeRunInput"},"BedrockLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"bedrock","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrock API Key","description":"Amazon Bedrock long-term API key (bearer token). If set, it is used for authentication and the access-key fields below are ignored. Leave empty to authenticate with an access-key pair or the default AWS credential chain (IAM role).","field_visibility_level":"developer","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/BEDROCKModel"},{"type":"null"}],"title":"Bedrock Model","description":"Name of the Amazon Bedrock model to use","default":"zai.glm-4.7-flash"},"type":{"type":"string","const":"bedrock_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"bedrock_llm","input_field_not_visible":true},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Region","description":"AWS region the Bedrock model is invoked in. Defaults to us-east-1 if not provided.","field_visibility_level":"developer"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Access Key ID","description":"AWS access key ID for Bedrock. Leave empty to use the platform default (`BEDROCK_ACCESS_KEY` env var, then the AWS credential chain).","field_visibility_level":"developer","input_field_type":"password"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Secret Access Key","description":"AWS secret access key for Bedrock. Leave empty to use the platform default (`BEDROCK_SECRET_KEY` env var, then the AWS credential chain).","field_visibility_level":"developer","input_field_type":"password"}},"type":"object","title":"Bedrock"},"BedrockLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"bedrock","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrock API Key","description":"Amazon Bedrock long-term API key (bearer token). If set, it is used for authentication and the access-key fields below are ignored. Leave empty to authenticate with an access-key pair or the default AWS credential chain (IAM role).","field_visibility_level":"developer","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/BEDROCKModel"},{"type":"null"}],"title":"Bedrock Model","description":"Name of the Amazon Bedrock model to use","default":"zai.glm-4.7-flash"},"type":{"type":"string","const":"bedrock_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"bedrock_llm","input_field_not_visible":true},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Region","description":"AWS region the Bedrock model is invoked in. Defaults to us-east-1 if not provided.","field_visibility_level":"developer"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Access Key ID","description":"AWS access key ID for Bedrock. Leave empty to use the platform default (`BEDROCK_ACCESS_KEY` env var, then the AWS credential chain).","field_visibility_level":"developer","input_field_type":"password"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"AWS Secret Access Key","description":"AWS secret access key for Bedrock. Leave empty to use the platform default (`BEDROCK_SECRET_KEY` env var, then the AWS credential chain).","field_visibility_level":"developer","input_field_type":"password"}},"type":"object","title":"Bedrock"},"BodyContentTypeEnum":{"type":"string","enum":["application/json","application/x-www-form-urlencoded","multipart/form-data","text/plain"],"title":"BodyContentTypeEnum"},"Body_create_workflow_schedule_v1_workflows__workflow_id__schedules_post":{"properties":{"scheduled_time":{"type":"string","format":"date-time","title":"Scheduled Time","description":"Scheduled time in UTC"},"run_input":{"$ref":"#/components/schemas/WorkflowRunInput-Input"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"scheduled_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled By Name","description":"Display name of the user creating the schedule"}},"type":"object","required":["scheduled_time"],"title":"Body_create_workflow_schedule_v1_workflows__workflow_id__schedules_post"},"Body_update_workflow_schedule_v1_workflow_schedules__schedule_id__patch":{"properties":{"scheduled_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Time","description":"New scheduled time in UTC"},"run_input":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunInput-Input"},{"type":"null"}]},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}},"type":"object","title":"Body_update_workflow_schedule_v1_workflow_schedules__schedule_id__patch"},"BoundArgumentReport":{"properties":{"argument_name":{"type":"string","title":"Argument Name"},"source":{"type":"string","title":"Source","description":"The binding's source namespace: runtime | dynamic | auto | literal."},"variable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variable Path","description":"The variable this argument is bound to."},"required":{"type":"boolean","title":"Required","description":"Whether the argument must have a value for the tool to run.","default":false},"overrides_caller_value":{"type":"boolean","title":"Overrides Caller Value","description":"Whether the binding wins over a value the caller supplied.","default":false},"status":{"type":"string","title":"Status","description":"resolved (the variable answered) | default (it did not, and the binding's default stood in) | unresolved (it did not, and the binding is required) | caller_value_kept (the caller supplied this argument and the binding does not override, so nothing was resolved at all)."},"resolved_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved From","description":"Which namespace answered: runtime | dynamic | literal | default."},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type","description":"Type name of the value the tool will actually receive for this argument."},"value_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Summary","description":"Bounded structural description — key count, item count, length. Never content."},"value":{"anyOf":[{},{"type":"null"}],"title":"Value","description":"The value, present ONLY when it came from the tool config itself (a literal, or a default that was used). Never present for a value read from a workflow variable."},"value_truncated":{"type":"boolean","title":"Value Truncated","description":"Whether a reported config-sourced value was truncated.","default":false}},"type":"object","required":["argument_name","source","status"],"title":"BoundArgumentReport","description":"What the workflow would supply for one argument, and where it came from — never the value itself.\n\n**The rule, and it is a security boundary rather than a preference: a value that came from a\n*variable* is never echoed.** Bindings resolve against the same namespace a caller's team global\nvariables are merged into, which includes the team's API key. Neither Test-Tool route carries a role\ncheck, the inline route accepts a caller-authored config, and a binding that fails to resolve raises\nbefore any outbound request — so echoing resolved values would make this a zero-egress read channel\nfor any authenticated team member. Redacting by name cannot close that: the response is keyed by\n*argument* name, so a binding called ``auth`` pulling ``interactly_api_token`` matches no credential\npattern, and a team global marked secret with an innocuous name matches none either.\n\nWhat *is* returned is bounded by a statable invariant: **nothing that was not already in the request\nor in a tool config the caller can read.** A ``literal_value``, and a ``default`` that the fallback\nactually used, are both fields of a config the caller can fetch (or, on the inline route, authored\nthemselves), so those appear in ``value``.\n\nThat still answers the question the field exists for. A tool behaving differently in the dialog than\nin production is explained by *which* binding did not resolve (``status``), which namespace answered\n(``resolved_from``), that a default quietly stood in (``status``), or that the value arrived with the\nwrong type — ``\"41\"`` for ``41``, ``\"False\"`` for ``False``, the failures\n``utils/tool_variables.py`` exists to prevent (``value_type``, ``value_summary``). The one case it\ndoes not cover is a right-typed wrong value, where the author can inspect the variable directly."},"BulkCreateGlobalVariableItem":{"properties":{"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name"},"value":{"type":"string","title":"Value","default":""},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"is_secret":{"type":"boolean","title":"Is Secret","default":false}},"type":"object","required":["name"],"title":"BulkCreateGlobalVariableItem"},"BulkCreateGlobalVariablesRequest":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/BulkCreateGlobalVariableItem"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"BulkCreateGlobalVariablesRequest"},"CarriesOver":{"properties":{"message_count":{"type":"integer","title":"Message Count","default":0},"variable_count":{"type":"integer","title":"Variable Count","default":0}},"type":"object","title":"CarriesOver"},"ChatMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"chat","title":"Type","default":"chat"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"role":{"type":"string","title":"Role"}},"additionalProperties":true,"type":"object","required":["content","role"],"title":"ChatMessage","description":"Message that can be assigned an arbitrary speaker (i.e. role)."},"ChatMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"ChatMessageChunk","title":"Type","default":"ChatMessageChunk"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"role":{"type":"string","title":"Role"}},"additionalProperties":true,"type":"object","required":["content","role"],"title":"ChatMessageChunk","description":"Chat Message chunk."},"CloneWorkflowRequest":{"properties":{"name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Name","description":"Name of the cloned workflow"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the cloned workflow"},"clone_all_versions":{"type":"boolean","title":"Clone All Versions","description":"Whether to clone all versions","default":false},"version_numbers_to_clone":{"items":{"type":"integer"},"type":"array","title":"Version Numbers To Clone","description":"List of specific version numbers to clone"},"fallback_active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fallback Active Version","description":"Version number to set as active if the original active version is not in the cloned versions"}},"type":"object","title":"CloneWorkflowRequest"},"CommentConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment Logical ID","description":"Unique identifier for the comment","input_field_disallowed":true},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment Content","description":"Content of the comment"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who created this edge","input_field_not_visible":true},"updatedBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who last updated this edge","input_field_not_visible":true},"createdAt":{"type":"string","format":"date-time","title":"Createdat","input_field_not_visible":true},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","input_field_not_visible":true}},"type":"object","title":"CommentConfig"},"CommentRequest":{"properties":{"content":{"type":"string","maxLength":5000,"title":"Comment Content","description":"Content of the comment"}},"type":"object","required":["content"],"title":"CommentRequest","description":"Request body for leaving a comment. Everything else on ``CommentConfig`` is server-assigned.\n\nSeparate from ``CommentConfig`` on purpose. That model is also the *stored* shape and is used to\nread records written before any of these rules existed, so constraining it would make legacy\ndocuments — including comments stored with null content — unreadable, and would fail the run\nfetch for every run holding one. Rules belong at the boundary, where new input arrives.\n\nMirrors the ``RatingConfig`` / ``RatingRequest`` split in ``configs/rating.py``."},"CommentsResponse":{"properties":{"comments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Comments","description":"All comments on the target after the write"},"feedback_users":{"additionalProperties":{"$ref":"#/components/schemas/FeedbackUser"},"type":"object","title":"Feedback Users","description":"Display identities for the authors in `comments`. See RatingsResponse."}},"type":"object","title":"CommentsResponse","description":"Response model for the turn comment endpoints. Scoped to the mutated turn for the same reason as\nRatingsResponse."},"CompanionEdgeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"companion","title":"Edge Type","description":"Type of the edge. Expected to be always 'companion' for this config","default":"companion"}},"type":"object","title":"Companion Edge"},"CompanionEdgeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"companion","title":"Edge Type","description":"Type of the edge. Expected to be always 'companion' for this config","default":"companion"}},"type":"object","title":"Companion Edge"},"CompanionThreadConfig":{"properties":{"is_companion_thread":{"type":"boolean","title":"Is Companion Thread","description":"When a node has multiple outgoing direct edges, edges with this flag set to True spawn companion threads that run alongside the single main thread (the one edge with this flag False). Companion threads keep executing and emitting events while the main thread waits for user input, and never receive UI user messages. A lone direct edge always continues the main thread regardless of this flag.","default":false},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread ID","description":"Author-chosen id for the forked companion thread. Other threads read this companion's runtime variables via [[thread_<thread_id>.<var>]], and the companion reads the main thread via [[thread_0.<var>]]. Must be unique across the workflow's companion edges, non-empty, and use only [A-Za-z0-9_-] (no '.', no '_companion_', and not the reserved id '0'). Optional: if omitted, a uuid is generated at fork time and the companion is not addressable via a cross-thread reference."}},"type":"object","title":"Companion Thread","description":"Compound companion-thread settings for a direct edge, grouping the two related fields so their\nrelationship is explicit in the authoring UI and the stored config."},"ConcurrencyConfigResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"max_concurrent_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Runs"},"message":{"type":"string","title":"Message"}},"type":"object","required":["workflow_id","max_concurrent_runs","message"],"title":"ConcurrencyConfigResponse","description":"Response body for concurrency configuration."},"ConditionConfig":{"properties":{"condition_freeform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freeform condition string","description":"Condition (expressed in natural language) that determines whether this path is taken","input_field_type":"textarea"},"condition_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expression condition string","description":"Condition (expressed in a structured equation with variables) that determines whether this path is taken"},"args_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Arguments JSON Schema","description":"JSON Schema describing the arguments that will be passed when condition_freeform is evaluated","input_field_type":"textarea"},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Static messages that an LLM node should emit while this tool is being invoked"},"dynamic_messages_config":{"anyOf":[{"$ref":"#/components/schemas/DynamicMessagesConfig"},{"type":"null"}],"title":"Dynamic Messages Configuration","description":"Dynamic message configuration. When set, the LLM will generate a message to say when this edge is taken, guided by the provided prompt."}},"type":"object","title":"ConditionConfig"},"ConditionalEdgeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"conditional","title":"Edge Type","description":"Type of the edge. Expected to be always 'conditional' for this config","default":"conditional"},"condition":{"anyOf":[{"$ref":"#/components/schemas/ConditionConfig"},{"type":"null"}],"title":"Edge Condition","description":"Condition that determines whether this edge is taken"},"evaluate_while_waiting_config":{"anyOf":[{"$ref":"#/components/schemas/EvaluateWhileWaitingConfig"},{"type":"null"}],"title":"Evaluate While Waiting For User Input","description":"Settings for evaluating this edge while its source node waits for user input. None (the default) preserves the classic behavior exactly: the edge is evaluated only after each source-node execution. See EvaluateWhileWaitingConfig."}},"type":"object","title":"Conditional Edge"},"ConditionalEdgeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"conditional","title":"Edge Type","description":"Type of the edge. Expected to be always 'conditional' for this config","default":"conditional"},"condition":{"anyOf":[{"$ref":"#/components/schemas/ConditionConfig"},{"type":"null"}],"title":"Edge Condition","description":"Condition that determines whether this edge is taken"},"evaluate_while_waiting_config":{"anyOf":[{"$ref":"#/components/schemas/EvaluateWhileWaitingConfig"},{"type":"null"}],"title":"Evaluate While Waiting For User Input","description":"Settings for evaluating this edge while its source node waits for user input. None (the default) preserves the classic behavior exactly: the edge is evaluated only after each source-node execution. See EvaluateWhileWaitingConfig."}},"type":"object","title":"Conditional Edge"},"CounterGenerationState":{"properties":{"source_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Version Number"},"status":{"$ref":"#/components/schemas/CounterGenerationStatus","default":"pending"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"num_cases_requested":{"type":"integer","title":"Num Cases Requested","default":0},"num_cases_generated":{"type":"integer","title":"Num Cases Generated","description":"Updated as batches land, so progress is visible","default":0},"generated_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"generated_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Generated Version Number"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Failure reason when status is failed"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["source_workflow_id"],"title":"CounterGenerationState","description":"The newest generation run for one workflow."},"CounterGenerationStatus":{"type":"string","enum":["pending","running","completed","failed"],"title":"CounterGenerationStatus"},"CounterWorkflowGenerateRequest":{"properties":{"num_cases":{"type":"integer","maximum":200,"minimum":1,"title":"Num Cases","description":"How many test cases to generate. Each becomes one persona node in the counter workflow.","default":10},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions","description":"Free-text guidance on what the scenarios should cover, e.g. 'adversarial callers who change their mind mid-call' or 'concentrate on the insurance verification branch'."},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"Version of the source workflow to read. Defaults to the active version."},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name","description":"Name for the generated counter workflow. Defaults to a name derived from the source."},"new_workflow":{"type":"boolean","title":"New Workflow","description":"Force a brand-new counter workflow. By default a regeneration is appended as a new version of the counter workflow that already exists for this source, if there is one.","default":false},"provider":{"anyOf":[{"type":"string","enum":["gemini","claude"]},{"type":"null"}],"title":"Provider","description":"Which model family to use. 'gemini' writes the scenarios with gemini-3.1-pro-preview and runs the generated persona nodes on gemini-3.5-flash; 'claude' uses claude-opus-5 and claude-haiku-4-5.","default":"gemini"}},"type":"object","title":"CounterWorkflowGenerateRequest","description":"Body for ``POST /v1/workflows/{workflow_id}/counter-workflow/generate``."},"CounterWorkflowGenerationResponse":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A message providing additional context about the response."},"generation":{"$ref":"#/components/schemas/CounterGenerationState","description":"The generation run's current state"}},"type":"object","required":["generation"],"title":"CounterWorkflowGenerationResponse","description":"State of a counter-workflow generation run."},"CreateGlobalVariableRequest":{"properties":{"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name"},"value":{"type":"string","title":"Value","default":""},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"is_secret":{"type":"boolean","title":"Is Secret","default":false}},"type":"object","required":["name"],"title":"CreateGlobalVariableRequest"},"CreateSecureNotificationRequest":{"properties":{"expires_in_minutes":{"type":"integer","maximum":60,"minimum":1,"title":"Expires In Minutes","description":"How long the notification stays approvable, in minutes","default":5}},"type":"object","title":"CreateSecureNotificationRequest","description":"Body for the AI ``create_secure_notification`` tool. Notifications are global (not scoped to\na member/team), so the only accepted field is the optional approval window."},"CreateVersionRequest":{"properties":{"version_name":{"type":"string","minLength":1,"title":"Version Name","description":"Name of the version"},"mark_as_active":{"type":"boolean","title":"Mark As Active","description":"Whether to mark this version as active","default":false},"source_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Version Number","description":"Version number to clone from. If not provided, defaults to active version"}},"type":"object","required":["version_name"],"title":"CreateVersionRequest"},"CustomLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"custom","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Model Name","description":"Name of the model served behind the custom LLM gateway (free-form string, e.g. 'gpt-4.1-mini', 'llama-3-70b', 'mistral-large')."},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'."},"type":{"type":"string","const":"custom_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"custom_llm","field_visibility_level":"developer","input_field_not_visible":true},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway Base URL","description":"Base URL of the custom OpenAI-compatible LLM gateway (e.g. 'http://api.interactly.ai/workflows/llm-proxy')."},"default_headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers","description":"Optional HTTP headers to include in every request to the gateway (e.g. routing keys, tenant IDs)."},"rewrite_base_url":{"type":"boolean","title":"Rewrite Base URL","description":"When True, uses an httpx event hook to rewrite every request URL to the exact base_url. Use this for gateways that don't accept the /chat/completions suffix the SDK appends.","default":false},"verify_ssl":{"type":"boolean","title":"Verify SSL","description":"Whether to verify SSL certificates. Set to False for gateways with self-signed certificates.","default":true},"response_unwrap_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Unwrap Key","description":"When set, the gateway response JSON is expected to wrap the standard OpenAI response inside this key (e.g. 'result'). The runtime will extract the nested object before passing it to the OpenAI SDK. Leave empty for gateways that already return standard format."},"integration_auth":{"anyOf":[{"$ref":"#/components/schemas/IntegrationAuthConfig"},{"type":"null"}],"title":"Integration Auth","description":"Integration-backed authentication configuration for bearer-token injection. Point it at any integration that issues OAuth2 client-credentials tokens."},"use_responses_api":{"type":"boolean","title":"Use Responses API","description":"Whether to use the GPT 5.x+ style Responses API, instead of Chat Completions API for this Custom LLM. See https://developers.openai.com/api/reference/resources/responses","default":false}},"type":"object","title":"Custom LLM"},"CustomLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"custom","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Model Name","description":"Name of the model served behind the custom LLM gateway (free-form string, e.g. 'gpt-4.1-mini', 'llama-3-70b', 'mistral-large')."},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'."},"type":{"type":"string","const":"custom_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"custom_llm","field_visibility_level":"developer","input_field_not_visible":true},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway Base URL","description":"Base URL of the custom OpenAI-compatible LLM gateway (e.g. 'http://api.interactly.ai/workflows/llm-proxy')."},"default_headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers","description":"Optional HTTP headers to include in every request to the gateway (e.g. routing keys, tenant IDs)."},"rewrite_base_url":{"type":"boolean","title":"Rewrite Base URL","description":"When True, uses an httpx event hook to rewrite every request URL to the exact base_url. Use this for gateways that don't accept the /chat/completions suffix the SDK appends.","default":false},"verify_ssl":{"type":"boolean","title":"Verify SSL","description":"Whether to verify SSL certificates. Set to False for gateways with self-signed certificates.","default":true},"response_unwrap_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Unwrap Key","description":"When set, the gateway response JSON is expected to wrap the standard OpenAI response inside this key (e.g. 'result'). The runtime will extract the nested object before passing it to the OpenAI SDK. Leave empty for gateways that already return standard format."},"integration_auth":{"anyOf":[{"$ref":"#/components/schemas/IntegrationAuthConfig"},{"type":"null"}],"title":"Integration Auth","description":"Integration-backed authentication configuration for bearer-token injection. Point it at any integration that issues OAuth2 client-credentials tokens."},"use_responses_api":{"type":"boolean","title":"Use Responses API","description":"Whether to use the GPT 5.x+ style Responses API, instead of Chat Completions API for this Custom LLM. See https://developers.openai.com/api/reference/resources/responses","default":false}},"type":"object","title":"Custom LLM"},"DeduplicateNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Data Transformation","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Deduplication","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"deduplicate","title":"Type","description":"Type of the node. Must be 'deduplicate'","default":"deduplicate"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Variable Name","description":"Name of the runtime variable that holds the list of objects to deduplicate"},"dedup_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dedup Key","description":"Dot-notation key path used to identify duplicates (e.g. 'id', 'user.email'). The first object with a given key value is kept; subsequent ones are removed. Objects missing the key are always kept. Ignored if dedup_key_runtime_variable_name is set."},"dedup_key_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dedup Key Variable Name","description":"Name of the runtime variable holding the dot-notation key path. When set, this takes priority over the static dedup_key."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Name of the runtime variable where the deduplicated list will be stored","default":"deduplicate_result"}},"type":"object","title":"DeduplicateNodeConfig"},"DeduplicateNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Data Transformation","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Deduplication","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"deduplicate","title":"Type","description":"Type of the node. Must be 'deduplicate'","default":"deduplicate"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Variable Name","description":"Name of the runtime variable that holds the list of objects to deduplicate"},"dedup_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dedup Key","description":"Dot-notation key path used to identify duplicates (e.g. 'id', 'user.email'). The first object with a given key value is kept; subsequent ones are removed. Objects missing the key are always kept. Ignored if dedup_key_runtime_variable_name is set."},"dedup_key_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dedup Key Variable Name","description":"Name of the runtime variable holding the dot-notation key path. When set, this takes priority over the static dedup_key."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Name of the runtime variable where the deduplicated list will be stored","default":"deduplicate_result"}},"type":"object","title":"DeduplicateNodeConfig"},"DeduplicateNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"deduplicate","title":"Type","description":"Discriminator field which must always be 'deduplicate'","default":"deduplicate"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"DeduplicateNodeRunInput"},"DeduplicateNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"deduplicate","title":"Type","description":"Discriminator field which must always be 'deduplicate'","default":"deduplicate"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"DeduplicateNodeRunInput"},"DeduplicateNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"deduplicate","title":"Type","description":"Discriminator field which must always be 'deduplicate'","default":"deduplicate"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Success","description":"Indicates whether the deduplication was successful","default":false},"deduplicated_list":{"anyOf":[{},{"type":"null"}],"title":"Deduplicated List","description":"The deduplicated list result"},"removed_count":{"type":"integer","title":"Removed Count","description":"Number of duplicate objects removed from the list","default":0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the deduplication failed"}},"type":"object","title":"DeduplicateNodeRunOutput"},"DependentWorkflow":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["workflow_id"],"title":"DependentWorkflow","description":"A workflow that embeds a given super node."},"DependentsResponse":{"properties":{"workflows":{"items":{"$ref":"#/components/schemas/DependentWorkflow"},"type":"array","title":"Workflows"},"total":{"type":"integer","title":"Total","description":"Total number of workflows referencing this super node"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["workflows","total","page","size"],"title":"DependentsResponse","description":"Paginated list of workflows that embed a given super node."},"DetailedIndividualRun":{"properties":{"id":{"type":"string","title":"Id","description":"Individual run ID"},"run_index":{"type":"integer","title":"Run Index","description":"Index of the run within the group (1-based)"},"status":{"type":"string","title":"Status","description":"Status of the individual run"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if failed"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"When the run was created"},"evaluation_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evaluation Result","description":"Evaluation result scores"},"selected_workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Workflow Run Id"},"selected_workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Workflow Name"},"selected_workflow_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Workflow Status"},"selected_evaluation_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Evaluation Run Id"},"selected_evaluation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Evaluation Status"},"counter_workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Workflow Run Id"},"counter_workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Workflow Name"},"counter_workflow_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Workflow Status"},"counter_evaluation_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Evaluation Run Id"},"counter_evaluation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Evaluation Status"}},"type":"object","required":["id","run_index","status"],"title":"DetailedIndividualRun","description":"Individual simulation run with hydrated workflow run details."},"DetailedIndividualRunListResponse":{"properties":{"individual_runs":{"items":{"$ref":"#/components/schemas/DetailedIndividualRun"},"type":"array","title":"Individual Runs","description":"List of detailed individual simulation runs"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total count"}},"type":"object","title":"DetailedIndividualRunListResponse","description":"Response model for detailed individual simulation runs with hydrated workflow info."},"DirectEdgeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"direct","title":"Edge Type","description":"Type of the edge. Expected to be always 'direct' for this base config","default":"direct"},"companion_thread_config":{"anyOf":[{"$ref":"#/components/schemas/CompanionThreadConfig"},{"type":"null"}],"title":"Companion Thread","description":"Companion-thread settings (is_companion_thread + thread_id). None means the edge continues the main thread. See CompanionThreadConfig."}},"type":"object","title":"Direct Edge"},"DirectEdgeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Logical ID","description":"Unique identifier for the edge","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Name","description":"Name of the edge"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Description","description":"Description of the edge"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"source_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Node Logical ID","description":"Logical ID of the source node for this edge","input_field_not_visible":true},"destination_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Node Logical ID","description":"Logical ID of the target node for this edge","input_field_not_visible":true},"type":{"type":"string","const":"direct","title":"Edge Type","description":"Type of the edge. Expected to be always 'direct' for this base config","default":"direct"},"companion_thread_config":{"anyOf":[{"$ref":"#/components/schemas/CompanionThreadConfig"},{"type":"null"}],"title":"Companion Thread","description":"Companion-thread settings (is_companion_thread + thread_id). None means the edge continues the main thread. See CompanionThreadConfig."}},"type":"object","title":"Direct Edge"},"DroppedSummary":{"properties":{"node_ids":{"items":{"type":"string"},"type":"array","title":"Node Ids"},"variable_keys":{"items":{"type":"string"},"type":"array","title":"Variable Keys"},"state_keys":{"items":{"type":"string"},"type":"array","title":"State Keys"}},"type":"object","title":"DroppedSummary"},"DynamicMessagesConfig":{"properties":{"dynamic_message_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dynamic Message Prompt","description":"A prompt describing what the LLM should say when this conditional edge is taken. The LLM will be asked to fill in a value based on this prompt, and the result will be emitted as an assistant response.","input_field_type":"textarea"}},"type":"object","title":"DynamicMessagesConfig"},"EdgeDiff":{"properties":{"logical_id":{"type":"string","title":"Logical Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"edge_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Type"},"status":{"type":"string","enum":["added","removed","modified"],"title":"Status"},"changes":{"items":{"$ref":"#/components/schemas/FieldDiff"},"type":"array","title":"Changes","default":[]}},"type":"object","required":["logical_id","status"],"title":"EdgeDiff","description":"Represents changes to an edge between versions."},"EdgeFilter":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id","description":"Filter by logical ID"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Filter by workflow ID"},"type":{"anyOf":[{"$ref":"#/components/schemas/EdgeType"},{"type":"null"}],"description":"Filter by edge type"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"Filter by version number. Returns snapshot edges for that version."}},"type":"object","title":"EdgeFilter"},"EdgeType":{"type":"string","enum":["direct","conditional","companion"],"title":"EdgeType"},"EdgesListResponse":{"properties":{"edges":{"items":{"$ref":"#/components/schemas/EdgesModel"},"type":"array","title":"Edges","description":"List of edges"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of edges available without pagination."}},"type":"object","title":"EdgesListResponse","description":"Response model for a list of edges.\nContains a list of EdgesModel objects."},"EdgesModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"edge_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/DirectEdgeConfig-Output"},{"$ref":"#/components/schemas/ConditionalEdgeConfig-Output"},{"$ref":"#/components/schemas/CompanionEdgeConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"companion":"#/components/schemas/CompanionEdgeConfig-Output","conditional":"#/components/schemas/ConditionalEdgeConfig-Output","direct":"#/components/schemas/DirectEdgeConfig-Output"}}},{"type":"null"}],"title":"Edge Config","description":"Edge Configuration"}},"type":"object","title":"EdgesModel","description":"Stores an edge configuration present in the workflow system."},"EdgesResponse":{"properties":{"edge":{"$ref":"#/components/schemas/EdgesModel","description":"Single edge object"}},"type":"object","required":["edge"],"title":"EdgesResponse","description":"Response model for a single edge.\nContains an EdgesModel object."},"EndConversationNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Conversation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"end_conversation","title":"Node Type","description":"Type of the node. Must be 'end_conversation'","default":"end_conversation","input_field_not_visible":true},"process_transcript_prompt":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Process Transcript Prompt Configuration","description":"Prompt configuration for processing the conversation transcript"},"process_transcript_llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"Process Transcript LLM(s) Configuration","description":"LLM or a group of LLMs to be used for processing the conversation transcript"}},"type":"object","title":"End Conversation Node"},"EndConversationNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Conversation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"end_conversation","title":"Node Type","description":"Type of the node. Must be 'end_conversation'","default":"end_conversation","input_field_not_visible":true},"process_transcript_prompt":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Process Transcript Prompt Configuration","description":"Prompt configuration for processing the conversation transcript"},"process_transcript_llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"Process Transcript LLM(s) Configuration","description":"LLM or a group of LLMs to be used for processing the conversation transcript"}},"type":"object","title":"End Conversation Node"},"EndConversationNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"end_conversation","title":"Type","description":"Discriminator field which must always be 'end_conversation'","default":"end_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"EndConversationNodeRunInput"},"EndConversationNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"end_conversation","title":"Type","description":"Discriminator field which must always be 'end_conversation'","default":"end_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"EndConversationNodeRunInput"},"EndConversationNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"end_conversation","title":"Type","description":"Discriminator field which must always be 'end_conversation'","default":"end_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"}},"type":"object","title":"EndConversationNodeRunOutput"},"EvaluateWhileWaitingConfig":{"properties":{"enabled":{"type":"boolean","title":"Evaluate While Waiting For User Input","description":"When True, this edge is also evaluated while its source node is parked waiting for user input, and is taken if the expression becomes True.","default":false},"trigger_mode":{"$ref":"#/components/schemas/WaitingEvaluationTriggerMode","title":"Evaluation Trigger","description":"What arms an evaluation. 'on_node_completion' (recommended) evaluates only once a node named in trigger_node_logical_ids has completed another execution; 'on_every_background_tick' evaluates on every background pass.","default":"on_node_completion"},"trigger_node_logical_ids":{"items":{"type":"string"},"type":"array","title":"Trigger Nodes","description":"Node logical ids whose completion arms one evaluation of this edge. Required when trigger_mode is 'on_node_completion'. Nodes may live in any thread — typically a companion-thread node that updates the runtime variable this expression reads."},"min_seconds_between_evaluations":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Minimum Seconds Between Evaluations","description":"Debounce: an armed evaluation waits until this many seconds after the previous one. REQUIRED (and must be > 0) when trigger_mode is 'on_every_background_tick', because that mode is always armed — without a debounce it would evaluate on every background pass, spinning the driver loop and flooding the run record. Optional for 'on_node_completion', which is already bounded by how often the trigger node completes. 0 means no debounce and is only meaningful for 'on_node_completion'."},"max_transitions_per_wait":{"type":"integer","minimum":1,"title":"Max Transitions Per Wait","description":"Hard bound on how many times this edge may fire during a single uninterrupted wait (reset when a user message is received). Guards against background hop loops in which no user is ever given a turn.","default":3}},"type":"object","title":"Evaluate While Waiting For User Input","description":"Opt-in: evaluate this conditional edge's ``condition_expression`` while the SOURCE node is parked\nwaiting for a user message, and take the edge if it becomes True — with no user message required.\n\nWithout this config a conditional edge is evaluated at exactly one moment: immediately after each\nexecution of its source node. A ``say_llm`` node with ``self_loop`` + ``wait_for_user_message``\ntherefore parks indefinitely, and a runtime variable that flips in the background (e.g. written by\na polling node in a companion thread) cannot move the conversation forward on its own.\n\nOnly valid on an edge whose condition uses ``condition_expression``; ``condition_freeform``\nconditions need an LLM call per evaluation and are rejected rather than silently ignored. See\n``WorkflowRuntime._validate_waiting_evaluated_edges`` for the full validation matrix."},"EvaluationConfig-Input":{"properties":{"evaluator_workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Evaluator Workflow ID","description":"ID of the workflow to be used as the evaluator","input_field_type":"workflow_selection_with_workflow_id"},"evaluator_workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Evaluator Workflow Version Number","description":"Version number of the evaluator workflow to be used. If not specified, the active version will be used.","input_field_type":"workflow_selection_with_version_number"},"enable_turn_by_turn_evaluation":{"type":"boolean","title":"Enable Turn-by-Turn Evaluation","description":"If true, enables turn-by-turn evaluation of the workflow execution","default":false}},"type":"object","title":"EvaluationConfig"},"EvaluationConfig-Output":{"properties":{"evaluator_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluator Workflow ID","description":"ID of the workflow to be used as the evaluator","input_field_type":"workflow_selection_with_workflow_id"},"evaluator_workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Evaluator Workflow Version Number","description":"Version number of the evaluator workflow to be used. If not specified, the active version will be used.","input_field_type":"workflow_selection_with_version_number"},"enable_turn_by_turn_evaluation":{"type":"boolean","title":"Enable Turn-by-Turn Evaluation","description":"If true, enables turn-by-turn evaluation of the workflow execution","default":false}},"type":"object","title":"EvaluationConfig"},"EvaluationMetricSummary":{"properties":{"metric_name":{"type":"string","title":"Metric Name","description":"Name of the evaluation metric"},"average_score":{"type":"number","title":"Average Score","description":"Average score across all successful runs"},"min_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Score","description":"Minimum score observed"},"max_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Score","description":"Maximum score observed"},"distribution":{"$ref":"#/components/schemas/ScoreDistribution","description":"Distribution of scores across ranges"}},"type":"object","required":["metric_name","average_score"],"title":"EvaluationMetricSummary","description":"Summary statistics for a single evaluation metric across all runs."},"EvaluationRunInfo-Input":{"properties":{"evaluation_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Evaluation Workflow Run ID","description":"ID of the evaluation workflow run that was triggered for this source workflow run."}},"type":"object","title":"EvaluationRunInfo","description":"Contains information about the evaluation that was triggered for a workflow run.\nThis is stored in the source workflow run after evaluation completes."},"EvaluationRunInfo-Output":{"properties":{"evaluation_workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluation Workflow Run ID","description":"ID of the evaluation workflow run that was triggered for this source workflow run."}},"type":"object","title":"EvaluationRunInfo","description":"Contains information about the evaluation that was triggered for a workflow run.\nThis is stored in the source workflow run after evaluation completes."},"ExistingCounterWorkflow":{"properties":{"workflow_id":{"type":"string","description":"The counter workflow's id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"active_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version Number","description":"Version holding the newest case set"},"case_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Case Count","description":"Number of test cases in the active version"},"generated_for_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Generated For Version Number","description":"Version of the source workflow the cases were written against"}},"type":"object","required":["workflow_id"],"title":"ExistingCounterWorkflow","description":"Summary of the counter workflow already generated for a workflow."},"ExistingCounterWorkflowResponse":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A message providing additional context about the response."},"counter_workflow":{"anyOf":[{"$ref":"#/components/schemas/ExistingCounterWorkflow"},{"type":"null"}]},"generation":{"anyOf":[{"$ref":"#/components/schemas/CounterGenerationState"},{"type":"null"}],"description":"Newest generation run for this workflow, so one call answers both 'does a counter workflow exist' and 'is a generation already running'."}},"type":"object","title":"ExistingCounterWorkflowResponse"},"ExpandPreviewResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"},"expanded_config":{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},"super_node_origins":{"items":{"type":"string"},"type":"array","title":"Super Node Origins","description":"Distinct values of node.miscellaneous['super_node_origin'] present in the expansion"},"expansion_report":{"anyOf":[{"$ref":"#/components/schemas/ExpansionReport"},{"type":"null"}],"description":"Diagnostic report for the expansion, including projected super-node exit edge counts"}},"type":"object","required":["workflow_id","expanded_config"],"title":"ExpandPreviewResponse","description":"Preview payload returned by POST /workflows/{id}/expand-preview."},"ExpansionReport":{"properties":{"total_super_nodes_expanded":{"type":"integer","title":"Total Super Nodes Expanded","default":0},"max_depth_reached":{"type":"integer","title":"Max Depth Reached","default":0},"steps":{"items":{"$ref":"#/components/schemas/SuperNodeExpansionStep"},"type":"array","title":"Steps"},"mcp_merge_collisions":{"items":{"$ref":"#/components/schemas/McpMergeCollision"},"type":"array","title":"Mcp Merge Collisions"},"dynamic_variables_added":{"items":{"type":"string"},"type":"array","title":"Dynamic Variables Added"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"direct_exit_edges_projected":{"type":"integer","title":"Direct Exit Edges Projected","description":"Total number of direct outgoing parent edges projected from super-node terminal nodes after expansion (fan-out: one bridge edge per terminal × parent edge).","default":0},"conditional_exit_edges_projected":{"type":"integer","title":"Conditional Exit Edges Projected","description":"Total number of conditional outgoing parent edges projected from super-node interior LLM nodes after expansion (fan-out: one bridge edge per interior LLM node × parent edge).","default":0}},"type":"object","title":"ExpansionReport","description":"Accumulator passed through the expander's recursion.\n\nCounts and lists are appended to at well-known sites in the expander. The\nlegacy ``expand_super_nodes`` function does not return this object — only\nthe public wrapper does."},"ExternalAPIToolConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool ID","description":"Unique identifier for the tool","input_field_disallowed":true},"tool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Tool ID","description":"Reference to the tool already created in the Workflow System. If not provided, the tool config is assumed to be provided inline here.","input_field_type":"external_api_tool_selection"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Name for the tool"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Description","description":"Human friendly description for the tool (not used by AI)"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Category","description":"Category for the tool. E.g math, ehr, etc"},"side_effect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Side Effect","description":"Side-effect classification used by the test-tool feature to decide whether the tool can be safely executed directly, or must be dry-run / confirmation-gated first. One of 'none', 'reads', 'writes', 'sends', 'unknown'. When not set, it is inferred from the tool type.","input_field_not_visible":true},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Signature","description":"Docstring or signature for the tool used by AI. If provided and there is a default signature already, it will override the default signature.","input_field_type":"textarea"},"args_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments Schema","description":"Schema for the arguments that the tool accepts. This should be a JSON schema dictionary. Information provided here will override any default arguments schema."},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Static messages that an LLM node should emit while this tool is being invoked"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result from this tool call","default":"tool_result"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content the LLM returns in the same response as a call to this tool is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. When a response contains multiple tool calls, the text is ignored only if every tool call targets a tool for which this flag is set.","default":false},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Timeout (seconds)","description":"Wall-clock ceiling in seconds for one invocation of this tool. Leave empty to use the platform default. Raise it for a tool that is legitimately slow (a large EHR sync, say) rather than letting it be cut off. Note: an inline-Python body that is CPU-bound with no await points cannot be interrupted - the timeout frees the conversation to continue, but the work carries on in the background."},"variable_arguments":{"items":{"$ref":"#/components/schemas/ToolVariableArgument"},"type":"array","title":"Variable Arguments","description":"Arguments supplied to this tool from the workflow's runtime/dynamic variables, resolved at invocation time and passed as native Python values. Use this instead of embedding [[variables]] in an inline tool's source code: the value keeps its type, and it is passed as an argument rather than spliced into the code.","input_field_helper_text":"The workflow fills these in, not the model. An argument bound here is removed from the schema the model sees, so it cannot invent a value for it.","input_field_type":"variable_arguments_editor"},"result_variable_mappings":{"items":{"$ref":"#/components/schemas/ToolResultVariableMapping"},"type":"array","title":"Result Variable Mappings","description":"Assigns parts of this tool's return value to named runtime variables, so a tool that returns a dict can populate several variables at once.","input_field_helper_text":"Leave the result path empty to map the whole return value. A dotted path (data.score) reaches into a dict result.","input_field_type":"result_variable_mappings_editor"},"expand_result_into_runtime_variables":{"type":"boolean","title":"Expand Result Into Runtime Variables","description":"When true and the tool returns a dict, every top-level key is also written as a runtime variable of the same name. A convenience alternative to listing every mapping explicitly; explicit result_variable_mappings win on a name collision.","default":false},"type":{"type":"string","const":"external_api","title":"Tool Type","description":"Type of the tool. Must be 'external_api'","default":"external_api","input_field_not_visible":true},"api_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Endpoint","description":"The endpoint URL of the external API"},"api_method":{"anyOf":[{"$ref":"#/components/schemas/APIMethodType"},{"type":"null"}],"title":"API Method","description":"HTTP method to use for the API call (e.g., GET, POST)","default":"GET"},"api_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"API Headers","description":"HTTP headers to include with the API request (e.g., authorization, content-type)","default":{}},"api_body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"title":"API Request Body","description":"The request body payload for the API call. Usually applicable for POST/PUT methods.","input_field_type":"textarea"},"integration_auth":{"anyOf":[{"$ref":"#/components/schemas/IntegrationAuthConfig"},{"type":"null"}],"title":"Integration Auth","description":"Integration whose OAuth token is injected as the Authorization header on every request. Ignored when api_headers already sets Authorization."}},"type":"object","title":"External API Tool","description":"Configuration for an external API tool.\nThis tool type represents an external API endpoint that the LLM can call."},"FeedbackUser":{"properties":{"id":{"type":"string","title":"Id","description":"The user's id, as a string"},"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["id"],"title":"FeedbackUser","description":"Display identity for one feedback author.\n\nDeliberately minimal: a run response should not become an access path to the user directory, so\nthis carries only what is needed to render \"who left this\" and nothing else."},"FieldDiff":{"properties":{"path":{"type":"string","title":"Path"},"old_value":{"title":"Old Value"},"new_value":{"title":"New Value"}},"type":"object","required":["path"],"title":"FieldDiff","description":"Represents a single field change."},"FieldExtractorNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Data Transformation","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Extraction","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"field_extractor","title":"Type","description":"Type of the node. Must be 'field_extractor'","default":"field_extractor"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Variable Name","description":"Name of the runtime variable that holds the input JSON to be filtered"},"keys_to_retain":{"items":{"type":"string"},"type":"array","title":"Keys to Retain","description":"Static list of key paths to retain in the output. Supports dot notation for nested keys (e.g. 'address.city'), bracket notation for arrays (e.g. 'orders[].id' for all elements, 'orders[1].id' for a specific index). Ignored if keys_to_retain_runtime_variable_name is set."},"keys_to_retain_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keys to Retain Variable Name","description":"Name of the runtime variable holding the list of key paths to retain. When set, this takes priority over the static keys_to_retain list."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Name of the runtime variable where the extracted result will be stored","default":"field_extractor_result"}},"type":"object","title":"FieldExtractorNodeConfig"},"FieldExtractorNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Data Transformation","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Extraction","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"field_extractor","title":"Type","description":"Type of the node. Must be 'field_extractor'","default":"field_extractor"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Variable Name","description":"Name of the runtime variable that holds the input JSON to be filtered"},"keys_to_retain":{"items":{"type":"string"},"type":"array","title":"Keys to Retain","description":"Static list of key paths to retain in the output. Supports dot notation for nested keys (e.g. 'address.city'), bracket notation for arrays (e.g. 'orders[].id' for all elements, 'orders[1].id' for a specific index). Ignored if keys_to_retain_runtime_variable_name is set."},"keys_to_retain_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keys to Retain Variable Name","description":"Name of the runtime variable holding the list of key paths to retain. When set, this takes priority over the static keys_to_retain list."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Name of the runtime variable where the extracted result will be stored","default":"field_extractor_result"}},"type":"object","title":"FieldExtractorNodeConfig"},"FieldExtractorNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"field_extractor","title":"Type","description":"Discriminator field which must always be 'field_extractor'","default":"field_extractor"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"FieldExtractorNodeRunInput"},"FieldExtractorNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"field_extractor","title":"Type","description":"Discriminator field which must always be 'field_extractor'","default":"field_extractor"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"FieldExtractorNodeRunInput"},"FieldExtractorNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"field_extractor","title":"Type","description":"Discriminator field which must always be 'field_extractor'","default":"field_extractor"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Success","description":"Indicates whether the extraction was successful","default":false},"extracted_result":{"anyOf":[{},{"type":"null"}],"title":"Extracted Result","description":"The extracted/filtered JSON result"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the extraction failed"}},"type":"object","title":"FieldExtractorNodeRunOutput"},"FunctionMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"function","title":"Type","default":"function"},"name":{"type":"string","title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content","name"],"title":"FunctionMessage","description":"Message for passing the result of executing a tool back to a model.\n\n`FunctionMessage` are an older version of the `ToolMessage` schema, and\ndo not contain the `tool_call_id` field.\n\nThe `tool_call_id` field is used to associate the tool call request with the\ntool call response. Useful in situations where a chat model is able\nto request multiple tool calls in parallel."},"FunctionMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"FunctionMessageChunk","title":"Type","default":"FunctionMessageChunk"},"name":{"type":"string","title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content","name"],"title":"FunctionMessageChunk","description":"Function Message chunk."},"GOOGLEModel":{"type":"string","enum":["gemini-flash-latest","gemini-flash-lite-latest","gemini-3.6-flash","gemini-3.1-pro-preview","gemini-3.5-flash","gemini-3.5-flash-lite","gemini-3.1-flash-lite","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite"],"title":"GOOGLEModel"},"Gender":{"type":"string","enum":["","Female","Male","Non-binary gender identity","Additional gender category or other","Choose not to disclose","Genderqueer (neither exclusively male nor female)","Unknown"],"title":"Gender"},"GlobalNodeConfig":{"properties":{"is_global":{"type":"boolean","title":"Is Global Node","description":"Whether this node is a global node available as a conditional pathway to all nodes in the workflow","default":false},"condition":{"anyOf":[{"$ref":"#/components/schemas/ConditionConfig"},{"type":"null"}],"title":"Global Node Condition","description":"Condition that determines whether this global node is navigated to"},"global_condition_edge_evaluation_method":{"anyOf":[{"$ref":"#/components/schemas/agentic_workflow_framework__configs__nodes__node__GlobalConditionEdgeEvaluationMethod"},{"type":"null"}],"title":"Global Condition Edge Evaluation Method","description":"Method used to evaluate global condition edges going into this node.","default":"workflow_default"},"reverse_conditional_edge":{"anyOf":[{"$ref":"#/components/schemas/ConditionConfig"},{"type":"null"}],"title":"Reverse Conditional Edge","description":"Condition and message configuration for navigating back to the node that preceded this global node. When the condition is satisfied while this global node is executing, the workflow returns control to whichever node originally transitioned into this global node. Supports freeform condition, args schema, static messages, and dynamic messages — identical to a regular conditional edge."}},"type":"object","title":"GlobalNodeConfig"},"GlobalVariableItem":{"properties":{"_id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value","default":""},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"is_secret":{"type":"boolean","title":"Is Secret","default":false},"is_system":{"type":"boolean","title":"Is System","description":"Provided automatically for every team; cannot be edited or deleted.","default":false},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["_id","name"],"title":"GlobalVariableItem","description":"One row of the list response.\n\nA DTO rather than the Beanie document, because the list mixes stored rows with system-provided variables\nthat have no database row. ``id`` is serialized as ``_id`` to match what the dashboard grid keys on\n(``getRowId={(row) => row._id}``)."},"GlobalVariableResponse":{"properties":{"variable":{"$ref":"#/components/schemas/GlobalVariablesModel"}},"type":"object","required":["variable"],"title":"GlobalVariableResponse"},"GlobalVariablesListResponse":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/GlobalVariableItem"},"type":"array","title":"Variables"},"total":{"type":"integer","title":"Total"},"categories":{"items":{},"type":"array","title":"Categories"}},"type":"object","required":["variables","total"],"title":"GlobalVariablesListResponse"},"GlobalVariablesModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name","description":"Unique variable name per team (valid identifier: alphanumeric + underscore)"},"value":{"type":"string","title":"Value","description":"Variable value — supports large text (e.g. long system prompts, JSON configs)","default":""},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description","description":"Human-readable description of the variable's purpose"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category","description":"Grouping label (e.g. 'Prompts', 'Config', 'Credentials')"},"is_secret":{"type":"boolean","title":"Is Secret","description":"If True, the value is masked in list responses","default":false}},"type":"object","required":["name"],"title":"GlobalVariablesModel","description":"Stores organization/team-level global variables that are automatically\ninjected into every workflow execution for that team."},"GoogleDocsCreateDocumentConfig":{"properties":{"type":{"type":"string","const":"google_docs_create_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_create_document'","default":"google_docs_create_document","input_field_not_visible":true},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Title","description":"Title of the Google Docs document to be created."},"drive_name_or_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Name or ID","description":"Name or ID of the Google Drive where the document will be created. If not provided, the document will be created in the user's default drive."},"folder_name_or_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Name or ID","description":"Name or ID of the folder where the document will be created. If not provided, the document will be created in the root of the drive."}},"type":"object","title":"Google Docs Create Document Node","description":"Configuration for creating a Google Docs document."},"GoogleDocsCreateDocumentNodeRunInput":{"properties":{"type":{"type":"string","const":"google_docs_create_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_create_document'","default":"google_docs_create_document","input_field_not_visible":true}},"type":"object","title":"GoogleDocsCreateDocumentNodeRunInput","description":"Run input for creating a Google Docs document."},"GoogleDocsCreateDocumentNodeRunOutput":{"properties":{"type":{"type":"string","const":"google_docs_create_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_create_document'","default":"google_docs_create_document"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document ID","description":"ID of the created Google Docs document."},"document_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document URL","description":"URL of the created Google Docs document."}},"type":"object","title":"GoogleDocsCreateDocumentNodeRunOutput","description":"Run output for creating a Google Docs document."},"GoogleDocsGetDocumentConfig":{"properties":{"type":{"type":"string","const":"google_docs_get_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_get_document'","default":"google_docs_get_document","input_field_not_visible":true},"document_id_or_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document ID or URL","description":"ID or URL of the Google Docs document to be retrieved."},"return_full_model":{"type":"boolean","title":"Return Full Model","description":"Whether to return the full document model or just the plain text content.","default":false}},"type":"object","title":"Google Docs Get Document Node","description":"Configuration for getting a Google Docs document."},"GoogleDocsGetDocumentNodeRunInput":{"properties":{"type":{"type":"string","const":"google_docs_get_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_get_document'","default":"google_docs_get_document","input_field_not_visible":true}},"type":"object","title":"GoogleDocsGetDocumentNodeRunInput","description":"Run input for getting a Google Docs document."},"GoogleDocsGetDocumentNodeRunOutput":{"properties":{"type":{"type":"string","const":"google_docs_get_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_get_document'","default":"google_docs_get_document"},"document_content":{"anyOf":[{},{"type":"null"}],"title":"Document Content","description":"Content of the retrieved Google Docs document."}},"type":"object","title":"GoogleDocsGetDocumentNodeRunOutput","description":"Run output for getting a Google Docs document."},"GoogleDocsNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Google Workspace","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Google Docs","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"google_docs","title":"Node Type","description":"Type of the node. Must be 'google_docs'","default":"google_docs","input_field_not_visible":true},"credentials":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleWorkspaceOAuth2Credentials"},{"$ref":"#/components/schemas/GoogleWorkspaceServiceAccountCredentials"},{"$ref":"#/components/schemas/GoogleWorkspaceAPIKeyCredentials"}],"discriminator":{"propertyName":"type","mapping":{"google_workspace_api_key":"#/components/schemas/GoogleWorkspaceAPIKeyCredentials","google_workspace_oauth2":"#/components/schemas/GoogleWorkspaceOAuth2Credentials","google_workspace_service_account":"#/components/schemas/GoogleWorkspaceServiceAccountCredentials"}}},{"type":"null"}],"title":"Google Workspace Credentials","description":"Credentials for Google Workspace. If not provided, the default credentials will be used."},"operate_document":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsCreateDocumentConfig"},{"$ref":"#/components/schemas/GoogleDocsGetDocumentConfig"},{"$ref":"#/components/schemas/GoogleDocsUpdateDocumentConfig"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_create_document":"#/components/schemas/GoogleDocsCreateDocumentConfig","google_docs_get_document":"#/components/schemas/GoogleDocsGetDocumentConfig","google_docs_update_document":"#/components/schemas/GoogleDocsUpdateDocumentConfig"}}},{"type":"null"}],"title":"Document Operation","description":"Configuration for operating on a Google Docs document (create, get, or update)."}},"type":"object","title":"Google Docs Node"},"GoogleDocsNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Google Workspace","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Google Docs","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"google_docs","title":"Node Type","description":"Type of the node. Must be 'google_docs'","default":"google_docs","input_field_not_visible":true},"credentials":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleWorkspaceOAuth2Credentials"},{"$ref":"#/components/schemas/GoogleWorkspaceServiceAccountCredentials"},{"$ref":"#/components/schemas/GoogleWorkspaceAPIKeyCredentials"}],"discriminator":{"propertyName":"type","mapping":{"google_workspace_api_key":"#/components/schemas/GoogleWorkspaceAPIKeyCredentials","google_workspace_oauth2":"#/components/schemas/GoogleWorkspaceOAuth2Credentials","google_workspace_service_account":"#/components/schemas/GoogleWorkspaceServiceAccountCredentials"}}},{"type":"null"}],"title":"Google Workspace Credentials","description":"Credentials for Google Workspace. If not provided, the default credentials will be used."},"operate_document":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsCreateDocumentConfig"},{"$ref":"#/components/schemas/GoogleDocsGetDocumentConfig"},{"$ref":"#/components/schemas/GoogleDocsUpdateDocumentConfig"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_create_document":"#/components/schemas/GoogleDocsCreateDocumentConfig","google_docs_get_document":"#/components/schemas/GoogleDocsGetDocumentConfig","google_docs_update_document":"#/components/schemas/GoogleDocsUpdateDocumentConfig"}}},{"type":"null"}],"title":"Document Operation","description":"Configuration for operating on a Google Docs document (create, get, or update)."}},"type":"object","title":"Google Docs Node"},"GoogleDocsNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"google_docs","title":"Node Type","description":"Type of the node. Must be 'google_docs'","default":"google_docs","input_field_not_visible":true},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"operate_document":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsCreateDocumentNodeRunInput"},{"$ref":"#/components/schemas/GoogleDocsGetDocumentNodeRunInput"},{"$ref":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunInput"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_create_document":"#/components/schemas/GoogleDocsCreateDocumentNodeRunInput","google_docs_get_document":"#/components/schemas/GoogleDocsGetDocumentNodeRunInput","google_docs_update_document":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunInput"}}},{"type":"null"}],"title":"Document Operation","description":"Configuration for operating on a Google Docs document (create, get, or update)."}},"type":"object","title":"Google Docs Node","description":"Run input for Google Docs node."},"GoogleDocsNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"google_docs","title":"Node Type","description":"Type of the node. Must be 'google_docs'","default":"google_docs","input_field_not_visible":true},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"operate_document":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsCreateDocumentNodeRunInput"},{"$ref":"#/components/schemas/GoogleDocsGetDocumentNodeRunInput"},{"$ref":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunInput"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_create_document":"#/components/schemas/GoogleDocsCreateDocumentNodeRunInput","google_docs_get_document":"#/components/schemas/GoogleDocsGetDocumentNodeRunInput","google_docs_update_document":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunInput"}}},{"type":"null"}],"title":"Document Operation","description":"Configuration for operating on a Google Docs document (create, get, or update)."}},"type":"object","title":"Google Docs Node","description":"Run input for Google Docs node."},"GoogleDocsNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"google_docs","title":"Node Type","description":"Type of the node. Must be 'google_docs'","default":"google_docs","input_field_not_visible":true},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"operate_document":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsCreateDocumentNodeRunOutput"},{"$ref":"#/components/schemas/GoogleDocsGetDocumentNodeRunOutput"},{"$ref":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunOutput"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_create_document":"#/components/schemas/GoogleDocsCreateDocumentNodeRunOutput","google_docs_get_document":"#/components/schemas/GoogleDocsGetDocumentNodeRunOutput","google_docs_update_document":"#/components/schemas/GoogleDocsUpdateDocumentNodeRunOutput"}}},{"type":"null"}],"title":"Document Operation Output","description":"Output from operating on a Google Docs document (create, get, or update)."}},"type":"object","title":"GoogleDocsNodeRunOutput","description":"Run output for Google Docs node."},"GoogleDocsUpdateDocumentConfig":{"properties":{"type":{"type":"string","const":"google_docs_update_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_update_document'","default":"google_docs_update_document","input_field_not_visible":true},"document_id_or_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document ID or URL","description":"ID or URL of the Google Docs document to be updated."},"updates":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/GoogleDocsUpdateWithTextConfig"}],"discriminator":{"propertyName":"type","mapping":{"google_docs_update_with_text":"#/components/schemas/GoogleDocsUpdateWithTextConfig"}}},{"type":"null"}],"title":"Document Updates","description":"Updates to be applied to the Google Docs document. If not provided, no updates will be made."}},"type":"object","title":"Google Docs Update Document Node","description":"Configuration for updating a Google Docs document."},"GoogleDocsUpdateDocumentNodeRunInput":{"properties":{"type":{"type":"string","const":"google_docs_update_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_update_document'","default":"google_docs_update_document","input_field_not_visible":true}},"type":"object","title":"GoogleDocsUpdateDocumentNodeRunInput","description":"Run input for updating a Google Docs document."},"GoogleDocsUpdateDocumentNodeRunOutput":{"properties":{"type":{"type":"string","const":"google_docs_update_document","title":"Node Type","description":"Type of the node. Must be 'google_docs_update_document'","default":"google_docs_update_document"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document ID","description":"ID of the updated Google Docs document."},"document_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document URL","description":"URL of the updated Google Docs document."}},"type":"object","title":"GoogleDocsUpdateDocumentNodeRunOutput","description":"Run output for updating a Google Docs document."},"GoogleDocsUpdateWithTextConfig":{"properties":{"type":{"type":"string","const":"google_docs_update_with_text","title":"Node Type","description":"Type of the node. Must be 'google_docs_update_with_text'","default":"google_docs_update_with_text","input_field_not_visible":true},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Content","description":"Content to update the Google Docs document with."},"insert_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Insert Index","description":"Index at which to insert the content in the Google Docs document. If not provided, the content will be appended to the end of the document."}},"type":"object","title":"Google Docs Update With Text Node","description":"Configuration for updating a Google Docs document with text."},"GoogleLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"google","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/GOOGLEModel"},{"type":"null"}],"title":"Google Model","description":"Name of the Google model to use","default":"gemini-3-flash-preview"},"type":{"type":"string","const":"google_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"google_llm","field_visibility_level":"developer","input_field_not_visible":true},"thinking_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Thinking Budget (tokens)","description":"Indicates the thinking budget in tokens. By default, it is set to 0.","default":0}},"type":"object","title":"Google"},"GoogleLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"google","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/GOOGLEModel"},{"type":"null"}],"title":"Google Model","description":"Name of the Google model to use","default":"gemini-3-flash-preview"},"type":{"type":"string","const":"google_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"google_llm","field_visibility_level":"developer","input_field_not_visible":true},"thinking_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Thinking Budget (tokens)","description":"Indicates the thinking budget in tokens. By default, it is set to 0.","default":0}},"type":"object","title":"Google"},"GoogleWorkspaceAPIKeyCredentials":{"properties":{"type":{"type":"string","const":"google_workspace_api_key","title":"Credentials Type","description":"Type of the credentials. Must be 'google_workspace_api_key'","default":"google_workspace_api_key","input_field_not_visible":true},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API Key for Google Workspace, used to access public APIs. If not provided, the default value at os.environ['GOOGLE_API_KEY'] will be used."}},"type":"object","title":"API Key Credentials","description":"Configuration for Google Workspace API Key credentials."},"GoogleWorkspaceOAuth2Credentials":{"properties":{"type":{"type":"string","const":"google_workspace_oauth2","title":"Credentials Type","description":"Type of the credentials. Must be 'google_workspace_oauth2'","default":"google_workspace_oauth2","input_field_not_visible":true},"oauth_redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"OAuth Redirect URI","description":"OAuth redirect URI for Google Workspace. If not provided, the default value at os.environ['GOOGLE_OAUTH_REDIRECT_URI'] will be used."},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client ID","description":"Client ID for Google Workspace. If not provided, the default value at os.environ['GOOGLE_CLIENT_ID'] will be used."},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret","description":"Client Secret for Google Workspace. If not provided, the default value at os.environ['GOOGLE_CLIENT_SECRET'] will be used."}},"type":"object","title":"OAuth2 Credentials","description":"Configuration for Google Workspace OAuth2 credentials."},"GoogleWorkspaceServiceAccountCredentials":{"properties":{"type":{"type":"string","const":"google_workspace_service_account","title":"Credentials Type","description":"Type of the credentials. Must be 'google_workspace_service_account'","default":"google_workspace_service_account","input_field_not_visible":true},"service_account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Account Email","description":"Service account email for Google Workspace. If not provided, the default value at os.environ['GOOGLE_SERVICE_ACCOUNT_EMAIL'] will be used."},"private_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Private Key ID","description":"Private key ID for Google Workspace. If not provided, the default value at os.environ['GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY_ID'] will be used."},"private_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Private Key","description":"Private key for Google Workspace. If not provided, the default value at os.environ['GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY'] will be used."},"impersonation_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impersonation Email","description":"Email to impersonate for Google Workspace. If not provided, the default value at os.environ['GOOGLE_SERVICE_ACCOUNT_IMPERSONATION_EMAIL'] will be used."}},"type":"object","title":"Service Account Credentials","description":"Configuration for Google Workspace service account credentials."},"GuardrailStrikesConfig":{"properties":{"max_guardrail_nodes_before_escalation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Guardrail Nodes Before Escalation","description":"Maximum number of times guardrail nodes may be entered (from a non-guardrail node) before the workflow escalates. None disables the feature."},"escalation_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Escalation Node Logical ID","description":"Logical ID of the node to transition to when the escalation threshold is reached. If None (or it does not resolve to a node), the workflow finishes instead."},"escalation_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Escalation Message","description":"Message sent to the user just before the workflow finishes when the escalation threshold is reached and no escalation node is configured. Supports dynamic/runtime variable templating. If None, the workflow finishes silently.","input_field_type":"textarea"}},"type":"object","title":"GuardrailStrikesConfig"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HistoryMode":{"type":"string","enum":["FULL","USER_AND_ASSISTANT_ONLY","NONE"],"title":"HistoryMode","description":"How much of the source conversation the new run should see.\n\n``FULL``\n    Everything, including system messages. Right for a same-config replay.\n``USER_AND_ASSISTANT_ONLY``\n    Drop system and tool messages. The default when the config differs: the target's own nodes\n    inject their own system prompts, and a stale one from the old config actively misleads them.\n``NONE``\n    Variables only, no transcript — \"same facts, fresh conversation\"."},"HttpMethodEnum":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],"title":"HttpMethodEnum"},"HttpRequestNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"REST API","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"HTTP Request","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"http_request","title":"Node Type","description":"Type of the node. Must be 'http_request'","default":"http_request","input_field_not_visible":true},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"HTTP Request URL","description":"The URL to send the HTTP request to","input_field_ui_order":201},"method":{"anyOf":[{"$ref":"#/components/schemas/HttpMethodEnum"},{"type":"null"}],"title":"HTTP Method","description":"HTTP method to use (GET, POST, PUT, PATCH, DELETE, etc.)","default":"GET"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers","description":"Optional HTTP headers as a dictionary"},"query_parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Parameters","description":"Query parameters as a dictionary","input_field_type":"textarea"},"body_parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Parameters","description":"Body parameters as a dictionary (for POST, PUT, PATCH)","input_field_type":"textarea"},"body_content_type":{"anyOf":[{"$ref":"#/components/schemas/BodyContentTypeEnum"},{"type":"null"}],"title":"Body Content-Type","description":"Content-Type for the request body (e.g., application/json, form-data)","default":"application/json"},"timeout":{"anyOf":[{"type":"integer","maximum":300,"minimum":0},{"type":"null"}],"title":"Timeout (seconds)","description":"Timeout for the HTTP request in seconds","default":30},"response_format":{"anyOf":[{"$ref":"#/components/schemas/ResponseFormatEnum"},{"type":"null"}],"title":"Response Format","description":"Expected response format (json, text, binary)","default":"json"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result","default":"http_request_result"}},"type":"object","title":"HTTP Request Node"},"HttpRequestNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"REST API","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"HTTP Request","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"http_request","title":"Node Type","description":"Type of the node. Must be 'http_request'","default":"http_request","input_field_not_visible":true},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"HTTP Request URL","description":"The URL to send the HTTP request to","input_field_ui_order":201},"method":{"anyOf":[{"$ref":"#/components/schemas/HttpMethodEnum"},{"type":"null"}],"title":"HTTP Method","description":"HTTP method to use (GET, POST, PUT, PATCH, DELETE, etc.)","default":"GET"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers","description":"Optional HTTP headers as a dictionary"},"query_parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Parameters","description":"Query parameters as a dictionary","input_field_type":"textarea"},"body_parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Parameters","description":"Body parameters as a dictionary (for POST, PUT, PATCH)","input_field_type":"textarea"},"body_content_type":{"anyOf":[{"$ref":"#/components/schemas/BodyContentTypeEnum"},{"type":"null"}],"title":"Body Content-Type","description":"Content-Type for the request body (e.g., application/json, form-data)","default":"application/json"},"timeout":{"anyOf":[{"type":"integer","maximum":300,"minimum":0},{"type":"null"}],"title":"Timeout (seconds)","description":"Timeout for the HTTP request in seconds","default":30},"response_format":{"anyOf":[{"$ref":"#/components/schemas/ResponseFormatEnum"},{"type":"null"}],"title":"Response Format","description":"Expected response format (json, text, binary)","default":"json"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result","default":"http_request_result"}},"type":"object","title":"HTTP Request Node"},"HttpRequestNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"http_request","title":"Type","description":"Discriminator field which must always be 'http_request'","default":"http_request"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override URL","description":"Override the URL for the HTTP request"}},"type":"object","title":"HttpRequestNodeRunInput"},"HttpRequestNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"http_request","title":"Type","description":"Discriminator field which must always be 'http_request'","default":"http_request"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override URL","description":"Override the URL for the HTTP request"}},"type":"object","title":"HttpRequestNodeRunInput"},"HttpRequestNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"http_request","title":"Type","description":"Discriminator field which must always be 'http_request'","default":"http_request"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"curl_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Curl Command","description":"The curl command that was executed"},"success":{"type":"boolean","title":"HTTP Request Successful","description":"Indicates whether the HTTP request was successful","default":false},"http_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"HTTP Status Code","description":"HTTP status code returned by the request"},"http_response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"HTTP Response","description":"HTTP response data"}},"type":"object","title":"HttpRequestNodeRunOutput"},"HumanMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"human","title":"Type","default":"human"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content"],"title":"HumanMessage","description":"Message from the user.\n\nA `HumanMessage` is a message that is passed in from a user to the model.\n\nExample:\n    ```python\n    from langchain_core.messages import HumanMessage, SystemMessage\n\n    messages = [\n        SystemMessage(content=\"You are a helpful assistant! Your name is Bob.\"),\n        HumanMessage(content=\"What is your name?\"),\n    ]\n\n    # Instantiate a chat model and invoke it with the messages\n    model = ...\n    print(model.invoke(messages))\n    ```"},"HumanMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"HumanMessageChunk","title":"Type","default":"HumanMessageChunk"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content"],"title":"HumanMessageChunk","description":"Human Message chunk."},"IResponseModel":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A message providing additional context about the response."}},"type":"object","title":"IResponseModel"},"InbuiltFunctionToolConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool ID","description":"Unique identifier for the tool","input_field_disallowed":true},"tool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Tool ID","description":"Reference to the tool already created in the Workflow System. If not provided, the tool config is assumed to be provided inline here.","input_field_type":"inbuilt_tool_selection"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Name for the tool"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Description","description":"Human friendly description for the tool (not used by AI)"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Category","description":"Category for the tool. E.g math, ehr, etc"},"side_effect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Side Effect","description":"Side-effect classification used by the test-tool feature to decide whether the tool can be safely executed directly, or must be dry-run / confirmation-gated first. One of 'none', 'reads', 'writes', 'sends', 'unknown'. When not set, it is inferred from the tool type.","input_field_not_visible":true},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Signature","description":"Docstring or signature for the tool used by AI. If provided and there is a default signature already, it will override the default signature.","input_field_type":"textarea"},"args_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments Schema","description":"Schema for the arguments that the tool accepts. This should be a JSON schema dictionary. Information provided here will override any default arguments schema."},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Static messages that an LLM node should emit while this tool is being invoked"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result from this tool call","default":"tool_result"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content the LLM returns in the same response as a call to this tool is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. When a response contains multiple tool calls, the text is ignored only if every tool call targets a tool for which this flag is set.","default":false},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Timeout (seconds)","description":"Wall-clock ceiling in seconds for one invocation of this tool. Leave empty to use the platform default. Raise it for a tool that is legitimately slow (a large EHR sync, say) rather than letting it be cut off. Note: an inline-Python body that is CPU-bound with no await points cannot be interrupted - the timeout frees the conversation to continue, but the work carries on in the background."},"variable_arguments":{"items":{"$ref":"#/components/schemas/ToolVariableArgument"},"type":"array","title":"Variable Arguments","description":"Arguments supplied to this tool from the workflow's runtime/dynamic variables, resolved at invocation time and passed as native Python values. Use this instead of embedding [[variables]] in an inline tool's source code: the value keeps its type, and it is passed as an argument rather than spliced into the code.","input_field_helper_text":"The workflow fills these in, not the model. An argument bound here is removed from the schema the model sees, so it cannot invent a value for it.","input_field_type":"variable_arguments_editor"},"result_variable_mappings":{"items":{"$ref":"#/components/schemas/ToolResultVariableMapping"},"type":"array","title":"Result Variable Mappings","description":"Assigns parts of this tool's return value to named runtime variables, so a tool that returns a dict can populate several variables at once.","input_field_helper_text":"Leave the result path empty to map the whole return value. A dotted path (data.score) reaches into a dict result.","input_field_type":"result_variable_mappings_editor"},"expand_result_into_runtime_variables":{"type":"boolean","title":"Expand Result Into Runtime Variables","description":"When true and the tool returns a dict, every top-level key is also written as a runtime variable of the same name. A convenience alternative to listing every mapping explicitly; explicit result_variable_mappings win on a name collision.","default":false},"type":{"type":"string","const":"inbuilt_function","title":"Tool Type","description":"Type of the tool. Must be 'inbuilt_function'","default":"inbuilt_function","input_field_not_visible":true},"configurable_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configurable Tool Key","description":"Stable key identifying which configurable inbuilt tool this is (e.g. 'call_forward'). None for plain static inbuilt references.","input_field_not_visible":true},"extra_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Configuration","description":"Tool-specific user configuration values. Schema is defined per configurable key.","input_field_not_visible":true}},"type":"object","title":"Inbuilt Function Tool","description":"Configuration for an inbuilt function tool.\nThis tool type refers to functions that are already registered in the tools registry.\nThe \"tool_id\" field must match the ID (decorated with \"@tool_id\") of a registered tool."},"IndividualSimulationRunListResponse":{"properties":{"individual_runs":{"items":{"$ref":"#/components/schemas/IndividualSimulationRunModel"},"type":"array","title":"Individual Runs","description":"List of individual simulation runs"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of individual runs available"}},"type":"object","title":"IndividualSimulationRunListResponse","description":"Response model for a list of individual simulation runs.\nContains a list of IndividualSimulationRunModel objects."},"IndividualSimulationRunModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"simulation_group_id":{"$ref":"#/components/schemas/PydanticObjectId","description":"Reference to the SimulationGroupModel"},"simulation_config_id":{"$ref":"#/components/schemas/PydanticObjectId","description":"Reference to the SimulationConfigModel"},"selected_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Reference to the selected workflow run"},"counter_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Reference to the counter workflow run"},"status":{"$ref":"#/components/schemas/SimulationStatus","description":"Status of this individual run","default":"pending"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result","description":"Result or summary of the run"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the run failed"}},"type":"object","required":["simulation_group_id","simulation_config_id"],"title":"IndividualSimulationRunModel","description":"Stores the details of an individual simulation run within a group."},"InlinePythonToolConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool ID","description":"Unique identifier for the tool","input_field_disallowed":true},"tool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Tool ID","description":"Reference to the tool already created in the Workflow System. If not provided, the tool config is assumed to be provided inline here.","input_field_type":"inline_python_tool_selection"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Name for the tool"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Description","description":"Human friendly description for the tool (not used by AI)"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Category","description":"Category for the tool. E.g math, ehr, etc"},"side_effect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Side Effect","description":"Side-effect classification used by the test-tool feature to decide whether the tool can be safely executed directly, or must be dry-run / confirmation-gated first. One of 'none', 'reads', 'writes', 'sends', 'unknown'. When not set, it is inferred from the tool type.","input_field_not_visible":true},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Signature","description":"Docstring or signature for the tool used by AI. If provided and there is a default signature already, it will override the default signature.","input_field_type":"textarea"},"args_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments Schema","description":"Schema for the arguments that the tool accepts. This should be a JSON schema dictionary. Information provided here will override any default arguments schema."},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Static messages that an LLM node should emit while this tool is being invoked"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result from this tool call","default":"tool_result"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content the LLM returns in the same response as a call to this tool is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. When a response contains multiple tool calls, the text is ignored only if every tool call targets a tool for which this flag is set.","default":false},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Timeout (seconds)","description":"Wall-clock ceiling in seconds for one invocation of this tool. Leave empty to use the platform default. Raise it for a tool that is legitimately slow (a large EHR sync, say) rather than letting it be cut off. Note: an inline-Python body that is CPU-bound with no await points cannot be interrupted - the timeout frees the conversation to continue, but the work carries on in the background."},"variable_arguments":{"items":{"$ref":"#/components/schemas/ToolVariableArgument"},"type":"array","title":"Variable Arguments","description":"Arguments supplied to this tool from the workflow's runtime/dynamic variables, resolved at invocation time and passed as native Python values. Use this instead of embedding [[variables]] in an inline tool's source code: the value keeps its type, and it is passed as an argument rather than spliced into the code.","input_field_helper_text":"The workflow fills these in, not the model. An argument bound here is removed from the schema the model sees, so it cannot invent a value for it.","input_field_type":"variable_arguments_editor"},"result_variable_mappings":{"items":{"$ref":"#/components/schemas/ToolResultVariableMapping"},"type":"array","title":"Result Variable Mappings","description":"Assigns parts of this tool's return value to named runtime variables, so a tool that returns a dict can populate several variables at once.","input_field_helper_text":"Leave the result path empty to map the whole return value. A dotted path (data.score) reaches into a dict result.","input_field_type":"result_variable_mappings_editor"},"expand_result_into_runtime_variables":{"type":"boolean","title":"Expand Result Into Runtime Variables","description":"When true and the tool returns a dict, every top-level key is also written as a runtime variable of the same name. A convenience alternative to listing every mapping explicitly; explicit result_variable_mappings win on a name collision.","default":false},"type":{"type":"string","const":"inline_python","title":"Tool Type","description":"Type of the tool. Must be 'inline_python'","default":"inline_python","input_field_not_visible":true},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Code","description":"Python code to be executed by the tool. It should define a function with proper signature and descriptions for its parameters.","input_field_type":"textarea"},"allow_code_variable_substitution":{"type":"boolean","title":"Substitute Variables Into Code","description":"Whether {{dynamic}} and [[runtime]] placeholders inside 'code' are replaced with their values before the code is compiled. Turning this off leaves the source exactly as written, so any placeholder in it stays literal text. Prefer variable_arguments, which passes a value in as a typed argument instead of pasting it into the source.","default":true}},"type":"object","title":"Inline Python Tool","description":"Configuration for an inline Python tool.\nThe \"code\" field should contain a self-contained executable Python function.\nExample value of \"code\" string could be:\n        def add(\n            a: float,\n            b: float,\n        ) -> float:\n            return float(a + b)"},"InputTokenDetails":{"properties":{"audio":{"type":"integer","title":"Audio"},"cache_creation":{"type":"integer","title":"Cache Creation"},"cache_read":{"type":"integer","title":"Cache Read"}},"additionalProperties":true,"type":"object","title":"InputTokenDetails","description":"Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n    ```python\n    {\n        \"audio\": 10,\n        \"cache_creation\": 200,\n        \"cache_read\": 100,\n    }\n    ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\""},"IntegrationAuthConfig":{"properties":{"integration_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration ID","description":"ID of an integration to use for bearer-token authentication. When set, the runtime fetches a cached OAuth token from this integration and injects it as the Authorization header. Ignored when api_key or an Authorization default_header is already provided.","input_field_type":"integrations_selection"}},"type":"object","title":"Integration Auth","description":"Configuration for integration-backed bearer-token authentication.\n\nProvider-agnostic: any integration that exposes an OAuth2 client-credentials\ntoken endpoint (Okta, Athena, ECW, ...) can be referenced here. The runtime\nonly needs the integration ID – the integrations service resolves the\nprovider and returns the bearer token."},"InvalidToolCall":{"properties":{"type":{"type":"string","const":"invalid_tool_call","title":"Type"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"args":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Args"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"index":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Index"},"extras":{"additionalProperties":true,"type":"object","title":"Extras"}},"additionalProperties":true,"type":"object","required":["type","id","name","args","error"],"title":"InvalidToolCall","description":"Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)"},"KnowledgeBaseToolConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool ID","description":"Unique identifier for the tool","input_field_disallowed":true},"tool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Tool ID","description":"Reference to the tool already created in the Workflow System. If not provided, the tool config is assumed to be provided inline here.","input_field_type":"kb_tool_selection"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Name for the tool"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Description","description":"Human friendly description for the tool (not used by AI)"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Category","description":"Category for the tool. E.g math, ehr, etc","default":"Knowledge Base"},"side_effect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Side Effect","description":"Side-effect classification used by the test-tool feature to decide whether the tool can be safely executed directly, or must be dry-run / confirmation-gated first. One of 'none', 'reads', 'writes', 'sends', 'unknown'. When not set, it is inferred from the tool type.","input_field_not_visible":true},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Signature","description":"Docstring or signature for the tool used by AI. If provided and there is a default signature already, it will override the default signature.","default":"Searches the knowledge bases given a natural language query and retrieves relevant chunks of information matching the query.","input_field_type":"textarea"},"args_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments Schema","description":"Schema for the arguments that the tool accepts. This should be a JSON schema dictionary. Information provided here will override any default arguments schema.","field_visibility_level":"super_admin","input_field_not_visible":true},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Static messages that an LLM node should emit while this tool is being invoked"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result from this tool call","default":"kb_tool_result"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content the LLM returns in the same response as a call to this tool is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. When a response contains multiple tool calls, the text is ignored only if every tool call targets a tool for which this flag is set.","default":false},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Timeout (seconds)","description":"Wall-clock ceiling in seconds for one invocation of this tool. Leave empty to use the platform default. Raise it for a tool that is legitimately slow (a large EHR sync, say) rather than letting it be cut off. Note: an inline-Python body that is CPU-bound with no await points cannot be interrupted - the timeout frees the conversation to continue, but the work carries on in the background."},"variable_arguments":{"items":{"$ref":"#/components/schemas/ToolVariableArgument"},"type":"array","title":"Variable Arguments","description":"Arguments supplied to this tool from the workflow's runtime/dynamic variables, resolved at invocation time and passed as native Python values. Use this instead of embedding [[variables]] in an inline tool's source code: the value keeps its type, and it is passed as an argument rather than spliced into the code.","input_field_helper_text":"The workflow fills these in, not the model. An argument bound here is removed from the schema the model sees, so it cannot invent a value for it.","input_field_type":"variable_arguments_editor"},"result_variable_mappings":{"items":{"$ref":"#/components/schemas/ToolResultVariableMapping"},"type":"array","title":"Result Variable Mappings","description":"Assigns parts of this tool's return value to named runtime variables, so a tool that returns a dict can populate several variables at once.","input_field_helper_text":"Leave the result path empty to map the whole return value. A dotted path (data.score) reaches into a dict result.","input_field_type":"result_variable_mappings_editor"},"expand_result_into_runtime_variables":{"type":"boolean","title":"Expand Result Into Runtime Variables","description":"When true and the tool returns a dict, every top-level key is also written as a runtime variable of the same name. A convenience alternative to listing every mapping explicitly; explicit result_variable_mappings win on a name collision.","default":false},"type":{"type":"string","const":"knowledge_base","title":"Tool Type","description":"Type of the tool. Must be 'knowledge_base'","default":"knowledge_base","input_field_not_visible":true},"target_knowledge_base_ids":{"items":{"type":"string"},"type":"array","title":"Target Knowledge Base IDs","description":"The IDs of the knowledge bases to query","input_field_type":"knowledge_base_selection"}},"type":"object","title":"Knowledge Base Tool","description":"Configuration for a knowledge base tool.\nThis tool type represents a knowledge base endpoint that the LLM can call."},"LLMConfigCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"title":"Config","discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},"is_default":{"type":"boolean","title":"Is Default","default":false},"override_default":{"type":"boolean","title":"Override Default","default":false}},"type":"object","required":["name","config"],"title":"LLMConfigCreateRequest"},"LLMConfigListResponse":{"properties":{"llm_configs":{"items":{"$ref":"#/components/schemas/LLMConfigModel"},"type":"array","title":"Llm Configs"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of LLM configs available without pagination."}},"type":"object","required":["llm_configs"],"title":"LLMConfigListResponse"},"LLMConfigModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"llm_config_id":{"type":"string","title":"Llm Config Id"},"name":{"type":"string","title":"Name","description":"Display name of the configuration"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional textual description"},"config":{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"title":"Config","description":"The actual configuration details","discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},"is_default":{"type":"boolean","title":"Is Default","description":"Indicates if this is the global default LLM configuration for the team","default":false}},"type":"object","required":["name","config"],"title":"LLMConfigModel","description":"Stores a named, reusable LLM configuration that lives independently of workflows and nodes.\nA workflow or node attaches it via ``attachable_llm_config_id`` (which holds this model's\n``llm_config_id``) and the concrete ``config`` is resolved into the workflow at hydration time."},"LLMConfigResponse":{"properties":{"llm_config":{"$ref":"#/components/schemas/LLMConfigModel"}},"type":"object","required":["llm_config"],"title":"LLMConfigResponse"},"LLMConfigTestInlineRequest":{"properties":{"system_prompt":{"type":"string","minLength":1,"title":"System Prompt","description":"Required, non-empty system prompt."},"messages":{"items":{"$ref":"#/components/schemas/LLMTestMessage"},"type":"array","title":"Messages","description":"Optional ordered conversation history to send to the model."},"config":{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"title":"Config","description":"Full config to test inline, before any config record is persisted (create flow). Unlike the saved-config test, there is no stored record to recover secrets from: the provider api_key must be supplied here, or omitted to fall back to the team's stored vendor credentials.","discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}}},"type":"object","required":["system_prompt","config"],"title":"LLMConfigTestInlineRequest"},"LLMConfigTestRequest":{"properties":{"system_prompt":{"type":"string","minLength":1,"title":"System Prompt","description":"Required, non-empty system prompt."},"messages":{"items":{"$ref":"#/components/schemas/LLMTestMessage"},"type":"array","title":"Messages","description":"Optional ordered conversation history to send to the model."},"config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"Config","description":"Optional inline config override so the UI can test unsaved edits. When omitted, the persisted config is used. A redacted (api_key=None) override reuses the stored secret. Group configurations are accepted for validation but cannot be exercised by this single-LLM test endpoint."}},"type":"object","required":["system_prompt"],"title":"LLMConfigTestRequest"},"LLMConfigTestResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response","description":"Concatenated model output text on success."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Clean error message when success is False."},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prompt Tokens"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"winning_member":{"anyOf":[{"$ref":"#/components/schemas/LLMTestMemberInfo"},{"type":"null"}],"description":"Which group member produced the main `response`."},"backchannel_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backchannel Response","description":"Backchannel text emitted before the main response, if any."},"backchannel_member":{"anyOf":[{"$ref":"#/components/schemas/LLMTestMemberInfo"},{"type":"null"}],"description":"Producer of the backchannel response (null for a static backchannel)."},"backchannel_prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backchannel Prompt Tokens"},"backchannel_completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backchannel Completion Tokens"},"backchannel_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backchannel Total Tokens"}},"type":"object","required":["success"],"title":"LLMConfigTestResponse"},"LLMConfigUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"Config"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"override_default":{"type":"boolean","title":"Override Default","default":false}},"type":"object","title":"LLMConfigUpdateRequest"},"LLMGroupConfig-Input":{"properties":{"type":{"type":"string","const":"llm_group","title":"Type","description":"Discriminator field which must always be 'llm_group'","default":"llm_group","field_visibility_level":"super_admin","input_field_not_visible":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Group Logical ID","description":"Unique identifier for the LLM Group","input_field_disallowed":true},"llms":{"items":{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},"type":"array","title":"LLM Group","description":"List of LLM configurations, in preferred order of use."},"operation_mode":{"anyOf":[{"$ref":"#/components/schemas/OperationMode"},{"type":"null"}],"title":"Operation Mode","description":"Operation mode for the LLM group","default":"sequential_with_proactive"},"min_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Patience Time","description":"Grace period in milliseconds until which we will unconditionally wait, unless all LLMs have responded.","default":1500,"field_visibility_level":"developer"},"max_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum Patience Time","description":"Threshold milliseconds after which we will stop waiting. If no LLM has responded by this time, we will return None.","field_visibility_level":"developer"}},"type":"object","title":"Group of LLMs"},"LLMGroupConfig-Output":{"properties":{"type":{"type":"string","const":"llm_group","title":"Type","description":"Discriminator field which must always be 'llm_group'","default":"llm_group","field_visibility_level":"super_admin","input_field_not_visible":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Group Logical ID","description":"Unique identifier for the LLM Group","input_field_disallowed":true},"llms":{"items":{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},"type":"array","title":"LLM Group","description":"List of LLM configurations, in preferred order of use."},"operation_mode":{"anyOf":[{"$ref":"#/components/schemas/OperationMode"},{"type":"null"}],"title":"Operation Mode","description":"Operation mode for the LLM group","default":"sequential_with_proactive"},"min_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Patience Time","description":"Grace period in milliseconds until which we will unconditionally wait, unless all LLMs have responded.","default":1500,"field_visibility_level":"developer"},"max_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum Patience Time","description":"Threshold milliseconds after which we will stop waiting. If no LLM has responded by this time, we will return None.","field_visibility_level":"developer"}},"type":"object","title":"Group of LLMs"},"LLMGroupWithBackchannelConfig-Input":{"properties":{"type":{"type":"string","const":"llm_group_with_backchannel","title":"Type","description":"Discriminator field which must always be 'llm_group_with_backchannel'","default":"llm_group_with_backchannel","field_visibility_level":"developer","input_field_not_visible":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Group With Backchannel ID","description":"Unique identifier for the LLM Group","input_field_not_visible":true},"main_llm_config":{"anyOf":[{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"type":"null"}],"title":"Main LLM Configuration","description":"Configuration for the main LLM"},"non_backchannel_response_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Non Backchannel Response Prefix","description":"If back channel response is being sent, only the LLM output following this prefix will follow the backchannel response"},"backchannel_llm_config":{"anyOf":[{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"type":"null"}],"title":"Backchannel LLM Configuration","description":"Configuration for the back channel LLM"},"backchannel_static_responses":{"items":{"type":"string"},"type":"array","title":"Backchannel Static Responses","description":"List of static responses from which one will be selected as a backchannel response."},"backchannel_static_responses_selection_mode":{"anyOf":[{"$ref":"#/components/schemas/SelectionMode"},{"type":"null"}],"title":"Backchannel Static Responses Selection Mode","description":"Selection mode for backchannel static responses","default":"random"},"backchannel_min_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backchannel Minimum Patience Time","description":"Grace period in milliseconds until which we will unconditionally wait for the main LLM to respond, unless it has already responded.","default":2000}},"type":"object","title":"Group of regular and backchanneling LLMs"},"LLMGroupWithBackchannelConfig-Output":{"properties":{"type":{"type":"string","const":"llm_group_with_backchannel","title":"Type","description":"Discriminator field which must always be 'llm_group_with_backchannel'","default":"llm_group_with_backchannel","field_visibility_level":"developer","input_field_not_visible":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Group With Backchannel ID","description":"Unique identifier for the LLM Group","input_field_not_visible":true},"main_llm_config":{"anyOf":[{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"type":"null"}],"title":"Main LLM Configuration","description":"Configuration for the main LLM"},"non_backchannel_response_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Non Backchannel Response Prefix","description":"If back channel response is being sent, only the LLM output following this prefix will follow the backchannel response"},"backchannel_llm_config":{"anyOf":[{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"type":"null"}],"title":"Backchannel LLM Configuration","description":"Configuration for the back channel LLM"},"backchannel_static_responses":{"items":{"type":"string"},"type":"array","title":"Backchannel Static Responses","description":"List of static responses from which one will be selected as a backchannel response."},"backchannel_static_responses_selection_mode":{"anyOf":[{"$ref":"#/components/schemas/SelectionMode"},{"type":"null"}],"title":"Backchannel Static Responses Selection Mode","description":"Selection mode for backchannel static responses","default":"random"},"backchannel_min_patience_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backchannel Minimum Patience Time","description":"Grace period in milliseconds until which we will unconditionally wait for the main LLM to respond, unless it has already responded.","default":2000}},"type":"object","title":"Group of regular and backchanneling LLMs"},"LLMLatencyStats":{"properties":{"call_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count","description":"The number of LLM calls","default":0},"total_latency_milliseconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Latency Milliseconds","description":"The total latency across all calls in milliseconds","default":0},"average_latency_milliseconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Latency Milliseconds","description":"The average latency per call in milliseconds","default":0},"breakdown_by_models":{"anyOf":[{"items":{"$ref":"#/components/schemas/LLMLatencyStatsByModel"},"type":"array"},{"type":"null"}],"title":"Breakdown By Models","description":"Breakdown of latency stats by LLM model and provider"}},"type":"object","title":"LLMLatencyStats","description":"Latency statistics for a workflow run, including total calls, average latency, and breakdown by model."},"LLMLatencyStatsByModel":{"properties":{"response_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Model","description":"The LLM model used"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"The provider used for the response"},"call_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count","description":"The number of LLM calls","default":0},"total_latency_milliseconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Latency Milliseconds","description":"The total latency across all calls in milliseconds","default":0},"average_latency_milliseconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Latency Milliseconds","description":"The average latency per call in milliseconds","default":0}},"type":"object","title":"LLMLatencyStatsByModel","description":"Latency stats by LLM model and provider."},"LLMNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"llm","title":"Type","description":"Discriminator field which must always be 'llm'","default":"llm"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"messages":{"items":{"oneOf":[{"$ref":"#/components/schemas/AIMessage"},{"$ref":"#/components/schemas/HumanMessage"},{"$ref":"#/components/schemas/ChatMessage"},{"$ref":"#/components/schemas/SystemMessage"},{"$ref":"#/components/schemas/FunctionMessage"},{"$ref":"#/components/schemas/ToolMessage"},{"$ref":"#/components/schemas/AIMessageChunk"},{"$ref":"#/components/schemas/HumanMessageChunk"},{"$ref":"#/components/schemas/ChatMessageChunk"},{"$ref":"#/components/schemas/SystemMessageChunk"},{"$ref":"#/components/schemas/FunctionMessageChunk"},{"$ref":"#/components/schemas/ToolMessageChunk"}]},"type":"array","title":"Input User Messages","description":"Input user messages to be processed by the LLM node"}},"type":"object","title":"LLMNodeRunInput"},"LLMNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"llm","title":"Type","description":"Discriminator field which must always be 'llm'","default":"llm"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"messages":{"items":{"oneOf":[{"$ref":"#/components/schemas/AIMessage"},{"$ref":"#/components/schemas/HumanMessage"},{"$ref":"#/components/schemas/ChatMessage"},{"$ref":"#/components/schemas/SystemMessage"},{"$ref":"#/components/schemas/FunctionMessage"},{"$ref":"#/components/schemas/ToolMessage"},{"$ref":"#/components/schemas/AIMessageChunk"},{"$ref":"#/components/schemas/HumanMessageChunk"},{"$ref":"#/components/schemas/ChatMessageChunk"},{"$ref":"#/components/schemas/SystemMessageChunk"},{"$ref":"#/components/schemas/FunctionMessageChunk"},{"$ref":"#/components/schemas/ToolMessageChunk"}]},"type":"array","title":"Input User Messages","description":"Input user messages to be processed by the LLM node"}},"type":"object","title":"LLMNodeRunInput"},"LLMProvider":{"type":"string","enum":["default_provider","azure_openai","openai","google","anthropic","bedrock","custom"],"title":"LLMProvider"},"LLMTestMemberInfo":{"properties":{"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index","description":"Position within the group's llms list."},"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"LLMTestMemberInfo","description":"Identity of the group member that produced a given response (null fields for single configs)."},"LLMTestMessage":{"properties":{"role":{"type":"string","enum":["human","ai","system"],"title":"Role","description":"Sender role of the message.","default":"human"},"content":{"type":"string","title":"Content","description":"Text content of the message."}},"type":"object","required":["content"],"title":"LLMTestMessage"},"LLMTokenUsage":{"properties":{"total_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Input Tokens","description":"The number of input/prompt tokens used","default":0},"total_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Output Tokens","description":"The number of output/completion tokens used","default":0},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens","description":"The total number of tokens used","default":0},"call_count_with_user_keys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count With User Keys","description":"The number of LLM calls made using user-provided vendor API keys","default":0},"call_count_with_fallback_keys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count With Fallback Keys","description":"The number of LLM calls made using fallback environment API keys","default":0},"call_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count","description":"The number of LLM calls","default":0},"breakdown_by_models":{"anyOf":[{"items":{"$ref":"#/components/schemas/LLMTokenUsageByModel"},"type":"array"},{"type":"null"}],"title":"Breakdown By Models","description":"Breakdown of token usage by LLM model and provider"}},"type":"object","title":"LLMTokenUsage","description":"Token usage information for a workflow run, including total tokens and breakdown by model and provider."},"LLMTokenUsageByModel":{"properties":{"response_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Model","description":"The LLM model used"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"The provider used for the response"},"total_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Input Tokens","description":"The number of input/prompt tokens used","default":0},"total_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Output Tokens","description":"The number of output/completion tokens used","default":0},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens","description":"The total number of tokens used","default":0},"call_count_with_user_keys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count With User Keys","description":"The number of LLM calls made using user-provided vendor API keys","default":0},"call_count_with_fallback_keys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count With Fallback Keys","description":"The number of LLM calls made using fallback environment API keys","default":0},"call_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Call Count","description":"The number of LLM calls","default":0}},"type":"object","title":"LLMTokenUsageByModel","description":"Token usage by LLM model and provider."},"MCPServerConfig":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Name","description":"Display name for this MCP server connection"},"server_url":{"type":"string","title":"Server URL","description":"MCP server URL (e.g. 'https://mcp.example.com/mcp')"},"api_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"API Headers","description":"HTTP headers to include when connecting to the MCP server (e.g. {'Authorization': 'Bearer ...'})"}},"type":"object","required":["server_url"],"title":"MCP Server Configuration","description":"Configuration for an MCP (Model Context Protocol) server connection.\nDefined at the workflow level. Connects to an MCP server and\nexposes discovered tools to nodes that have use_mcp_tools enabled."},"McpMergeCollision":{"properties":{"server_url":{"type":"string","title":"Server Url"},"fingerprint_a":{"type":"string","title":"Fingerprint A"},"fingerprint_b":{"type":"string","title":"Fingerprint B"},"resolution":{"type":"string","title":"Resolution","description":"One of: 'dedup' | 'kept_both' | 'strict_rejected'."}},"type":"object","required":["server_url","fingerprint_a","fingerprint_b","resolution"],"title":"McpMergeCollision","description":"A single MCP-server merge collision encountered during expansion."},"NoLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"default_provider","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"type":{"type":"string","const":"no_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"no_llm","input_field_not_visible":true}},"type":"object","title":"No LLM","hidden_in_contexts":["node_settings","llm_config"],"hide_all_fields":true},"NoLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"default_provider","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"type":{"type":"string","const":"no_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"no_llm","input_field_not_visible":true}},"type":"object","title":"No LLM","hidden_in_contexts":["node_settings","llm_config"],"hide_all_fields":true},"NoOpNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Utility","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"no_op","title":"Type","description":"Type of the node. Must be 'no_op'","default":"no_op"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Free-text note explaining why this placeholder is here (e.g. 'TODO: replace with the eligibility check'). Never read at runtime."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Base name for the runtime variables written by this node. '<name>' is set to None and '<name>_success' is set to the run outcome, so conditional edges can branch on this node.","default":"no_op_result"},"delay_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delay Seconds","description":"Testing only. Number of seconds to wait before finishing, used to simulate a slow node. Leave at 0 for a real placeholder.","default":0},"simulate_failure":{"type":"boolean","title":"Simulate Failure","description":"Testing only. When true the node still completes normally but reports success=False, so failure branches can be exercised without a real failing integration. The workflow is never aborted by this flag.","default":false}},"type":"object","title":"NoOpNodeConfig","description":"A node that runs and succeeds without doing anything else.\n\nUse it as a placeholder for an unbuilt step, as a fan-in junction so several\nbranches can converge on a single outgoing edge, or as a deterministic\nzero-cost stand-in in tests.\n\nThis is not the same as setting ``disabled=True``. A disabled node is skipped\nentirely and emits no events at all, so downstream conditional edges have\nnothing to branch on. A no-op node runs: it emits the usual start/end node\nevents and writes a success flag to the thread state."},"NoOpNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Utility","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"no_op","title":"Type","description":"Type of the node. Must be 'no_op'","default":"no_op"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Free-text note explaining why this placeholder is here (e.g. 'TODO: replace with the eligibility check'). Never read at runtime."},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Variable Name","description":"Base name for the runtime variables written by this node. '<name>' is set to None and '<name>_success' is set to the run outcome, so conditional edges can branch on this node.","default":"no_op_result"},"delay_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delay Seconds","description":"Testing only. Number of seconds to wait before finishing, used to simulate a slow node. Leave at 0 for a real placeholder.","default":0},"simulate_failure":{"type":"boolean","title":"Simulate Failure","description":"Testing only. When true the node still completes normally but reports success=False, so failure branches can be exercised without a real failing integration. The workflow is never aborted by this flag.","default":false}},"type":"object","title":"NoOpNodeConfig","description":"A node that runs and succeeds without doing anything else.\n\nUse it as a placeholder for an unbuilt step, as a fan-in junction so several\nbranches can converge on a single outgoing edge, or as a deterministic\nzero-cost stand-in in tests.\n\nThis is not the same as setting ``disabled=True``. A disabled node is skipped\nentirely and emits no events at all, so downstream conditional edges have\nnothing to branch on. A no-op node runs: it emits the usual start/end node\nevents and writes a success flag to the thread state."},"NoOpNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"no_op","title":"Type","description":"Discriminator field which must always be 'no_op'","default":"no_op"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"NoOpNodeRunInput"},"NoOpNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"no_op","title":"Type","description":"Discriminator field which must always be 'no_op'","default":"no_op"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"NoOpNodeRunInput"},"NoOpNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"no_op","title":"Type","description":"Discriminator field which must always be 'no_op'","default":"no_op"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Success","description":"Indicates whether the node completed successfully","default":false},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message, only set when simulate_failure is enabled"}},"type":"object","title":"NoOpNodeRunOutput"},"NodeDiff":{"properties":{"logical_id":{"type":"string","title":"Logical Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"node_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Type"},"status":{"type":"string","enum":["added","removed","modified"],"title":"Status"},"changes":{"items":{"$ref":"#/components/schemas/FieldDiff"},"type":"array","title":"Changes","default":[]}},"type":"object","required":["logical_id","status"],"title":"NodeDiff","description":"Represents changes to a node between versions."},"NodeFilter":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id","description":"Filter by logical ID"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Filter by workflow ID"},"type":{"anyOf":[{"$ref":"#/components/schemas/NodeType"},{"type":"null"}],"description":"Filter by node type"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"Filter by version number. Returns snapshot nodes for that version."}},"type":"object","title":"NodeFilter"},"NodeLibraryConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Logical ID","description":"Unique identifier for the node library","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Name","description":"Name of the Node Library"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Description","description":"Description of the node library"},"nodes":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Nodes","description":"List of node IDs that are part of this library","input_field_not_visible":true},"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the node library","default":"personal"},"access_list":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs or team IDs that have access to this node library","input_field_not_visible":true}},"type":"object","title":"NodeLibraryConfig"},"NodeLibraryConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Logical ID","description":"Unique identifier for the node library","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Name","description":"Name of the Node Library"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Library Description","description":"Description of the node library"},"nodes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Nodes","description":"List of node IDs that are part of this library","input_field_not_visible":true},"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the node library","default":"personal"},"access_list":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs or team IDs that have access to this node library","input_field_not_visible":true}},"type":"object","title":"NodeLibraryConfig"},"NodeLibraryListResponse":{"properties":{"node_libraries":{"items":{"$ref":"#/components/schemas/NodeLibraryModel"},"type":"array","title":"Node Libraries","description":"List of node libraries"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of node libraries available without pagination."}},"type":"object","title":"NodeLibraryListResponse","description":"Response model for a list of node library.\nContains a list of NodeLibraryModel objects."},"NodeLibraryModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"node_library_config":{"anyOf":[{"$ref":"#/components/schemas/NodeLibraryConfig-Output"},{"type":"null"}],"description":"Node Library Configuration"}},"type":"object","title":"NodeLibraryModel","description":"Stores the node library config in the workflow system."},"NodeLibraryResponse":{"properties":{"node_library":{"$ref":"#/components/schemas/NodeLibraryModel","description":"Single node library object"}},"type":"object","required":["node_library"],"title":"NodeLibraryResponse","description":"Response model for a single node library.\nContains a NodeLibraryModel object."},"NodeRealtimeOverrides":{"properties":{"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort while this node is active — one of minimal, low, medium, high, xhigh. Leave empty to inherit the workflow default. Worth raising on a node that has to choose between several similar-sounding paths; costly to raise everywhere."},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice","description":"Voice for this node only. Rarely useful: changing voice mid-conversation is jarring to a caller, who hears it as being handed to a different person.","field_visibility_level":"developer"},"preamble_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preamble Mode","description":"Whether the model may speak a short filler line before a slow answer while this node is active. Leave empty to inherit.","field_visibility_level":"developer"},"transcription_keywords":{"items":{"type":"string"},"type":"array","title":"Transcription Keywords","description":"Terms to bias speech recognition toward while this node is active — added to the workflow-wide list rather than replacing it. Use for the identifiers a node actually asks for: plan names, member ID formats, provider names."},"turn_detection":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Turn Detection","description":"Override end-of-speech detection for this node, e.g. to wait longer while a caller reads out a long number. Leave empty to inherit the session default.","field_visibility_level":"developer","input_field_type":"textarea"}},"type":"object","title":"Realtime Overrides","description":"Per-node realtime settings, applied only while this node is the active one.\n\nEverything here is optional and ``None`` means\n\"inherit from the workflow\" (D1) — nothing here turns realtime on or off.\n\n``transcription_keywords`` is the field worth knowing about: the classic path has no equivalent.\nBecause the realtime session is re-primed at every node transition, a node that collects a member\nID can bias speech recognition toward plan names and digit words *for the span of that node only*,\nand stop biasing the moment the conversation moves on. That is a quality gain over the classic\npath, not merely parity with it.\n\nA ``verbatim`` flag was designed here and dropped by D2: edge messages are spoken in the model's\nown words. If exact wording is ever required (a compliance disclosure), §6.4 option 2 is where\nit goes."},"NodeType":{"type":"string","enum":["say_llm","worker_llm","super_node","say_static","tool_node","workflow_run_fetch","workflow_run_evaluator","start_conversation","end_conversation","send_sms","google_docs","http_request","athena_patients_search","athena_patients_update","athena_patients_create","athena_appointments_create","deduplicate","field_extractor","no_op"],"title":"NodeType"},"NodesListResponse":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/NodesModel"},"type":"array","title":"Nodes","description":"List of nodes"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of nodes available without pagination."}},"type":"object","title":"NodesListResponse","description":"Response model for a list of nodes.\nContains a list of NodesModel objects."},"NodesModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"node_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/WorkerLLMNodeConfig-Output"},{"$ref":"#/components/schemas/SayLLMNodeConfig-Output"},{"$ref":"#/components/schemas/SayStaticMessageNodeConfig-Output"},{"$ref":"#/components/schemas/SuperNodeConfig-Output"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeConfig-Output"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Output"},{"$ref":"#/components/schemas/ToolNodeConfig-Output"},{"$ref":"#/components/schemas/StartConversationNodeConfig-Output"},{"$ref":"#/components/schemas/EndConversationNodeConfig-Output"},{"$ref":"#/components/schemas/SendSMSNodeConfig-Output"},{"$ref":"#/components/schemas/GoogleDocsNodeConfig-Output"},{"$ref":"#/components/schemas/HttpRequestNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Output"},{"$ref":"#/components/schemas/DeduplicateNodeConfig-Output"},{"$ref":"#/components/schemas/FieldExtractorNodeConfig-Output"},{"$ref":"#/components/schemas/NoOpNodeConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Output","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeConfig-Output","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeConfig-Output","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Output","deduplicate":"#/components/schemas/DeduplicateNodeConfig-Output","end_conversation":"#/components/schemas/EndConversationNodeConfig-Output","field_extractor":"#/components/schemas/FieldExtractorNodeConfig-Output","google_docs":"#/components/schemas/GoogleDocsNodeConfig-Output","http_request":"#/components/schemas/HttpRequestNodeConfig-Output","no_op":"#/components/schemas/NoOpNodeConfig-Output","say_llm":"#/components/schemas/SayLLMNodeConfig-Output","say_static":"#/components/schemas/SayStaticMessageNodeConfig-Output","send_sms":"#/components/schemas/SendSMSNodeConfig-Output","start_conversation":"#/components/schemas/StartConversationNodeConfig-Output","super_node":"#/components/schemas/SuperNodeConfig-Output","tool_node":"#/components/schemas/ToolNodeConfig-Output","worker_llm":"#/components/schemas/WorkerLLMNodeConfig-Output","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Output","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeConfig-Output"}}},{"type":"null"}],"title":"Node Config","description":"Node Configuration"}},"type":"object","title":"NodesModel","description":"Stores a node configuration present in the workflow system."},"NodesResponse":{"properties":{"node":{"$ref":"#/components/schemas/NodesModel","description":"Single node object"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advisory lints for this node. The save succeeded — these describe configuration that is legal but almost certainly not what the author meant. Only checks a single node config can answer appear here; graph-level lints need the whole workflow."}},"type":"object","required":["node"],"title":"NodesResponse","description":"Response model for a single node.\nContains a NodesModel object."},"NodesRunInputs-Input":{"properties":{"node_run_inputs":{"items":{"oneOf":[{"$ref":"#/components/schemas/BaseNodeRunInput-Input"},{"$ref":"#/components/schemas/LLMNodeRunInput-Input"},{"$ref":"#/components/schemas/SayStaticMessageNodeRunInput-Input"},{"$ref":"#/components/schemas/SuperNodeRunInput-Input"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeRunInput-Input"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeRunInput-Input"},{"$ref":"#/components/schemas/ToolNodeRunInput-Input"},{"$ref":"#/components/schemas/StartConversationNodeRunInput-Input"},{"$ref":"#/components/schemas/EndConversationNodeRunInput-Input"},{"$ref":"#/components/schemas/SendSMSNodeRunInput-Input"},{"$ref":"#/components/schemas/GoogleDocsNodeRunInput-Input"},{"$ref":"#/components/schemas/HttpRequestNodeRunInput-Input"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeRunInput-Input"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeRunInput-Input"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeRunInput-Input"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeRunInput-Input"},{"$ref":"#/components/schemas/DeduplicateNodeRunInput-Input"},{"$ref":"#/components/schemas/FieldExtractorNodeRunInput-Input"},{"$ref":"#/components/schemas/NoOpNodeRunInput-Input"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeRunInput-Input","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeRunInput-Input","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeRunInput-Input","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeRunInput-Input","base_node":"#/components/schemas/BaseNodeRunInput-Input","deduplicate":"#/components/schemas/DeduplicateNodeRunInput-Input","end_conversation":"#/components/schemas/EndConversationNodeRunInput-Input","field_extractor":"#/components/schemas/FieldExtractorNodeRunInput-Input","google_docs":"#/components/schemas/GoogleDocsNodeRunInput-Input","http_request":"#/components/schemas/HttpRequestNodeRunInput-Input","llm":"#/components/schemas/LLMNodeRunInput-Input","no_op":"#/components/schemas/NoOpNodeRunInput-Input","say_static":"#/components/schemas/SayStaticMessageNodeRunInput-Input","send_sms":"#/components/schemas/SendSMSNodeRunInput-Input","start_conversation":"#/components/schemas/StartConversationNodeRunInput-Input","super_node":"#/components/schemas/SuperNodeRunInput-Input","tool_node":"#/components/schemas/ToolNodeRunInput-Input","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeRunInput-Input","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeRunInput-Input"}}},"type":"array","title":"Node Run Inputs","description":"Mapping of node logical IDs to their respective run inputs"}},"type":"object","title":"NodesRunInputs","description":"Represents the run inputs for multiple nodes in a workflow."},"NodesRunInputs-Output":{"properties":{"node_run_inputs":{"items":{"oneOf":[{"$ref":"#/components/schemas/BaseNodeRunInput-Output"},{"$ref":"#/components/schemas/LLMNodeRunInput-Output"},{"$ref":"#/components/schemas/SayStaticMessageNodeRunInput-Output"},{"$ref":"#/components/schemas/SuperNodeRunInput-Output"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeRunInput-Output"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeRunInput-Output"},{"$ref":"#/components/schemas/ToolNodeRunInput-Output"},{"$ref":"#/components/schemas/StartConversationNodeRunInput-Output"},{"$ref":"#/components/schemas/EndConversationNodeRunInput-Output"},{"$ref":"#/components/schemas/SendSMSNodeRunInput-Output"},{"$ref":"#/components/schemas/GoogleDocsNodeRunInput-Output"},{"$ref":"#/components/schemas/HttpRequestNodeRunInput-Output"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeRunInput-Output"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeRunInput-Output"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeRunInput-Output"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeRunInput-Output"},{"$ref":"#/components/schemas/DeduplicateNodeRunInput-Output"},{"$ref":"#/components/schemas/FieldExtractorNodeRunInput-Output"},{"$ref":"#/components/schemas/NoOpNodeRunInput-Output"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeRunInput-Output","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeRunInput-Output","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeRunInput-Output","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeRunInput-Output","base_node":"#/components/schemas/BaseNodeRunInput-Output","deduplicate":"#/components/schemas/DeduplicateNodeRunInput-Output","end_conversation":"#/components/schemas/EndConversationNodeRunInput-Output","field_extractor":"#/components/schemas/FieldExtractorNodeRunInput-Output","google_docs":"#/components/schemas/GoogleDocsNodeRunInput-Output","http_request":"#/components/schemas/HttpRequestNodeRunInput-Output","llm":"#/components/schemas/LLMNodeRunInput-Output","no_op":"#/components/schemas/NoOpNodeRunInput-Output","say_static":"#/components/schemas/SayStaticMessageNodeRunInput-Output","send_sms":"#/components/schemas/SendSMSNodeRunInput-Output","start_conversation":"#/components/schemas/StartConversationNodeRunInput-Output","super_node":"#/components/schemas/SuperNodeRunInput-Output","tool_node":"#/components/schemas/ToolNodeRunInput-Output","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeRunInput-Output","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeRunInput-Output"}}},"type":"array","title":"Node Run Inputs","description":"Mapping of node logical IDs to their respective run inputs"}},"type":"object","title":"NodesRunInputs","description":"Represents the run inputs for multiple nodes in a workflow."},"OPENAIModel":{"type":"string","enum":["gpt-5.4","gpt-5.4-mini","gpt-5.4-nano","gpt-5.2","gpt-5.1","gpt-5-nano","gpt-5-mini","gpt-5","gpt-5.4-pro","gpt-5.2-pro","gpt-5.2-chat-latest","gpt-5.3-chat-latest","gpt-4.1-nano","gpt-4.1-mini","gpt-4.1","gpt-4","gpt-4o-mini","gpt-4o","gpt-3.5-turbo"],"title":"OPENAIModel"},"OpenAILLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"openai","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/OPENAIModel"},{"type":"null"}],"title":"OpenAI Model","description":"Name of the OpenAI model to use","default":"gpt-5.4-mini"},"type":{"type":"string","const":"openai_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"openai_llm","field_visibility_level":"developer","input_field_not_visible":true},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"OpenAI Base URL","description":"Base URL path for OpenAI API requests, leave blank if not using a proxy or service emulator.","field_visibility_level":"developer"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"OpenAI Organization ID","description":"Organization ID for OpenAI API requests, Automatically inferred from env var `OPENAI_ORG_ID` if not provided.","field_visibility_level":"developer"},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'.","default":"low"}},"type":"object","title":"OpenAI"},"OpenAILLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"openai","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"model":{"anyOf":[{"$ref":"#/components/schemas/OPENAIModel"},{"type":"null"}],"title":"OpenAI Model","description":"Name of the OpenAI model to use","default":"gpt-5.4-mini"},"type":{"type":"string","const":"openai_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"openai_llm","field_visibility_level":"developer","input_field_not_visible":true},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"OpenAI Base URL","description":"Base URL path for OpenAI API requests, leave blank if not using a proxy or service emulator.","field_visibility_level":"developer"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"OpenAI Organization ID","description":"Organization ID for OpenAI API requests, Automatically inferred from env var `OPENAI_ORG_ID` if not provided.","field_visibility_level":"developer"},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'.","default":"low"}},"type":"object","title":"OpenAI"},"OperationMode":{"type":"string","enum":["parallel_select_one","sequential_with_proactive"],"title":"OperationMode"},"OutputTokenDetails":{"properties":{"audio":{"type":"integer","title":"Audio"},"reasoning":{"type":"integer","title":"Reasoning"}},"additionalProperties":true,"type":"object","title":"OutputTokenDetails","description":"Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n    ```python\n    {\n        \"audio\": 10,\n        \"reasoning\": 200,\n    }\n    ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\""},"PromptConfig":{"properties":{"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"System prompt for the LLM","input_field_type":"prompts_selection"}},"type":"object","title":"PromptConfig"},"PublishSuperNodeRequest":{"properties":{"interface":{"$ref":"#/components/schemas/SuperNodeInterface","description":"Input field definitions and their mappings into the sub-workflow"}},"type":"object","required":["interface"],"title":"PublishSuperNodeRequest","description":"Payload for publishing a workflow as a super node."},"PublishSuperNodeResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"workflow_version_number":{"type":"integer","title":"Workflow Version Number"},"message":{"type":"string","title":"Message"},"num_input_fields":{"type":"integer","title":"Num Input Fields"}},"type":"object","required":["workflow_id","workflow_version_number","message","num_input_fields"],"title":"PublishSuperNodeResponse","description":"Response after publishing a workflow as a super node."},"PydanticObjectId":{"type":"string","maxLength":24,"minLength":24,"pattern":"^[0-9a-f]{24}$","example":"5eb7cf5a86d9755df3a6c593"},"RatingConfig":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating Logical ID","description":"Unique identifier for the rating","input_field_disallowed":true},"value":{"$ref":"#/components/schemas/RatingValue","title":"Rating Value","description":"The rating left by the user"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who created this rating","input_field_not_visible":true},"updatedBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who last updated this rating","input_field_not_visible":true},"createdAt":{"type":"string","format":"date-time","title":"Createdat","input_field_not_visible":true},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","input_field_not_visible":true}},"type":"object","required":["value"],"title":"RatingConfig","description":"One reviewer's rating of one target (a run event, or a run turn).\n\nAt most one rating per user per target — re-rating replaces the caller's record rather than\nappending, so ``createdBy`` is effectively the identity key within a target's rating list."},"RatingRequest":{"properties":{"value":{"$ref":"#/components/schemas/RatingValue","title":"Rating Value","description":"The rating to leave on the target"}},"type":"object","required":["value"],"title":"RatingRequest","description":"Request body for setting a rating. Everything else on ``RatingConfig`` is server-assigned."},"RatingValue":{"type":"string","enum":["down","up","strong_up"],"title":"RatingValue","description":"Quality judgement a reviewer can leave on a workflow run event or turn.\n\nStored as the string, never as the numeric score: a score is derivable (see ``RATING_SCORES``)\nand keeping the name means new values can be added without re-interpreting existing records."},"RatingsResponse":{"properties":{"ratings":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Ratings","description":"All ratings on the target after the write, one per user"},"feedback_users":{"additionalProperties":{"$ref":"#/components/schemas/FeedbackUser"},"type":"object","title":"Feedback Users","description":"Display identities for the authors in `ratings`. Sent on every write so a rating left by someone who joined after the page loaded still renders with a name."}},"type":"object","title":"RatingsResponse","description":"Response model for the rating endpoints.\n\nReturns only the mutated target's rating list, not the whole run: a run document carries every\nevent of every turn, and a thumbs-up does not justify shipping that back. The full list (rather\nthan just the caller's record) is returned so the client can render aggregate counts without a\nrefetch."},"RerunAmendRequest":{"properties":{"dynamic_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Dynamic Variables","description":"Variable name -> value, replacing by key on the projection itself. Distinct from sending dynamic_variables on `start`, which the websocket merges on top for one run; editing here is durable and visible to the next preview."},"runtime_variables":{"anyOf":[{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},{"type":"null"}],"title":"Runtime Variables","description":"Internal thread id -> {variable name: value}. Keyed by thread because each thread has its own runtime variables and a companion's are not the main thread's. Each edit is fanned out to the node-qualified copies of that variable, or a prompt reading `[[Node.var]]` would keep the old value."},"message_edits":{"anyOf":[{"items":{"$ref":"#/components/schemas/RerunMessageEdit"},"type":"array"},{"type":"null"}],"title":"Message Edits","description":"New text for turns that already exist. Every index is resolved against the transcript as it stands before any of them is applied, so a multi-part edit is not order-dependent."},"message_appends":{"anyOf":[{"items":{"$ref":"#/components/schemas/RerunMessageAppend"},"type":"array"},{"type":"null"}],"title":"Message Appends","description":"New turns, each added at the end of its thread. Ids are minted server-side: a client-chosen id that collided with an existing one would be silently dropped by the runtime's deduplication."},"message_deletes":{"anyOf":[{"items":{"$ref":"#/components/schemas/RerunMessageDelete"},"type":"array"},{"type":"null"}],"title":"Message Deletes","description":"Turns to remove, each taking the tool results that answered it. Indexes are resolved against the transcript as it stands before any removal, so they are not order-dependent."}},"additionalProperties":false,"type":"object","title":"RerunAmendRequest","description":"A change to an already-issued re-run projection.\n\n**Strict by construction** (``extra=\"forbid\"``): a delta the server does not understand is refused rather\nthan ignored. Silently dropping an unrecognised field is the worst option here — the user is told their edit\nwas accepted and the run then behaves as though it never happened, which is indistinguishable from the\nfeature being broken.\n\nDeliberately a *description of a change*, never state. A client cannot send a variable map to install, a\nmessage object, or an id; it says which thread and which key, and the server does the writing. That is what\nkeeps editing inside the invariant the websocket enforces with close code 4006 — *a client must never be\nthe source of run state*.\n\nAll five verbs are here: both variable maps, and message edits, appends and deletes. A request naming\nanything else is still refused rather than ignored."},"RerunExecuteRequest":{"properties":{"target_workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Workflow to re-run against. Defaults to the source run's own workflow."},"target_version_number":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Target Version Number","description":"Version to re-run against. Defaults to the target workflow's active version."},"history_mode":{"anyOf":[{"$ref":"#/components/schemas/HistoryMode"},{"type":"null"}],"description":"How much of the source conversation to carry over. Defaults to FULL when the target config is identical to the source's and USER_AND_ASSISTANT_ONLY otherwise, because the target's own nodes inject their own system prompts."},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id","description":"Node to start from. Required in practice only for PORTABLE re-runs, where no restored position survives; otherwise the resumed position is used."},"node_id_map":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Node Id Map","description":"Explicit source-node -> target-node mapping, for nodes the analyzer could not match on its own (renamed, or ambiguous by name). Overrides automatic matching."},"requested_mode":{"anyOf":[{"$ref":"#/components/schemas/RerunMode"},{"type":"null"}],"description":"Insist on a minimum fidelity. If the target cannot support it the request is refused with a report rather than silently doing something lossier."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional user message to drive the new run with. Omit it to restore the conversation and leave it parked awaiting input, which is the safe default: re-entering the restored node would repeat whatever it already did (a tool node's API write, an outbound notification). Supply it to replay the turn against the new config."}},"type":"object","title":"RerunExecuteRequest","description":"A re-run that the server executes itself, rather than handing back to the editor."},"RerunMessageAppend":{"properties":{"thread_id":{"type":"string","title":"Thread Id","description":"Internal thread id, as returned by the preview endpoint."},"role":{"type":"string","enum":["user","assistant"],"title":"Role","description":"Who the new turn is from. An added assistant turn is content the model will read back as its own prior output, for a conversation that did not happen — which is the point of the feature, and why the run it starts is labelled EDITED rather than a replay."},"text":{"type":"string","title":"Text","description":"What the new turn says. Cannot be blank."}},"additionalProperties":false,"type":"object","required":["thread_id","role","text"],"title":"RerunMessageAppend","description":"A new turn at the end of a thread.\n\n**No position, deliberately.** Appends going to the end is the single biggest simplification in this design:\nwith no positional argument there is no positional validation, and landing between a tool call and the\nresult answering it becomes impossible to ask for rather than something to check for.\n\nRoles are limited to the two the transcript displays. A browser that could add a system message could write\ninstructions into the run."},"RerunMessageDelete":{"properties":{"thread_id":{"type":"string","title":"Thread Id","description":"Internal thread id, as returned by the preview endpoint."},"index":{"type":"integer","minimum":0,"title":"Index","description":"Position in the thread's *displayed* transcript, as returned by the preview endpoint. Resolved against the transcript as it stands before any removal, so several deletes in one request all address the list the caller was shown."}},"additionalProperties":false,"type":"object","required":["thread_id","index"],"title":"RerunMessageDelete","description":"Removal of a turn that already exists.\n\nAddressed the same way an edit is — internal thread id plus the index the preview showed — and with the same\nconsequence the client cannot see: the server also removes the tool results that answered that turn. Tool\ntraffic is never displayed, so a client could not name those messages and could not tell if they were left\nbehind."},"RerunMessageEdit":{"properties":{"thread_id":{"type":"string","title":"Thread Id","description":"Internal thread id, as returned by the preview endpoint."},"index":{"type":"integer","minimum":0,"title":"Index","description":"Position in the thread's *displayed* transcript, as returned by the preview endpoint — not an index into stored state. System prompts and tool traffic are not displayed but still occupy positions in storage, so the server resolves this through the same filter that produced it."},"text":{"type":"string","title":"Text","description":"Replacement text. Cannot be blank; removing a turn is a separate verb."}},"additionalProperties":false,"type":"object","required":["thread_id","index","text"],"title":"RerunMessageEdit","description":"New text for a turn that already exists.\n\nNo role and no id: a client can change what a turn *says*, never who said it or which message it is. Turning\na user turn into an assistant one would rewrite authorship of a conversation that is presented as a record\nof what happened, and an id is the server's handle for deduplication."},"RerunMode":{"type":"string","enum":["EXACT","REMAPPED","PORTABLE"],"title":"RerunMode"},"RerunPreflightResponse":{"properties":{"rerunnable":{"type":"boolean","title":"Rerunnable"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"resolved_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Mode"},"is_resumable":{"type":"boolean","title":"Is Resumable","default":true},"not_resumable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Not Resumable Reason"},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id"},"suggested_entry_nodes":{"items":{"type":"string"},"type":"array","title":"Suggested Entry Nodes"},"node_matches":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Node Matches"},"unmapped_node_ids":{"items":{"type":"string"},"type":"array","title":"Unmapped Node Ids"},"unmapped_variable_keys":{"items":{"type":"string"},"type":"array","title":"Unmapped Variable Keys"},"carries_over":{"$ref":"#/components/schemas/CarriesOver"},"dropped":{"$ref":"#/components/schemas/DroppedSummary"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["rerunnable"],"title":"RerunPreflightResponse"},"RerunStartedResponse":{"properties":{"workflow_run_id":{"type":"string","title":"Workflow Run Id"},"status":{"type":"string","title":"Status"},"resolved_mode":{"type":"string","title":"Resolved Mode"},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["workflow_run_id","status","resolved_mode"],"title":"RerunStartedResponse","description":"202 body for an asynchronous re-run — the run exists, execution is under way."},"RerunTargetRequest":{"properties":{"target_workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Workflow to re-run against. Defaults to the source run's own workflow."},"target_version_number":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Target Version Number","description":"Version to re-run against. Defaults to the target workflow's active version."},"history_mode":{"anyOf":[{"$ref":"#/components/schemas/HistoryMode"},{"type":"null"}],"description":"How much of the source conversation to carry over. Defaults to FULL when the target config is identical to the source's and USER_AND_ASSISTANT_ONLY otherwise, because the target's own nodes inject their own system prompts."},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id","description":"Node to start from. Required in practice only for PORTABLE re-runs, where no restored position survives; otherwise the resumed position is used."},"node_id_map":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Node Id Map","description":"Explicit source-node -> target-node mapping, for nodes the analyzer could not match on its own (renamed, or ambiguous by name). Overrides automatic matching."},"requested_mode":{"anyOf":[{"$ref":"#/components/schemas/RerunMode"},{"type":"null"}],"description":"Insist on a minimum fidelity. If the target cannot support it the request is refused with a report rather than silently doing something lossier."}},"type":"object","title":"RerunTargetRequest","description":"Where a re-run should execute, and how much state it should try to carry.\n\n``turn_index`` is deliberately absent: it lives in the path, matching the turn rating and comment\nendpoints so every turn-scoped feature addresses a turn the same way."},"RerunTokenPreviewResponse":{"properties":{"source_workflow_run_id":{"type":"string","title":"Source Workflow Run Id"},"turn_index":{"type":"integer","title":"Turn Index"},"target_workflow_id":{"type":"string","title":"Target Workflow Id"},"target_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Version Number"},"resolved_mode":{"type":"string","title":"Resolved Mode"},"effective_mode":{"type":"string","title":"Effective Mode"},"edited":{"type":"boolean","title":"Edited","default":false},"removed_message_count":{"type":"integer","title":"Removed Message Count","default":0},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"resume_thread_id":{"type":"string","title":"Resume Thread Id"},"threads":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Threads"},"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables"},"expires_in_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Seconds"}},"type":"object","required":["source_workflow_run_id","turn_index","target_workflow_id","resolved_mode","effective_mode","resume_thread_id"],"title":"RerunTokenPreviewResponse","description":"What a re-run token restores, for display only.\n\nDeliberately not a superset of ``RerunTokenResponse``: it does **not** echo the token back. A caller\nalready holds it (it is in the URL), and a response that repeats a credential invites it into logs and\nerror reports that the request line alone would not reach."},"RerunTokenResponse":{"properties":{"rerun_token":{"type":"string","title":"Rerun Token"},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds"},"target_workflow_id":{"type":"string","title":"Target Workflow Id"},"target_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Version Number"},"resolved_mode":{"type":"string","title":"Resolved Mode"},"entry_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Node Logical Id"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"source_workflow_run_id":{"type":"string","title":"Source Workflow Run Id"},"turn_index":{"type":"integer","title":"Turn Index"},"restored_message_count":{"type":"integer","title":"Restored Message Count","default":0}},"type":"object","required":["rerun_token","expires_in_seconds","target_workflow_id","resolved_mode","source_workflow_run_id","turn_index"],"title":"RerunTokenResponse"},"RerunnableTurnsResponse":{"properties":{"workflow_run_id":{"type":"string","title":"Workflow Run Id"},"turns":{"items":{"$ref":"#/components/schemas/TurnRerunnability"},"type":"array","title":"Turns"}},"type":"object","required":["workflow_run_id"],"title":"RerunnableTurnsResponse"},"ResolvedGlobalVariablesResponse":{"properties":{"variables":{"additionalProperties":true,"type":"object","title":"Variables","description":"Resolved {name: value} map, credentials masked"},"secret_variables":{"additionalProperties":true,"type":"object","title":"Secret Variables","description":"Real credential values. Populated ONLY by the internal route, whose sole consumer is conversation_agent_service; empty on the UI-facing route."}},"type":"object","title":"ResolvedGlobalVariablesResponse"},"ResponseFormatEnum":{"type":"string","enum":["json","text","binary"],"title":"ResponseFormatEnum"},"RunSimulationRequest":{"properties":{"runner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Runner Name","description":"Name of the user running the simulation"}},"type":"object","title":"RunSimulationRequest"},"RuntimeStateUpdates":{"properties":{"result":{"anyOf":[{},{"type":"null"}],"title":"Result","description":"The tool's return value, exactly as returned."},"thread_variable_updates":{"additionalProperties":true,"type":"object","title":"Thread Variable Updates","description":"Thread-scoped mapped variables, unbudgeted and unsanitized."},"workflow_variable_updates":{"additionalProperties":true,"type":"object","title":"Workflow Variable Updates","description":"Workflow-scoped mapped variables, unbudgeted and unsanitized."}},"type":"object","title":"RuntimeStateUpdates","description":"The tool's result and mapped variables as they came out of the tool — for a caller that owns state.\n\n**Why this is separate from the fields beside it on :class:`ToolExecutionResult`.** Those are\n*response*-shaped: ``coerce_result`` has replaced non-finite floats with the strings ``\"NaN\"`` /\n``\"Infinity\"``, an over-budget value with a truncation preview, and an over-budget mapping with\nnothing at all. Every one of those transforms exists to protect an HTTP body, a browser, or an LLM's\ncontext window — and none of them is what belongs in a runtime variable.\n\nThe realtime driver used to write the response-shaped values into thread state, and the consequence\nwas measurable: one tool returning ``float(\"nan\")`` stored ``None`` when a Tool node ran it and the\nstring ``\"NaN\"`` when a voice call ran it. Same tool, same result, two values — decided by transport.\nThat defeated the whole point of having one coercion rule.\n\nSo this carries the raw values, and the two runtime writers\n(``ThreadState.update_runtime_variables`` and ``NodeRuntime.update_workflow_runtime_variables``)\nremain the *only* places a runtime variable is shaped.\n\n**Never serialized.** The field holding this is declared ``exclude=True``, so it is absent from\n``model_dump()``, ``model_dump_json()``, ``jsonable_encoder`` and FastAPI's ``response_model`` alike —\nwhich matters, because these values are uncapped and un-sanitized by design and must not reach an\nHTTP body. It is an in-process hand-off between ``execute_tool_config`` and a caller in the same\nprocess, and nothing more."},"SayLLMNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"LLM","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Whether this node will execute again if not transitioned to another node","default":true},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Whether the node should wait for a user message before processing","default":true,"field_visibility_level":"developer"},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Default error message to be returned if the LLM invocation fails","default":"I am sorry, there seems to be an issue. Could you please repeat?"},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"say_llm","title":"Node Type","description":"Type of the node. Must be 'say_llm'","default":"say_llm","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured output requested from the say node after it produces a response. Example: \n{\n        \"name\": \"SearchQuery\",\n        \"description\": \"A search query with justification\",\n        \"input_schema\": {\n            \"title\": \"AnswerWithJustification\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"search_query\": {\n                    \"title\": \"Search Query\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where search query is stored\"\n                },\n                \"justification\": {\n                    \"title\": \"Justification\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where justification string is stored\"\n                }\n            },\n            \"required\": [\"search_query\", \"justification\"]\n        }\n    }\n","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"}},"type":"object","title":"LLM Node"},"SayLLMNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"LLM","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Whether this node will execute again if not transitioned to another node","default":true},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Whether the node should wait for a user message before processing","default":true,"field_visibility_level":"developer"},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Default error message to be returned if the LLM invocation fails","default":"I am sorry, there seems to be an issue. Could you please repeat?"},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"say_llm","title":"Node Type","description":"Type of the node. Must be 'say_llm'","default":"say_llm","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured output requested from the say node after it produces a response. Example: \n{\n        \"name\": \"SearchQuery\",\n        \"description\": \"A search query with justification\",\n        \"input_schema\": {\n            \"title\": \"AnswerWithJustification\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"search_query\": {\n                    \"title\": \"Search Query\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where search query is stored\"\n                },\n                \"justification\": {\n                    \"title\": \"Justification\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where justification string is stored\"\n                }\n            },\n            \"required\": [\"search_query\", \"justification\"]\n        }\n    }\n","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"}},"type":"object","title":"LLM Node"},"SayLLMNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"say_llm","title":"Type","description":"Discriminator field which must always be 'say_llm'","default":"say_llm"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"structured_output":{"additionalProperties":true,"type":"object","title":"Structured Output","description":"Structured output from the say node"}},"type":"object","title":"SayLLMNodeRunOutput"},"SayStaticMessageNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Static Message","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"say_static","title":"Node Type","description":"Type of the node. Must be 'say_static'","default":"say_static","input_field_not_visible":true},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Configuration for static messages. Contains a list of pre-configured messages","input_field_ui_order":201}},"type":"object","title":"Static Messages Node"},"SayStaticMessageNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Static Message","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"say_static","title":"Node Type","description":"Type of the node. Must be 'say_static'","default":"say_static","input_field_not_visible":true},"static_messages_config":{"anyOf":[{"$ref":"#/components/schemas/StaticMessagesConfig"},{"type":"null"}],"title":"Static Messages Configuration","description":"Configuration for static messages. Contains a list of pre-configured messages","input_field_ui_order":201}},"type":"object","title":"Static Messages Node"},"SayStaticMessageNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"say_static","title":"Type","description":"Discriminator field which must always be 'say_static'","default":"say_static"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"SayStaticMessageNodeRunInput"},"SayStaticMessageNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"say_static","title":"Type","description":"Discriminator field which must always be 'say_static'","default":"say_static"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"SayStaticMessageNodeRunInput"},"SayStaticMessageNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"say_static","title":"Type","description":"Discriminator field which must always be 'say_static'","default":"say_static"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"}},"type":"object","title":"SayStaticMessageNodeRunOutput"},"ScoreDistribution":{"properties":{"scale_upper_bound":{"type":"number","title":"Scale Upper Bound","description":"Upper bound of the score scale used for bucketing","default":5},"bucket_0_20":{"type":"integer","title":"Bucket 0 20","description":"Count of scores in range 0-20% of scale","default":0},"bucket_21_40":{"type":"integer","title":"Bucket 21 40","description":"Count of scores in range 20-40% of scale","default":0},"bucket_41_60":{"type":"integer","title":"Bucket 41 60","description":"Count of scores in range 40-60% of scale","default":0},"bucket_61_80":{"type":"integer","title":"Bucket 61 80","description":"Count of scores in range 60-80% of scale","default":0},"bucket_81_100":{"type":"integer","title":"Bucket 81 100","description":"Count of scores in range 80-100% of scale","default":0}},"type":"object","title":"ScoreDistribution","description":"Distribution of scores across different ranges.\nDefault scale is 0-5, auto-scales to max score if any value exceeds 5.\nBuckets represent 20% intervals of the scale_upper_bound."},"SecureNotificationListResponse":{"properties":{"notifications":{"items":{"$ref":"#/components/schemas/SecureNotificationResponse"},"type":"array","title":"Notifications"}},"type":"object","required":["notifications"],"title":"SecureNotificationListResponse"},"SecureNotificationResponse":{"properties":{"notification_id":{"type":"string","title":"Notification Id"},"code":{"type":"string","title":"Code"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"}},"type":"object","required":["notification_id","code","status"],"title":"SecureNotificationResponse","description":"Unified response shape for all secure-notification endpoints (review F10)."},"SecureNotificationStatus":{"type":"string","enum":["pending","approved","declined","expired"],"title":"SecureNotificationStatus","description":"Lifecycle states of a secure notification (mirrors the AI workflow poll-loop states)."},"SelectionMode":{"type":"string","enum":["random","sequence"],"title":"SelectionMode"},"SelfLoopConfig":{"properties":{"enabled":{"type":"boolean","title":"Self Loop","description":"Re-execute this node until a conditional edge matches, max_retries is reached, or expiry_time elapses (whichever comes first).","default":false},"max_retries":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Retries","description":"Maximum number of re-executions after the first attempt (total attempts = max_retries + 1). Leave empty for no bound by count."},"expiry_time":{"anyOf":[{"type":"integer","maximum":3600,"minimum":1},{"type":"null"}],"title":"Expiry Time (seconds)","description":"Overall wall-clock budget in seconds for the whole self-loop. An execution still running when this elapses is terminated. Leave empty for no time bound. Note: a CPU-bound inline-Python body with no await points cannot be interrupted mid-execution; expiry reliably bounds I/O-bound work.","input_field_helper_text":"Overall time budget for the whole self-loop. In-flight I/O-bound executions are cancelled when this elapses; CPU-bound inline Python cannot be interrupted."},"time_between_retries":{"type":"integer","maximum":300,"minimum":0,"title":"Time Between Retries (seconds)","description":"Seconds to wait between the end of one execution and the start of the next.","default":0}},"type":"object","title":"SelfLoopConfig","description":"Bounded self-loop / retry policy for a node.\n\nWhen ``enabled``, the node re-executes its functionality repeatedly until ONE of the following\nhappens, whichever comes first:\n  1. an outgoing conditional edge matches (the loop's exit), or\n  2. ``max_retries`` re-executions have been performed, or\n  3. the ``expiry_time`` wall-clock budget for the whole loop elapses.\n\nOutgoing conditional edges are re-evaluated after every execution to decide whether to exit\n(take a matching edge) or run again. When the loop stops without a matching exit edge, the\nruntime publishes a ``self_loop_outcome`` runtime variable (``\"max_retries\"`` | ``\"expiry_time\"``)\nthat authors can branch on with a dedicated \"exhausted\"/\"timeout\" conditional edge.\n\nThis is distinct from the LLM-node ``self_loop: bool`` flag, which governs loop-back while\nwaiting for the next user message and is unaffected by this config."},"SendSMSNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Communications","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"SMS","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"send_sms","title":"Node Type","description":"Type of the node. Must be 'send_sms'","default":"send_sms","input_field_not_visible":true},"destination_phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Phone Number","description":"Destination phone number in E.164 format. Example of E.164 format: +1234567890","input_field_ui_order":201},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"SMS Message","description":"SMS message to be sent. Can include dynamic and runtime variable placeholders for dynamic content.","input_field_ui_order":202}},"type":"object","title":"Send SMS Node"},"SendSMSNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Communications","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"SMS","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"send_sms","title":"Node Type","description":"Type of the node. Must be 'send_sms'","default":"send_sms","input_field_not_visible":true},"destination_phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Phone Number","description":"Destination phone number in E.164 format. Example of E.164 format: +1234567890","input_field_ui_order":201},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"SMS Message","description":"SMS message to be sent. Can include dynamic and runtime variable placeholders for dynamic content.","input_field_ui_order":202}},"type":"object","title":"Send SMS Node"},"SendSMSNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"send_sms","title":"Type","description":"Discriminator field which must always be 'send_sms'","default":"send_sms"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_destination_phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Phone Number","description":"Destination phone number in E.164 format. Example of E.164 format: +1234567890. This field, if provided, overrides the phone number in the node config."},"override_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"SMS Message","description":"SMS message to be sent. Can include dynamic and runtime variable placeholders for dynamic content. This field, if provided, overrides the message in the node config."}},"type":"object","title":"SendSMSNodeRunInput"},"SendSMSNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"send_sms","title":"Type","description":"Discriminator field which must always be 'send_sms'","default":"send_sms"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"override_destination_phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Phone Number","description":"Destination phone number in E.164 format. Example of E.164 format: +1234567890. This field, if provided, overrides the phone number in the node config."},"override_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"SMS Message","description":"SMS message to be sent. Can include dynamic and runtime variable placeholders for dynamic content. This field, if provided, overrides the message in the node config."}},"type":"object","title":"SendSMSNodeRunInput"},"SendSMSNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"send_sms","title":"Type","description":"Discriminator field which must always be 'send_sms'","default":"send_sms"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"SMS Sent Successfully","description":"Indicates whether the SMS was sent successfully","default":false},"sent_sms_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent SMS Message","description":"The SMS message that was sent"}},"type":"object","title":"SendSMSNodeRunOutput"},"SimulationConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Logical ID","description":"Unique identifier for the simulation","input_field_disallowed":true},"status":{"anyOf":[{"$ref":"#/components/schemas/SimulationStatus"},{"type":"null"}],"title":"Simulation Status","description":"Current status of the simulation","default":"pending","input_field_not_visible":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Name","description":"Name of the simulation"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Description","description":"Description of the simulation"},"selected_workflow":{"anyOf":[{"$ref":"#/components/schemas/SimulationWorkflowDetails-Input"},{"type":"null"}],"title":"Selected Workflow Details","description":"Details about the selected workflow execution","input_field_not_visible":true},"counter_workflow":{"anyOf":[{"$ref":"#/components/schemas/SimulationWorkflowDetails-Input"},{"type":"null"}],"title":"Counter Workflow Details","description":"Details about the counter workflow execution","input_field_not_visible":true},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout Seconds","description":"Maximum time in seconds to run the simulation","default":120},"max_events":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Events","description":"Maximum number of events to process in the simulation","default":3000},"number_of_simulations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Number of Simulations","description":"Number of times to run the simulation","default":1},"max_concurrent_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Runs","description":"Maximum number of concurrent simulation runs allowed","default":1},"assistant_starts_first":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Assistant Starts First","description":"If True, the assistant workflow will kick off first, else it will be the user workflow.","default":true},"stop_on_failure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Stop on Failure","description":"Whether to stop the simulation on failure","default":false},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Simulation Initiator","description":"Identifier of the user or system that initiated the workflow simulation","input_field_not_visible":true}},"type":"object","title":"SimulationConfig"},"SimulationConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Logical ID","description":"Unique identifier for the simulation","input_field_disallowed":true},"status":{"anyOf":[{"$ref":"#/components/schemas/SimulationStatus"},{"type":"null"}],"title":"Simulation Status","description":"Current status of the simulation","default":"pending","input_field_not_visible":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Name","description":"Name of the simulation"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Description","description":"Description of the simulation"},"selected_workflow":{"anyOf":[{"$ref":"#/components/schemas/SimulationWorkflowDetails-Output"},{"type":"null"}],"title":"Selected Workflow Details","description":"Details about the selected workflow execution","input_field_not_visible":true},"counter_workflow":{"anyOf":[{"$ref":"#/components/schemas/SimulationWorkflowDetails-Output"},{"type":"null"}],"title":"Counter Workflow Details","description":"Details about the counter workflow execution","input_field_not_visible":true},"timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout Seconds","description":"Maximum time in seconds to run the simulation","default":120},"max_events":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Events","description":"Maximum number of events to process in the simulation","default":3000},"number_of_simulations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Number of Simulations","description":"Number of times to run the simulation","default":1},"max_concurrent_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Runs","description":"Maximum number of concurrent simulation runs allowed","default":1},"assistant_starts_first":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Assistant Starts First","description":"If True, the assistant workflow will kick off first, else it will be the user workflow.","default":true},"stop_on_failure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Stop on Failure","description":"Whether to stop the simulation on failure","default":false},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Simulation Initiator","description":"Identifier of the user or system that initiated the workflow simulation","input_field_not_visible":true}},"type":"object","title":"SimulationConfig"},"SimulationConfigModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"simulation_config":{"anyOf":[{"$ref":"#/components/schemas/SimulationConfig-Output"},{"type":"null"}],"description":"Simulation Configuration"}},"type":"object","title":"SimulationConfigModel","description":"Stores the simulation configurations in the workflow system."},"SimulationEvaluationSummaryResponse":{"properties":{"simulation_id":{"type":"string","title":"Simulation Id","description":"ID of the simulation configuration"},"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id","description":"ID of the specific simulation group (if filtering by group)"},"selected_workflow_summary":{"anyOf":[{"$ref":"#/components/schemas/WorkflowEvaluationSummary"},{"type":"null"}],"description":"Evaluation summary for the selected (source) workflow. None if no evaluation configured."},"counter_workflow_summary":{"anyOf":[{"$ref":"#/components/schemas/WorkflowEvaluationSummary"},{"type":"null"}],"description":"Evaluation summary for the counter workflow. None if no evaluation configured."}},"type":"object","required":["simulation_id"],"title":"SimulationEvaluationSummaryResponse","description":"Response model for aggregated evaluation results across all runs of a simulation."},"SimulationGroupListResponse":{"properties":{"simulation_groups":{"items":{"$ref":"#/components/schemas/SimulationGroupModel"},"type":"array","title":"Simulation Groups","description":"List of simulation groups"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of simulation groups available without pagination."}},"type":"object","title":"SimulationGroupListResponse","description":"Response model for a list of simulation groups.\nContains a list of SimulationGroupModel objects."},"SimulationGroupModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"simulation_config_id":{"$ref":"#/components/schemas/PydanticObjectId","description":"Reference to the SimulationConfigModel"},"status":{"$ref":"#/components/schemas/SimulationStatus","description":"Status of the overall simulation group","default":"pending"},"total_runs":{"type":"integer","title":"Total Runs","description":"Total number of runs requested","default":0},"completed_runs":{"type":"integer","title":"Completed Runs","description":"Number of runs completed","default":0},"failed_runs":{"type":"integer","title":"Failed Runs","description":"Number of runs failed","default":0}},"type":"object","required":["simulation_config_id"],"title":"SimulationGroupModel","description":"Stores the batch/group of simulation runs."},"SimulationGroupResponse":{"properties":{"simulation_group":{"$ref":"#/components/schemas/SimulationGroupModel","description":"Simulation group object"}},"type":"object","required":["simulation_group"],"title":"SimulationGroupResponse","description":"Response model for a simulation group run."},"SimulationListResponse":{"properties":{"simulations":{"items":{"$ref":"#/components/schemas/SimulationConfigModel"},"type":"array","title":"Simulations","description":"List of simulations"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of simulations available without pagination."}},"type":"object","title":"SimulationListResponse","description":"Response model for a list of simulations.\nContains a list of SimulationConfigModel objects."},"SimulationResponse":{"properties":{"simulation":{"$ref":"#/components/schemas/SimulationConfigModel","description":"Single simulation object"}},"type":"object","required":["simulation"],"title":"SimulationResponse","description":"Response model for a single simulation.\nContains a SimulationConfigModel object."},"SimulationStatus":{"type":"string","enum":["pending","running","completed","failed","cancelled"],"title":"SimulationStatus"},"SimulationWorkflowDetails-Input":{"properties":{"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"DB Object ID of the workflow this simulation is associated with"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this simulation is associated with. 0 is the initial version (default).","default":0},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Name","description":"Version name of the workflow this simulation is associated with"},"dynamic_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Workflow Dynamic Variables","description":"Dynamic variables to apply to the workflow"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Workflow Name","description":"Name of the selected workflow","input_field_not_visible":true},"total_events":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Events","description":"Total number of events processed in the selected workflow","default":0,"input_field_not_visible":true},"total_nodes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Nodes","description":"Total number of nodes in the selected workflow","default":0,"input_field_not_visible":true},"total_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Seconds","description":"Total duration in seconds for the selected workflow","default":0,"input_field_not_visible":true},"run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow Run ID","description":"Workflow Run ID of the executed workflow"}},"type":"object","title":"SimulationWorkflowDetails"},"SimulationWorkflowDetails-Output":{"properties":{"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"DB Object ID of the workflow this simulation is associated with"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this simulation is associated with. 0 is the initial version (default).","default":0},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Name","description":"Version name of the workflow this simulation is associated with"},"dynamic_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Workflow Dynamic Variables","description":"Dynamic variables to apply to the workflow"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Workflow Name","description":"Name of the selected workflow","input_field_not_visible":true},"total_events":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Events","description":"Total number of events processed in the selected workflow","default":0,"input_field_not_visible":true},"total_nodes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Nodes","description":"Total number of nodes in the selected workflow","default":0,"input_field_not_visible":true},"total_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Seconds","description":"Total duration in seconds for the selected workflow","default":0,"input_field_not_visible":true},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run ID","description":"Workflow Run ID of the executed workflow"}},"type":"object","title":"SimulationWorkflowDetails"},"StartConversationNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Conversation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"start_conversation","title":"Node Type","description":"Type of the node. Must be 'start_conversation'","default":"start_conversation","input_field_not_visible":true},"is_voice_conversation":{"type":"boolean","title":"Is Voice Conversation","description":"Whether this conversation is a voice-based conversation","default":false,"input_field_ui_order":201},"is_outbound_call":{"type":"boolean","title":"Is Outbound Call","description":"Whether this conversation is an outbound call","default":true,"input_field_ui_order":202},"bearer_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bearer Token","description":"The bearer token used for authenticating with the outbound phone call service","input_field_ui_order":203},"assistant_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assistant Phone Number","description":"The phone number assigned to the assistant to make the call from (in E.164 format)","input_field_ui_order":204},"assistant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assistant ID","description":"The ID of the assistant to use for the conversation","input_field_ui_order":205},"user_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Phone Number","description":"The phone number of the user to call (in E.164 format)","input_field_ui_order":206},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation ID","description":"The ID of the conversation to poll. If provided, an outbound call will not be initiated, and the system will instead poll for an existing conversation with this ID."},"polling_interval_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Polling Interval Seconds","description":"If polling for an existing conversation, the interval (in seconds) at which to poll for updates","default":2}},"type":"object","title":"Start Conversation Node"},"StartConversationNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Conversation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"start_conversation","title":"Node Type","description":"Type of the node. Must be 'start_conversation'","default":"start_conversation","input_field_not_visible":true},"is_voice_conversation":{"type":"boolean","title":"Is Voice Conversation","description":"Whether this conversation is a voice-based conversation","default":false,"input_field_ui_order":201},"is_outbound_call":{"type":"boolean","title":"Is Outbound Call","description":"Whether this conversation is an outbound call","default":true,"input_field_ui_order":202},"bearer_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bearer Token","description":"The bearer token used for authenticating with the outbound phone call service","input_field_ui_order":203},"assistant_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assistant Phone Number","description":"The phone number assigned to the assistant to make the call from (in E.164 format)","input_field_ui_order":204},"assistant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assistant ID","description":"The ID of the assistant to use for the conversation","input_field_ui_order":205},"user_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Phone Number","description":"The phone number of the user to call (in E.164 format)","input_field_ui_order":206},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation ID","description":"The ID of the conversation to poll. If provided, an outbound call will not be initiated, and the system will instead poll for an existing conversation with this ID."},"polling_interval_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Polling Interval Seconds","description":"If polling for an existing conversation, the interval (in seconds) at which to poll for updates","default":2}},"type":"object","title":"Start Conversation Node"},"StartConversationNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"start_conversation","title":"Type","description":"Discriminator field which must always be 'start_conversation'","default":"start_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"StartConversationNodeRunInput"},"StartConversationNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"start_conversation","title":"Type","description":"Discriminator field which must always be 'start_conversation'","default":"start_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"StartConversationNodeRunInput"},"StartConversationNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"start_conversation","title":"Type","description":"Discriminator field which must always be 'start_conversation'","default":"start_conversation"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation ID","description":"The ID of the conversation that was created or polled during the outbound phone call"}},"type":"object","title":"StartConversationNodeRunOutput"},"StartEndTimings":{"properties":{"start":{"type":"string","title":"Start Time","description":"Start time in HH:MM format"},"end":{"type":"string","title":"End Time","description":"End time in HH:MM format"}},"type":"object","required":["start","end"],"title":"StartEndTimings"},"StaticMessagesConfig":{"properties":{"static_messages":{"items":{"type":"string"},"type":"array","title":"Static Messages","description":"List of pre-configured messages from which one will be emitted"},"static_messages_selection_mode":{"anyOf":[{"$ref":"#/components/schemas/SelectionMode"},{"type":"null"}],"title":"Static Messages Selection Mode","description":"Selection mode for static messages","default":"random"}},"type":"object","title":"StaticMessagesConfig"},"SuperNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Super Node","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Super Node","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"super_node","title":"Node Type","description":"Type of the node. Must be 'super_node'","default":"super_node","input_field_not_visible":true},"super_workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Super Workflow ID","description":"The ID of the workflow encapsulated by this super node","input_field_not_visible":true},"super_workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Super Workflow Version Number","description":"Specific version of the encapsulated workflow. If None, the active version is used at execution time.","input_field_not_visible":true},"field_values":{"additionalProperties":true,"type":"object","title":"Field Values","description":"Values provided by the calling workflow for each of the super node's declared input fields. Keyed by SuperNodeInputField.name."},"override_llm_config":{"type":"boolean","title":"Override LLM Configuration","description":"When true, LLM-based nodes inside this super node use the LLM configuration specified here (attachable_llm_config_id or llms_config) instead of their own authored config. When false (the default), interior nodes keep their authored LLM configuration.","default":false},"override_only_workflow_default_nodes":{"type":"boolean","title":"Only Override Workflow-Default Nodes","description":"Scopes the LLM override. When false (the default), every interior LLM node is overridden. When true, only interior LLM nodes that are themselves set to 'Workflow Default LLM' (i.e. had no explicit config of their own) are overridden; nodes with an explicit inline/named config are left untouched. Only relevant when override_llm_config is true.","default":false},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to apply to the targeted interior LLM nodes. If provided, overrides the inline llms_config. Only relevant when override_llm_config is true.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"LLM Configuration","description":"Inline LLM configuration applied to the targeted interior LLM nodes. Use 'Workflow Default LLM' to fall back to the base workflow's workflow-level config. Only relevant when override_llm_config is true."},"reverse_edge_scope":{"anyOf":[{"$ref":"#/components/schemas/SuperNodeReverseEdgeScope"},{"type":"null"}],"title":"Reverse Edge Scope","description":"Controls which inlined sub-workflow nodes receive this super node's global_node_config.reverse_conditional_edge during expansion. When None (the default), behaves as 'all_interior_llm_nodes': the reverse is stamped onto every interior LLM node so the user can return to the caller from anywhere inside the super node. 'terminal_nodes' restricts it to the sub-workflow's terminal LLM nodes only. Only relevant when global_node_config.reverse_conditional_edge is set. Kept Optional (None == default behaviour) so the field can be removed later without breaking existing configs."},"super_node_interface":{"anyOf":[{"$ref":"#/components/schemas/SuperNodeInterface"},{"type":"null"}],"title":"Super Node Interface","description":"Interface definition for this super node. Copied from the super node entity at embedding time. Used by the expander at runtime to resolve field_values mappings. Not user-editable.","input_field_not_visible":true},"encapsulated_workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Input"},{"type":"null"}],"title":"Encapsulated Workflow Config","description":"Snapshot of the fully-hydrated sub-workflow config at the time this super node was embedded. Used by the expander at runtime instead of a DB fetch. Not user-editable.","input_field_not_visible":true}},"type":"object","title":"Super Node"},"SuperNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"Super Node","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Super Node","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"super_node","title":"Node Type","description":"Type of the node. Must be 'super_node'","default":"super_node","input_field_not_visible":true},"super_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Super Workflow ID","description":"The ID of the workflow encapsulated by this super node","input_field_not_visible":true},"super_workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Super Workflow Version Number","description":"Specific version of the encapsulated workflow. If None, the active version is used at execution time.","input_field_not_visible":true},"field_values":{"additionalProperties":true,"type":"object","title":"Field Values","description":"Values provided by the calling workflow for each of the super node's declared input fields. Keyed by SuperNodeInputField.name."},"override_llm_config":{"type":"boolean","title":"Override LLM Configuration","description":"When true, LLM-based nodes inside this super node use the LLM configuration specified here (attachable_llm_config_id or llms_config) instead of their own authored config. When false (the default), interior nodes keep their authored LLM configuration.","default":false},"override_only_workflow_default_nodes":{"type":"boolean","title":"Only Override Workflow-Default Nodes","description":"Scopes the LLM override. When false (the default), every interior LLM node is overridden. When true, only interior LLM nodes that are themselves set to 'Workflow Default LLM' (i.e. had no explicit config of their own) are overridden; nodes with an explicit inline/named config are left untouched. Only relevant when override_llm_config is true.","default":false},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to apply to the targeted interior LLM nodes. If provided, overrides the inline llms_config. Only relevant when override_llm_config is true.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"LLM Configuration","description":"Inline LLM configuration applied to the targeted interior LLM nodes. Use 'Workflow Default LLM' to fall back to the base workflow's workflow-level config. Only relevant when override_llm_config is true."},"reverse_edge_scope":{"anyOf":[{"$ref":"#/components/schemas/SuperNodeReverseEdgeScope"},{"type":"null"}],"title":"Reverse Edge Scope","description":"Controls which inlined sub-workflow nodes receive this super node's global_node_config.reverse_conditional_edge during expansion. When None (the default), behaves as 'all_interior_llm_nodes': the reverse is stamped onto every interior LLM node so the user can return to the caller from anywhere inside the super node. 'terminal_nodes' restricts it to the sub-workflow's terminal LLM nodes only. Only relevant when global_node_config.reverse_conditional_edge is set. Kept Optional (None == default behaviour) so the field can be removed later without breaking existing configs."},"super_node_interface":{"anyOf":[{"$ref":"#/components/schemas/SuperNodeInterface"},{"type":"null"}],"title":"Super Node Interface","description":"Interface definition for this super node. Copied from the super node entity at embedding time. Used by the expander at runtime to resolve field_values mappings. Not user-editable.","input_field_not_visible":true},"encapsulated_workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output"},{"type":"null"}],"title":"Encapsulated Workflow Config","description":"Snapshot of the fully-hydrated sub-workflow config at the time this super node was embedded. Used by the expander at runtime instead of a DB fetch. Not user-editable.","input_field_not_visible":true}},"type":"object","title":"Super Node"},"SuperNodeDetail":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"super_node_interface":{"anyOf":[{"$ref":"#/components/schemas/SuperNodeInterface"},{"type":"null"}]},"encapsulated_workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},{"type":"null"}]}},"type":"object","required":["workflow_id"],"title":"SuperNodeDetail","description":"Full super node definition returned to callers who want to embed the super node.\n\nContains the interface definition and a fresh hydrated snapshot of the sub-workflow\nconfig. Callers should store both in the SuperNodeConfig node they create in the\nparent workflow so the expander can run without a DB lookup at execution time."},"SuperNodeExpansionStep":{"properties":{"super_node_logical_id":{"type":"string","title":"Super Node Logical Id"},"super_workflow_id":{"type":"string","title":"Super Workflow Id"},"sub_workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sub Workflow Version Number"},"inlined_node_count":{"type":"integer","title":"Inlined Node Count"},"inlined_edge_count":{"type":"integer","title":"Inlined Edge Count"},"prefix_used":{"type":"string","title":"Prefix Used"}},"type":"object","required":["super_node_logical_id","super_workflow_id","inlined_node_count","inlined_edge_count","prefix_used"],"title":"SuperNodeExpansionStep","description":"Per-super-node summary of what was inlined."},"SuperNodeFieldMapping":{"properties":{"target_type":{"$ref":"#/components/schemas/SuperNodeFieldMappingTargetType","title":"Target Type","description":"Where to inject the field value: into a node's config field ('node_config_field'), an edge's config field ('edge_config_field'), the sub-workflow's WorkflowConfig ('workflow_config_field'), a dynamic variable ('dynamic_variable'), or a runtime variable ('runtime_variable')."},"target_node_or_edge_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Node or Edge Logical ID","description":"Logical ID of the node or edge in the sub-workflow whose config field should be set. Required when target_type is 'node_config_field' or 'edge_config_field'."},"target_field_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Field Path","description":"Dot-separated path to the target field. For 'node_config_field': path within the target node's config, e.g. 'main_response_config.prompt'. For 'edge_config_field': path within the target edge's config, e.g. 'condition.condition_string'. For 'workflow_config_field': path within the sub-workflow's WorkflowConfig, e.g. 'default_prompt_prefix'. Required when target_type is 'node_config_field', 'edge_config_field', or 'workflow_config_field'."},"target_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Variable Name","description":"Name of the variable to set. For 'dynamic_variable': sets a {{var}} dynamic variable, e.g. 'patient_name'. For 'runtime_variable': injects into the sub-workflow's runtime_variables dict. Required when target_type is 'dynamic_variable' or 'runtime_variable'."}},"type":"object","required":["target_type"],"title":"SuperNodeFieldMapping","description":"Defines where a super node input field value should be injected."},"SuperNodeFieldMappingTargetType":{"type":"string","enum":["node_config_field","dynamic_variable","edge_config_field","workflow_config_field","runtime_variable"],"title":"SuperNodeFieldMappingTargetType"},"SuperNodeInputField":{"properties":{"name":{"type":"string","title":"Field Name","description":"Unique key for this field within the super node interface. Callers set field_values[name] = value."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Human-readable description of what this field controls"},"required":{"type":"boolean","title":"Required","description":"Whether this field must be provided by callers. If False and not provided, default_value is used.","default":true},"default_value":{"anyOf":[{},{"type":"null"}],"title":"Default Value","description":"Default value used when required=False and the caller does not provide a value"},"json_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"JSON Schema","description":"JSON Schema for this field, used by the UI to render and validate the config form"},"mappings":{"items":{"$ref":"#/components/schemas/SuperNodeFieldMapping"},"type":"array","title":"Mappings","description":"Where and how to inject the provided value into the sub-workflow (node/edge config fields or dynamic variables)"},"value_type":{"$ref":"#/components/schemas/SuperNodeInputFieldValueType","title":"Value Type","description":"Declared shape of the leaf value. Used at publish time to reject malformed field_values. Default 'any' preserves legacy behaviour (no shape check).","default":"any"},"enum_values":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Enum Values","description":"Required when value_type='enum'. Caller's value must be in this list."},"min_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Value","description":"Inclusive lower bound for integer/number value types."},"max_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Value","description":"Inclusive upper bound for integer/number value types."},"min_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Length","description":"Inclusive lower length for string/array value types."},"max_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Length","description":"Inclusive upper length for string/array value types."}},"type":"object","required":["name"],"title":"SuperNodeInputField","description":"Defines one configuration field that callers must provide when instantiating this super node."},"SuperNodeInputFieldValueType":{"type":"string","enum":["string","integer","number","boolean","object","array","enum","any"],"title":"SuperNodeInputFieldValueType","description":"Declared shape of a super node input field's leaf value.\n\nUsed at parent-workflow publish time to validate ``SuperNodeConfig.field_values``\nagainst the interface declared by the sub-workflow."},"SuperNodeInterface":{"properties":{"input_fields":{"items":{"$ref":"#/components/schemas/SuperNodeInputField"},"type":"array","title":"Input Fields","description":"List of input fields exposed by this super node to calling workflows"}},"type":"object","title":"SuperNodeInterface","description":"The interface definition of a super node.\n\nDescribes what configuration fields callers must provide when instantiating this super node,\nand how those field values map into the encapsulated sub-workflow's nodes, edges, and dynamic variables."},"SuperNodeReverseEdgeScope":{"type":"string","enum":["all_interior_llm_nodes","terminal_nodes"],"title":"SuperNodeReverseEdgeScope","description":"Controls which inlined sub-workflow nodes receive the super node placeholder's\n``global_node_config.reverse_conditional_edge`` when the super node is expanded.\n\nThe reverse edge is surfaced to the model as a per-turn LLM tool, so in BOTH modes\nonly LLM-capable nodes are targeted — a static / HTTP / EndConversation node could\nnever fire it."},"SuperNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"super_node","title":"Type","description":"Discriminator field which must always be 'super_node'","default":"super_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"SuperNodeRunInput"},"SuperNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"super_node","title":"Type","description":"Discriminator field which must always be 'super_node'","default":"super_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"SuperNodeRunInput"},"SuperNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"super_node","title":"Type","description":"Discriminator field which must always be 'super_node'","default":"super_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"}},"type":"object","title":"SuperNodeRunOutput"},"SuperNodeSnapshotStatus":{"properties":{"super_node_logical_id":{"type":"string","title":"Super Node Logical Id","description":"logical_id of the SuperNodeConfig node in the parent"},"super_workflow_id":{"type":"string","title":"Super Workflow Id","description":"ObjectId of the sub-workflow this super node references"},"embedded_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Embedded Version","description":"Version number of the snapshot currently embedded in the SuperNodeConfig"},"latest_active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latest Active Version","description":"Latest active published version of the sub-workflow, or None if no active publish exists"},"is_stale":{"type":"boolean","title":"Is Stale","description":"True when latest_active_version exists and exceeds embedded_version"},"is_unpublished":{"type":"boolean","title":"Is Unpublished","description":"True when no active SuperNodesModel exists for the sub-workflow"}},"type":"object","required":["super_node_logical_id","super_workflow_id","is_stale","is_unpublished"],"title":"SuperNodeSnapshotStatus","description":"Per-super-node staleness report inside the parent workflow."},"SuperNodeSummary":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id","description":"MongoDB ObjectId of the encapsulated workflow"},"workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow snapshot this super node represents"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Super node display name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Super node description"},"num_input_fields":{"type":"integer","title":"Num Input Fields","description":"Number of input fields declared in the interface"}},"type":"object","required":["workflow_id","num_input_fields"],"title":"SuperNodeSummary","description":"Lightweight representation of a published super node."},"SystemMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"system","title":"Type","default":"system"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content"],"title":"SystemMessage","description":"Message for priming AI behavior.\n\nThe system message is usually passed in as the first of a sequence\nof input messages.\n\nExample:\n    ```python\n    from langchain_core.messages import HumanMessage, SystemMessage\n\n    messages = [\n        SystemMessage(content=\"You are a helpful assistant! Your name is Bob.\"),\n        HumanMessage(content=\"What is your name?\"),\n    ]\n\n    # Define a chat model and invoke it with the messages\n    print(model.invoke(messages))\n    ```"},"SystemMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"SystemMessageChunk","title":"Type","default":"SystemMessageChunk"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","required":["content"],"title":"SystemMessageChunk","description":"System Message chunk."},"ToolBundleExportResponse":{"properties":{"export_format":{"type":"string","title":"Export Format","description":"Export format identifier","default":"tool.v1"},"source_tool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tool Id","description":"Original tool _id"},"source_tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tool Name","description":"Original tool name"},"tool_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Type","description":"ToolType of the exported tool (discriminator)"},"tool_config":{"additionalProperties":true,"type":"object","title":"Tool Config","description":"Sanitized ToolConfig as a dict (identity fields stripped, secrets redacted)"},"redactions":{"items":{"$ref":"#/components/schemas/ToolRedaction"},"type":"array","title":"Redactions","description":"Fields whose values were replaced with the '<REDACTED>' sentinel"},"required_dynamic_variables":{"items":{"type":"string"},"type":"array","title":"Required Dynamic Variables","description":"Names of the dynamic/global variables this tool references. Values are team-scoped and are not carried in the bundle, so the importing team must define each name before the tool runs."},"exported_at":{"type":"string","format":"date-time","title":"Exported At","description":"Timestamp of export"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Non-fatal notes (team-scoped refs cleared, env-specific endpoint, raw api_body, etc.)"}},"type":"object","required":["tool_config"],"title":"ToolBundleExportResponse","description":"Self-describing envelope for an exported custom tool.\n\n``tool_config`` is a plain dict (not the ``ToolConfig`` model) so the\n``<REDACTED>`` sentinels survive serialization instead of being coerced\naway by the discriminated union."},"ToolBundleImportRequest":{"properties":{"bundle":{"$ref":"#/components/schemas/ToolBundleExportResponse","description":"The exported tool bundle to import"},"name_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Override","description":"Override for the imported tool's name"},"secret_overrides":{"additionalProperties":true,"type":"object","title":"Secret Overrides","description":"Dotted-path -> value for each redacted field being re-supplied, e.g. {'api_headers.Authorization': 'Bearer ...'}"},"clear_unresolved_refs":{"type":"boolean","title":"Clear Unresolved Refs","description":"Clear team-scoped refs (KB ids) that cannot resolve in the importing team","default":true},"confirm_executable":{"type":"boolean","title":"Confirm Executable","description":"Required True to import an inline_python tool (executable code)","default":false}},"type":"object","required":["bundle"],"title":"ToolBundleImportRequest"},"ToolCall":{"properties":{"name":{"type":"string","title":"Name"},"args":{"additionalProperties":true,"type":"object","title":"Args"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"type":{"type":"string","const":"tool_call","title":"Type"}},"additionalProperties":true,"type":"object","required":["name","args","id"],"title":"ToolCall","description":"Represents an AI's request to call a tool.\n\nExample:\n    ```python\n    {\"name\": \"foo\", \"args\": {\"a\": 1}, \"id\": \"123\"}\n    ```\n\n    This represents a request to call the tool named `'foo'` with arguments\n    `{\"a\": 1}` and an identifier of `'123'`.\n\n!!! note \"Factory function\"\n\n    `tool_call` may also be used as a factory to create a `ToolCall`. Benefits\n    include:\n\n    * Required arguments strictly validated at creation time"},"ToolCallChunk":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"args":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Args"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index"},"type":{"type":"string","const":"tool_call_chunk","title":"Type"}},"additionalProperties":true,"type":"object","required":["name","args","id","index"],"title":"ToolCallChunk","description":"A chunk of a tool call (yielded when streaming).\n\nWhen merging `ToolCallChunk` objects (e.g., via `AIMessageChunk.__add__`), all\nstring attributes are concatenated. Chunks are only merged if their values of\n`index` are equal and not `None`.\n\nExample:\n```python\nleft_chunks = [ToolCallChunk(name=\"foo\", args='{\"a\":', index=0)]\nright_chunks = [ToolCallChunk(name=None, args=\"1}\", index=0)]\n\n(\n    AIMessageChunk(content=\"\", tool_call_chunks=left_chunks)\n    + AIMessageChunk(content=\"\", tool_call_chunks=right_chunks)\n).tool_call_chunks == [ToolCallChunk(name=\"foo\", args='{\"a\":1}', index=0)]\n```"},"ToolExecuteInlineRequest":{"properties":{"tool_config":{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"title":"Tool Config","description":"Full tool config to execute inline, before any tool record is persisted.","discriminator":{"propertyName":"type","mapping":{"external_api":"#/components/schemas/ExternalAPIToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","inline_python":"#/components/schemas/InlinePythonToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}}},"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Argument values to invoke the tool with, keyed by the tool's parameter names."},"dry_run":{"type":"boolean","title":"Dry Run","description":"When True, side-effecting tools (writes/sends/unknown) are validated but NOT executed - no external effect occurs and a simulated result is returned. Pure/read-only tools run normally.","default":false},"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Test values for {{dynamic}} placeholders in the tool config (endpoint/headers/body/code). Resolved before execution to mirror the live workflow runtime. The team's global variables are applied automatically, exactly as the live runtime does; values supplied here override them."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Test values for [[runtime]] placeholders in the tool config (endpoint/headers/body/code). Resolved before execution to mirror the live workflow runtime."}},"type":"object","required":["tool_config"],"title":"ToolExecuteInlineRequest"},"ToolExecuteRequest":{"properties":{"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Argument values to invoke the tool with, keyed by the tool's parameter names."},"dry_run":{"type":"boolean","title":"Dry Run","description":"When True, side-effecting tools (writes/sends/unknown) are validated but NOT executed - no external effect occurs and a simulated result is returned. Pure/read-only tools run normally.","default":false},"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Test values for {{dynamic}} placeholders in the tool config (endpoint/headers/body/code). Resolved before execution to mirror the live workflow runtime. The team's global variables are applied automatically, exactly as the live runtime does; values supplied here override them."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Test values for [[runtime]] placeholders in the tool config (endpoint/headers/body/code). Resolved before execution to mirror the live workflow runtime."}},"type":"object","title":"ToolExecuteRequest"},"ToolExecuteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result","description":"The tool's return value on success."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Full human-readable error description when success is False. Always set on failure."},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms","description":"Wall-clock execution time in milliseconds."},"dry_run":{"type":"boolean","title":"Dry Run","description":"Whether this run was a validate-only dry run.","default":false},"side_effect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Side Effect","description":"The tool's side-effect classification (none/reads/writes/sends/unknown)."},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","description":"Error category: validation | timeout | runtime | connection | http_status | not_found."},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code","description":"Machine-readable error code: HTTP status (e.g. '404') for external API tools, or the exception class name (e.g. 'ValueError') otherwise."},"field_errors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Field Errors","description":"Per-argument validation messages keyed by the offending field name."},"truncated":{"type":"boolean","title":"Truncated","description":"Whether the result was truncated because it was too large.","default":false},"bound_arguments":{"anyOf":[{"items":{"$ref":"#/components/schemas/BoundArgumentReport"},"type":"array"},{"type":"null"}],"title":"Bound Arguments","description":"Arguments the workflow supplies from its own variables rather than the caller: what each one is bound to, whether it resolved, and the shape of the value — never a value read from a variable. A list of records rather than a name→value map, so the provenance travels with each entry; see BoundArgumentReport for why that matters."},"effective_result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Result Runtime Variable Name","description":"The runtime variable this tool's result belongs in, read from the config that actually ran. For a tool attached by tool_id that is the *saved* tool's name, which the attachment does not carry — so a caller that stores the result must use this rather than reading the config it passed in. None only when the config could not be resolved at all, since naming a variable for a config that never resolved would be a guess."},"result_variable_updates":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Variable Updates","description":"Runtime variables the tool's own config asks for its result to be mapped onto — result_variable_mappings plus expand_result_into_runtime_variables. None when the config declares neither (the common case); an empty map means it declared some and none could be produced. Like the name above, these are reachable only after the by-reference merge."},"result_workflow_variable_updates":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Workflow Variable Updates","description":"The same, for mappings the tool declares with scope='workflow'. Kept separate rather than merged because they belong in a different store — the run's shared memory rather than this thread's — and a caller that wrote them to the thread instead would give each one a thread-local shadow that then wins over it everywhere. A caller with no workflow run (the Test-Tool routes) has nowhere to put these and may ignore them."},"result_mapping_errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Result Mapping Errors","description":"Required result mappings that could not be satisfied. The tool still SUCCEEDED — a mapping failure is a statement about the workflow's expectation of the result, not about the call — so this is populated alongside success=True and a full result."}},"type":"object","required":["success"],"title":"ToolExecuteResponse","description":"The API's name for :class:`ToolExecutionResult`.\n\nSubclassed rather than aliased so the published OpenAPI schema keeps its name while the shape\nitself lives in the framework, shared with every other caller that executes a tool."},"ToolMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"tool","title":"Type","default":"tool"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"tool_call_id":{"type":"string","title":"Tool Call Id"},"artifact":{"title":"Artifact"},"status":{"type":"string","enum":["success","error"],"title":"Status","default":"success"}},"additionalProperties":true,"type":"object","required":["content","tool_call_id"],"title":"ToolMessage","description":"Message for passing the result of executing a tool back to a model.\n\n`ToolMessage` objects contain the result of a tool invocation. Typically, the result\nis encoded inside the `content` field.\n\n`tool_call_id` is used to associate the tool call request with the tool call\nresponse. Useful in situations where a chat model is able to request multiple tool\ncalls in parallel.\n\nExample:\n    A `ToolMessage` representing a result of `42` from a tool call with id\n\n    ```python\n    from langchain_core.messages import ToolMessage\n\n    ToolMessage(content=\"42\", tool_call_id=\"call_Jja7J89XsjrOLA5r!MEOW!SL\")\n    ```\n\nExample:\n    A `ToolMessage` where only part of the tool output is sent to the model\n    and the full output is passed in to artifact.\n\n    ```python\n    from langchain_core.messages import ToolMessage\n\n    tool_output = {\n        \"stdout\": \"From the graph we can see that the correlation between \"\n        \"x and y is ...\",\n        \"stderr\": None,\n        \"artifacts\": {\"type\": \"image\", \"base64_data\": \"/9j/4gIcSU...\"},\n    }\n\n    ToolMessage(\n        content=tool_output[\"stdout\"],\n        artifact=tool_output,\n        tool_call_id=\"call_Jja7J89XsjrOLA5r!MEOW!SL\",\n    )\n    ```"},"ToolMessageChunk":{"properties":{"content":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"type":"array"}],"title":"Content"},"additional_kwargs":{"additionalProperties":true,"type":"object","title":"Additional Kwargs"},"response_metadata":{"additionalProperties":true,"type":"object","title":"Response Metadata"},"type":{"type":"string","const":"ToolMessageChunk","title":"Type","default":"ToolMessageChunk"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"tool_call_id":{"type":"string","title":"Tool Call Id"},"artifact":{"title":"Artifact"},"status":{"type":"string","enum":["success","error"],"title":"Status","default":"success"}},"additionalProperties":true,"type":"object","required":["content","tool_call_id"],"title":"ToolMessageChunk","description":"Tool Message chunk."},"ToolNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Tool","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"tool_node","title":"Type","description":"Type of the node. Must be 'tool_node'","default":"tool_node"},"tool_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"discriminator":{"propertyName":"type","mapping":{"external_api":"#/components/schemas/ExternalAPIToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","inline_python":"#/components/schemas/InlinePythonToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}}},{"type":"null"}],"title":"Tool Configuration","description":"Configuration for the tool to be executed"},"tool_arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments","description":"Arguments to pass to the tool. Can contain dynamic/runtime variables as strings or inside nested structures."},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result of the tool execution. Leaving this at 'tool_result' means inherit: if the attached tool names its own result variable, that name is used. Any OTHER name set here overrides the tool. 'tool_result' cannot be used to override a tool that names something else — it is indistinguishable from not having chosen. The success flag and error message follow whichever name wins, as <name>_success and <name>_error.","default":"tool_result"},"preserve_argument_types":{"type":"boolean","title":"Preserve Argument Types","description":"When true, a tool_arguments value that is exactly one placeholder (e.g. '[[patient]]' with nothing around it) resolves to the variable's native value — dict, list, int, bool, None — instead of its string form, and an unresolved one becomes None rather than the literal placeholder text. Mixed strings such as 'Hello {{name}}' are interpolated as before. Off by default because it changes the type an existing tool receives.","default":false}},"type":"object","title":"ToolNodeConfig"},"ToolNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Tool","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"tool_node","title":"Type","description":"Type of the node. Must be 'tool_node'","default":"tool_node"},"tool_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"discriminator":{"propertyName":"type","mapping":{"external_api":"#/components/schemas/ExternalAPIToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","inline_python":"#/components/schemas/InlinePythonToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}}},{"type":"null"}],"title":"Tool Configuration","description":"Configuration for the tool to be executed"},"tool_arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments","description":"Arguments to pass to the tool. Can contain dynamic/runtime variables as strings or inside nested structures."},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result of the tool execution. Leaving this at 'tool_result' means inherit: if the attached tool names its own result variable, that name is used. Any OTHER name set here overrides the tool. 'tool_result' cannot be used to override a tool that names something else — it is indistinguishable from not having chosen. The success flag and error message follow whichever name wins, as <name>_success and <name>_error.","default":"tool_result"},"preserve_argument_types":{"type":"boolean","title":"Preserve Argument Types","description":"When true, a tool_arguments value that is exactly one placeholder (e.g. '[[patient]]' with nothing around it) resolves to the variable's native value — dict, list, int, bool, None — instead of its string form, and an unresolved one becomes None rather than the literal placeholder text. Mixed strings such as 'Hello {{name}}' are interpolated as before. Off by default because it changes the type an existing tool receives.","default":false}},"type":"object","title":"ToolNodeConfig"},"ToolNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"tool_node","title":"Type","description":"Discriminator field which must always be 'tool_node'","default":"tool_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"ToolNodeRunInput"},"ToolNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"tool_node","title":"Type","description":"Discriminator field which must always be 'tool_node'","default":"tool_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"ToolNodeRunInput"},"ToolNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"tool_node","title":"Type","description":"Discriminator field which must always be 'tool_node'","default":"tool_node"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"success":{"type":"boolean","title":"Success","description":"Indicates whether the tool execution was successful","default":false},"tool_result":{"anyOf":[{},{"type":"null"}],"title":"Tool Result","description":"The resulting output of the tool execution"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the tool execution failed"}},"type":"object","title":"ToolNodeRunOutput"},"ToolRedaction":{"properties":{"path":{"type":"string","title":"Path","description":"Dotted path to the redacted field, e.g. 'api_headers.Authorization'"},"reason":{"type":"string","title":"Reason","description":"Why it was redacted, e.g. 'sensitive header'"}},"type":"object","required":["path","reason"],"title":"ToolRedaction","description":"A single field whose value was redacted from a tool export."},"ToolResultVariableMapping":{"properties":{"target_variable_name":{"type":"string","title":"Target Variable Name","description":"Runtime variable to write. Readable downstream as [[<name>]]. Must be a plain name: letters, digits and underscores, not starting with a digit or an underscore."},"result_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Path","description":"Path into the returned value, e.g. 'score', 'patient.dob' or 'rows[0].id'. Leave empty to assign the whole return value."},"scope":{"$ref":"#/components/schemas/ToolResultVariableScope","title":"Scope","description":"Which variable store to write to. 'thread' (the default) writes to the conversation this tool ran in, and is what almost every mapping wants. 'workflow' writes to the run's shared memory, readable as [[<name>]] from every node in every thread — use it for something established once and true for the whole run, such as a verified patient id. A thread-local variable of the same name always wins where both exist.","default":"thread"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default Value","description":"Value written when result_path is not present in the return value."},"required":{"type":"boolean","title":"Required","description":"When true, a missing result_path marks the tool call as failed and records the reason in <result_runtime_variable_name>_error, instead of writing the default.","default":false}},"type":"object","required":["target_variable_name"],"title":"Tool Result Variable Mapping","description":"Assigns part of a tool's return value to a named runtime variable.\n\nWithout this, a tool's return value lands under a single name and can only be read as\n``[[tool_result.score]]``. Mapping it lets a tool that returns a dict — which is nearly all of them —\npopulate several individually-named variables that downstream prompts and conditional edges can use\ndirectly."},"ToolResultVariableScope":{"type":"string","enum":["thread","workflow"],"title":"ToolResultVariableScope","description":"Which variable store a mapped tool result is written to."},"ToolType":{"type":"string","enum":["inbuilt_function","inline_python","external_api","knowledge_base"],"title":"ToolType","description":"Enumeration of tool types."},"ToolVariableArgument":{"properties":{"argument_name":{"type":"string","title":"Argument Name","description":"The keyword argument name passed to the tool function."},"source":{"$ref":"#/components/schemas/ToolVariableSource","title":"Source","description":"Which variable namespace to read from: 'runtime' for [[vars]], 'dynamic' for {{vars}}, 'auto' to try runtime first and then dynamic, or 'literal' to use literal_value verbatim.","default":"auto"},"variable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variable Path","description":"Path to the value, e.g. 'patient_record', 'patient_record.dob', 'items[0].id', or a node-qualified key such as 'Collect Insurance.dob'. Required unless source is 'literal'."},"literal_value":{"anyOf":[{},{"type":"null"}],"title":"Literal Value","description":"Used verbatim when source is 'literal'. Lets a tool argument be pinned to a constant."},"default":{"anyOf":[{},{"type":"null"}],"title":"Default Value","description":"Value used when the variable is absent or holds None. Ignored when required is true."},"required":{"type":"boolean","title":"Required","description":"When true, a missing variable fails the tool call with a named error instead of passing the default. Use for arguments the tool genuinely cannot run without.","default":false},"expose_to_llm":{"type":"boolean","title":"Expose To LLM","description":"When false (the default) this argument is stripped from the args_schema the model sees, so the model is never asked for it and cannot supply it. Set true only when the model should be able to override the bound value.","default":false},"override_provided_value":{"type":"boolean","title":"Override Provided Value","description":"When true the bound value replaces anything the caller (the model, or the node's tool_arguments) supplied under the same name. When false the bound value acts as a fallback used only if the caller omitted the argument.","default":true}},"type":"object","required":["argument_name"],"title":"Tool Variable Argument","description":"One argument supplied to a tool by the workflow rather than by the model or the node author.\n\nResolved fresh at every invocation from the variable snapshot in effect at that moment, and passed\nto the tool as a **native Python value**. That is the whole point of this model: the pre-existing\nroutes for getting a variable into a tool are string interpolation into ``tool_arguments`` (which\nturns a dict into its ``repr()`` and an int into ``\"41\"``) and textual substitution into an inline\ntool's ``code`` (which is code injection). Neither can carry a value with its type intact.\n\nBound arguments are hidden from the model's ``args_schema`` by default and override anything the\ncaller supplied, so a value the workflow owns cannot be invented or contradicted by generated JSON."},"ToolVariableSource":{"type":"string","enum":["auto","runtime","dynamic","literal"],"title":"ToolVariableSource","description":"Which namespace a variable-bound tool argument is read from."},"ToolsConfig":{"properties":{"tools":{"items":{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"discriminator":{"propertyName":"type","mapping":{"external_api":"#/components/schemas/ExternalAPIToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","inline_python":"#/components/schemas/InlinePythonToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}}},"type":"array","title":"Tools Configuration","description":"List of tool configurations"}},"type":"object","title":"Tools Configuration"},"ToolsFilter":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id","description":"Filter by logical ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Filter by tool name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Filter by tool category"},"type":{"anyOf":[{"$ref":"#/components/schemas/ToolType"},{"type":"null"}],"description":"Filter by tool type"}},"type":"object","title":"ToolsFilter"},"ToolsListResponse":{"properties":{"tools":{"items":{"$ref":"#/components/schemas/ToolsModel"},"type":"array","title":"Tools","description":"List of tools"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of tools available without pagination."}},"type":"object","title":"ToolsListResponse","description":"Response model for a list of tools.\nContains a list of ToolsModel objects."},"ToolsModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"tool_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/InlinePythonToolConfig"},{"$ref":"#/components/schemas/InbuiltFunctionToolConfig"},{"$ref":"#/components/schemas/ExternalAPIToolConfig"},{"$ref":"#/components/schemas/KnowledgeBaseToolConfig"}],"discriminator":{"propertyName":"type","mapping":{"external_api":"#/components/schemas/ExternalAPIToolConfig","inbuilt_function":"#/components/schemas/InbuiltFunctionToolConfig","inline_python":"#/components/schemas/InlinePythonToolConfig","knowledge_base":"#/components/schemas/KnowledgeBaseToolConfig"}}},{"type":"null"}],"title":"Tool Config","description":"Tool Configuration"}},"type":"object","title":"ToolsModel","description":"Stores a tool config present in the workflow system.\nIt contains configuration fields for different types of tools (inbuilt_function, inline_python, external_api)."},"ToolsResponse":{"properties":{"tool":{"$ref":"#/components/schemas/ToolsModel","description":"Single tool object"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advisory notes: the write succeeded, but the config will not work yet — e.g. an imported tool whose dynamic variables this team has not defined."}},"type":"object","required":["tool"],"title":"ToolsResponse","description":"Response model for a single tool.\nContains a ToolsModel object."},"TurnRerunnability":{"properties":{"turn_index":{"type":"integer","title":"Turn Index"},"rerunnable":{"type":"boolean","title":"Rerunnable"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Why this turn cannot be re-run. Shown as the disabled control's tooltip."},"rerun_count":{"type":"integer","title":"Rerun Count","description":"How many runs have already been started from this turn. Without a durable checkpoint entity this count, derived from run lineage, is the only record that they happened.","default":0}},"type":"object","required":["turn_index","rerunnable"],"title":"TurnRerunnability","description":"Everything the turn header needs to know about re-running one turn: can it, and has it been."},"UnpublishSuperNodeResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"workflow_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number that was unpublished"},"message":{"type":"string","title":"Message"},"dry_run":{"type":"boolean","title":"Dry Run","description":"When true, the super node was NOT actually unpublished; the response only previews which workflows reference it. Used by the UI to show a confirmation dialog before a real DELETE.","default":false},"workflows_referencing":{"items":{"type":"string"},"type":"array","title":"Workflows Referencing","description":"IDs of other workflows that currently embed this super node. They will break at execution time. May be truncated — see ``workflows_referencing_total`` and ``workflows_referencing_truncated``."},"workflows_referencing_total":{"type":"integer","title":"Workflows Referencing Total","description":"Total number of dependent workflows, regardless of truncation.","default":0},"workflows_referencing_truncated":{"type":"boolean","title":"Workflows Referencing Truncated","description":"True when ``workflows_referencing`` was capped and additional dependents exist beyond the returned list. Use the dedicated dependents endpoint to page through them.","default":false}},"type":"object","required":["workflow_id","message"],"title":"UnpublishSuperNodeResponse","description":"Response after unpublishing a super node."},"UpdateConcurrencyRequest":{"properties":{"max_concurrent_runs":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Concurrent Runs","description":"Maximum concurrent runs for this workflow. Set to 0 or None to remove the per-workflow limit (team-level limit still applies)."}},"type":"object","title":"UpdateConcurrencyRequest","description":"Request body for updating the per-workflow concurrency limit."},"UpdateGlobalVariableRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":256,"minLength":1},{"type":"null"}],"title":"Name"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"is_secret":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Secret"}},"type":"object","title":"UpdateGlobalVariableRequest"},"UpdateVersionNameRequest":{"properties":{"version_name":{"type":"string","minLength":1,"title":"Version Name","description":"New version name for the version"}},"type":"object","required":["version_name"],"title":"UpdateVersionNameRequest"},"UsageMetadata":{"properties":{"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"},"input_token_details":{"$ref":"#/components/schemas/InputTokenDetails"},"output_token_details":{"$ref":"#/components/schemas/OutputTokenDetails"}},"additionalProperties":true,"type":"object","required":["input_tokens","output_tokens","total_tokens"],"title":"UsageMetadata","description":"Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n    ```python\n    {\n        \"input_tokens\": 350,\n        \"output_tokens\": 240,\n        \"total_tokens\": 590,\n        \"input_token_details\": {\n            \"audio\": 10,\n            \"cache_creation\": 200,\n            \"cache_read\": 100,\n        },\n        \"output_token_details\": {\n            \"audio\": 10,\n            \"reasoning\": 200,\n        },\n    }\n    ```\n\n!!! warning \"Behavior changed in `langchain-core` 0.3.9\"\n\n    Added `input_token_details` and `output_token_details`.\n\n!!! note \"LangSmith SDK\"\n\n    The LangSmith SDK also has a `UsageMetadata` class. While the two share fields,\n    LangSmith's `UsageMetadata` has additional fields to capture cost information\n    used by the LangSmith platform."},"UseCase":{"type":"string","enum":["appointment_scheduling","appointment_cancellation","appointment_rescheduling","appointment_scheduling_with_waitlist","medication_refill","invoice_billing"],"title":"UseCase"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VersionDiffResult":{"properties":{"version1_number":{"type":"integer","title":"Version1 Number"},"version1_name":{"type":"string","title":"Version1 Name"},"version2_number":{"type":"integer","title":"Version2 Number"},"version2_name":{"type":"string","title":"Version2 Name"},"workflow_config_changes":{"items":{"$ref":"#/components/schemas/FieldDiff"},"type":"array","title":"Workflow Config Changes","default":[]},"nodes":{"items":{"$ref":"#/components/schemas/NodeDiff"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"$ref":"#/components/schemas/EdgeDiff"},"type":"array","title":"Edges","default":[]},"summary":{"additionalProperties":{"type":"integer"},"type":"object","title":"Summary","default":{}}},"type":"object","required":["version1_number","version1_name","version2_number","version2_name"],"title":"VersionDiffResult","description":"Complete diff result between two versions."},"WaitingEvaluationTriggerMode":{"type":"string","enum":["on_node_completion","on_every_background_tick"],"title":"WaitingEvaluationTriggerMode","description":"What arms an evaluation of a conditional edge while its source node waits for user input."},"WorkerLLMNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"LLM","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Whether this node will execute again if not transitioned to another node","default":false},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Whether the node should wait for a user message before processing","default":true,"field_visibility_level":"developer"},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Default error message to be returned if the LLM invocation fails","default":"I am sorry, there seems to be an issue. Could you please repeat?"},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"worker_llm","title":"Node Type","description":"Type of the node. Must be 'worker_llm'","default":"worker_llm","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured output of the worker node. Example: \n{\n        \"name\": \"SearchQuery\",\n        \"description\": \"A search query with justification\",\n        \"input_schema\": {\n            \"title\": \"AnswerWithJustification\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"search_query\": {\n                    \"title\": \"Search Query\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where search query is stored\"\n                },\n                \"justification\": {\n                    \"title\": \"Justification\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where justification string is stored\"\n                }\n            },\n            \"required\": [\"search_query\", \"justification\"]\n        }\n    }\n","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"}},"type":"object","title":"Worker LLM Node"},"WorkerLLMNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"LLM","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Whether this node will execute again if not transitioned to another node","default":false},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Whether the node should wait for a user message before processing","default":true,"field_visibility_level":"developer"},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Default error message to be returned if the LLM invocation fails","default":"I am sorry, there seems to be an issue. Could you please repeat?"},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"worker_llm","title":"Node Type","description":"Type of the node. Must be 'worker_llm'","default":"worker_llm","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured output of the worker node. Example: \n{\n        \"name\": \"SearchQuery\",\n        \"description\": \"A search query with justification\",\n        \"input_schema\": {\n            \"title\": \"AnswerWithJustification\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"search_query\": {\n                    \"title\": \"Search Query\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where search query is stored\"\n                },\n                \"justification\": {\n                    \"title\": \"Justification\",\n                    \"type\": \"string\",\n                    \"description\": \"The field where justification string is stored\"\n                }\n            },\n            \"required\": [\"search_query\", \"justification\"]\n        }\n    }\n","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"}},"type":"object","title":"Worker LLM Node"},"WorkerLLMNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"worker_llm","title":"Type","description":"Discriminator field which must always be 'worker_llm'","default":"worker_llm"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"structured_output":{"additionalProperties":true,"type":"object","title":"Structured Output","description":"Structured output from the worker node"}},"type":"object","title":"WorkerLLMNodeRunOutput"},"WorkflowAccessConfig-Input":{"properties":{"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the workflow"},"access_list":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs that have access to this workflow","input_field_not_visible":true}},"type":"object","title":"WorkflowAccessConfig"},"WorkflowAccessConfig-Output":{"properties":{"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the workflow"},"access_list":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs that have access to this workflow","input_field_not_visible":true}},"type":"object","title":"WorkflowAccessConfig"},"WorkflowBundleExportResponse-Input":{"properties":{"export_format":{"type":"string","title":"Export Format","description":"Export format identifier","default":"v2"},"source_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Workflow Id","description":"Original workflow ID"},"source_workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Workflow Name","description":"Original workflow name"},"active_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version Number","description":"Active version number among the exported versions"},"versions":{"items":{"$ref":"#/components/schemas/WorkflowBundleVersion-Input"},"type":"array","title":"Versions","description":"List of exported versions"},"exported_at":{"type":"string","format":"date-time","title":"Exported At","description":"Timestamp of export"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Warnings generated during export (e.g. stripped keys, broken references)"}},"type":"object","required":["versions"],"title":"WorkflowBundleExportResponse"},"WorkflowBundleExportResponse-Output":{"properties":{"export_format":{"type":"string","title":"Export Format","description":"Export format identifier","default":"v2"},"source_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Workflow Id","description":"Original workflow ID"},"source_workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Workflow Name","description":"Original workflow name"},"active_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version Number","description":"Active version number among the exported versions"},"versions":{"items":{"$ref":"#/components/schemas/WorkflowBundleVersion-Output"},"type":"array","title":"Versions","description":"List of exported versions"},"exported_at":{"type":"string","format":"date-time","title":"Exported At","description":"Timestamp of export"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Warnings generated during export (e.g. stripped keys, broken references)"}},"type":"object","required":["versions"],"title":"WorkflowBundleExportResponse"},"WorkflowBundleImportRequest":{"properties":{"bundle":{"$ref":"#/components/schemas/WorkflowBundleExportResponse-Input","description":"The exported bundle containing workflow versions"},"versions_to_import":{"items":{"type":"integer"},"type":"array","title":"Versions To Import","description":"List of version numbers to import from the bundle"},"active_version_number":{"type":"integer","title":"Active Version Number","description":"Version number to set as active in the new workflow","default":0},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name","description":"Optional override for the workflow name"}},"type":"object","required":["bundle"],"title":"WorkflowBundleImportRequest"},"WorkflowBundleVersion-Input":{"properties":{"version_number":{"type":"integer","title":"Version Number","description":"Version number"},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name","description":"Version name"},"workflow_config":{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Input","description":"Fully hydrated workflow config"}},"type":"object","required":["version_number","workflow_config"],"title":"WorkflowBundleVersion"},"WorkflowBundleVersion-Output":{"properties":{"version_number":{"type":"integer","title":"Version Number","description":"Version number"},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name","description":"Version name"},"workflow_config":{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output","description":"Fully hydrated workflow config"}},"type":"object","required":["version_number","workflow_config"],"title":"WorkflowBundleVersion"},"WorkflowCategoriesResponse":{"properties":{"categories":{"items":{"type":"string"},"type":"array","title":"Categories","description":"List of available workflow category names"}},"type":"object","title":"WorkflowCategoriesResponse"},"WorkflowCommand":{"type":"string","enum":["start","data","resume","pause","stop"],"title":"WorkflowCommand"},"WorkflowConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Logical ID","description":"Unique identifier for the workflow","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name","description":"Name of the workflow"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Description","description":"Description of the workflow","input_field_type":"textarea"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Category","description":"Category of the workflow (e.g. 'User Created', 'System Examples', 'System Internal')","default":"User Created","input_field_not_visible":true},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"Workflow LLM Configuration","description":"Workflow level configuration for LLM based nodes used in the workflow. This will be used if no specific LLM configuration is provided for a node","default":{"logical_id":"llm_bbd2f738-3c3d-42f0-baaf-293ac91c24c4","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"no_llm"}},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Global Main Response Configuration","description":"Global main response configuration. Contains either a LLM system prompt or exact static messages. This will be used if no specific prompt config is provided for a node"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Global Backchannel Response Configuration","description":"Global backchannel response configuration. Contains either a LLM system prompt or exact static messages. This will be used if no specific backchannel prompt config is provided for a node"},"default_prompt_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Global Default Prompt Prefix","description":"If present, this string will be added as prefix to every node's system prompt","input_field_type":"textarea"},"default_prompt_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Global Default Prompt Suffix","description":"If present, this string will be added as suffix to every node's system prompt","input_field_type":"textarea"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, every LLM node in this workflow behaves as if ignore_content_received_during_llm_tool_call_specification is true, and every tool behaves as if ignore_content_received_during_llm_tool_call_specification is true: free-text content the LLM returns in the same response as one or more tool calls is ignored and treated as empty.","default":false},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Global Tools Configuration","description":"Global list of tools available to all LLM based nodes in the workflow"},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerConfig"},"type":"array"},{"type":"null"}],"title":"MCP Server Configurations","description":"List of MCP server connections. Tools discovered from these servers are available to nodes with use_mcp_tools enabled."},"global_condition_evaluation_method":{"anyOf":[{"$ref":"#/components/schemas/agentic_workflow_framework__configs__workflow__GlobalConditionEdgeEvaluationMethod"},{"type":"null"}],"title":"Global Condition Evaluation Method","description":"Method used to evaluate global conditions for all nodes in this workflow.","default":"tool_call"},"nodes":{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array","title":"Node Configurations","description":"List of node configurations in the workflow","input_field_not_visible":true},"edges":{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array","title":"Edge Configurations","description":"List of edge configurations in the workflow","input_field_not_visible":true},"evaluation_config":{"anyOf":[{"$ref":"#/components/schemas/EvaluationConfig-Input"},{"type":"null"}],"title":"Evaluation Configuration","description":"Configuration for evaluating the workflow execution. If not provided, no evaluation will be performed"},"guardrail_strikes_config":{"anyOf":[{"$ref":"#/components/schemas/GuardrailStrikesConfig"},{"type":"null"}],"title":"Guardrail Strikes Configuration","description":"Configuration for guardrail-node strike counting and escalation."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the workflow","field_visibility_level":"developer"},"access_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowAccessConfig-Input"},{"type":"null"}],"title":"Access Config","description":"Access control configuration for the workflow","input_field_not_visible":true}},"type":"object","title":"WorkflowConfig"},"WorkflowConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Logical ID","description":"Unique identifier for the workflow","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name","description":"Name of the workflow"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Description","description":"Description of the workflow","input_field_type":"textarea"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Category","description":"Category of the workflow (e.g. 'User Created', 'System Examples', 'System Internal')","default":"User Created","input_field_not_visible":true},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"Workflow LLM Configuration","description":"Workflow level configuration for LLM based nodes used in the workflow. This will be used if no specific LLM configuration is provided for a node","default":{"logical_id":"llm_bbd2f738-3c3d-42f0-baaf-293ac91c24c4","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"no_llm"}},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Global Main Response Configuration","description":"Global main response configuration. Contains either a LLM system prompt or exact static messages. This will be used if no specific prompt config is provided for a node"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Global Backchannel Response Configuration","description":"Global backchannel response configuration. Contains either a LLM system prompt or exact static messages. This will be used if no specific backchannel prompt config is provided for a node"},"default_prompt_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Global Default Prompt Prefix","description":"If present, this string will be added as prefix to every node's system prompt","input_field_type":"textarea"},"default_prompt_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Global Default Prompt Suffix","description":"If present, this string will be added as suffix to every node's system prompt","input_field_type":"textarea"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, every LLM node in this workflow behaves as if ignore_content_received_during_llm_tool_call_specification is true, and every tool behaves as if ignore_content_received_during_llm_tool_call_specification is true: free-text content the LLM returns in the same response as one or more tool calls is ignored and treated as empty.","default":false},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Global Tools Configuration","description":"Global list of tools available to all LLM based nodes in the workflow"},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerConfig"},"type":"array"},{"type":"null"}],"title":"MCP Server Configurations","description":"List of MCP server connections. Tools discovered from these servers are available to nodes with use_mcp_tools enabled."},"global_condition_evaluation_method":{"anyOf":[{"$ref":"#/components/schemas/agentic_workflow_framework__configs__workflow__GlobalConditionEdgeEvaluationMethod"},{"type":"null"}],"title":"Global Condition Evaluation Method","description":"Method used to evaluate global conditions for all nodes in this workflow.","default":"tool_call"},"nodes":{"items":{"type":"string"},"type":"array","title":"Node Configurations","description":"List of node configurations in the workflow","input_field_not_visible":true},"edges":{"items":{"type":"string"},"type":"array","title":"Edge Configurations","description":"List of edge configurations in the workflow","input_field_not_visible":true},"evaluation_config":{"anyOf":[{"$ref":"#/components/schemas/EvaluationConfig-Output"},{"type":"null"}],"title":"Evaluation Configuration","description":"Configuration for evaluating the workflow execution. If not provided, no evaluation will be performed"},"guardrail_strikes_config":{"anyOf":[{"$ref":"#/components/schemas/GuardrailStrikesConfig"},{"type":"null"}],"title":"Guardrail Strikes Configuration","description":"Configuration for guardrail-node strike counting and escalation."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the workflow","field_visibility_level":"developer"},"access_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowAccessConfig-Output"},{"type":"null"}],"title":"Access Config","description":"Access control configuration for the workflow","input_field_not_visible":true}},"type":"object","title":"WorkflowConfig"},"WorkflowConfigFullyHydrated-Input":{"properties":{"workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfig-Input"},{"type":"null"}],"description":"Workflow configuration for runtime"},"node_configs":{"items":{"oneOf":[{"$ref":"#/components/schemas/WorkerLLMNodeConfig-Input"},{"$ref":"#/components/schemas/SayLLMNodeConfig-Input"},{"$ref":"#/components/schemas/SayStaticMessageNodeConfig-Input"},{"$ref":"#/components/schemas/SuperNodeConfig-Input"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeConfig-Input"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Input"},{"$ref":"#/components/schemas/ToolNodeConfig-Input"},{"$ref":"#/components/schemas/StartConversationNodeConfig-Input"},{"$ref":"#/components/schemas/EndConversationNodeConfig-Input"},{"$ref":"#/components/schemas/SendSMSNodeConfig-Input"},{"$ref":"#/components/schemas/GoogleDocsNodeConfig-Input"},{"$ref":"#/components/schemas/HttpRequestNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Input"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Input"},{"$ref":"#/components/schemas/DeduplicateNodeConfig-Input"},{"$ref":"#/components/schemas/FieldExtractorNodeConfig-Input"},{"$ref":"#/components/schemas/NoOpNodeConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Input","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeConfig-Input","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeConfig-Input","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Input","deduplicate":"#/components/schemas/DeduplicateNodeConfig-Input","end_conversation":"#/components/schemas/EndConversationNodeConfig-Input","field_extractor":"#/components/schemas/FieldExtractorNodeConfig-Input","google_docs":"#/components/schemas/GoogleDocsNodeConfig-Input","http_request":"#/components/schemas/HttpRequestNodeConfig-Input","no_op":"#/components/schemas/NoOpNodeConfig-Input","say_llm":"#/components/schemas/SayLLMNodeConfig-Input","say_static":"#/components/schemas/SayStaticMessageNodeConfig-Input","send_sms":"#/components/schemas/SendSMSNodeConfig-Input","start_conversation":"#/components/schemas/StartConversationNodeConfig-Input","super_node":"#/components/schemas/SuperNodeConfig-Input","tool_node":"#/components/schemas/ToolNodeConfig-Input","worker_llm":"#/components/schemas/WorkerLLMNodeConfig-Input","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Input","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeConfig-Input"}}},"type":"array","title":"Node Configs","description":"List of node configurations for runtime"},"edge_configs":{"items":{"oneOf":[{"$ref":"#/components/schemas/DirectEdgeConfig-Input"},{"$ref":"#/components/schemas/ConditionalEdgeConfig-Input"},{"$ref":"#/components/schemas/CompanionEdgeConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"companion":"#/components/schemas/CompanionEdgeConfig-Input","conditional":"#/components/schemas/ConditionalEdgeConfig-Input","direct":"#/components/schemas/DirectEdgeConfig-Input"}}},"type":"array","title":"Edge Configs","description":"List of edge configurations for runtime"},"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variables that can be used across nodes and edges"},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that can be used across nodes and edges"},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables, carried apart from dynamic_variables so this config can be serialized, logged and cached without emitting them. Copied onto the run input, which documents the rule; see BaseRunInput.secret_variables."}},"type":"object","title":"WorkflowConfigFullyHydrated"},"WorkflowConfigFullyHydrated-Output":{"properties":{"workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfig-Output"},{"type":"null"}],"description":"Workflow configuration for runtime"},"node_configs":{"items":{"oneOf":[{"$ref":"#/components/schemas/WorkerLLMNodeConfig-Output"},{"$ref":"#/components/schemas/SayLLMNodeConfig-Output"},{"$ref":"#/components/schemas/SayStaticMessageNodeConfig-Output"},{"$ref":"#/components/schemas/SuperNodeConfig-Output"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeConfig-Output"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Output"},{"$ref":"#/components/schemas/ToolNodeConfig-Output"},{"$ref":"#/components/schemas/StartConversationNodeConfig-Output"},{"$ref":"#/components/schemas/EndConversationNodeConfig-Output"},{"$ref":"#/components/schemas/SendSMSNodeConfig-Output"},{"$ref":"#/components/schemas/GoogleDocsNodeConfig-Output"},{"$ref":"#/components/schemas/HttpRequestNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Output"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Output"},{"$ref":"#/components/schemas/DeduplicateNodeConfig-Output"},{"$ref":"#/components/schemas/FieldExtractorNodeConfig-Output"},{"$ref":"#/components/schemas/NoOpNodeConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeConfig-Output","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeConfig-Output","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeConfig-Output","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeConfig-Output","deduplicate":"#/components/schemas/DeduplicateNodeConfig-Output","end_conversation":"#/components/schemas/EndConversationNodeConfig-Output","field_extractor":"#/components/schemas/FieldExtractorNodeConfig-Output","google_docs":"#/components/schemas/GoogleDocsNodeConfig-Output","http_request":"#/components/schemas/HttpRequestNodeConfig-Output","no_op":"#/components/schemas/NoOpNodeConfig-Output","say_llm":"#/components/schemas/SayLLMNodeConfig-Output","say_static":"#/components/schemas/SayStaticMessageNodeConfig-Output","send_sms":"#/components/schemas/SendSMSNodeConfig-Output","start_conversation":"#/components/schemas/StartConversationNodeConfig-Output","super_node":"#/components/schemas/SuperNodeConfig-Output","tool_node":"#/components/schemas/ToolNodeConfig-Output","worker_llm":"#/components/schemas/WorkerLLMNodeConfig-Output","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeConfig-Output","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeConfig-Output"}}},"type":"array","title":"Node Configs","description":"List of node configurations for runtime"},"edge_configs":{"items":{"oneOf":[{"$ref":"#/components/schemas/DirectEdgeConfig-Output"},{"$ref":"#/components/schemas/ConditionalEdgeConfig-Output"},{"$ref":"#/components/schemas/CompanionEdgeConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"companion":"#/components/schemas/CompanionEdgeConfig-Output","conditional":"#/components/schemas/ConditionalEdgeConfig-Output","direct":"#/components/schemas/DirectEdgeConfig-Output"}}},"type":"array","title":"Edge Configs","description":"List of edge configurations for runtime"},"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variables that can be used across nodes and edges"},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that can be used across nodes and edges"}},"type":"object","title":"WorkflowConfigFullyHydrated"},"WorkflowDefaultLLMConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"default_provider","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"type":{"type":"string","const":"global_default_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"global_default_llm","input_field_not_visible":true}},"type":"object","title":"Workflow Default LLM","hidden_in_contexts":["workflow_settings","llm_config"],"hide_all_fields":true},"WorkflowDefaultLLMConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LLM Configuration ID","description":"Unique identifier for the LLM configuration","input_field_disallowed":true},"named_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config ID","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its ID.","input_field_not_visible":true},"named_llm_config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Named LLM Config Name","description":"If this configuration was resolved from a reusable named LLM configuration, this holds its name.","input_field_not_visible":true},"provider":{"anyOf":[{"$ref":"#/components/schemas/LLMProvider"},{"type":"null"}],"title":"LLM Provider","description":"The selected Large Language Model provider from the available options.","default":"default_provider","input_field_not_visible":true},"streaming":{"type":"boolean","title":"Enable Streaming","description":"Whether to enable streaming for the LLM response.","default":false,"field_visibility_level":"developer"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries","description":"Maximum number of retries for the LLM request in case of failure.","default":3,"field_visibility_level":"developer"},"max_parse_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Parse Retries","description":"Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.","default":3,"field_visibility_level":"developer"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens to generate in the response."},"temperature":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Temperature","description":"Controls the randomness of the model's output. Lower values make the output more deterministic.","input_field_type":"number_with_slider"},"request_timeout_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout (ms)","description":"Timeout for the request in milliseconds."},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Random Seed","description":"Seed for random number generation to ensure reproducibility.","field_visibility_level":"developer"},"model_kwargs":{"additionalProperties":true,"type":"object","title":"Model Keyword Arguments","description":"Additional keyword arguments to pass to the LLM provider's API.","field_visibility_level":"developer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"API Key","description":"API key to access the LLM provider endpoint. Once saved, the key is stored securely and is never shown back in the UI. You can update it at any time by entering a new value; leaving it blank keeps the existing key in use for this LLM.","field_visibility_level":"developer","input_field_helper_text":"Stored securely once added and not shown again. Leave blank to keep using the existing key; enter a new value to replace it.","input_field_type":"password"},"do_not_split_sentences":{"type":"boolean","title":"Do Not Split Sentences","description":"Whether to avoid splitting sentences in the LLM response.","default":false,"field_visibility_level":"developer"},"truncated_max_recent_messages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Truncated Max Recent Messages","description":"Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used."},"type":{"type":"string","const":"global_default_llm","title":"Type","description":"Differentiator field that helps in identifying this particular type of config when serializing and deserializing","default":"global_default_llm","input_field_not_visible":true}},"type":"object","title":"Workflow Default LLM","hidden_in_contexts":["workflow_settings","llm_config"],"hide_all_fields":true},"WorkflowEvaluationSummary":{"properties":{"total_runs":{"type":"integer","title":"Total Runs","description":"Total number of individual simulation runs","default":0},"successful_evaluations":{"type":"integer","title":"Successful Evaluations","description":"Number of runs where evaluation completed successfully","default":0},"failed_evaluations":{"type":"integer","title":"Failed Evaluations","description":"Number of runs where evaluation failed","default":0},"pending_evaluations":{"type":"integer","title":"Pending Evaluations","description":"Number of runs where evaluation is still pending","default":0},"no_evaluation_configured":{"type":"integer","title":"No Evaluation Configured","description":"Number of runs with no evaluation workflow configured","default":0},"metrics":{"items":{"$ref":"#/components/schemas/EvaluationMetricSummary"},"type":"array","title":"Metrics","description":"Summary statistics for each numeric evaluation metric"}},"type":"object","title":"WorkflowEvaluationSummary","description":"Aggregated evaluation summary for a workflow (selected or counter) across all simulation runs."},"WorkflowExecuteRequest":{"properties":{"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id","description":"Interactive session identifier.  Omit on the first request — the server will derive one from MongoDB and return it.  Echo back on all subsequent requests to continue the session."},"run_input":{"$ref":"#/components/schemas/WorkflowRunInput-Input","description":"The workflow run input for this turn."}},"type":"object","required":["run_input"],"title":"WorkflowExecuteRequest","description":"Request body for ``POST /v1/workflows/{workflow_id}/execute``.\n\nProtocol\n--------\n* **First turn** — omit ``run_id``.  The server creates a ``WorkflowRunsModel`` in MongoDB,\n  derives the ``run_id`` from its ``ObjectId``, and returns it in the response.\n* **Subsequent turns** — echo back the ``run_id`` received in the previous response to\n  continue the session.\n* **Cancellation** — echo back ``run_id`` and set ``run_input.command = \"stop\"``."},"WorkflowExecuteResponse":{"properties":{"run_id":{"type":"string","title":"Run Id","description":"Session identifier (= MongoDB ObjectId of the underlying WorkflowRun record).  Include in all subsequent POST requests to continue this session."},"status":{"$ref":"#/components/schemas/WorkflowStatus","description":"Status of the workflow run after this turn."},"turn_number":{"type":"integer","title":"Turn Number","description":"The turn that this response corresponds to (1-indexed)."},"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Events","description":"All events emitted by the workflow runtime during this turn.  Includes start/end-node events, LLM events, show-state events, and the terminal pause/end/error event."},"is_waiting_for_input":{"type":"boolean","title":"Is Waiting For Input","description":"True when the workflow paused and is waiting for user input in the next POST request."},"is_completed":{"type":"boolean","title":"Is Completed","description":"True when the workflow has reached a terminal state (completed, failed, cancelled, or aborted)."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Present when status is FAILED.  Human-readable error message."},"next_input_hint":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Next Input Hint","description":"Serialised ``BusyWaitForUserMessageEvent`` payload when ``is_waiting_for_input=True``.  Describes what the workflow expects as input in the next turn."},"has_active_companions":{"type":"boolean","title":"Has Active Companions","description":"True when fork-companion threads are still running background work (e.g. a polling self-loop) after this turn. A scheduler/client can call the pump-companions endpoint on an interval to advance them while the main thread waits for the next user input.","default":false},"has_background_work":{"type":"boolean","title":"Has Background Work","description":"True when ANY background work remains after this turn: an active fork companion, or a parked thread with an armed conditional-edge evaluation (see EvaluateWhileWaitingConfig). This is the flag a scheduler/client should poll the pump-companions endpoint on — it is a superset of ``has_active_companions``, which is retained for backward compatibility. Note that a pump may now return MAIN-thread assistant output, when a waiting condition matched and the workflow advanced without a user turn.","default":false}},"type":"object","required":["run_id","status","turn_number","events","is_waiting_for_input","is_completed"],"title":"WorkflowExecuteResponse","description":"Response body for ``POST /v1/workflows/{workflow_id}/execute``.\n\nReturned for both first-turn (no ``run_id`` in request) and subsequent turns."},"WorkflowRun-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Logical ID","description":"Unique ID associated with this particular run of the workflow","input_field_disallowed":true},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow ID","description":"ID of the workflow being run"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this run is associated with. 0 is the initial version (default).","default":0},"status":{"$ref":"#/components/schemas/WorkflowStatus","title":"Workflow Run Status","description":"Current status of the workflow run","default":"not_started"},"termination_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Termination Source","description":"Describes what caused the run to reach a terminal state (especially FAILED). None for normal completions. Well-known values: 'execution_error', 'stale_run_reaper', 'finally_safety_net'."},"input_output_pairs":{"items":{"$ref":"#/components/schemas/WorkflowRunInputOutputPair-Input"},"type":"array","title":"Workflow Run Input-Output Pairs","description":"List of input-output pairs. Each pair corresponds to each contiguous execution segment of the workflow"},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Initiator","description":"Identifier of the user or system that initiated the workflow run"},"comments":{"items":{"$ref":"#/components/schemas/CommentConfig"},"type":"array","title":"Workflow Run Comments","description":"List of comments associated with the workflow run"},"llm_token_usage":{"anyOf":[{"$ref":"#/components/schemas/LLMTokenUsage"},{"type":"null"}],"title":"LLM Token Usage","description":"LLM token usage for this run"},"llm_latency_stats":{"anyOf":[{"$ref":"#/components/schemas/LLMLatencyStats"},{"type":"null"}],"title":"LLM Latency Stats","description":"LLM latency statistics for this run"},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Name","description":"Version name of the workflow this run is associated with","default":"Initial Version"},"workflow_config_fully_hydrated":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Input","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},{"type":"null"}],"title":"Workflow Config Fully Hydrated","description":"Fully hydrated workflow configuration at the time of execution"},"workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow Run DB Object ID","description":"DB Object ID of this workflow run"},"miscellaneous":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Miscellaneous","description":"Miscellaneous metadata that can be used by the workflow run"},"voice_conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Voice Conversation ID","description":"ID of the voice conversation/call that produced this workflow run, if any. Used to cross-link the run with its conversation log in the dashboard.","input_field_disallowed":true},"source_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Source Workflow Run ID","description":"For evaluation runs, this is the id of the original workflow run being evaluated. For checkpoint resumed runs, this is the id of the parent run being cloned.","input_field_disallowed":true},"checkpoint_source_turn_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checkpoint Source Turn Index","description":"For checkpoint resumed runs, this stores the turn index of the parent run that was cloned.","input_field_disallowed":true},"carried_over_llm_token_usage":{"anyOf":[{"$ref":"#/components/schemas/LLMTokenUsage"},{"type":"null"}],"title":"Carried Over LLM Token Usage","description":"For checkpoint resumed runs, this stores the token usage incurred up to the checkpoint index from the source run."},"carried_over_llm_latency_stats":{"anyOf":[{"$ref":"#/components/schemas/LLMLatencyStats"},{"type":"null"}],"title":"Carried Over LLM Latency Stats","description":"For checkpoint resumed runs, this stores the latency stats incurred up to the checkpoint index from the source run."},"is_evaluation_run":{"type":"boolean","title":"Is Evaluation Run","description":"Flag indicating if this workflow run is an evaluation run triggered automatically after another workflow run completed","default":false,"input_field_disallowed":true},"evaluation_run_info":{"anyOf":[{"$ref":"#/components/schemas/EvaluationRunInfo-Input"},{"type":"null"}],"title":"Evaluation Run Info","description":"Information about the evaluation triggered for this workflow run. Populated after evaluation completes. Only present for source workflow runs that have been evaluated.","input_field_disallowed":true}},"type":"object","title":"WorkflowRun","description":"Represents a workflow run, which is a specific execution of a workflow."},"WorkflowRun-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Logical ID","description":"Unique ID associated with this particular run of the workflow","input_field_disallowed":true},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow ID","description":"ID of the workflow being run"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this run is associated with. 0 is the initial version (default).","default":0},"status":{"$ref":"#/components/schemas/WorkflowStatus","title":"Workflow Run Status","description":"Current status of the workflow run","default":"not_started"},"termination_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Termination Source","description":"Describes what caused the run to reach a terminal state (especially FAILED). None for normal completions. Well-known values: 'execution_error', 'stale_run_reaper', 'finally_safety_net'."},"input_output_pairs":{"items":{"$ref":"#/components/schemas/WorkflowRunInputOutputPair-Output"},"type":"array","title":"Workflow Run Input-Output Pairs","description":"List of input-output pairs. Each pair corresponds to each contiguous execution segment of the workflow"},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Initiator","description":"Identifier of the user or system that initiated the workflow run"},"comments":{"items":{"$ref":"#/components/schemas/CommentConfig"},"type":"array","title":"Workflow Run Comments","description":"List of comments associated with the workflow run"},"llm_token_usage":{"anyOf":[{"$ref":"#/components/schemas/LLMTokenUsage"},{"type":"null"}],"title":"LLM Token Usage","description":"LLM token usage for this run"},"llm_latency_stats":{"anyOf":[{"$ref":"#/components/schemas/LLMLatencyStats"},{"type":"null"}],"title":"LLM Latency Stats","description":"LLM latency statistics for this run"},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Name","description":"Version name of the workflow this run is associated with","default":"Initial Version"},"workflow_config_fully_hydrated":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},{"type":"null"}],"title":"Workflow Config Fully Hydrated","description":"Fully hydrated workflow configuration at the time of execution"},"workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run DB Object ID","description":"DB Object ID of this workflow run"},"miscellaneous":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Miscellaneous","description":"Miscellaneous metadata that can be used by the workflow run"},"voice_conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Voice Conversation ID","description":"ID of the voice conversation/call that produced this workflow run, if any. Used to cross-link the run with its conversation log in the dashboard.","input_field_disallowed":true},"source_workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Workflow Run ID","description":"For evaluation runs, this is the id of the original workflow run being evaluated. For checkpoint resumed runs, this is the id of the parent run being cloned.","input_field_disallowed":true},"checkpoint_source_turn_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checkpoint Source Turn Index","description":"For checkpoint resumed runs, this stores the turn index of the parent run that was cloned.","input_field_disallowed":true},"carried_over_llm_token_usage":{"anyOf":[{"$ref":"#/components/schemas/LLMTokenUsage"},{"type":"null"}],"title":"Carried Over LLM Token Usage","description":"For checkpoint resumed runs, this stores the token usage incurred up to the checkpoint index from the source run."},"carried_over_llm_latency_stats":{"anyOf":[{"$ref":"#/components/schemas/LLMLatencyStats"},{"type":"null"}],"title":"Carried Over LLM Latency Stats","description":"For checkpoint resumed runs, this stores the latency stats incurred up to the checkpoint index from the source run."},"is_evaluation_run":{"type":"boolean","title":"Is Evaluation Run","description":"Flag indicating if this workflow run is an evaluation run triggered automatically after another workflow run completed","default":false,"input_field_disallowed":true},"evaluation_run_info":{"anyOf":[{"$ref":"#/components/schemas/EvaluationRunInfo-Output"},{"type":"null"}],"title":"Evaluation Run Info","description":"Information about the evaluation triggered for this workflow run. Populated after evaluation completes. Only present for source workflow runs that have been evaluated.","input_field_disallowed":true}},"type":"object","title":"WorkflowRun","description":"Represents a workflow run, which is a specific execution of a workflow."},"WorkflowRunEvalLLMNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Evaluation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Input"},{"$ref":"#/components/schemas/OpenAILLMConfig-Input"},{"$ref":"#/components/schemas/GoogleLLMConfig-Input"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Input"},{"$ref":"#/components/schemas/BedrockLLMConfig-Input"},{"$ref":"#/components/schemas/CustomLLMConfig-Input"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Input"},{"$ref":"#/components/schemas/NoLLMConfig-Input"},{"$ref":"#/components/schemas/LLMGroupConfig-Input"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Input"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Input","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Input","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Input","custom_llm":"#/components/schemas/CustomLLMConfig-Input","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Input","google_llm":"#/components/schemas/GoogleLLMConfig-Input","llm_group":"#/components/schemas/LLMGroupConfig-Input","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Input","no_llm":"#/components/schemas/NoLLMConfig-Input","openai_llm":"#/components/schemas/OpenAILLMConfig-Input"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Evaluator nodes should not have self-loops, so this option is disabled","default":false,"input_field_not_visible":true},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Evaluator nodes should not wait for user messages to proceed, so this option is disabled","default":false,"input_field_not_visible":true},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Evaluator nodes should not have default error messages, so this option is disabled","input_field_not_visible":true},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"workflow_run_evaluator","title":"Node Type","description":"Type of the node. Must be 'workflow_run_evaluator'","default":"workflow_run_evaluator","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured evaluation output. If empty or None, no structured output is expected.","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Runtime Variable Name","description":"Runtime variable name from which to read the input to be evaluated. It is expected to contain the 'WorkflowRun' object to be evaluated.","default":"workflow_run_object"},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Runtime Variable Name","description":"Runtime variable name to store the structured evaluation output"},"is_turn_by_turn_evaluator":{"type":"boolean","title":"Is Turn-by-Turn Evaluator","description":"Indicates if this evaluator is intended to evaluate each turn in a multi-turn workflow run","default":false}},"type":"object","title":"Evaluator Node","description":"Configuration for nodes that evaluate workflow runs.\n\nEvaluator nodes are used to assess, summarize and score outputs from workflow runs."},"WorkflowRunEvalLLMNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Evaluation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"main_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Main Response Configuration","description":"Main response configuration. Contains either a LLM system prompt or exact static messages","input_field_type":"single_field_object","input_field_ui_order":201},"attachable_llm_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachable Llm Config Id","description":"ID of the named LLM Configuration to use. If provided, overrides inline configuration.","input_field_type":"llm_config_selection"},"llms_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/AzureOpenAILLMConfig-Output"},{"$ref":"#/components/schemas/OpenAILLMConfig-Output"},{"$ref":"#/components/schemas/GoogleLLMConfig-Output"},{"$ref":"#/components/schemas/AnthropicLLMConfig-Output"},{"$ref":"#/components/schemas/BedrockLLMConfig-Output"},{"$ref":"#/components/schemas/CustomLLMConfig-Output"},{"$ref":"#/components/schemas/WorkflowDefaultLLMConfig-Output"},{"$ref":"#/components/schemas/NoLLMConfig-Output"},{"$ref":"#/components/schemas/LLMGroupConfig-Output"},{"$ref":"#/components/schemas/LLMGroupWithBackchannelConfig-Output"}],"discriminator":{"propertyName":"type","mapping":{"anthropic_llm":"#/components/schemas/AnthropicLLMConfig-Output","azure_openai_llm":"#/components/schemas/AzureOpenAILLMConfig-Output","bedrock_llm":"#/components/schemas/BedrockLLMConfig-Output","custom_llm":"#/components/schemas/CustomLLMConfig-Output","global_default_llm":"#/components/schemas/WorkflowDefaultLLMConfig-Output","google_llm":"#/components/schemas/GoogleLLMConfig-Output","llm_group":"#/components/schemas/LLMGroupConfig-Output","llm_group_with_backchannel":"#/components/schemas/LLMGroupWithBackchannelConfig-Output","no_llm":"#/components/schemas/NoLLMConfig-Output","openai_llm":"#/components/schemas/OpenAILLMConfig-Output"}}},{"type":"null"}],"title":"LLM Configuration","description":"LLM or a group of LLMs to be used in this node","default":{"logical_id":"llm_a7f2c24c-3ce7-4519-b8bc-78f17f76968e","provider":"default_provider","streaming":false,"max_retries":3,"max_parse_retries":3,"model_kwargs":{},"do_not_split_sentences":false,"type":"global_default_llm"}},"tools_config":{"anyOf":[{"$ref":"#/components/schemas/ToolsConfig"},{"type":"null"}],"title":"Tools Configuration","description":"List of tools available for this node"},"self_loop":{"type":"boolean","title":"Self Loop","description":"Evaluator nodes should not have self-loops, so this option is disabled","default":false,"input_field_not_visible":true},"wait_for_user_message":{"type":"boolean","title":"Wait for User Message","description":"Evaluator nodes should not wait for user messages to proceed, so this option is disabled","default":false,"input_field_not_visible":true},"max_consecutive_tool_calls":{"type":"integer","title":"Max Consecutive Tool Calls","description":"Maximum number of consecutive tool calls allowed in a single node execution","default":1,"field_visibility_level":"developer"},"default_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Error Message","description":"Evaluator nodes should not have default error messages, so this option is disabled","input_field_not_visible":true},"use_mcp_tools":{"type":"boolean","title":"Use MCP Tools","description":"Whether this node should use tools discovered from workflow-level MCP server connections","default":false},"ignore_default_prompt_prefix":{"type":"boolean","title":"Ignore Default Prompt Prefix","description":"If true, the workflow's default_prompt_prefix will not be prepended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_default_prompt_suffix":{"type":"boolean","title":"Ignore Default Prompt Suffix","description":"If true, the workflow's default_prompt_suffix will not be appended to this node's prompt.","default":false,"field_visibility_level":"developer"},"ignore_content_received_during_llm_tool_call_specification":{"type":"boolean","title":"Ignore content received during LLM tool call specification","description":"If true, any free-text content this node's LLM returns in the same response as one or more tool calls is ignored: not emitted via AssistantResponseEvent, not added to chat history, and not added to the node's structured output. Implies the tool-level flag for every tool call this node makes.","default":false},"realtime_overrides":{"anyOf":[{"$ref":"#/components/schemas/NodeRealtimeOverrides"},{"type":"null"}],"title":"Realtime Overrides","description":"Realtime voice settings that apply only while this node is active. Ignored unless the workflow has realtime voice enabled. None means inherit everything from the workflow."},"type":{"type":"string","const":"workflow_run_evaluator","title":"Node Type","description":"Type of the node. Must be 'workflow_run_evaluator'","default":"workflow_run_evaluator","input_field_not_visible":true},"structured_output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output Schema","description":"Schema for the structured evaluation output. If empty or None, no structured output is expected.","input_field_type":"textarea"},"backchannel_response_config":{"anyOf":[{"$ref":"#/components/schemas/PromptConfig"},{"type":"null"}],"title":"Backchannel Response Configuration","description":"Backchannel response configuration. Contains either a LLM system prompt or exact static messages"},"input_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Runtime Variable Name","description":"Runtime variable name from which to read the input to be evaluated. It is expected to contain the 'WorkflowRun' object to be evaluated.","default":"workflow_run_object"},"output_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Runtime Variable Name","description":"Runtime variable name to store the structured evaluation output"},"is_turn_by_turn_evaluator":{"type":"boolean","title":"Is Turn-by-Turn Evaluator","description":"Indicates if this evaluator is intended to evaluate each turn in a multi-turn workflow run","default":false}},"type":"object","title":"Evaluator Node","description":"Configuration for nodes that evaluate workflow runs.\n\nEvaluator nodes are used to assess, summarize and score outputs from workflow runs."},"WorkflowRunEvalLLMNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"workflow_run_evaluator","title":"Type","description":"Discriminator field which must always be 'workflow_run_evaluator'","default":"workflow_run_evaluator"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"messages":{"items":{"oneOf":[{"$ref":"#/components/schemas/AIMessage"},{"$ref":"#/components/schemas/HumanMessage"},{"$ref":"#/components/schemas/ChatMessage"},{"$ref":"#/components/schemas/SystemMessage"},{"$ref":"#/components/schemas/FunctionMessage"},{"$ref":"#/components/schemas/ToolMessage"},{"$ref":"#/components/schemas/AIMessageChunk"},{"$ref":"#/components/schemas/HumanMessageChunk"},{"$ref":"#/components/schemas/ChatMessageChunk"},{"$ref":"#/components/schemas/SystemMessageChunk"},{"$ref":"#/components/schemas/FunctionMessageChunk"},{"$ref":"#/components/schemas/ToolMessageChunk"}]},"type":"array","title":"Input User Messages","description":"Input user messages to be processed by the LLM node"}},"type":"object","title":"WorkflowRunEvalLLMNodeRunInput","description":"Input model for evaluator node execution."},"WorkflowRunEvalLLMNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"workflow_run_evaluator","title":"Type","description":"Discriminator field which must always be 'workflow_run_evaluator'","default":"workflow_run_evaluator"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"},"messages":{"items":{"oneOf":[{"$ref":"#/components/schemas/AIMessage"},{"$ref":"#/components/schemas/HumanMessage"},{"$ref":"#/components/schemas/ChatMessage"},{"$ref":"#/components/schemas/SystemMessage"},{"$ref":"#/components/schemas/FunctionMessage"},{"$ref":"#/components/schemas/ToolMessage"},{"$ref":"#/components/schemas/AIMessageChunk"},{"$ref":"#/components/schemas/HumanMessageChunk"},{"$ref":"#/components/schemas/ChatMessageChunk"},{"$ref":"#/components/schemas/SystemMessageChunk"},{"$ref":"#/components/schemas/FunctionMessageChunk"},{"$ref":"#/components/schemas/ToolMessageChunk"}]},"type":"array","title":"Input User Messages","description":"Input user messages to be processed by the LLM node"}},"type":"object","title":"WorkflowRunEvalLLMNodeRunInput","description":"Input model for evaluator node execution."},"WorkflowRunEvalLLMNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"workflow_run_evaluator","title":"Type","description":"Discriminator field which must always be 'workflow_run_evaluator'","default":"workflow_run_evaluator"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"structured_output":{"additionalProperties":true,"type":"object","title":"Structured Output","description":"Structured evaluation output from the evaluator node"},"free_form_output":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Free-form Output","description":"Free-form textual evaluation output from the evaluator node"}},"type":"object","title":"WorkflowRunEvalLLMNodeRunOutput","description":"Output model for evaluator node execution."},"WorkflowRunEvaluationResultResponse":{"properties":{"evaluation_workflow_run_id":{"type":"string","title":"Evaluation Workflow Run Id","description":"ID of the evaluation workflow run"},"status":{"type":"string","title":"Status","description":"Status of the evaluation workflow run (e.g., 'completed', 'running', 'failed')"},"evaluation_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evaluation Result","description":"The runtime variables from the last WorkflowShowStateEvent in the evaluation run. Contains the evaluation output/scores. None if no WorkflowShowStateEvent was found."}},"type":"object","required":["evaluation_workflow_run_id","status"],"title":"WorkflowRunEvaluationResultResponse","description":"Response model for evaluation results of a workflow run.\nContains the evaluation workflow run ID, status, and the runtime variables from the last WorkflowShowStateEvent."},"WorkflowRunFetchNodeConfig-Input":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Evaluation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"workflow_run_fetch","title":"Node Type","description":"Type of the node. Must be 'workflow_run_fetch'","default":"workflow_run_fetch","input_field_not_visible":true},"workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run ID","description":"ID of the workflow run to fetch","default":"{{workflow_run_id}}"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result in","default":"workflow_run_object"}},"type":"object","title":"Workflow Run Fetch Node Configuration"},"WorkflowRunFetchNodeConfig-Output":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Unique identifier for the node","input_field_disallowed":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Name","description":"Name of the node","input_field_ui_order":101},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Description","description":"Description of the node","input_field_ui_order":301},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"The DB Object ID of the workflow this entity belongs to","input_field_not_visible":true},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this entity belongs to. 0 is the initial version (default).","default":0,"input_field_not_visible":true},"disabled":{"type":"boolean","title":"Disabled","description":"If true, this entity will be disabled and will not execute its function. Useful for testing workflows without actually executing this specific entity","default":false},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Config","description":"Miscellaneous config data that can be used by the entity","field_visibility_level":"super_admin"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category","description":"Primary category of the node","default":"System","input_field_not_visible":true},"secondary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Category","description":"Secondary category of the node","default":"Evaluation","input_field_not_visible":true},"is_start":{"type":"boolean","title":"Is Start Node","description":"Whether this node is the starting node of the workflow","default":false},"is_guardrail_node":{"type":"boolean","title":"Is Guardrail Node","description":"Whether this node is a guardrail node. When the workflow-level `miscellaneous.no_hopping_between_guardrail_nodes` setting is enabled (the default), the runtime blocks conditional transitions from this guardrail node to any other guardrail node — including regular freeform/expression conditional edges and synthesized global-node edges. Self-edges and self-loops on the same guardrail node remain allowed.","default":false},"global_node_config":{"anyOf":[{"$ref":"#/components/schemas/GlobalNodeConfig"},{"type":"null"}],"title":"Global Node Configuration","description":"Configuration for when this node is a global node","keep_collapsed":true},"self_loop_config":{"anyOf":[{"$ref":"#/components/schemas/SelfLoopConfig"},{"type":"null"}],"title":"Self Loop","description":"Bounded self-loop / retry policy for this node.","input_field_ui_order":250,"keep_collapsed":true},"type":{"type":"string","const":"workflow_run_fetch","title":"Node Type","description":"Type of the node. Must be 'workflow_run_fetch'","default":"workflow_run_fetch","input_field_not_visible":true},"workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run ID","description":"ID of the workflow run to fetch","default":"{{workflow_run_id}}"},"result_runtime_variable_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Runtime Variable Name","description":"Name of the runtime variable to store the result in","default":"workflow_run_object"}},"type":"object","title":"Workflow Run Fetch Node Configuration"},"WorkflowRunFetchNodeRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"workflow_run_fetch","title":"Type","description":"Discriminator field which must always be 'workflow_run_fetch'","default":"workflow_run_fetch"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"WorkflowRunFetchNodeRunInput"},"WorkflowRunFetchNodeRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"type":{"type":"string","const":"workflow_run_fetch","title":"Type","description":"Discriminator field which must always be 'workflow_run_fetch'","default":"workflow_run_fetch"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run input is for"}},"type":"object","title":"WorkflowRunFetchNodeRunInput"},"WorkflowRunFetchNodeRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"type":{"type":"string","const":"workflow_run_fetch","title":"Type","description":"Discriminator field which must always be 'workflow_run_fetch'","default":"workflow_run_fetch"},"node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Logical ID","description":"Logical ID of the node this run output belongs to"},"node_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Run ID","description":"Unique identifier for the run of this node"},"fetched_workflow_run":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fetched Workflow Run","description":"The fetched workflow run as a stringified JSON object"}},"type":"object","title":"WorkflowRunFetchNodeRunOutput"},"WorkflowRunFilter":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id","description":"Filter by logical ID"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Filter by workflow ID"},"status":{"anyOf":[{"$ref":"#/components/schemas/WorkflowStatus"},{"type":"null"}],"description":"Filter by workflow run status"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"Filter by version number"},"source_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Only runs that were re-run from this run. Backs the 'N re-runs from this turn' link."},"source_turn_index":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Source Turn Index","description":"Narrow source_workflow_run_id to one turn. Ignored on its own — a turn index means nothing without the run it belongs to."},"copilot_runs_only":{"type":"boolean","title":"Copilot Runs Only","description":"Return Emily copilot conversations instead of customer workflow runs. Copilot runs are excluded from every other listing, so this is the only way to see them. Super-admins only — the endpoint refuses it for any other role.","default":false}},"type":"object","title":"WorkflowRunFilter"},"WorkflowRunInput-Input":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"secret_variables":{"additionalProperties":{"type":"string","format":"password","writeOnly":true},"type":"object","title":"Secret Variables","description":"Credential-valued variables — every team global marked is_secret, plus the system interactly_api_token. Carried apart from dynamic_variables so that the value a run passes around is NOT the value it emits: see the class docstring."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"command":{"$ref":"#/components/schemas/WorkflowCommand","title":"Workflow Command","description":"Command to execute on the workflow or workflow run","default":"start"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow DB Object ID","description":"DB Object ID of the workflow to run"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this run is associated with. 0 is the initial version (default).","default":0},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Initiator","description":"Identifier of the user or system that initiated the workflow run"},"workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow Run ID","description":"ID of the workflow run to resume"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team ID","description":"Team ID associated with this workflow run, used for vendor credential lookup"},"start_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Node Logical ID","description":"Optional logical ID of the node to start execution from, bypassing the default start node."},"initial_state":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Initial Workflow State","description":"Optional serialized WorkflowState to resume execution with context."},"thread_to_node_inputs":{"additionalProperties":{"$ref":"#/components/schemas/NodesRunInputs-Input"},"type":"object","title":"Thread to Node Inputs","description":"Mapping of thread IDs to node inputs"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message","description":"Voice-engine opening line, seeded as the first assistant message on the first run only."}},"type":"object","title":"WorkflowRunInput","description":"Input to the workflow, used to kick off or resume a workflow run."},"WorkflowRunInput-Output":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dynamic variable values that will replace the '{{...}}' placeholders in the prompts, condition strings, tool signatures, etc."},"runtime_variables":{"additionalProperties":true,"type":"object","title":"Runtime Variables","description":"Runtime variables that will replace the '[[...]]' placeholders in the prompts, condition strings, tool signatures, etc."},"miscellaneous":{"additionalProperties":true,"type":"object","title":"Miscellaneous Run Input Data","description":"Miscellaneous run-input data","field_visibility_level":"super_admin"},"command":{"$ref":"#/components/schemas/WorkflowCommand","title":"Workflow Command","description":"Command to execute on the workflow or workflow run","default":"start"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow DB Object ID","description":"DB Object ID of the workflow to run"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Version Number","description":"Version number of the workflow this run is associated with. 0 is the initial version (default).","default":0},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Initiator","description":"Identifier of the user or system that initiated the workflow run"},"workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run ID","description":"ID of the workflow run to resume"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team ID","description":"Team ID associated with this workflow run, used for vendor credential lookup"},"start_node_logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Node Logical ID","description":"Optional logical ID of the node to start execution from, bypassing the default start node."},"initial_state":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Initial Workflow State","description":"Optional serialized WorkflowState to resume execution with context."},"thread_to_node_inputs":{"additionalProperties":{"$ref":"#/components/schemas/NodesRunInputs-Output"},"type":"object","title":"Thread to Node Inputs","description":"Mapping of thread IDs to node inputs"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message","description":"Voice-engine opening line, seeded as the first assistant message on the first run only."}},"type":"object","title":"WorkflowRunInput","description":"Input to the workflow, used to kick off or resume a workflow run."},"WorkflowRunInputOutputPair-Input":{"properties":{"run_input":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunInput-Input"},{"type":"null"}],"title":"Workflow Run Input","description":"Input to the workflow run"},"run_output":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunOutput"},{"type":"null"}],"title":"Workflow Run Output","description":"Output of the workflow run"},"evaluation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Turn Evaluation Result","description":"Evaluation result for this specific turn/pair."},"iteration_end_state_miscellaneous":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Iteration End State Miscellaneous","description":"A lightweight capture of global state details at the end of the iteration, like history trackers and active threads, to allow accurate resumption without serializing the entire state."},"comments":{"items":{"$ref":"#/components/schemas/CommentConfig"},"type":"array","title":"Turn Comments","description":"Reviewer comments on this turn as a whole, as opposed to on one of its events"},"ratings":{"items":{"$ref":"#/components/schemas/RatingConfig"},"type":"array","title":"Turn Ratings","description":"Reviewer ratings of this turn as a whole, at most one per user"}},"type":"object","title":"WorkflowRunInputOutputPair","description":"Represents a pair of workflow run input and output."},"WorkflowRunInputOutputPair-Output":{"properties":{"run_input":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunInput-Output"},{"type":"null"}],"title":"Workflow Run Input","description":"Input to the workflow run"},"run_output":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunOutput"},{"type":"null"}],"title":"Workflow Run Output","description":"Output of the workflow run"},"evaluation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Turn Evaluation Result","description":"Evaluation result for this specific turn/pair."},"iteration_end_state_miscellaneous":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Iteration End State Miscellaneous","description":"A lightweight capture of global state details at the end of the iteration, like history trackers and active threads, to allow accurate resumption without serializing the entire state."},"comments":{"items":{"$ref":"#/components/schemas/CommentConfig"},"type":"array","title":"Turn Comments","description":"Reviewer comments on this turn as a whole, as opposed to on one of its events"},"ratings":{"items":{"$ref":"#/components/schemas/RatingConfig"},"type":"array","title":"Turn Ratings","description":"Reviewer ratings of this turn as a whole, at most one per user"}},"type":"object","title":"WorkflowRunInputOutputPair","description":"Represents a pair of workflow run input and output."},"WorkflowRunOutput":{"properties":{"events":{"items":{},"type":"array","title":"Node/Workflow Run Events","description":"List of events that occurred during a node or workflow run"},"thread_to_node_outputs":{"additionalProperties":{"items":{"oneOf":[{"$ref":"#/components/schemas/WorkerLLMNodeRunOutput"},{"$ref":"#/components/schemas/SayLLMNodeRunOutput"},{"$ref":"#/components/schemas/SayStaticMessageNodeRunOutput"},{"$ref":"#/components/schemas/SuperNodeRunOutput"},{"$ref":"#/components/schemas/WorkflowRunFetchNodeRunOutput"},{"$ref":"#/components/schemas/WorkflowRunEvalLLMNodeRunOutput"},{"$ref":"#/components/schemas/ToolNodeRunOutput"},{"$ref":"#/components/schemas/StartConversationNodeRunOutput"},{"$ref":"#/components/schemas/EndConversationNodeRunOutput"},{"$ref":"#/components/schemas/SendSMSNodeRunOutput"},{"$ref":"#/components/schemas/GoogleDocsNodeRunOutput"},{"$ref":"#/components/schemas/HttpRequestNodeRunOutput"},{"$ref":"#/components/schemas/AthenaPatientsSearchNodeRunOutput"},{"$ref":"#/components/schemas/AthenaPatientsCreateNodeRunOutput"},{"$ref":"#/components/schemas/AthenaPatientsUpdateNodeRunOutput"},{"$ref":"#/components/schemas/AthenaAppointmentsCreateNodeRunOutput"},{"$ref":"#/components/schemas/DeduplicateNodeRunOutput"},{"$ref":"#/components/schemas/FieldExtractorNodeRunOutput"},{"$ref":"#/components/schemas/NoOpNodeRunOutput"}],"discriminator":{"propertyName":"type","mapping":{"athena_appointments_create":"#/components/schemas/AthenaAppointmentsCreateNodeRunOutput","athena_patients_create":"#/components/schemas/AthenaPatientsCreateNodeRunOutput","athena_patients_search":"#/components/schemas/AthenaPatientsSearchNodeRunOutput","athena_patients_update":"#/components/schemas/AthenaPatientsUpdateNodeRunOutput","deduplicate":"#/components/schemas/DeduplicateNodeRunOutput","end_conversation":"#/components/schemas/EndConversationNodeRunOutput","field_extractor":"#/components/schemas/FieldExtractorNodeRunOutput","google_docs":"#/components/schemas/GoogleDocsNodeRunOutput","http_request":"#/components/schemas/HttpRequestNodeRunOutput","no_op":"#/components/schemas/NoOpNodeRunOutput","say_llm":"#/components/schemas/SayLLMNodeRunOutput","say_static":"#/components/schemas/SayStaticMessageNodeRunOutput","send_sms":"#/components/schemas/SendSMSNodeRunOutput","start_conversation":"#/components/schemas/StartConversationNodeRunOutput","super_node":"#/components/schemas/SuperNodeRunOutput","tool_node":"#/components/schemas/ToolNodeRunOutput","worker_llm":"#/components/schemas/WorkerLLMNodeRunOutput","workflow_run_evaluator":"#/components/schemas/WorkflowRunEvalLLMNodeRunOutput","workflow_run_fetch":"#/components/schemas/WorkflowRunFetchNodeRunOutput"}}},"type":"array"},"type":"object","title":"Thread to Node Outputs","description":"Mapping of thread IDs to lists of node outputs"}},"type":"object","title":"WorkflowRunOutput","description":"Output of a workflow run."},"WorkflowRunProjectModel":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id"},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"status":{"anyOf":[{"$ref":"#/components/schemas/WorkflowStatus"},{"type":"null"}]},"run_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run By"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","default":0},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name","default":"Initial Version"},"voice_conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Conversation Id"},"source_workflow_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"checkpoint_source_turn_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checkpoint Source Turn Index"}},"type":"object","required":["logical_id","workflow_id","status"],"title":"WorkflowRunProjectModel"},"WorkflowRunsDebugInfo":{"properties":{},"type":"object","title":"WorkflowRunsDebugInfo","description":"Debug information for workflow runs.\nCurrently empty but intentionally kept for future extensibility."},"WorkflowRunsListResponse":{"properties":{"workflow_runs":{"items":{"$ref":"#/components/schemas/WorkflowRunsProjectionModel"},"type":"array","title":"Workflow Runs","description":"List of workflow runs"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of workflow runs available without pagination."}},"type":"object","title":"WorkflowRunsListResponse","description":"Response model for a list of workflow runs.\nContains a list of WorkflowRunsProjectionModel objects."},"WorkflowRunsModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"workflow_run":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRun-Output"},{"type":"null"}],"description":"Workflow Run"},"debug_info":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunsDebugInfo"},{"type":"null"}],"title":"Workflow Run Debug Info","description":"Debug information for the workflow run"},"schedule_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"The ID of the workflow schedule that triggered this run"},"is_copilot_run":{"type":"boolean","title":"Is Copilot Run","description":"This run is an Emily copilot conversation, not a customer workflow run. Excluded from every run listing and from the copilot's own read tools; listed only for super-admins, because the transcript carries the output of every tool the model called across the team.","default":false},"copilot_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copilot Session Id","description":"The copilot session id this run records. Set only on copilot runs."}},"type":"object","title":"WorkflowRunsModel","description":"Stores a workflow run present in the workflow system.\nEach workflow run is associated with a specific workflow and represents a specific execution of that workflow."},"WorkflowRunsProjectionModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"workflow_run":{"anyOf":[{"$ref":"#/components/schemas/WorkflowRunProjectModel"},{"type":"null"}]},"schedule_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"is_copilot_run":{"type":"boolean","title":"Is Copilot Run","default":false},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"workflow_deleted":{"type":"boolean","title":"Workflow Deleted","default":false}},"type":"object","required":["_id","workflow_run"],"title":"WorkflowRunsProjectionModel","description":"Projection model for workflow runs."},"WorkflowRunsResponse":{"properties":{"workflow_run":{"$ref":"#/components/schemas/WorkflowRunsModel","description":"Single workflow run object"},"workflow_deleted":{"type":"boolean","title":"Workflow Deleted","description":"True when the workflow backing this run no longer exists (was deleted).","default":false},"feedback_users":{"additionalProperties":{"$ref":"#/components/schemas/FeedbackUser"},"type":"object","title":"Feedback Users","description":"Display identities for every user referenced by this run's feedback, keyed by user id. Shipped with the run so the client can attribute a comment or rating without holding a copy of the team roster; ids that no longer resolve are simply absent."}},"type":"object","required":["workflow_run"],"title":"WorkflowRunsResponse","description":"Response model for a single workflow run.\nContains a WorkflowRunsModel object."},"WorkflowScheduleStatus":{"type":"string","enum":["pending","in_progress","completed","failed","cancelled"],"title":"WorkflowScheduleStatus"},"WorkflowScheduledRunsModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"workflow_id":{"$ref":"#/components/schemas/PydanticObjectId","description":"ID of the workflow to run"},"status":{"$ref":"#/components/schemas/WorkflowScheduleStatus","description":"Current status of the schedule","default":"pending"},"scheduled_time":{"type":"string","format":"date-time","title":"Scheduled Time","description":"The target time for the workflow execution (UTC)"},"run_input":{"$ref":"#/components/schemas/WorkflowRunInput-Output","description":"Inputs and dynamic variables for the workflow run"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version","description":"Version of the workflow to run"},"schedule_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Name","description":"AWS EventBridge Schedule name (used for deletion)"},"scheduler_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduler Arn","description":"AWS EventBridge Scheduler ARN"},"actual_run_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"Link to the actual WorkflowRunsModel ID once executed"},"scheduled_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled By Name","description":"Display name of the user who created the schedule"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the schedule failed to execute"}},"type":"object","required":["workflow_id","scheduled_time"],"title":"WorkflowScheduledRunsModel","description":"Stores scheduled workflow runs."},"WorkflowSnapshotStatusResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"},"super_nodes":{"items":{"$ref":"#/components/schemas/SuperNodeSnapshotStatus"},"type":"array","title":"Super Nodes"}},"type":"object","required":["workflow_id","super_nodes"],"title":"WorkflowSnapshotStatusResponse"},"WorkflowStatus":{"type":"string","enum":["not_started","started","running","failed","completed","paused","waiting_for_user_input","cancelled","aborted_looping_risk"],"title":"WorkflowStatus"},"WorkflowTemplateConfig-Input":{"properties":{"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the node library","default":"personal"},"access_list":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs or team IDs that have access to this node library","input_field_not_visible":true},"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Template Logical ID","description":"Unique identifier for the workflow template","input_field_disallowed":true},"workflow_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"title":"Workflow ID","description":"The ID of the workflow this template belongs to","input_field_not_visible":true}},"type":"object","title":"WorkflowTemplateConfig"},"WorkflowTemplateConfig-Output":{"properties":{"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessControlLevel"},{"type":"null"}],"title":"Access Level","description":"Access level for the node library","default":"personal"},"access_list":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Access List","description":"List of user IDs or team IDs that have access to this node library","input_field_not_visible":true},"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Template Logical ID","description":"Unique identifier for the workflow template","input_field_disallowed":true},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow ID","description":"The ID of the workflow this template belongs to","input_field_not_visible":true}},"type":"object","title":"WorkflowTemplateConfig"},"WorkflowTemplateListResponse":{"properties":{"workflow_templates":{"items":{"$ref":"#/components/schemas/WorkflowTemplatesModel"},"type":"array","title":"Workflow Templates","description":"List of workflow templates"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of workflow templates available without pagination."}},"type":"object","title":"WorkflowTemplateListResponse","description":"Response model for a list of workflow templates.\nContains a list of WorkflowTemplateModel objects."},"WorkflowTemplateResponse":{"properties":{"workflow_template":{"$ref":"#/components/schemas/WorkflowTemplatesModel","description":"Single workflow template object"}},"type":"object","required":["workflow_template"],"title":"WorkflowTemplateResponse","description":"Response model for a single workflow template.\nContains a WorkflowTemplateModel object."},"WorkflowTemplatesModel":{"properties":{"teamId":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the team that owns this record"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who created this record"},"updatedBy":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"ID of the user who last updated this record"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"workflow_template_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowTemplateConfig-Output"},{"type":"null"}],"description":"Workflow Template Configuration"}},"type":"object","title":"WorkflowTemplatesModel","description":"Stores a workflow template configuration present in the workflow system."},"WorkflowVersionFavoriteItem":{"properties":{"id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"workflow_id":{"$ref":"#/components/schemas/PydanticObjectId"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","default":0},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name","default":"Initial Version"},"workflow_config":{"$ref":"#/components/schemas/WorkflowConfig-Output"},"team_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"created_by":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"is_favorite":{"type":"boolean","title":"Is Favorite","default":false}},"type":"object","required":["workflow_id","workflow_config"],"title":"WorkflowVersionFavoriteItem","description":"WorkflowVersionModel fields enriched with the current user's favorite status."},"WorkflowVersionModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"workflow_id":{"$ref":"#/components/schemas/PydanticObjectId","description":"ID of the parent workflow"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"Version number of the workflow","default":0},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name","description":"Version name of the workflow","default":"Initial Version"},"workflow_config":{"$ref":"#/components/schemas/WorkflowConfig-Output","description":"Snapshot of the Workflow Configuration"}},"type":"object","required":["workflow_id","workflow_config"],"title":"WorkflowVersionModel","description":"Stores a snapshot of a workflow version.\nContains the workflow configuration and references to the specific nodes/edges for this version."},"WorkflowVersionResponse":{"properties":{"version":{"$ref":"#/components/schemas/WorkflowVersionModel","description":"Single workflow version object"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advisory authoring lints, in the same form as WorkflowsResponse.warnings. Present so the two are shaped alike: a workflow PATCH returns this model when the version exists and WorkflowsResponse when it does not, and a client should not have to know which it got to know whether to look for warnings. Empty on every route that does not lint."},"parent_active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Active Version","description":"Active version number from parent workflow"}},"type":"object","required":["version"],"title":"WorkflowVersionResponse","description":"Response model for a single workflow version.\nContains a WorkflowVersionModel object."},"WorkflowVersionsListResponse":{"properties":{"versions":{"items":{"$ref":"#/components/schemas/WorkflowVersionModel"},"type":"array","title":"Versions","description":"List of workflow versions"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of workflow versions available."}},"type":"object","title":"WorkflowVersionsListResponse","description":"Response model for a list of workflow versions.\nContains a list of WorkflowVersionModel objects."},"WorkflowVersionsWithFavoriteListResponse":{"properties":{"versions":{"items":{"$ref":"#/components/schemas/WorkflowVersionFavoriteItem"},"type":"array","title":"Versions"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"}},"type":"object","title":"WorkflowVersionsWithFavoriteListResponse"},"WorkflowWebhookAction":{"type":"string","enum":["workflow_created","workflow_updated","workflow_deleted","workflow_run_started","workflow_run_completed"],"title":"WorkflowWebhookAction"},"WorkflowWebhookAttemptsListResponse":{"properties":{"attempts":{"items":{"$ref":"#/components/schemas/WorkflowWebhookDeliveryAttemptModel"},"type":"array","title":"Attempts"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["attempts","total"],"title":"WorkflowWebhookAttemptsListResponse"},"WorkflowWebhookCreateRequest":{"properties":{"name":{"type":"string","maxLength":150,"minLength":1,"title":"Name"},"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"actions":{"items":{"$ref":"#/components/schemas/WorkflowWebhookAction"},"type":"array","title":"Actions"},"enabled":{"type":"boolean","title":"Enabled","default":true},"bearer_token":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Bearer Token"},"timeout_seconds":{"type":"integer","maximum":60,"minimum":1,"title":"Timeout Seconds","default":10},"max_retries":{"type":"integer","maximum":10,"minimum":0,"title":"Max Retries","default":3},"retry_backoff_seconds":{"type":"integer","maximum":300,"minimum":1,"title":"Retry Backoff Seconds","default":10}},"type":"object","required":["name","url"],"title":"WorkflowWebhookCreateRequest"},"WorkflowWebhookDeliveryAttemptModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"event_id":{"type":"string","minLength":1,"title":"Event Id"},"subscription_id":{"type":"string"},"attempt_number":{"type":"integer","minimum":1,"title":"Attempt Number"},"action":{"$ref":"#/components/schemas/WorkflowWebhookAction"},"request_url":{"type":"string","title":"Request Url"},"success":{"type":"boolean","title":"Success","default":false},"response_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status Code"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"}},"type":"object","required":["event_id","subscription_id","attempt_number","action","request_url"],"title":"WorkflowWebhookDeliveryAttemptModel"},"WorkflowWebhookEventModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"event_id":{"type":"string","minLength":1,"title":"Event Id","description":"External idempotent event id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Webhook subscription id"},"action":{"$ref":"#/components/schemas/WorkflowWebhookAction"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"workflow_run_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflow_run_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Run Status"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"dedupe_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dedupe Key"},"status":{"$ref":"#/components/schemas/WorkflowWebhookEventStatus","default":"pending"},"attempts_count":{"type":"integer","minimum":0,"title":"Attempts Count","default":0},"next_retry_at":{"type":"string","format":"date-time","title":"Next Retry At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Attempt At"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"}},"type":"object","required":["event_id","subscription_id","action"],"title":"WorkflowWebhookEventModel"},"WorkflowWebhookEventStatus":{"type":"string","enum":["pending","retrying","delivered","failed"],"title":"WorkflowWebhookEventStatus"},"WorkflowWebhookEventsListResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/WorkflowWebhookEventModel"},"type":"array","title":"Events"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["events","total"],"title":"WorkflowWebhookEventsListResponse"},"WorkflowWebhookListResponse":{"properties":{"webhooks":{"items":{"$ref":"#/components/schemas/WorkflowWebhookResponse"},"type":"array","title":"Webhooks"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["webhooks","total"],"title":"WorkflowWebhookListResponse"},"WorkflowWebhookResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"actions":{"items":{"$ref":"#/components/schemas/WorkflowWebhookAction"},"type":"array","title":"Actions"},"enabled":{"type":"boolean","title":"Enabled"},"has_bearer_token":{"type":"boolean","title":"Has Bearer Token"},"timeout_seconds":{"type":"integer","title":"Timeout Seconds"},"max_retries":{"type":"integer","title":"Max Retries"},"retry_backoff_seconds":{"type":"integer","title":"Retry Backoff Seconds"}},"type":"object","required":["id","name","url","actions","enabled","has_bearer_token","timeout_seconds","max_retries","retry_backoff_seconds"],"title":"WorkflowWebhookResponse"},"WorkflowWebhookUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":150,"minLength":1},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Url"},"actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowWebhookAction"},"type":"array"},{"type":"null"}],"title":"Actions"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"bearer_token":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Bearer Token"},"clear_bearer_token":{"type":"boolean","title":"Clear Bearer Token","default":false},"timeout_seconds":{"anyOf":[{"type":"integer","maximum":60,"minimum":1},{"type":"null"}],"title":"Timeout Seconds"},"max_retries":{"anyOf":[{"type":"integer","maximum":10,"minimum":0},{"type":"null"}],"title":"Max Retries"},"retry_backoff_seconds":{"anyOf":[{"type":"integer","maximum":300,"minimum":1},{"type":"null"}],"title":"Retry Backoff Seconds"}},"type":"object","title":"WorkflowWebhookUpdateRequest"},"WorkflowsDynamicVariablesResponse":{"properties":{"dynamic_variables":{"additionalProperties":true,"type":"object","title":"Dynamic Variables","description":"Dictionary of dynamic variables for the workflow"},"global_variables_resolved":{"additionalProperties":true,"type":"object","title":"Global Variables Resolved","description":"Subset of dynamic variables auto-filled by team-level global variables. Each entry is name → {name, value, description, category, is_secret} with secret values masked."}},"type":"object","title":"WorkflowsDynamicVariablesResponse","description":"Response model for a workflow's dynamic variables.\nContains a dictionary where the keys are variable names and the values are their example values they can take."},"WorkflowsFilter":{"properties":{"logical_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Id","description":"Filter by logical ID"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories","description":"Filter by workflow categories"},"created_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/PydanticObjectId"},"type":"array"},{"type":"null"}],"title":"Created By","description":"Filter by creator user IDs"},"favorites":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorites","description":"Filter workflows marked as favorite by the requesting user"}},"type":"object","title":"WorkflowsFilter"},"WorkflowsListResponse":{"properties":{"workflows":{"items":{"$ref":"#/components/schemas/WorkflowsModel"},"type":"array","title":"Workflows","description":"List of workflows"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of workflows available without pagination."}},"type":"object","title":"WorkflowsListResponse","description":"Response model for a list of workflows.\nContains a list of WorkflowsModel objects."},"WorkflowsModel":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the team that owns this edge"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who created this edge"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the user who last updated this edge"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"_id":{"anyOf":[{"$ref":"#/components/schemas/PydanticObjectId"},{"type":"null"}],"description":"MongoDB document ObjectID"},"workflow_config":{"anyOf":[{"$ref":"#/components/schemas/WorkflowConfigFullyHydrated-Output","description":"Fully-hydrated config with all super nodes inlined as flat nodes/edges"},{"$ref":"#/components/schemas/WorkflowConfig-Output"},{"type":"null"}],"title":"Workflow Config","description":"Workflow Configuration"},"active_version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version Number","description":"Active version number of the workflow","default":0},"max_concurrent_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Runs","description":"Maximum number of concurrent runs allowed for this workflow. None means no per-workflow limit (only team-level limit applies)."}},"type":"object","title":"WorkflowsModel","description":"Stores a workflow config present in the workflow system.\nIt typically contains configuration fields, ids of nodes and edges that make up the workflow.\nWhen the type is WorkflowConfigFullyHydrated, it contains all the information needed to execute the workflow, including\nthe configuration fields, ids of nodes and edges, and any other runtime information."},"WorkflowsResponse":{"properties":{"workflow":{"$ref":"#/components/schemas/WorkflowsModel","description":"Single workflow object"},"execution_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Url","description":"Public endpoint to execute this workflow"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advisory authoring lints. The save succeeded — these describe configuration that is legal but almost certainly not what the author meant. Empty on every route that does not lint."}},"type":"object","required":["workflow"],"title":"WorkflowsResponse","description":"Response model for a single workflow.\nContains a WorkflowsModel object."},"WorkingHours":{"properties":{"monday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Monday"},"tuesday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Tuesday"},"wednesday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Wednesday"},"thursday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Thursday"},"friday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Friday"},"saturday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Saturday"},"sunday":{"$ref":"#/components/schemas/StartEndTimings","description":"Working hours for Sunday"}},"type":"object","required":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"title":"WorkingHours"},"agentic_workflow_framework__configs__nodes__node__GlobalConditionEdgeEvaluationMethod":{"type":"string","enum":["workflow_default","tool_call","independent_llm_evaluations"],"title":"GlobalConditionEdgeEvaluationMethod"},"agentic_workflow_framework__configs__workflow__GlobalConditionEdgeEvaluationMethod":{"type":"string","enum":["tool_call","independent_llm_evaluations"],"title":"GlobalConditionEdgeEvaluationMethod"}}}}