Publish journey
Publish a draft journey so it goes live and starts enrolling people (this begins real outreach). Validates first and requires confirm: true. Errors block the publish; any advisory warnings the journey still carries come back in warnings. Call it WITHOUT confirm first to preview: nothing is published, and the refusal itself lists those warnings, so you can reconsider before confirming. The trigger is taken from the ENTRY node. Any previously live version is retired.
curl --request POST \
--url https://www.useboom.ai/api/v1/journeys/{journeyId}/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"confirm": false,
"includeExisting": false
}
'import requests
url = "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish"
payload = {
"confirm": False,
"includeExisting": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({confirm: false, includeExisting: false})
};
fetch('https://www.useboom.ai/api/v1/journeys/{journeyId}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'confirm' => false,
'includeExisting' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish"
payload := strings.NewReader("{\n \"confirm\": false,\n \"includeExisting\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.useboom.ai/api/v1/journeys/{journeyId}/publish")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"confirm\": false,\n \"includeExisting\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.useboom.ai/api/v1/journeys/{journeyId}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"confirm\": false,\n \"includeExisting\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"initiativeId": "<string>",
"status": "DRAFT",
"version": 0,
"definition": {
"name": "<string>",
"actions": [
{
"id": "<string>",
"kind": "ENTRY",
"name": "<string>",
"position": {
"x": 123,
"y": 123
},
"inputs": {
"description": "<string>",
"triggerType": "manual",
"segmentId": "<string>",
"segmentName": "<string>",
"eventName": "<string>",
"inboundAction": "WHATSAPP_MESSAGE",
"inboundChannelIds": [
"<string>"
],
"inboundKeyword": "<string>",
"inboundMatchMode": "EXACT",
"maxEnrollments": 4503599627370496,
"enrollmentWindow": "<string>"
}
}
],
"edges": [
{
"from": "<string>",
"to": "<string>",
"sourceHandle": "<string>",
"metadata": {
"signalCategory": "lifecycle",
"signalDescription": "<string>"
}
}
],
"id": "<string>",
"metadata": {
"initiativeType": "<string>",
"version": 0,
"cancelOnEvents": {
"eventNames": [
"<string>"
]
},
"environmentId": "<string>"
}
},
"warnings": [
{
"code": "<string>",
"severity": "error",
"message": "<string>",
"nodeId": "<string>"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Organization API key, sent as Authorization: Bearer boom_org_....
Path Parameters
A draft journey id, or the initiative id (resolves to its current draft).
1Body
Response
Success
Journey (workflow version) id.
The initiative this journey belongs to.
DRAFT (editable), PUBLISHED (live, frozen), or STOPPED (retired).
DRAFT, PUBLISHED, STOPPED Version number within the initiative.
-9007199254740991 <= x <= 9007199254740991The full journey graph.
Show child attributes
Show child attributes
Advisory issues the published journey still carries. Empty on a clean publish; never blocking (errors throw instead).
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://www.useboom.ai/api/v1/journeys/{journeyId}/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"confirm": false,
"includeExisting": false
}
'import requests
url = "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish"
payload = {
"confirm": False,
"includeExisting": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({confirm: false, includeExisting: false})
};
fetch('https://www.useboom.ai/api/v1/journeys/{journeyId}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'confirm' => false,
'includeExisting' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.useboom.ai/api/v1/journeys/{journeyId}/publish"
payload := strings.NewReader("{\n \"confirm\": false,\n \"includeExisting\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.useboom.ai/api/v1/journeys/{journeyId}/publish")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"confirm\": false,\n \"includeExisting\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.useboom.ai/api/v1/journeys/{journeyId}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"confirm\": false,\n \"includeExisting\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"initiativeId": "<string>",
"status": "DRAFT",
"version": 0,
"definition": {
"name": "<string>",
"actions": [
{
"id": "<string>",
"kind": "ENTRY",
"name": "<string>",
"position": {
"x": 123,
"y": 123
},
"inputs": {
"description": "<string>",
"triggerType": "manual",
"segmentId": "<string>",
"segmentName": "<string>",
"eventName": "<string>",
"inboundAction": "WHATSAPP_MESSAGE",
"inboundChannelIds": [
"<string>"
],
"inboundKeyword": "<string>",
"inboundMatchMode": "EXACT",
"maxEnrollments": 4503599627370496,
"enrollmentWindow": "<string>"
}
}
],
"edges": [
{
"from": "<string>",
"to": "<string>",
"sourceHandle": "<string>",
"metadata": {
"signalCategory": "lifecycle",
"signalDescription": "<string>"
}
}
],
"id": "<string>",
"metadata": {
"initiativeType": "<string>",
"version": 0,
"cancelOnEvents": {
"eventNames": [
"<string>"
]
},
"environmentId": "<string>"
}
},
"warnings": [
{
"code": "<string>",
"severity": "error",
"message": "<string>",
"nodeId": "<string>"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}