---
title: "Add a sequence node to an automation"
method: POST
path: "/v1/projectId/{projectId}/automations/{automationId}/node"
tags: ["Automations"]
---

# Add a sequence node to an automation

`POST /v1/projectId/{projectId}/automations/{automationId}/node`

## Request

- Base URL: `https://api.bluefox.email`
- URL: `https://api.bluefox.email/v1/projectId/{projectId}/automations/{automationId}/node`
- Auth: HTTP bearer

While the automation is "draft", inserts directly into the live sequence. While "active" or "paused", the node is inserted into (a copy of) the sequence staged as draftSequence instead, leaving the running automation untouched until POST .../merge-draft.

## Path parameters

- `projectId` string, required
- `automationId` string, required

## Request body

- AutomationNodeInput: Plus whatever type-specific fields that node type needs (see AutomationNode) - on create these are optional and the node starts with sensible defaults; on update at least one field to change is expected.
  - `type` 'delay' | 'send-email' | 'filter-audience' | 'branch' | 'condition' | 'set-value' | 'notify' | 'complete' | 'manage-tags' | 'webhook', required: "condition" is special: it does not add a top-level node. Instead, set prevNodeId to an EXISTING branch node's own _id, and it appends one more arm to that branch's branches[] (branches start with two). Its condition fields go under a nested "condition" object in the body, e.g. { "type": "condition", "prevNodeId": "<branchNodeId>", "condition": { "property": "...", "operator": "...", "value": "..." } } - not flat on the request body like filter-audience.
  - `prevNodeId` string: Create only. Insert immediately after this node (a sibling _id anywhere in the tree, including inside a branch). Omit to insert as the very first node.

## Response `200`

OK

- object
  - `status` integer
  - `result` Automation
    - `_id` string
    - `name` string
    - `status` 'draft' | 'active' | 'paused'
    - `trigger` object: Discriminated by trigger.type (contact-added | contact-updated | enter-segment | leave-segment | time-based) - shape varies by type, see the Automations guide. Every type except time-based also supports runOnce (boolean, default true): when true, a contact who has ever run this automation before is skipped even if the trigger matches again; set false to let them re-enter each time it matches.
    - `exitCriteria` object: A condition that removes a contact from this automation mid-flow when true. Has an "active" boolean plus condition fields.
    - `sequence` AutomationNode[]: The live, running sequence. Use the node sub-resource endpoints to add/update/delete nodes rather than replacing this array directly.
      - `_id` string
      - `type` 'delay' | 'send-email' | 'filter-audience' | 'branch' | 'complete' | 'set-value' | 'notify' | 'manage-tags' | 'webhook'
      - `error` string[]: Populated by the server when this node fails validation on an activate/merge-draft attempt - not settable by the client.
    - `draftSequence` AutomationNode[]: Present only while this automation is active and has unmerged staged edits. POST .../merge-draft to apply, or .../discard-draft to drop them.
      - `_id` string
      - `type` 'delay' | 'send-email' | 'filter-audience' | 'branch' | 'complete' | 'set-value' | 'notify' | 'manage-tags' | 'webhook'
      - `error` string[]: Populated by the server when this node fails validation on an activate/merge-draft attempt - not settable by the client.
    - `draftTrigger` object: Staged trigger edit, present only while active with unmerged changes.
    - `draftExitCriteria` object: Staged exit-criteria edit, present only while active with unmerged changes.
    - `usedSegments` string[]
    - `lastTriggeredAt` string, date-time
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400`: Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
- `403`: Missing or invalid API key
- `404`: Automation not found

---

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