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

# Add Node

> Add a step to a workflow, such as a voice call, delay, condition, or action.

<Warning>
  **Legacy endpoint - deprecated.** Unversioned endpoints are scheduled for removal on **July 31, 2026**. A public v1 replacement is not currently listed in the v1 reference. This endpoint remains available for existing integrations until then.
</Warning>

Adds a node to a workflow. Each node is one step in the sequence. After creating your nodes, connect them with [edges](/docs/api-reference/workflow-edges/create) to define how leads transition between steps.

## Node types

| `node_type`   | What it does                                                     |
| ------------- | ---------------------------------------------------------------- |
| `VOICE_CALL`  | Places an outbound call to the lead using the specified agent.   |
| `TIME`        | Waits for a configured duration before moving to the next step.  |
| `CONDITIONAL` | Branches the workflow based on a condition (e.g., call outcome). |
| `APPLICATION` | Triggers an external action (e.g., a webhook or CRM update).     |
| `CONVERTED`   | Terminal node that marks the lead as successfully converted.     |
| `DROPPED`     | Terminal node that marks the lead as dropped from the sequence.  |

## VOICE\_CALL config example

```json theme={null}
{
  "node_type": "VOICE_CALL",
  "label": "First Outreach Call",
  "position_x": 100,
  "position_y": 100,
  "config": {
    "agent_id": "agt_abc123",
    "from_phone_number": "+912234567890"
  }
}
```

## TIME delay config example

```json theme={null}
{
  "node_type": "TIME",
  "label": "Wait 2 Days",
  "config": {
    "delay_hours": 48
  }
}
```

## CONDITIONAL config example

```json theme={null}
{
  "node_type": "CONDITIONAL",
  "label": "Check Call Outcome",
  "config": {
    "condition_field": "call_status",
    "branches": ["COMPLETED", "FAILED", "NO_ANSWER"]
  }
}
```

After creating a conditional node, add one edge per branch (labeled `COMPLETED`, `FAILED`, etc.) leading to the appropriate next node.


## OpenAPI

````yaml POST /workflows/{id}/nodes
openapi: 3.0.0
info:
  title: DialNexa API
  description: >-
    Public REST API for the DialNexa voice AI platform. Versioned endpoints are
    under /v1; unversioned endpoints are legacy and deprecated.
  version: 1.0.0
servers:
  - url: https://api.dialnexa.com
    description: DialNexa production API
security:
  - bearer: []
tags:
  - name: API Keys
  - name: Agent Functions
  - name: Agents V1
  - name: Agents2
  - name: Batch Calls
  - name: Batch Calls V1
  - name: Call Logs
  - name: Calls
  - name: Calls V1
  - name: Campaign Leads
  - name: Campaigns
  - name: External Webhooks
  - name: Knowledge Base
  - name: Knowledge Base V1
  - name: LLMs
  - name: LLMs V1
  - name: Languages
  - name: Languages V1
  - name: Organization Phone Numbers
  - name: Organization Phone Numbers V1
  - name: Phone Number Pricing
  - name: Phone Number Pricing V1
  - name: Transcribers
  - name: Transcribers V1
  - name: User Webhooks
  - name: User Webhooks V1
  - name: V1
  - name: Voices
  - name: Voices V1
  - name: Webcall
  - name: Workflow Leads
  - name: Workflow Leads V1
  - name: Workflows
  - name: Workflows V1
paths:
  /workflows/{id}/nodes:
    post:
      tags:
        - Workflows
      summary: Create a node in a workflow
      description: >-
        **Legacy endpoint - deprecated, scheduled for removal on July 31,
        2026.** Use the `/v1` version for new integrations. 
      operationId: WorkflowsController_createNode
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNodeDto'
      responses:
        '201':
          description: Node created successfully
      deprecated: true
components:
  schemas:
    CreateNodeDto:
      type: object
      properties:
        node_type:
          type: string
          description: Type of the node
          enum:
            - VOICE_CALL
            - CONDITIONAL
            - TIME
            - APPLICATION
            - CONVERTED
            - DROPPED
          example: VOICE_CALL
        label:
          type: string
          description: Label/name of the node
          example: Initial Call
        position_x:
          type: number
          description: X position for UI
          example: 100
        position_y:
          type: number
          description: Y position for UI
          example: 200
        config:
          description: Node-specific configuration (varies by node type)
          oneOf:
            - 964a5eb9-835b-48c6-beed-eb2c5cb06260
            - 644c087e-37e1-4771-bc0e-953a11fd31b9
            - 22bd9890-81df-43d5-9085-673722518a7b
            - 84f0ec35-4064-4851-b19d-8b5da2faa672
      required:
        - node_type
        - label
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````