> ## Documentation Index
> Fetch the complete documentation index at: https://flowdrop.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Get all available node types

> Retrieve all available node processors with optional filtering by category, search query, and pagination.
Supports filtering by node category (models, data_processing, input_output, etc.) and search queries.




## OpenAPI

````yaml /api-reference/openapi.yaml get /nodes
openapi: 3.0.3
info:
  title: FlowDrop™ API
  description: >
    FlowDrop is a visual workflow editor for AI applications and data processing
    pipelines.

    This API provides comprehensive endpoints for managing workflows, node
    types, pipeline execution, and port configuration.


    ## Features

    - **Workflow Management**: Complete CRUD operations for workflows with nodes
    and edges

    - **Node Type Discovery**: Browse and search available node processors with
    metadata

    - **Pipeline Execution**: Execute workflows with real-time status tracking
    and job management

    - **Port Configuration**: Dynamic port compatibility system with data type
    management

    - **Real-time Updates**: Track node execution status and pipeline progress

    - **Import/Export**: Import and export workflows in JSON format

    - **Validation**: Workflow validation before execution

    - **Agent Spec Integration**: Import/export Oracle Open Agent Spec flows and
    execute on compatible runtimes (WayFlow/PyAgentSpec)


    ## Architecture

    - **Frontend**: Svelte 5 + XYFlow for visual workflow editing

    - **Backend**: Drupal 10/11 with custom node processor plugins

    - **API**: RESTful JSON API with consistent response format

    - **Storage**: Drupal entity system with workflow versioning


    ## Authentication

    API endpoints require Drupal authentication. Use Bearer token or
    session-based authentication.


    ## Rate Limiting

    - Node Discovery: 100 requests/minute

    - Workflow Operations: 50 requests/minute

    - Pipeline Execution: 20 requests/minute


    ## Error Handling

    All errors return a consistent format with success flag, error message, and
    optional details.
  version: 1.0.0
  contact:
    name: FlowDrop Support
    email: shibinkidd@gmail.com
    url: https://www.drupal.org/project/issues/flowdrop?categories=All
servers:
  - url: http://localhost:5173/api/flowdrop
    description: Local development server (Svelte)
  - url: https://flowdrop.ddev.site/api/flowdrop
    description: Local Drupal server
security:
  - BearerAuth: []
  - SessionAuth: []
tags:
  - name: System
    description: System health and status endpoints
  - name: Node Types
    description: Node type discovery and metadata endpoints
  - name: Configuration
    description: System configuration endpoints including port configuration
  - name: Workflows
    description: Workflow CRUD operations
  - name: Pipeline
    description: Pipeline execution and monitoring
  - name: Playground
    description: Interactive workflow testing and chat interface
  - name: Interrupts
    description: |
      Human-in-the-Loop (HITL) interrupt endpoints for workflow interactions.
      Interrupts allow workflows to pause execution and request user input.
  - name: Validation
    description: Workflow validation
  - name: Import/Export
    description: Workflow import and export operations
  - name: Chat
    description: |
      LLM Chat Interface for natural language workflow building.
      Translates user intent into DSL commands via a backend LLM integration.
  - name: Agent Spec
    description: >
      Oracle Open Agent Spec integration endpoints.

      Provides bidirectional conversion between FlowDrop workflows and Agent
      Spec format,

      plus runtime execution on compatible runtimes (WayFlow, PyAgentSpec).

      @see https://github.com/oracle/agent-spec
paths:
  /nodes:
    get:
      tags:
        - Node Types
      summary: Get all available node types
      description: >
        Retrieve all available node processors with optional filtering by
        category, search query, and pagination.

        Supports filtering by node category (models, data_processing,
        input_output, etc.) and search queries.
      operationId: listNodeTypes
      parameters:
        - name: category
          in: query
          description: Filter by node category
          required: false
          schema:
            $ref: '#/components/schemas/NodeCategory'
        - name: search
          in: query
          description: Search node types by name, description, or tags
          required: false
          schema:
            type: string
            maxLength: 100
        - name: limit
          in: query
          description: Maximum number of results (1-1000)
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: offset
          in: query
          description: Number of results to skip for pagination
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: List of node types retrieved successfully
          headers:
            X-Total-Count:
              description: Total number of nodes matching the filter
              schema:
                type: integer
            X-Page-Size:
              description: Number of nodes per page
              schema:
                type: integer
            X-Page-Offset:
              description: Current page offset
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodesResponse'
              examples:
                success:
                  value:
                    success: true
                    data:
                      - id: openai_chat_executor
                        name: OpenAI Chat
                        description: Chat completion using OpenAI's GPT models
                        category: ai
                        version: 1.0.0
                        icon: mdi:chat
                        color: '#10a37f'
                        type: default
                        supportedTypes:
                          - default
                          - simple
                        inputs:
                          - id: data
                            name: Input Data
                            type: input
                            dataType: mixed
                            required: false
                            description: Input data for the node
                        outputs:
                          - id: response
                            name: Response
                            type: output
                            dataType: string
                            description: The OpenAI response
                        configSchema:
                          type: object
                          properties:
                            model:
                              type: string
                              title: Model
                              default: gpt-4o-mini
                              enum:
                                - gpt-4o-mini
                                - gpt-5
                                - gpt-4.1
                            temperature:
                              type: number
                              title: Temperature
                              default: 0.7
                              minimum: 0
                              maximum: 2
                            maxTokens:
                              type: integer
                              title: Max Tokens
                              default: 1000
                              minimum: 1
                              maximum: 4096
                            apiKey:
                              type: string
                              title: API Key
                              format: hidden
                        tags:
                          - openai
                          - gpt
                          - chat
                          - ai
                    message: Found 1 node types
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    NodeCategory:
      type: string
      description: |
        Node category for organizing nodes in the sidebar.

        Any string value is accepted, allowing custom categories.
        Custom categories can be defined via the `/categories` endpoint
        with display labels, icons, and colors.

        Built-in categories with dedicated icons and colors:
        triggers, inputs, outputs, prompts, models, processing,
        logic, data, tools, helpers, vector stores, embeddings,
        memories, agents, ai, interrupts, bundles
      example: processing
    NodesResponse:
      allOf:
        - $ref: '#/components/schemas/ApiResponse'
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/NodeMetadata'
    ApiResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Whether the request was successful
        data:
          description: Response data (type varies by endpoint)
        message:
          type: string
          description: Response message
        error:
          type: string
          description: Error message (if any)
    NodeMetadata:
      type: object
      description: >
        Complete metadata for a node type including ports, configuration schema,
        and extensions.


        ## Dynamic Port Support


        Nodes can support user-defined dynamic ports through their configSchema:

        - Add `dynamicInputs` array property to allow custom input handles

        - Add `dynamicOutputs` array property to allow custom output handles

        - Add `branches` array property for gateway nodes with conditional paths


        ## Extensions Support


        The `extensions` property allows storing UI settings and 3rd party data:

        - Use `extensions.ui.hideUnconnectedHandles` to hide unconnected ports
        by default

        - Use namespaced keys for custom integrations (e.g., "myapp:settings")
      properties:
        id:
          type: string
          description: Node type unique identifier
          example: calculator
        name:
          type: string
          description: Node type display name
          example: Calculator
        type:
          $ref: '#/components/schemas/NodeType'
        supportedTypes:
          type: array
          items:
            $ref: '#/components/schemas/NodeType'
          description: Array of supported rendering types
        description:
          type: string
          description: Node type description
          example: Perform mathematical operations on input data
        category:
          $ref: '#/components/schemas/NodeCategory'
        version:
          type: string
          description: Node type version
          example: 1.0.0
        icon:
          type: string
          description: Icon identifier (Material Design Icons)
          example: mdi:calculator
        color:
          type: string
          description: Node color (CSS color value)
          example: '#3b82f6'
        badge:
          type: string
          description: >
            Default badge label displayed in the node header (e.g., "TOOL",
            "API", "LLM").

            Currently used by tool nodes. Can be overridden per-instance via
            `config.instanceBadge`.

            Defaults to "TOOL" for tool nodes if not specified.
          example: API
        portDataType:
          type: string
          description: >
            Port dataType to expose on tool nodes. Defaults to "tool".

            Set to another type (e.g., "trigger") to show that port type
            instead.

            This allows repurposing the tool node with a custom badge and
            matching port type.
          example: trigger
        inputs:
          type: array
          items:
            $ref: '#/components/schemas/NodePort'
          description: |
            Static input ports defined by the node type.
            Additional dynamic inputs can be added via config.dynamicInputs.
        outputs:
          type: array
          items:
            $ref: '#/components/schemas/NodePort'
          description: |
            Static output ports defined by the node type.
            Additional dynamic outputs can be added via config.dynamicOutputs.
            For gateway nodes, branches create additional output handles.
        configSchema:
          $ref: '#/components/schemas/ConfigSchema'
        tags:
          type: array
          items:
            type: string
          description: Node tags for search and filtering
          example:
            - math
            - calculation
            - processing
        formats:
          type: array
          items:
            type: string
          description: |
            Workflow formats this node is compatible with.
            When omitted, the node is universal (compatible with all formats).
            When specified, the node only appears in the sidebar for workflows
            matching one of the listed formats.
          example:
            - agentspec
        extensions:
          $ref: '#/components/schemas/NodeExtensions'
          description: >
            Default extension properties for all instances of this node type.

            Can be overridden at the instance level via
            WorkflowNode.data.extensions.
      required:
        - id
        - name
        - description
        - category
        - version
        - inputs
        - outputs
    ErrorResponse:
      allOf:
        - $ref: '#/components/schemas/ApiResponse'
        - type: object
          properties:
            success:
              type: boolean
              example: false
            error:
              type: string
              description: Error message
            code:
              type: string
              description: Error code
            details:
              type: object
              description: Additional error details
    NodeType:
      type: string
      enum:
        - note
        - simple
        - square
        - atom
        - tool
        - gateway
        - terminal
        - idea
        - default
      description: >
        Visual rendering type for the node.


        Built-in types:

        - `note` - Sticky note with markdown support

        - `simple` - Compact layout with header and description

        - `square` - Minimal square node with centered icon

        - `atom` - Minimal label-only pill/rectangle for value/transform nodes
        (uses extensions.ui.atom)

        - `tool` - Specialized node for agent tools

        - `gateway` - Branching control flow with dynamic branches (uses
        config.branches)

        - `terminal` - Circular node for workflow start/end/exit points

        - `idea` - Conceptual idea node for BPMN-like flow diagrams

        - `default` - Full-featured workflow node with dynamic port support


        ## Dynamic Port Support


        The `default` and `gateway` node types support dynamic ports:


        - **default**: Supports `config.dynamicInputs` and
        `config.dynamicOutputs`
          for user-defined input/output handles
        - **gateway**: Supports `config.branches` for conditional branching
        paths


        ## UI Extensions


        All node types support `extensions.ui.hideUnconnectedHandles` to control

        visibility of unconnected ports.
    NodePort:
      type: object
      description: >
        Defines an input or output port on a node.


        Ports are connection points where data flows between nodes. Input ports

        receive data from upstream nodes, and output ports send data to
        downstream nodes.


        ## Template Variable Autocomplete


        Output ports can include a `schema` property that describes the
        structure of

        their data. This schema is used by downstream nodes' template fields to
        provide

        autocomplete suggestions.


        When a template field is connected to a port with a schema, users get:

        - Autocomplete for top-level properties when typing `{{`

        - Nested property drilling when typing `.`

        - Array index suggestions when typing `[`
      properties:
        id:
          type: string
          description: Port unique identifier (used in handle IDs and variable names)
          example: json
        name:
          type: string
          description: Port display name shown in the UI
          example: JSON Response
        type:
          type: string
          enum:
            - input
            - output
            - metadata
          description: Port direction (input receives data, output sends data)
        dataType:
          $ref: '#/components/schemas/NodeDataType'
        required:
          type: boolean
          default: false
          description: Whether the port must be connected for the node to execute
        description:
          type: string
          description: Help text describing what data the port expects or provides
          example: Parsed JSON response from the HTTP request
        defaultValue:
          description: Default value used when no connection provides data
        schema:
          $ref: '#/components/schemas/PortDataSchema'
          description: >
            JSON Schema describing the structure of data on this output port.


            **Purpose:** Enables template variable autocomplete in downstream
            nodes.

            When a downstream node has a template field connected to this port,

            the schema's properties become available as autocomplete
            suggestions.


            **How it works:**

            1. Define a schema with `properties` on an output port

            2. Connect this port to a downstream node's input

            3. In the downstream node's template field, typing `{{` shows the
            schema's properties


            **Example:**


            ```yaml

            outputs:
              - id: json
                name: JSON Response
                type: output
                dataType: json
                schema:
                  type: object
                  properties:
                    user:
                      type: object
                      properties:
                        name: { type: string }
                        email: { type: string }
                    orders:
                      type: array
                      items:
                        type: object
                        properties:
                          id: { type: string }
                          total: { type: number }
            ```


            This enables autocomplete for:

            - `{{ user }}`, `{{ orders }}`

            - `{{ user.name }}`, `{{ user.email }}`

            - `{{ orders[0].id }}`, `{{ orders[0].total }}`
      required:
        - id
        - name
        - type
        - dataType
    ConfigSchema:
      type: object
      properties:
        type:
          type: string
          enum:
            - object
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ConfigProperty'
          description: Configuration properties
        required:
          type: array
          items:
            type: string
          description: Required property names
        additionalProperties:
          type: boolean
          default: false
      required:
        - type
        - properties
    NodeExtensions:
      type: object
      description: >
        Custom extension properties for 3rd party integrations.

        Allows storing additional configuration and UI state data.


        Use namespaced keys (e.g., "myapp:analytics", "acme:settings") to avoid
        conflicts

        between different integrations.


        ## Reserved Extension Keys


        - `agentspec:component_type` — Stores the Oracle Open Agent Spec
        component type
          (e.g., "llm_node", "branching_node") for nodes imported from Agent Spec.
          Used for round-trip preservation during import/export.
      properties:
        ui:
          $ref: '#/components/schemas/NodeUIExtensions'
        agentspec:component_type:
          type: string
          description: |
            Agent Spec component type for round-trip preservation.
            Set automatically when importing from Agent Spec format.
          example: llm_node
      additionalProperties: true
      example:
        ui:
          hideUnconnectedHandles: true
          style:
            opacity: 0.8
        agentspec:component_type: llm_node
        myapp:analytics:
          trackUsage: true
          customField: value
    NodeDataType:
      type: string
      description: |
        Data type for node ports. The available data types are configured
        dynamically through the port configuration system.
      example: mixed
    PortDataSchema:
      type: object
      description: >
        JSON Schema describing the structure of data on an output port.

        Follows JSON Schema draft-07 specification.


        ## Purpose


        Enables template variable autocomplete in downstream nodes by describing

        the shape of data that flows through the port.


        ## Supported Features


        - **Objects**: Define `properties` to enable dot notation drilling

        - **Arrays**: Define `items` to enable index access and item property
        drilling

        - **Nested structures**: Combine objects and arrays for deep drilling

        - **Metadata**: Use `title` and `description` for autocomplete tooltips


        ## Example


        A schema describing an API response with user data and orders:


        ```yaml

        type: object

        properties:
          user:
            type: object
            title: User
            description: The authenticated user
            properties:
              id: { type: integer }
              name: { type: string, description: "User's full name" }
              email: { type: string }
              address:
                type: object
                properties:
                  city: { type: string }
                  country: { type: string }
          orders:
            type: array
            title: Orders
            description: User's order history
            items:
              type: object
              properties:
                order_id: { type: string }
                total: { type: number }
                status: { type: string }
        ```


        This enables template patterns like:

        - `{{ user.name }}` - Access user's name

        - `{{ user.address.city }}` - Nested property access

        - `{{ orders[0].total }}` - First order's total

        - `{{ orders[0].status }}` - First order's status
      properties:
        type:
          type: string
          enum:
            - object
            - array
            - string
            - number
            - integer
            - boolean
          description: |
            The JSON Schema type. Use `object` for nested properties,
            `array` for lists with `items` schema.
        title:
          type: string
          description: |
            Human-readable title shown in autocomplete dropdown.
            If not provided, the property name is used.
        description:
          type: string
          description: |
            Description shown as tooltip in autocomplete.
            Helps users understand what data the property contains.
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PortDataSchema'
          description: Property schemas for object types
        items:
          $ref: '#/components/schemas/PortDataSchema'
          description: Item schema for array types
        required:
          type: array
          items:
            type: string
          description: Required property names
      example:
        type: object
        properties:
          user:
            type: object
            title: User
            description: User information
            properties:
              id:
                type: integer
                description: User ID
              name:
                type: string
                description: User full name
              email:
                type: string
                description: User email address
              address:
                type: object
                title: Address
                properties:
                  street:
                    type: string
                  city:
                    type: string
                  country:
                    type: string
          orders:
            type: array
            title: Orders
            description: List of user orders
            items:
              type: object
              properties:
                order_id:
                  type: string
                product_name:
                  type: string
                quantity:
                  type: integer
                price:
                  type: number
    ConfigProperty:
      type: object
      description: >
        JSON Schema property definition for node configuration.

        Follows JSON Schema draft-07 specification with FlowDrop extensions for
        UI rendering.


        For select/dropdown fields, use standard JSON Schema patterns:

        - `enum` for simple value lists (no labels)

        - `oneOf` with `const`/`title` for labeled options
      properties:
        type:
          type: string
          enum:
            - string
            - number
            - boolean
            - array
            - object
            - integer
          description: JSON Schema type
        title:
          type: string
          description: Display title for the property
        description:
          type: string
          description: Property description
        default:
          description: Default value for the property
        enum:
          type: array
          items: {}
          description: |
            Allowed values for enum properties (simple values without labels).
            For labeled options, use `oneOf` with `const`/`title` instead.
        oneOf:
          type: array
          items:
            $ref: '#/components/schemas/OneOfItem'
          description: >
            JSON Schema oneOf for labeled options (standard approach).

            Each item should have `const` (value) and optionally `title`
            (label).


            Example:

            ```json

            "oneOf": [
              { "const": "draft", "title": "Draft" },
              { "const": "published", "title": "Published" }
            ]

            ```
        multiple:
          type: boolean
          description: >-
            For enum/oneOf fields, allows multiple selection (renders as
            checkbox group)
        minimum:
          type: number
          description: Minimum value for numeric properties
        maximum:
          type: number
          description: Maximum value for numeric properties
        step:
          type: number
          description: Step increment for number/range inputs
        minLength:
          type: integer
          description: Minimum length for string properties
        maxLength:
          type: integer
          description: Maximum length for string properties
        pattern:
          type: string
          description: Regex pattern for string validation
        placeholder:
          type: string
          description: Placeholder text for input fields
        format:
          type: string
          description: >
            Special format hints for UI rendering:


            - `multiline`: Renders as textarea

            - `hidden`: Field is hidden from UI but included in form submission

            - `range`: Renders as range slider for numeric values

            - `json`: Renders as CodeMirror JSON editor

            - `code`: Alias for json, renders as CodeMirror editor

            - `markdown`: Renders as SimpleMDE Markdown editor

            - `template`: Template editor with variable autocomplete (see below)

            - `autocomplete`: Text input with callback URL suggestions

            - `email`, `uri`, `date`, `date-time`: Standard JSON Schema formats


            ## Template Format Details


            The `template` format renders a CodeMirror editor with:


            **Syntax highlighting** for Twig/Liquid-style `{{ variable }}`
            placeholders


            **Inline autocomplete** triggered by:

            - Typing `{{` - Shows available variables

            - Typing `.` after an object - Shows nested properties

            - Typing `[` after an array - Shows index suggestions


            **Variable patterns supported:**

            - `{{ user }}` - Simple variable

            - `{{ user.name }}` - Nested property access

            - `{{ user.address.city }}` - Deep nesting

            - `{{ items[0] }}` - Array index access

            - `{{ orders[0].product.name }}` - Combined patterns


            **Autocomplete source:**

            Variables are derived from connected upstream nodes that have output

            schemas defined. Use the `variables` property to configure which

            input ports provide variables.
          enum:
            - multiline
            - hidden
            - range
            - json
            - code
            - markdown
            - template
            - autocomplete
            - email
            - uri
            - date
            - date-time
        variables:
          $ref: '#/components/schemas/TemplateVariablesConfig'
          description: |
            Configuration for template variable autocomplete.
            Only applicable when `format: "template"`.
            See TemplateVariablesConfig for full documentation.
        x-display-order:
          type: integer
          description: >
            Controls the display order of fields in the configuration form.

            Fields are sorted by this value in ascending order (lower values
            appear first).


            Use negative values to ensure fields appear at the top:

            - `-2` for `instanceTitle` (appears first)

            - `-1` for `instanceDescription` (appears second)

            - `0` or positive values for regular fields


            Fields without `x-display-order` are sorted after fields with
            explicit ordering.
          example: -2
        items:
          $ref: '#/components/schemas/ConfigProperty'
          description: Schema for array items
        minItems:
          type: integer
          description: Minimum number of items for array fields
        maxItems:
          type: integer
          description: Maximum number of items for array fields
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ConfigProperty'
          description: Property schemas for object fields
        autocomplete:
          $ref: '#/components/schemas/AutocompleteConfig'
          description: >-
            Configuration for autocomplete fields (when format is
            "autocomplete")
        readOnly:
          type: boolean
          description: >
            JSON Schema `readOnly` keyword. When true, the field is displayed
            but

            cannot be edited (rendered in a disabled state).
        height:
          type: string
          description: |
            Editor height as a CSS value (e.g. `200px`).
            Applies to editor fields: `json`/`code`, `markdown`, and `template`.
            Defaults: `200px` (code), `300px` (markdown), `250px` (template).
          example: 300px
        darkTheme:
          type: boolean
          description: |
            Force the editor's dark theme on or off.
            Applies to `json`/`code` and `template` fields.
            When omitted, the editor follows the resolved app theme.
        autoFormat:
          type: boolean
          default: true
          description: |
            Whether to auto-format JSON on blur.
            Applies to `json`/`code` editor fields.
        showToolbar:
          type: boolean
          default: true
          description: |
            Whether to show the editor toolbar.
            Applies to `markdown` editor fields.
        showStatusBar:
          type: boolean
          default: true
          description: |
            Whether to show the editor status bar.
            Applies to `markdown` editor fields.
        spellChecker:
          type: boolean
          default: false
          description: |
            Whether to enable spell checking.
            Applies to `markdown` editor fields.
        placeholderExample:
          type: string
          description: |
            Example template string shown as a placeholder hint.
            Applies to `template` fields.
          example: 'Hello {{ name }}, your order #{{ order_id }} is ready!'
      required:
        - type
    NodeUIExtensions:
      type: object
      description: >
        UI-related extension settings for nodes.

        Used to control visual behavior in the workflow editor.


        These settings can be defined at two levels:

        1. **Node Type Level** (`metadata.extensions.ui`): Default settings for
        all instances

        2. **Instance Level** (`data.extensions.ui`): Override for specific node
        instances


        Instance-level settings take precedence over type-level defaults.
      properties:
        hideUnconnectedHandles:
          type: boolean
          description: |
            Show/hide unconnected handles (ports) to reduce visual noise.
            When true, only ports with active connections are displayed.
            Useful for nodes with many optional ports.
          example: true
        atom:
          $ref: '#/components/schemas/AtomUIConfig'
        style:
          type: object
          additionalProperties: true
          description: Custom styles or theme overrides
          example:
            opacity: 0.8
            borderRadius: 8
      additionalProperties: true
    OneOfItem:
      type: object
      description: |
        JSON Schema oneOf item for labeled options.
        This is the standard JSON Schema way to define labeled select options.

        Example:
        ```json
        {
          "type": "string",
          "oneOf": [
            { "const": "draft", "title": "Draft" },
            { "const": "published", "title": "Published" }
          ]
        }
        ```
      properties:
        const:
          oneOf:
            - type: string
            - type: number
            - type: boolean
          description: The constant value for this option (JSON Schema `const` keyword)
        title:
          type: string
          description: Human-readable label for this option
        description:
          type: string
          description: Optional description for this option
      required:
        - const
    TemplateVariablesConfig:
      type: object
      description: >
        Configuration for template variable autocomplete in template fields.


        ## Overview


        When a template field is connected to upstream nodes that have output
        schemas,

        FlowDrop automatically derives available variables for autocomplete.
        This config

        controls which ports provide variables and how they are presented.


        ## Variable Derivation


        Variables are derived from connected upstream nodes' **output port
        schemas**.

        When an output port has a `schema` property with `properties`, those
        properties

        become available as template variables.


        ### Default Behavior (includePortName: false)


        Schema properties are **unpacked as top-level variables**:


        ```

        HTTP Request node (output port "json" with schema):
          schema.properties: { user: {...}, orders: {...} }
                                  ↓
        Template variables: {{ user }}, {{ orders }}

        ```


        ### With includePortName: true


        Variables are **prefixed with the port name**:


        ```

        Same schema as above:
                                  ↓
        Template variables: {{ data.user }}, {{ data.orders }}

        ```


        ## Nested Property Access


        The autocomplete supports drilling into nested structures:


        - **Dot notation**: `{{ user.address.city }}`

        - **Array indices**: `{{ orders[0].product_name }}`

        - **Combined**: `{{ user.orders[0].items[1].price }}`
      properties:
        ports:
          type: array
          items:
            type: string
          description: >
            Specifies which input port IDs should provide variables for
            autocomplete.

            Only connections to these ports will contribute variables.


            **Behavior:**

            - If not specified: All input ports with connections are used

            - If empty array `[]`: No variables derived from ports (use with
            `schema` for static variables)

            - If specified: Only the listed ports contribute variables


            **Example:** A node with inputs "data", "context", and "trigger":

            - `ports: ["data"]` - Only variables from the "data" connection

            - `ports: ["data", "context"]` - Variables from both connections

            - Not specified - Variables from all non-trigger connections
          example:
            - data
            - context
        schema:
          $ref: '#/components/schemas/VariableSchema'
          description: >
            Pre-defined variable schema to provide static variables or override
            derived ones.


            When both `ports` and `schema` are specified, variables are
            **merged**:

            - Variables from connected ports are computed first

            - Static `schema` variables are added/override existing ones


            **Use cases:**

            - Provide variables that don't come from connections

            - Override labels or descriptions for derived variables

            - Add custom variables for specific use cases
        includePortName:
          type: boolean
          default: false
          description: |
            Controls how variables are named when derived from port schemas.

            **When false (default):**
            Schema properties become top-level variables directly.
            A port with schema `{ user: {...}, orders: {...} }` produces:
            - `{{ user }}`
            - `{{ orders }}`

            **When true:**
            Variables are prefixed with the input port name.
            Same schema connected to input port "data" produces:
            - `{{ data.user }}`
            - `{{ data.orders }}`

            **When to use true:**
            - Multiple input ports with potentially overlapping property names
            - You want to be explicit about data sources in templates
            - Backward compatibility with existing templates
        showHints:
          type: boolean
          default: true
          description: >
            Whether to display clickable variable hints below the editor.


            When enabled, shows a row of buttons for top-level variables that
            users

            can click to insert `{{ variableName }}` at the cursor position.


            Disable if the variable list is too long or not useful.
      example:
        ports:
          - data
        showHints: true
        includePortName: false
    AutocompleteConfig:
      type: object
      description: >
        Configuration for autocomplete fields that fetch suggestions from a
        callback URL.

        Used when format is "autocomplete".
      properties:
        url:
          type: string
          description: |
            The callback URL to fetch autocomplete suggestions from.
            Can be relative (resolved against API base URL) or absolute.
          example: /api/users/search
        queryParam:
          type: string
          default: q
          description: Query parameter name to pass the search term
        minChars:
          type: integer
          default: 0
          description: |
            Minimum number of characters before fetching suggestions.
            Set to 0 to fetch immediately on focus (when fetchOnFocus is true).
        debounceMs:
          type: integer
          default: 300
          description: Debounce delay in milliseconds before fetching suggestions
        fetchOnFocus:
          type: boolean
          default: false
          description: Whether to fetch all options when the field is focused
        labelField:
          type: string
          default: label
          description: The field name in the response objects to use as the display label
        valueField:
          type: string
          default: value
          description: The field name in the response objects to use as the stored value
        allowFreeText:
          type: boolean
          default: false
          description: |
            Whether to allow values that are not in the suggestions list.
            When true, users can enter and submit any text.
        multiple:
          type: boolean
          default: false
          description: |
            Whether to allow multiple selections.
            When true, users can select multiple values displayed as tags.
        params:
          type: object
          additionalProperties:
            type: string
          description: |
            Map of URL query parameter names to sibling form field names.
            When fetching autocomplete options, the current value of each
            referenced sibling field is appended as a query parameter.
            When any dependency field changes, the autocomplete clears its
            current value and invalidates the suggestion cache.
      required:
        - url
    AtomUIConfig:
      type: object
      description: >
        Display/behaviour settings for minimalist `atom` nodes (e.g. Constant,
        Cast).

        Lives under `extensions.ui.atom`. The atom renderer reads these to
        decide what

        to show, and `valueTypeKey` drives the bound output port's `dataType`
        from

        config so connection validation matches the type the user picked.


        All fields are optional — an empty object renders a label-only pill
        using the

        node's `label`.
      properties:
        valueKey:
          type: string
          description: |
            Config key whose value becomes the node body text.
            Falls back to the node `label` when unset or empty.
          example: value
        valueTypeKey:
          type: string
          description: |
            Config key holding the selected value's type (a port dataType id).
            The bound output port adopts this dataType.
          example: valueType
        outputPortId:
          type: string
          description: |
            Output port id driven by `valueTypeKey`.
            Defaults to the first output port when unset.
          example: value
        shape:
          type: string
          enum:
            - pill
            - rectangle
          default: pill
          description: >
            Body shape. `pill` (default) is fully rounded; `rectangle` is
            lightly rounded.
          example: rectangle
        prefix:
          type: string
          description: >
            Dimmed affordance rendered before the body (e.g. `"→ "` to mark a
            transform).

            Stays visible while the body value ellipsizes. Hidden in the empty
            state.
          example: '→ '
        placeholder:
          type: string
          description: Text shown (dimmed) when the resolved body value is empty/unset.
          example: empty
        maxWidth:
          type: integer
          description: Max body width in px before the label ellipsizes.
          example: 200
      additionalProperties: false
    VariableSchema:
      type: object
      description: |
        Schema passed to template editor for autocomplete functionality.
        Contains all available variables derived from connected upstream nodes.

        This is computed by the frontend based on:
        1. Finding all edges that connect to the current node's input ports
        2. Getting the output schemas from the source nodes' output ports
        3. Building a hierarchical variable structure for autocomplete
      properties:
        variables:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/TemplateVariable'
          description: Map of available variables keyed by variable name
      required:
        - variables
      example:
        variables:
          user:
            name: user
            type: object
            label: User Data
            properties:
              name:
                name: name
                type: string
              email:
                name: email
                type: string
          items:
            name: items
            type: array
            label: Order Items
            items:
              name: item
              type: object
              properties:
                product_name:
                  name: product_name
                  type: string
                price:
                  name: price
                  type: number
    TemplateVariable:
      type: object
      description: |
        Represents a variable available for template interpolation.
        Used by the template editor for autocomplete suggestions.

        Supports hierarchical drilling:
        - Objects have `properties` for dot notation (e.g., `user.name`)
        - Arrays have `items` for index access (e.g., `items[0].name`)
      properties:
        name:
          type: string
          description: Variable name (used in template as {{ name }})
          example: user
        label:
          type: string
          description: Display label for the variable in autocomplete dropdown
          example: User Data
        description:
          type: string
          description: Description shown in autocomplete tooltip
          example: User information from upstream node
        type:
          type: string
          enum:
            - string
            - number
            - integer
            - boolean
            - array
            - object
            - float
            - mixed
          description: Data type of the variable
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/TemplateVariable'
          description: For objects - child properties accessible via dot notation
        items:
          $ref: '#/components/schemas/TemplateVariable'
          description: For arrays - schema of array items accessible via index notation
        sourcePort:
          type: string
          description: Source port ID this variable comes from
        sourceNode:
          type: string
          description: Source node ID
      required:
        - name
        - type
      example:
        name: user
        label: User Data
        type: object
        properties:
          name:
            name: name
            type: string
            label: User Name
          email:
            name: email
            type: string
            label: Email Address
          address:
            name: address
            type: object
            label: Address
            properties:
              city:
                name: city
                type: string
                label: City
              country:
                name: country
                type: string
                label: Country
  responses:
    BadRequest:
      description: Bad request - invalid parameters or request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Invalid request parameters
            code: VALIDATION_ERROR
            details:
              field: name
              message: Name is required
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Internal server error
            code: INTERNAL_ERROR
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token for authentication
    SessionAuth:
      type: apiKey
      in: cookie
      name: SESS
      description: Drupal session cookie

````