notiflowsDocs
Notiflows

Create or update notiflow

Create a new notiflow or update an existing one by handle (upsert).

  • If the notiflow doesn't exist, it is created with an initial draft version.
  • If it exists, the provided fields are updated and a new draft version is created.
  • Include steps to define the notiflow structure. Steps use a flat format with parent_step_handle and branch_handle for branching logic.

Returns:

  • 201 Created when a new notiflow is created
  • 200 OK when an existing notiflow is updated
PUT
/notiflows/{handle}

Authorization

AccountToken
AuthorizationBearer <token>

Account token (prefix nf_at_), sent as Authorization: Bearer nf_at_…. Created in the dashboard under Account tokens; account-scoped (all projects in the account).

In: header

Path Parameters

handle*string

Notiflow handle

Request Body

application/json

Notiflow definition

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://api.notiflows.com/management/v1/notiflows/welcome-series" \  -H "Content-Type: application/json" \  -d '{    "name": "Welcome Series",    "steps": [      {        "handle": "trigger",        "position": 0,        "type": "trigger"      },      {        "channel_type": "email",        "handle": "welcome_email",        "name": "Welcome Email",        "position": 1,        "type": "channel"      },      {        "handle": "wait_1",        "name": "Wait 1 Day",        "position": 2,        "settings": {          "duration": 1,          "unit": "day"        },        "type": "wait"      },      {        "handle": "end",        "position": 3,        "type": "end"      }    ]  }'
{
  "active": true,
  "created_at": "2019-08-24T14:15:22Z",
  "current_version": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "inserted_at": "2019-08-24T14:15:22Z",
    "notiflow_id": "d74aa67e-7f71-4dba-be64-9b94d47ae12a",
    "published_at": "2019-08-24T14:15:22Z",
    "sha": "string",
    "status": "draft",
    "steps": [
      {
        "branch_handle": "string",
        "channel_handle": "string",
        "channel_type": "in_app",
        "conditions": [
          {
            "conditions": [
              {
                "operator": "equal_to",
                "property": "data.plan",
                "value": null
              }
            ]
          }
        ],
        "handle": "welcome_email",
        "name": "Welcome Email",
        "parent_step_handle": "string",
        "position": 0,
        "settings": {},
        "type": "trigger"
      }
    ],
    "updated_at": "2019-08-24T14:15:22Z",
    "valid": true,
    "version_number": 3
  },
  "handle": "welcome-series",
  "has_unpublished_changes": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "include_in_preferences": true,
  "name": "Welcome Series",
  "published_version": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "inserted_at": "2019-08-24T14:15:22Z",
    "notiflow_id": "d74aa67e-7f71-4dba-be64-9b94d47ae12a",
    "published_at": "2019-08-24T14:15:22Z",
    "sha": "string",
    "status": "draft",
    "steps": [
      {
        "branch_handle": "string",
        "channel_handle": "string",
        "channel_type": "in_app",
        "conditions": [
          {
            "conditions": [
              {
                "operator": "equal_to",
                "property": "data.plan",
                "value": null
              }
            ]
          }
        ],
        "handle": "welcome_email",
        "name": "Welcome Email",
        "parent_step_handle": "string",
        "position": 0,
        "settings": {},
        "type": "trigger"
      }
    ],
    "updated_at": "2019-08-24T14:15:22Z",
    "valid": true,
    "version_number": 3
  },
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "active": true,
  "created_at": "2019-08-24T14:15:22Z",
  "current_version": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "inserted_at": "2019-08-24T14:15:22Z",
    "notiflow_id": "d74aa67e-7f71-4dba-be64-9b94d47ae12a",
    "published_at": "2019-08-24T14:15:22Z",
    "sha": "string",
    "status": "draft",
    "steps": [
      {
        "branch_handle": "string",
        "channel_handle": "string",
        "channel_type": "in_app",
        "conditions": [
          {
            "conditions": [
              {
                "operator": "equal_to",
                "property": "data.plan",
                "value": null
              }
            ]
          }
        ],
        "handle": "welcome_email",
        "name": "Welcome Email",
        "parent_step_handle": "string",
        "position": 0,
        "settings": {},
        "type": "trigger"
      }
    ],
    "updated_at": "2019-08-24T14:15:22Z",
    "valid": true,
    "version_number": 3
  },
  "handle": "welcome-series",
  "has_unpublished_changes": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "include_in_preferences": true,
  "name": "Welcome Series",
  "published_version": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "inserted_at": "2019-08-24T14:15:22Z",
    "notiflow_id": "d74aa67e-7f71-4dba-be64-9b94d47ae12a",
    "published_at": "2019-08-24T14:15:22Z",
    "sha": "string",
    "status": "draft",
    "steps": [
      {
        "branch_handle": "string",
        "channel_handle": "string",
        "channel_type": "in_app",
        "conditions": [
          {
            "conditions": [
              {
                "operator": "equal_to",
                "property": "data.plan",
                "value": null
              }
            ]
          }
        ],
        "handle": "welcome_email",
        "name": "Welcome Email",
        "parent_step_handle": "string",
        "position": 0,
        "settings": {},
        "type": "trigger"
      }
    ],
    "updated_at": "2019-08-24T14:15:22Z",
    "valid": true,
    "version_number": 3
  },
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "error": {
    "code": "not_found",
    "details": {
      "allowed_statuses": [
        "string"
      ],
      "allowed_transitions": [
        "string"
      ],
      "auth": "api_key",
      "current_status": "string",
      "fields": [
        {
          "field": "email",
          "message": "can't be blank",
          "reason": "required"
        }
      ],
      "id": "string",
      "idempotency_key": "string",
      "limit": 0,
      "param": "string",
      "reason": "string",
      "required_scope": "string",
      "resource": "string",
      "retry_after": 0,
      "window": "string"
    },
    "message": "User not found",
    "request_id": "req_abc123",
    "status": 404,
    "type": "https://notiflows.com/docs/api/errors#not_found-404"
  }
}
{
  "error": {
    "code": "not_found",
    "details": {
      "allowed_statuses": [
        "string"
      ],
      "allowed_transitions": [
        "string"
      ],
      "auth": "api_key",
      "current_status": "string",
      "fields": [
        {
          "field": "email",
          "message": "can't be blank",
          "reason": "required"
        }
      ],
      "id": "string",
      "idempotency_key": "string",
      "limit": 0,
      "param": "string",
      "reason": "string",
      "required_scope": "string",
      "resource": "string",
      "retry_after": 0,
      "window": "string"
    },
    "message": "User not found",
    "request_id": "req_abc123",
    "status": 404,
    "type": "https://notiflows.com/docs/api/errors#not_found-404"
  }
}
{
  "error": {
    "code": "not_found",
    "details": {
      "allowed_statuses": [
        "string"
      ],
      "allowed_transitions": [
        "string"
      ],
      "auth": "api_key",
      "current_status": "string",
      "fields": [
        {
          "field": "email",
          "message": "can't be blank",
          "reason": "required"
        }
      ],
      "id": "string",
      "idempotency_key": "string",
      "limit": 0,
      "param": "string",
      "reason": "string",
      "required_scope": "string",
      "resource": "string",
      "retry_after": 0,
      "window": "string"
    },
    "message": "User not found",
    "request_id": "req_abc123",
    "status": 404,
    "type": "https://notiflows.com/docs/api/errors#not_found-404"
  }
}
{
  "error": {
    "code": "not_found",
    "details": {
      "allowed_statuses": [
        "string"
      ],
      "allowed_transitions": [
        "string"
      ],
      "auth": "api_key",
      "current_status": "string",
      "fields": [
        {
          "field": "email",
          "message": "can't be blank",
          "reason": "required"
        }
      ],
      "id": "string",
      "idempotency_key": "string",
      "limit": 0,
      "param": "string",
      "reason": "string",
      "required_scope": "string",
      "resource": "string",
      "retry_after": 0,
      "window": "string"
    },
    "message": "User not found",
    "request_id": "req_abc123",
    "status": 404,
    "type": "https://notiflows.com/docs/api/errors#not_found-404"
  }
}
{
  "error": {
    "code": "not_found",
    "details": {
      "allowed_statuses": [
        "string"
      ],
      "allowed_transitions": [
        "string"
      ],
      "auth": "api_key",
      "current_status": "string",
      "fields": [
        {
          "field": "email",
          "message": "can't be blank",
          "reason": "required"
        }
      ],
      "id": "string",
      "idempotency_key": "string",
      "limit": 0,
      "param": "string",
      "reason": "string",
      "required_scope": "string",
      "resource": "string",
      "retry_after": 0,
      "window": "string"
    },
    "message": "User not found",
    "request_id": "req_abc123",
    "status": 404,
    "type": "https://notiflows.com/docs/api/errors#not_found-404"
  }
}