Skip to main content
POST
/
automations
curl --request POST \
  --url https://api.autosend.com/v1/automations \
  --header 'Authorization: Bearer AS_your-project-api-key' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Branch with guard - pro vs other",
  "description": "Pro plan gets a 2-email sequence with a guard that routes to a merged email if plan changes mid-flight. Other plans get a single welcome email.",
  "active": true,
  "entryCriteria": {
    "type": "contact_property_matches_with",
    "filterCriteria": {
      "logicalOperator": "AND",
      "conditions": [
        { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
      ]
    }
  },
  "unsubscribeGroupId": "60d5ec49f1b2c72d9c8b4444",
  "trackingOpen": true,
  "trackingClick": true,
  "exitCriteria": { "type": "workflow_complete" },
  "tags": ["onboarding", "branch-guard"],
  "steps": [
    {
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "stepId": "step_wait_intro",
      "nextStepId": "step_email_intro"
    },
    {
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - intro email",
        "subject": "Welcome to Example!",
        "previewText": "Glad to have you with us.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome {{firstName}}!</h1><p>Thanks for joining.</p></body></html>"
      },
      "checkExitCriteria": true,
      "stepId": "step_email_intro",
      "nextStepId": "step_branch"
    },
    {
      "stepId": "step_branch",
      "type": "branch",
      "branches": [
        {
          "branchId": "br_pro",
          "label": "Pro plan",
          "triggerType": "contact_property_matches_with",
          "appliesTo": "all_branch_steps",
          "filterCriteria": {
            "logicalOperator": "AND",
            "conditions": [
              { "field": "customFields.plan", "operator": "equals", "value": "pro", "fieldType": "string" }
            ]
          },
          "nextStepId": "step_wait_pro",
          "mergeStepId": "step_wait_merged"
        },
        {
          "branchId": "br_other",
          "label": "Catch-all",
          "triggerType": "contact_property_matches_with",
          "appliesTo": "branch_entry",
          "filterCriteria": {
            "logicalOperator": "AND",
            "conditions": [
              { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
            ]
          },
          "nextStepId": "step_wait_other"
        }
      ]
    },
    {
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "stepId": "step_wait_pro",
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_email_pro"
    },
    {
      "stepId": "step_email_pro",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - pro email",
        "subject": "Welcome to Pro, {{firstName}}",
        "previewText": "Your Pro perks are ready.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome to Pro, {{firstName}}!</h1><p>Your perks are ready.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_wait_pro_followup"
    },
    {
      "stepId": "step_wait_pro_followup",
      "type": "wait",
      "delay": { "value": 1, "unit": "minutes" },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_email_pro_followup"
    },
    {
      "stepId": "step_email_pro_followup",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - pro follow-up",
        "subject": "A quick follow-up on your Pro plan",
        "previewText": "Tips to get the most out of Pro.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Hi {{firstName}}</h1><p>Here are a few Pro tips.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro"
    },
    {
      "stepId": "step_wait_other",
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_other",
      "nextStepId": "step_email_other"
    },
    {
      "stepId": "step_email_other",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - standard email",
        "subject": "Welcome to Example!",
        "previewText": "Glad to have you with us.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome {{firstName}}!</h1><p>Thanks for joining.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_other"
    },
    {
      "stepId": "step_wait_merged",
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "nextStepId": "step_email_merged"
    },
    {
      "stepId": "step_email_merged",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - merged email",
        "subject": "Thanks for sticking with us, {{firstName}}",
        "previewText": "A wrap-up note from the team.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Thanks {{firstName}}!</h1><p>Here is your wrap-up.</p></body></html>"
      }
    }
  ]
}'
{
  "success": true,
  "data": {
    "id": "60d5ec49f1b2c72d9c8b9abc",
    "projectId": "60d5ec49f1b2c72d9c8b1111",
    "organizationId": "60d5ec49f1b2c72d9c8b2222",
    "name": "Branch with guard - pro vs other",
    "description": "Pro plan gets a 2-email sequence with a guard. Other plans get a single welcome email.",
    "status": "active",
    "entryCriteria": {
      "type": "contact_property_matches_with",
      "filterCriteria": {
        "logicalOperator": "AND",
        "conditions": [
          { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
        ]
      }
    },
    "exitCriteria": { "type": "workflow_complete" },
    "steps": [
      { "stepId": "step_wait_intro", "type": "wait", "delay": { "value": 2, "unit": "mins" }, "nextStepId": "step_email_intro" },
      { "stepId": "step_email_intro", "type": "email", "nextStepId": "step_branch" },
      { "stepId": "step_branch", "type": "branch", "branches": [
          { "branchId": "br_pro", "nextStepId": "step_wait_pro", "mergeStepId": "step_wait_merged" },
          { "branchId": "br_other", "nextStepId": "step_wait_other" }
      ]},
      { "stepId": "step_wait_pro", "type": "wait", "parentBranchId": "br_pro", "nextStepId": "step_email_pro" },
      { "stepId": "step_email_pro", "type": "email", "parentBranchId": "br_pro", "nextStepId": "step_wait_pro_followup" },
      { "stepId": "step_wait_pro_followup", "type": "wait", "parentBranchId": "br_pro", "nextStepId": "step_email_pro_followup" },
      { "stepId": "step_email_pro_followup", "type": "email", "parentBranchId": "br_pro" },
      { "stepId": "step_wait_other", "type": "wait", "parentBranchId": "br_other", "nextStepId": "step_email_other" },
      { "stepId": "step_email_other", "type": "email", "parentBranchId": "br_other" },
      { "stepId": "step_wait_merged", "type": "wait", "nextStepId": "step_email_merged" },
      { "stepId": "step_email_merged", "type": "email" }
    ],
    "tags": ["onboarding", "branch-guard"],
    "unsubscribeGroupId": "60d5ec49f1b2c72d9c8b4444",
    "trackingOpen": true,
    "trackingClick": true,
    "activeAt": "2026-05-08T10:00:00.000Z",
    "createdAt": "2026-05-08T10:00:00.000Z",
    "updatedAt": "2026-05-08T10:00:00.000Z"
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.autosend.com/llms.txt

Use this file to discover all available pages before exploring further.

Creates a new workflow automation. By default the workflow is created in draft status — pass active: true to validate and activate it as part of the create call.
A workflow runs steps in order. Without branch steps, steps must strictly alternate wait → email, starting with wait and ending with email. Workflows containing branch steps use a more flexible graph (each step references the next via nextStepId).
curl --request POST \
  --url https://api.autosend.com/v1/automations \
  --header 'Authorization: Bearer AS_your-project-api-key' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Branch with guard - pro vs other",
  "description": "Pro plan gets a 2-email sequence with a guard that routes to a merged email if plan changes mid-flight. Other plans get a single welcome email.",
  "active": true,
  "entryCriteria": {
    "type": "contact_property_matches_with",
    "filterCriteria": {
      "logicalOperator": "AND",
      "conditions": [
        { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
      ]
    }
  },
  "unsubscribeGroupId": "60d5ec49f1b2c72d9c8b4444",
  "trackingOpen": true,
  "trackingClick": true,
  "exitCriteria": { "type": "workflow_complete" },
  "tags": ["onboarding", "branch-guard"],
  "steps": [
    {
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "stepId": "step_wait_intro",
      "nextStepId": "step_email_intro"
    },
    {
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - intro email",
        "subject": "Welcome to Example!",
        "previewText": "Glad to have you with us.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome {{firstName}}!</h1><p>Thanks for joining.</p></body></html>"
      },
      "checkExitCriteria": true,
      "stepId": "step_email_intro",
      "nextStepId": "step_branch"
    },
    {
      "stepId": "step_branch",
      "type": "branch",
      "branches": [
        {
          "branchId": "br_pro",
          "label": "Pro plan",
          "triggerType": "contact_property_matches_with",
          "appliesTo": "all_branch_steps",
          "filterCriteria": {
            "logicalOperator": "AND",
            "conditions": [
              { "field": "customFields.plan", "operator": "equals", "value": "pro", "fieldType": "string" }
            ]
          },
          "nextStepId": "step_wait_pro",
          "mergeStepId": "step_wait_merged"
        },
        {
          "branchId": "br_other",
          "label": "Catch-all",
          "triggerType": "contact_property_matches_with",
          "appliesTo": "branch_entry",
          "filterCriteria": {
            "logicalOperator": "AND",
            "conditions": [
              { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
            ]
          },
          "nextStepId": "step_wait_other"
        }
      ]
    },
    {
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "stepId": "step_wait_pro",
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_email_pro"
    },
    {
      "stepId": "step_email_pro",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - pro email",
        "subject": "Welcome to Pro, {{firstName}}",
        "previewText": "Your Pro perks are ready.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome to Pro, {{firstName}}!</h1><p>Your perks are ready.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_wait_pro_followup"
    },
    {
      "stepId": "step_wait_pro_followup",
      "type": "wait",
      "delay": { "value": 1, "unit": "minutes" },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro",
      "nextStepId": "step_email_pro_followup"
    },
    {
      "stepId": "step_email_pro_followup",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - pro follow-up",
        "subject": "A quick follow-up on your Pro plan",
        "previewText": "Tips to get the most out of Pro.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Hi {{firstName}}</h1><p>Here are a few Pro tips.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_pro"
    },
    {
      "stepId": "step_wait_other",
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_other",
      "nextStepId": "step_email_other"
    },
    {
      "stepId": "step_email_other",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - standard email",
        "subject": "Welcome to Example!",
        "previewText": "Glad to have you with us.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Welcome {{firstName}}!</h1><p>Thanks for joining.</p></body></html>"
      },
      "parentBranchStepId": "step_branch",
      "parentBranchId": "br_other"
    },
    {
      "stepId": "step_wait_merged",
      "type": "wait",
      "delay": { "value": 2, "unit": "mins" },
      "checkExitCriteria": true,
      "nextStepId": "step_email_merged"
    },
    {
      "stepId": "step_email_merged",
      "type": "email",
      "email": {
        "senderEmail": "[email protected]",
        "senderName": "Example Team",
        "projectId": "60d5ec49f1b2c72d9c8b1111",
        "templateName": "Welcome - merged email",
        "subject": "Thanks for sticking with us, {{firstName}}",
        "previewText": "A wrap-up note from the team.",
        "htmlTemplate": "<!DOCTYPE html><html><body><h1>Thanks {{firstName}}!</h1><p>Here is your wrap-up.</p></body></html>"
      }
    }
  ]
}'
{
  "success": true,
  "data": {
    "id": "60d5ec49f1b2c72d9c8b9abc",
    "projectId": "60d5ec49f1b2c72d9c8b1111",
    "organizationId": "60d5ec49f1b2c72d9c8b2222",
    "name": "Branch with guard - pro vs other",
    "description": "Pro plan gets a 2-email sequence with a guard. Other plans get a single welcome email.",
    "status": "active",
    "entryCriteria": {
      "type": "contact_property_matches_with",
      "filterCriteria": {
        "logicalOperator": "AND",
        "conditions": [
          { "field": "customFields.plan", "operator": "is_not_empty", "fieldType": "string" }
        ]
      }
    },
    "exitCriteria": { "type": "workflow_complete" },
    "steps": [
      { "stepId": "step_wait_intro", "type": "wait", "delay": { "value": 2, "unit": "mins" }, "nextStepId": "step_email_intro" },
      { "stepId": "step_email_intro", "type": "email", "nextStepId": "step_branch" },
      { "stepId": "step_branch", "type": "branch", "branches": [
          { "branchId": "br_pro", "nextStepId": "step_wait_pro", "mergeStepId": "step_wait_merged" },
          { "branchId": "br_other", "nextStepId": "step_wait_other" }
      ]},
      { "stepId": "step_wait_pro", "type": "wait", "parentBranchId": "br_pro", "nextStepId": "step_email_pro" },
      { "stepId": "step_email_pro", "type": "email", "parentBranchId": "br_pro", "nextStepId": "step_wait_pro_followup" },
      { "stepId": "step_wait_pro_followup", "type": "wait", "parentBranchId": "br_pro", "nextStepId": "step_email_pro_followup" },
      { "stepId": "step_email_pro_followup", "type": "email", "parentBranchId": "br_pro" },
      { "stepId": "step_wait_other", "type": "wait", "parentBranchId": "br_other", "nextStepId": "step_email_other" },
      { "stepId": "step_email_other", "type": "email", "parentBranchId": "br_other" },
      { "stepId": "step_wait_merged", "type": "wait", "nextStepId": "step_email_merged" },
      { "stepId": "step_email_merged", "type": "email" }
    ],
    "tags": ["onboarding", "branch-guard"],
    "unsubscribeGroupId": "60d5ec49f1b2c72d9c8b4444",
    "trackingOpen": true,
    "trackingClick": true,
    "activeAt": "2026-05-08T10:00:00.000Z",
    "createdAt": "2026-05-08T10:00:00.000Z",
    "updatedAt": "2026-05-08T10:00:00.000Z"
  }
}

Authorizations

Authorizations
string | header
required
Project API key header of the form Bearer AS_<key>.

Body

name
string
required
Display name for the workflow automation.Maximum length: 255Example: "Welcome Series"
description
string
Optional description.Maximum length: 1000
entryCriteria
object
Defines which contacts enter the workflow.
exitCriteria
object
Defines when contacts leave the workflow before completion.
steps
object[]
Ordered steps that contacts walk through. Each step must include a type. Linear workflows alternate wait and email; workflows containing a branch step form a graph where each step references the next via nextStepId.

Branch step example

A branch step splits the workflow into multiple paths based on filterCriteria. Each branch points at its first step via nextStepId, and steps inside the branch reference back via parentBranchStepId and parentBranchId. Branches can rejoin the main flow at a shared mergeStepId.
Branch step
{
  "stepId": "step_branch",
  "type": "branch",
  "branches": [
    {
      "branchId": "br_pro",
      "label": "Pro plan",
      "triggerType": "contact_property_matches_with",
      "appliesTo": "all_branch_steps",
      "filterCriteria": {
        "logicalOperator": "AND",
        "conditions": [
          {
            "field": "customFields.plan",
            "operator": "equals",
            "value": "pro",
            "fieldType": "string"
          }
        ]
      },
      "nextStepId": "step_wait_pro",
      "mergeStepId": "step_wait_merged"
    },
    {
      "branchId": "br_other",
      "label": "Catch-all",
      "triggerType": "contact_property_matches_with",
      "appliesTo": "branch_entry",
      "filterCriteria": {
        "logicalOperator": "AND",
        "conditions": [
          {
            "field": "customFields.plan",
            "operator": "is_not_empty",
            "fieldType": "string"
          }
        ]
      },
      "nextStepId": "step_wait_other"
    }
  ]
},
Wait step inside a branch
{
  "stepId": "step_wait_vip",
  "type": "wait",
  "delay": { "value": 2, "unit": "mins" },
  "checkExitCriteria": true,
  "parentBranchStepId": "step_branch",
  "parentBranchId": "br_vip",
  "nextStepId": "step_email_vip"
}
Email step inside a branch
{
  "stepId": "step_email_vip",
  "type": "email",
  "email": {
    "senderEmail": "[email protected]",
    "senderName": "Example Team",
    "projectId": "68b7f9dfb6924068b8ecda65",
    "templateName": "VIP thank you",
    "subject": "A personal thank-you, {{firstName}}",
    "previewText": "VIP perks inside.",
    "htmlTemplate": "<!DOCTYPE html><html><body><h1>Thanks {{firstName}}!</h1><p>Your VIP perks are on the way.</p></body></html>"
  },
  "parentBranchStepId": "step_branch",
  "parentBranchId": "br_vip"
}
In an email step you can pass templateId to reference an existing template instead of inlining htmlTemplate and subject.
tags
string[]
Optional tags for filtering and organisation.
unsubscribeGroupId
string
Suppression group applied to all email steps in the workflow.
trackingOpen
boolean
Whether to insert open-tracking pixels into emails sent by this workflow.
trackingClick
boolean
Whether to rewrite links for click tracking in emails sent by this workflow.
active
boolean
When true, the workflow is validated and activated as part of the create call. When false or omitted, the workflow is created in draft status and must be activated separately.

Response

Workflow automation created successfully (201)
success
boolean
Example: true
data
object
The created workflow automation.

Error Responses

400 - Validation error
object
Returned when the request body fails validation. Common codes include NAME_REQUIRED, INVALID_STEP_SEQUENCE, EMAIL_TEMPLATE_REQUIRED, BRANCH_BRANCHES_REQUIRED, EVENT_NAME_REQUIRED.
{
  "success": false,
  "error": {
    "message": "Steps must strictly alternate wait → email starting with wait and ending with email",
    "code": "INVALID_STEP_SEQUENCE"
  }
}
400 - Cannot activate
object
Returned when active: true is sent but the workflow is missing required fields for activation.
{
  "success": false,
  "error": {
    "message": "Cannot activate workflow. Please check all required fields are filled",
    "code": "CANNOT_ACTIVATE_AUTOMATION"
  }
}