---
title: "Create sequence node"
method: POST
path: "/public/v1/sequences/{sequenceId}/nodes"
tags: ["Sequences"]
---

# Create sequence node

`POST /public/v1/sequences/{sequenceId}/nodes`

Creates a node from the current Sequence allowlist. nodeId and alias are assigned by the server.

## Path parameters

- `sequenceId` integer, required

## Request body

- object
  - `node` object, required
    - `name` string
    - `position` object, required
      - `positionX` number, required
      - `positionY` number, required
    - `type` 'WAIT' | 'SEND_EMAIL' | 'SEND_WHATSAPP_MESSAGE' | 'TODO' | 'SEQUENCE_CONDITION' | 'TRIGGER_WORKFLOW' | 'DYNAMIC_TABLES', required
    - `data` union, required
      - object
        - `type` 'SEQUENCE_START', required
        - `mode` 'IMMEDIATELY' | 'WAIT'
        - `waitAmount` integer, nullable
        - `waitUnit` 'DAYS' | 'HOURS' | 'MINUTES', nullable
      - object
        - `type` 'WAIT', required
        - `amount` integer, required
        - `unit` 'DAYS' | 'HOURS' | 'MINUTES', required
      - object
        - `type` 'SEND_EMAIL', required
        - `subject` string, nullable
        - `body` string, nullable
        - `templateId` integer, nullable
        - `includeSignature` boolean
        - `threadMode` 'NEW_EMAIL' | 'THREAD'
        - `includeUnsubscribeLink` boolean
      - object
        - `type` 'SEND_WHATSAPP_MESSAGE', required
        - `recipientSource` 'ENROLLED_PERSON', nullable
        - `recipientMode` 'PHONE_NUMBER' | 'PEOPLE_RECORD', nullable
        - `peopleRecordTypeId` number, nullable
        - `peopleRowId` string, nullable
        - `personName` string, nullable
        - `phoneNumber` string, nullable
        - `phoneNumberId` string, nullable
        - `template` string, nullable
        - `templateVariables` object, nullable
          - `body` object
          - `header` object
          - `buttons` object[]
        - `flowButton` object, nullable
          - `index` integer, required
          - `flowToken` string, nullable
          - `flowActionData` object, nullable
        - `showConversationBeforeUserReply` boolean, nullable
        - `markConversationAsInteracted` boolean, nullable
      - object
        - `type` 'TODO', required
        - `todoType` 'TASK' | 'PHONE_CALL' | 'SEND_WHATSAPP' | 'SEND_EMAIL' | 'SEND_SMS'
        - `title` string, nullable
        - `description` string, nullable
        - `dueOffsetDays` integer, nullable
        - `dueOffsetUseBusinessDays` boolean
        - `assigneeUserId` integer, nullable
        - `completeToAdvance` boolean
      - object
        - `type` 'SEQUENCE_CONDITION', required
        - `branches` object[]
          - `id` string, required
          - `name` string, required
          - `handleId` string, required
          - `exitIfMatched` boolean
          - `conditionGroup` object, required
            - `operator` 'and' | 'or'
            - `conditions` object[]
              - …
        - `elseBranch` object, required
          - `handleId` string, required
          - `name` string, required
          - `exitIfMatched` boolean
      - object
        - `type` 'TRIGGER_WORKFLOW', required
        - `automationId` integer, nullable
        - `automationName` string, nullable
        - `inputMapping` object[]
          - `name` string, required
          - `valueType` 'STRING' | 'NUMBER' | 'BOOLEAN' | 'JSON', required
          - `kind` 'CONSTANT' | 'REFERENCE', required
          - `constantValue` object, nullable
          - `referencePath` string
        - `continuationMode` 'CONTINUE' | 'WAIT_FOR_COMPLETION'
        - `failurePolicy` 'FAIL_INSTANCE' | 'CONTINUE_SEQUENCE'
      - object
        - `type` 'DYNAMIC_TABLES', required
        - `tableId` number, nullable
        - `recordTypeId` number, nullable
        - `targetRecordTypeId` number, nullable
        - `actionType` 'CREATE' | 'UPDATE' | 'DELETE' | 'SEARCH' | 'SEARCH_BY_ID' | 'CHANGE_RECORD_TYPE', nullable
        - `rowData` object, nullable
        - `inputModeByField` object, nullable
        - `rowId` string, nullable
        - `query` object — Dynamic-table query: a single `{ path, operator, value }` condition, or a nested `{ operator: 'and' | 'or', conditions: [...] }` group.
        - `search` string, nullable
        - `pageNum` union
          - number
          - string
          - object, nullable
        - `pageSize` union
          - number
          - string
          - object, nullable
        - `pageNumMode` 'INPUT' | 'VARIABLE' | 'EMPTY', nullable
        - `pageSizeMode` 'INPUT' | 'VARIABLE' | 'EMPTY', nullable
        - `sort` object[], nullable
          - `path` string, required
          - `type` 'asc' | 'desc', required
        - `rowSource` 'ENROLLED_PERSON' | 'EXPLICIT', nullable — Sequence row target. ENROLLED_PERSON resolves the enrolled People row; EXPLICIT requires rowId. Omit for CREATE and SEARCH.
        - `deleteConfirmed` boolean, nullable — Must be true before a Sequence DELETE Data Action can be published.

## Response `201`

Sequence node created

- object
  - `nodeId` string, required
  - `alias` string, required
  - `workflowId` string
  - `name` string
  - `position` object, required
    - `positionX` number, required
    - `positionY` number, required
  - `type` 'SEQUENCE_START' | 'WAIT' | 'SEND_EMAIL' | 'SEND_WHATSAPP_MESSAGE' | 'TODO' | 'SEQUENCE_CONDITION' | 'TRIGGER_WORKFLOW' | 'DYNAMIC_TABLES', required
  - `handles` object[]
    - `handleId` string, required
    - `sourceEdge` object, required
      - `from` string, required
      - `fromHandleId` string, required
      - `to` string, required
      - `toHandleId` string, required
    - `text` string, required
  - `targetEdges` object[], nullable
    - `from` string, required
    - `fromHandleId` string, required
    - `to` string, required
    - `toHandleId` string, required
  - `data` union
    - object
      - `type` 'RESPONSE_AI', required
      - `assistantId` string, required
      - `aiModelId` number, nullable
      - `model` string, required
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', required
      - `instructions` string, nullable, required
      - `temperature` number, required
      - `captureVariables` object[], required
      - `exitNodeWhen` 'ALL_VARIABLES' | 'FLOW_TRIGGERED' | 'ANY_VARIABLES', required
      - `knowledgeBaseMode` 'DEFAULT' | 'CUSTOM' | 'DISABLED'
      - `knowledgeBaseIds` integer[], nullable
    - object
      - `type` 'SAY_AI', required
      - `message` string, nullable
      - `temperature` number
      - `prompt` string, nullable
      - `aiModelId` number, nullable
      - `model` string, nullable
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
      - `sayWithAi` boolean, required
    - object
      - `type` 'CONDITIONAL_ROUTING', required
      - `routingType` 'CONDITIONAL_AI' | 'DYNAMIC', required
      - `conditions` object[], required
        - `handleId` string, required
        - `expression` string, required
      - `temperature` number
      - `model` string
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA'
      - `aiModelId` integer, nullable
    - object
      - `type` 'TRIGGER_INTENT', required
      - `agenticRouting` string, nullable
      - `intentIds` number[], nullable
      - `intents` object[], nullable
        - `id` number, required
        - `name` string, required
        - `description` string, nullable
        - `createdAt` string, nullable, required
        - `updatedAt` string, nullable, required
        - `status` 'ACTIVE' | 'DELETED', required
        - `assistantId` string, required
        - `phrases` object[]
          - `id` number, required
          - `phrase` string, required
        - `flowId` number, nullable
    - object
      - `type` 'TRIGGER', required
      - `triggerType` 'CONVERSATION_ENDED' | 'CONTACT_CREATED' | 'CONTACT_UPDATED' | 'FEEDBACK_CAPTURED' | 'INCOMING_WEBHOOK' | 'TABLE_ROW_CREATED' | 'OBJECT_RECORD_CREATED' | 'TABLE_ROW_UPDATED' | 'OBJECT_RECORD_UPDATED' | 'CONVERSATION_IDLE' | 'COMPOSIO_TRIGGER' | 'CALLABLE', nullable
      - `triggeredBy` 'BOTH' | 'AGENT' | 'USER' | 'INCOMING_WEBHOOK', nullable
      - `triggeredByAgentIds` string[]
      - `triggerByWebhookIds` string[]
      - `triggeredByTableId` number, nullable
      - `triggeredByRecordTypeId` number, nullable
      - `connectedAccountTriggerId` string, nullable
      - `triggerToolkit` string, nullable
      - `triggerSlug` string, nullable
      - `triggerConfig` object, nullable
      - `triggerQueryConfig` object, nullable
        - `query` object — Dynamic-table query: a single `{ path, operator, value }` condition, or a nested `{ operator: 'and' | 'or', conditions: [...] }` group.
      - `connectedAccountId` number, nullable
      - `callableContract` object
        - `version` integer
        - `inputs` object[]
          - `name` string, required
          - `type` 'STRING' | 'NUMBER' | 'BOOLEAN' | 'JSON', required
          - `required` boolean
          - `default` object, nullable
          - `description` string
        - `outputs` object[]
          - `name` string, required
          - `type` 'STRING' | 'NUMBER' | 'BOOLEAN' | 'JSON', required
          - `required` boolean
          - `description` string
          - `sourceVariableName` string
    - object
      - `type` 'WEBHOOK', required
      - `includeConversationTranscript` boolean
      - `includeContactInfo` boolean
      - `includeFeedbackCaptured` boolean
      - `includeCapturedVariables` boolean
      - `includeWebhookPayload` boolean
      - `url` string, nullable
    - object
      - `type` 'API', required
      - `url` string, required
      - `method` 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH', required
      - `headers` object[], required
        - `key` string, required
        - `value` string, required
      - `body` string, nullable
      - `response` string, nullable
      - `parameters` object[], nullable
        - `key` string, required
        - `value` string, required
      - `variables` object[], nullable
        - `key` string, required
        - `value` string, required
        - `fullResponse` boolean
    - object
      - `type` 'TOOLS_AI', required
      - `conditions` object[], required
        - `handleId` string, required
        - `expression` string, required
      - `temperature` number
      - `model` string
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA'
      - `instructions` string, nullable, required
      - `prompt` string, nullable
      - `customToolIds` number[], nullable
      - `maxIterations` number
      - `agentType` 'BASIC' | 'ADVANCED'
      - `captureVariables` object[], nullable
      - `knowledgeBaseMode` 'DEFAULT' | 'CUSTOM' | 'DISABLED'
      - `knowledgeBaseIds` integer[], nullable
      - `selectedRecordTypes` object[], nullable
        - `recordTypeId` number, required
        - `read` boolean
        - `create` boolean
        - `update` boolean
        - `delete` boolean
        - `createActivity` boolean
      - `systemToolsConfig` object, nullable
        - `webSearchEnabled` boolean
        - `urlScrapeEnabled` boolean
        - `linkedinSearchEnabled` boolean
      - `connectedAccountConfigs` object[], nullable
        - `connectedAccountId` number, required
        - `useAllTools` boolean
        - `selectedToolSlugs` string[], nullable
      - `playbookIds` integer[], nullable
      - `aiModelId` integer, nullable
    - object
      - `type` 'AI_CAPTURE', required
      - `aiModelId` number, nullable
      - `model` string, required
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', required
      - `instructions` string, nullable
      - `prompt` string, nullable, required
      - `temperature` number, required
      - `captureVariables` object[], required
      - `knowledgeBaseMode` 'DEFAULT' | 'CUSTOM' | 'DISABLED'
      - `knowledgeBaseIds` integer[], nullable
    - object
      - `type` 'DATA_TRANSFORMER', required
      - `prompt` string, nullable, required
      - `temperature` number
      - `model` string, nullable, required
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable, required
      - `aiModelId` integer, nullable
      - `outputJson` string, nullable
      - `outputMode` 'JSON' | 'KEY_VALUE' | 'TEXT', nullable, required
      - `keyValuePairs` object[], nullable
        - `key` string, required
        - `value` string, required
    - object
      - `type` 'DYNAMIC_TABLES', required
      - `tableId` number, nullable
      - `recordTypeId` number, nullable
      - `targetRecordTypeId` number, nullable
      - `actionType` 'CREATE' | 'UPDATE' | 'DELETE' | 'SEARCH' | 'SEARCH_BY_ID' | 'CHANGE_RECORD_TYPE', nullable
      - `rowData` object, nullable
      - `inputModeByField` object, nullable
      - `rowId` string, nullable
      - `query` object — Dynamic-table query: a single `{ path, operator, value }` condition, or a nested `{ operator: 'and' | 'or', conditions: [...] }` group.
      - `search` string, nullable
      - `pageNum` union
        - number
        - string
        - object, nullable
      - `pageSize` union
        - number
        - string
        - object, nullable
      - `pageNumMode` 'INPUT' | 'VARIABLE' | 'EMPTY', nullable
      - `pageSizeMode` 'INPUT' | 'VARIABLE' | 'EMPTY', nullable
      - `sort` object[], nullable
        - `path` string, required
        - `type` 'asc' | 'desc', required
      - `rowSource` 'ENROLLED_PERSON' | 'EXPLICIT', nullable — Sequence row target. ENROLLED_PERSON resolves the enrolled People row; EXPLICIT requires rowId. Omit for CREATE and SEARCH.
      - `deleteConfirmed` boolean, nullable — Must be true before a Sequence DELETE Data Action can be published.
    - object
      - `type` 'ITERATION', required
      - `variableName` string
      - `variablePath` string
      - `continueOnError` boolean
    - object
      - `type` 'BREAK', required
    - object
      - `type` 'AUTOMATION_STATUS', required
      - `automationId` integer, nullable
      - `automationName` string, nullable
      - `action` 'SET_ACTIVE' | 'SET_DRAFT' | 'TOGGLE'
    - object
      - `type` 'SCHEDULED_TRIGGER', required
      - `cronExpression` string, required
      - `timezone` string, required
      - `startTime` string, nullable, required
      - `endTime` string, nullable, required
      - `startDate` string, nullable
      - `endDate` string, nullable
      - `frequency` 'INTERVALS' | 'DAILY' | 'WEEKLY' | 'MONTHLY', nullable
    - object
      - `type` 'SEND_MESSAGE', required
      - `whatsapp` object, nullable
        - `messageType` 'STATIC' | 'DYNAMIC' | 'WHATSAPP_TEMPLATE', required
        - `message` string, nullable
        - `prompt` string, nullable
        - `temperature` number, nullable
        - `aiModelId` number, nullable
        - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
        - `model` string, nullable
        - `template` string, nullable
        - `templateVariables` object, nullable
          - `body` object
          - `header` object
          - `buttons` object[]
        - `templateData` object, nullable
      - `instagram` object, nullable
        - `messageType` 'STATIC' | 'DYNAMIC' | 'WHATSAPP_TEMPLATE', required
        - `message` string, nullable
        - `prompt` string, nullable
        - `temperature` number, nullable
        - `aiModelId` number, nullable
        - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
        - `model` string, nullable
      - `messenger` object, nullable
        - `messageType` 'STATIC' | 'DYNAMIC' | 'WHATSAPP_TEMPLATE', required
        - `message` string, nullable
        - `prompt` string, nullable
        - `temperature` number, nullable
        - `aiModelId` number, nullable
        - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
        - `model` string, nullable
    - object
      - `type` 'SEND_WHATSAPP_MESSAGE', required
      - `recipientSource` 'ENROLLED_PERSON', nullable
      - `recipientMode` 'PHONE_NUMBER' | 'PEOPLE_RECORD', nullable
      - `peopleRecordTypeId` number, nullable
      - `peopleRowId` string, nullable
      - `personName` string, nullable
      - `phoneNumber` string, nullable
      - `phoneNumberId` string, nullable
      - `template` string, nullable
      - `templateVariables` object, nullable
        - `body` object
        - `header` object
        - `buttons` object[]
      - `flowButton` object, nullable
        - `index` integer, required
        - `flowToken` string, nullable
        - `flowActionData` object, nullable
      - `showConversationBeforeUserReply` boolean, nullable
      - `markConversationAsInteracted` boolean, nullable
    - object
      - `type` 'TRANSCRIPTION', required
      - `audioUrl` string, required
      - `language` string
      - `aiModelId` number, nullable
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
      - `model` string
      - `captureVariables` object[], nullable
      - `enableDiarization` boolean
      - `captureSegmentsVariable` object, nullable
        - `id` number, required
        - `name` string, required
        - `description` string
    - object
      - `type` 'FILE_ANALYSIS', required
      - `fileUrl` string, required
      - `aiModelId` number, nullable
      - `aiVendor` 'OPENAI' | 'ANTHROPIC' | 'GOOGLE' | 'AZURE' | 'DEEPSEEK' | 'LLAMA', nullable
      - `model` string, nullable
      - `prompt` string, nullable
      - `captureVariables` object[], nullable
        - `id` number, required
        - `name` string, required
        - `description` string
      - `captureOcrVariable` object, nullable
        - `id` number, required
        - `name` string, required
        - `description` string
    - object
      - `type` 'CREATE_RECORD_ACTIVITY', required
      - `recordTypeId` object, nullable
      - `rowId` string, nullable
      - `activityType` 'NOTE' | 'EMAIL' | 'PHONE_CALL' | 'MEETING' | 'WHATSAPP', nullable
      - `content` string, nullable
    - object
      - `type` 'SEQUENCE_START', required
      - `mode` 'IMMEDIATELY' | 'WAIT'
      - `waitAmount` integer, nullable
      - `waitUnit` 'DAYS' | 'HOURS' | 'MINUTES', nullable
    - object
      - `type` 'WAIT', required
      - `amount` integer, required
      - `unit` 'DAYS' | 'HOURS' | 'MINUTES', required
    - object
      - `type` 'SEND_EMAIL', required
      - `subject` string, nullable
      - `body` string, nullable
      - `templateId` integer, nullable
      - `includeSignature` boolean
      - `threadMode` 'NEW_EMAIL' | 'THREAD'
      - `includeUnsubscribeLink` boolean
    - object
      - `type` 'TODO', required
      - `todoType` 'TASK' | 'PHONE_CALL' | 'SEND_WHATSAPP' | 'SEND_EMAIL' | 'SEND_SMS'
      - `title` string, nullable
      - `description` string, nullable
      - `dueOffsetDays` integer, nullable
      - `dueOffsetUseBusinessDays` boolean
      - `assigneeUserId` integer, nullable
      - `completeToAdvance` boolean
    - object
      - `type` 'SEQUENCE_CONDITION', required
      - `branches` object[]
        - `id` string, required
        - `name` string, required
        - `handleId` string, required
        - `exitIfMatched` boolean
        - `conditionGroup` object, required
          - `operator` 'and' | 'or'
          - `conditions` object[]
      - `elseBranch` object, required
        - `handleId` string, required
        - `name` string, required
        - `exitIfMatched` boolean
    - object
      - `type` 'TRIGGER_WORKFLOW', required
      - `automationId` integer, nullable
      - `automationName` string, nullable
      - `inputMapping` object[]
        - `name` string, required
        - `valueType` 'STRING' | 'NUMBER' | 'BOOLEAN' | 'JSON', required
        - `kind` 'CONSTANT' | 'REFERENCE', required
        - `constantValue` object, nullable
        - `referencePath` string
      - `continuationMode` 'CONTINUE' | 'WAIT_FOR_COMPLETION'
      - `failurePolicy` 'FAIL_INSTANCE' | 'CONTINUE_SEQUENCE'
    - object
      - `type` 'SEQUENCE_ACTION', required
      - `action` 'ENROLL' | 'REMOVE' | 'PAUSE' | 'RESUME', required
      - `sequenceId` integer, nullable
      - `sequenceName` string, nullable
      - `personSource` object, required
        - `mode` 'FIXED' | 'VARIABLE' | 'CONTEXT', required
        - `personRowIds` string[], nullable
        - `variableName` string, nullable
      - `enroller` object, nullable
        - `mode` 'VARIABLE' | 'USER_POOL' | 'PERSON_OWNER', required
        - `variableName` string, nullable
        - `userIds` integer[], nullable
        - `strategy` 'FIRST' | 'LAST' | 'RANDOM', nullable
      - `senderConnectedAccountId` integer, nullable
      - `note` string, nullable
    - object
      - `type` 'MAP_VARIABLES', required
      - `sourceVariableName` string, nullable
      - `parseMode` 'AUTO' | 'FORCE' | 'RAW'
      - `onMissing` 'SKIP' | 'SET_EMPTY'
      - `mappings` object[]
        - `variableName` string
        - `path` string
        - `required` boolean
    - object
      - `type` 'CONDITION', required
      - `branches` object[]
        - `id` string, required
        - `name` string, required
        - `handleId` string, required
        - `conditionGroup` object, required
          - `operator` 'and' | 'or'
          - `conditions` object[]
      - `elseBranch` object, required
        - `handleId` string
        - `name` string, required
    - object, nullable
  - `createdAt` string, nullable
  - `updatedAt` string, nullable
  - `warnings` string[]

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Sequence or related resource not found
- `409` — Conflict

## Changes

- **2026-10-03** `666cd9efa9f3` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/getfrontline/apis/public-api/changes/public/v1/sequences/:sequenceId/nodes/post.md)

---

[API](https://skmtc.dev/getfrontline/apis/public-api.md) · [All operations](https://skmtc.dev/getfrontline/apis/public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getfrontline/apis/public-api/revisions/666cd9efa9f3?raw)
