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
stepsto define the notiflow structure. Steps use a flat format withparent_step_handleandbranch_handlefor branching logic.
Returns:
201 Createdwhen a new notiflow is created200 OKwhen an existing notiflow is updated
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"
}
}