Update Pathway
curl --request POST \
--url https://api.bland.ai/v1/pathway/{pathway_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": "<string>",
"nodes": [
{}
],
"edges": [
{}
]
}
'import requests
url = "https://api.bland.ai/v1/pathway/{pathway_id}"
payload = {
"name": "<string>",
"description": "<string>",
"nodes": [{}],
"edges": [{}]
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', nodes: [{}], edges: [{}]})
};
fetch('https://api.bland.ai/v1/pathway/{pathway_id}', 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://api.bland.ai/v1/pathway/{pathway_id}",
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([
'name' => '<string>',
'description' => '<string>',
'nodes' => [
[
]
],
'edges' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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://api.bland.ai/v1/pathway/{pathway_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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://api.bland.ai/v1/pathway/{pathway_id}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/pathway/{pathway_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Pathway updated successfully",
"pathway_data": {
"pathway_id": "9d404c1b-6a23-4426-953a-a52c392ff8f1",
"name": "Updated Demo Pathway",
"description": "This is an updated description",
"nodes": [
{
"id": "1",
"data": {
"name": "Start",
"text": "Hey there, how are you doing today?",
"isStart": true,
},
"type": "Default"
},
{
"id": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "End Call"
},
{
"id": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "Default"
}
],
"edges": [
{
"id": "1",
"source": "1",
"target": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
},
{
"id": "2",
"source": "1",
"target": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
}
]
}
}
Conversational Pathways
Update Pathway
Update a conversational pathway’s fields - including name, description, nodes and edges.
POST
/
v1
/
pathway
/
{pathway_id}
Update Pathway
curl --request POST \
--url https://api.bland.ai/v1/pathway/{pathway_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": "<string>",
"nodes": [
{}
],
"edges": [
{}
]
}
'import requests
url = "https://api.bland.ai/v1/pathway/{pathway_id}"
payload = {
"name": "<string>",
"description": "<string>",
"nodes": [{}],
"edges": [{}]
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', nodes: [{}], edges: [{}]})
};
fetch('https://api.bland.ai/v1/pathway/{pathway_id}', 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://api.bland.ai/v1/pathway/{pathway_id}",
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([
'name' => '<string>',
'description' => '<string>',
'nodes' => [
[
]
],
'edges' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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://api.bland.ai/v1/pathway/{pathway_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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://api.bland.ai/v1/pathway/{pathway_id}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/pathway/{pathway_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"nodes\": [\n {}\n ],\n \"edges\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Pathway updated successfully",
"pathway_data": {
"pathway_id": "9d404c1b-6a23-4426-953a-a52c392ff8f1",
"name": "Updated Demo Pathway",
"description": "This is an updated description",
"nodes": [
{
"id": "1",
"data": {
"name": "Start",
"text": "Hey there, how are you doing today?",
"isStart": true,
},
"type": "Default"
},
{
"id": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "End Call"
},
{
"id": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "Default"
}
],
"edges": [
{
"id": "1",
"source": "1",
"target": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
},
{
"id": "2",
"source": "1",
"target": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
}
]
}
}
Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The unique identifier of the conversational pathway you want to update.
Body
string
The name of the conversational pathway
string
A description of the pathway
object[]
An array of node objects representing the conversation flow points in your pathway. Each node contains:Common Node Structure:Available Node Types:
Update the pathway’s global prompt by adding an object to the array of nodes.
{
"id": "unique_node_identifier",
"type": "Node_Type",
"data": {
"name": "Display Name",
// Node-specific configuration goes here
}
}
Default, End Call, Transfer Call, Webhook, Knowledge Base, SMS, Custom Code, Press Button, Wait for Response, Transfer Pathway, Scheduling, and more.Node Examples:{
"id": "1",
"type": "Default"
"data": {
"name": "Start",
"text": "Hey there, how are you doing today?",
"isStart": true,
},
}
{
"id": "randomnode_1710288871721",
"type": "Default"
"data": {
"name": "New Node",
"text": "Select a node or edge and press backspace to remove it",
"globalPrompt": "This is a phone call. Do not use exclamation marks.\n\nConvert 24HR format timings to 12 HR format - e.g 14:00 should be written as 2 PM.",
},
}
{
"id": "randomnode_1710288752186",
"type": "End Call"
"data": {
"name": "End call",
"prompt": "Say goodbye to the user",
},
}
{
"id": "randomnode_1710288752186",
"type": "Webhook",
"data": {
"url": "https://api.bland.ai/reservation",
"body": "{\n \"date\" : \"{{date}}\",\n \"time\" : \"{{time}}\",\n \"guests\": {{number_of_people}}\n}",
"name": "Reservation Booking",
"text": "Please give me a moment as I check our bookings..",
"method": "POST",
"extractVars": [
[
"date",
"string",
"Desired Date of reservation, in MM/DD/YYYY format"
],
[
"time",
"string",
"Desired Time of Reservation in 24HR Format e.g 13:30"
],
[
"number_of_people",
"integer",
"Number of people for the reservation"
]
],
"responseData": [
{
"data": "$.reserved",
"name": "reservation_success",
"context": ""
},
{
"data": "$.available_slots",
"name": "available_slots",
"context": "Available slots for the date provided"
}
],
"responsePathways": [
[
"reservation_success",
"==",
"true",
{
"id": "randomnode_1710288752186",
"name": "Reservation Successful"
}
],
[
"reservation_success",
"==",
"false",
{
"id": "randomnode_1712265110018",
"name": "Find new timeslot"
}
]
]
}
}
{
"id": "randomnode_1710288752186",
"type": "Knowledge Base",
"data": {
"name": "Restaurant Questions",
"prompt": "Answer any questions that the user may have regarding the restaurant, by referring to the knowledge base you have. \n\nAnswer the question in 1 line, and then ask if they have any more questions."
"kb": "Opening Hours : 9am - 5pm\nStore Locations : \n426 Ivy Street San Francisco, \nSan Jose"
}
}
{
"id": "randomnode_1710288871721",
"type": "Default"
"data": {
"name": "Answer any questions",
"prompt": "You are to answer any questions the user has.",
"isGlobal": true,
"globalLabel": "user asks a question"
},
}
{
"id": "randomnode_1710288752186",
"type": "Transfer Call",
"data": {
"name": "Transferring the call",
"text": "Transferring the call now. Please hold.."
"transferNumber": "+19547951234"
}
}
Node Data Object Parameters
Node Data Object Parameters
name— name of the nodeisStart— whether the node is the start node. There can only be 1 start node in a pathway. Eithertrueorfalse.isGlobal— whether the node is a global node. Global nodes are nodes that can be used in multiple pathways. Eithertrueorfalse.globalLabel— the label of the global node. Should be present ifisGlobalis true.type— Type of the node. Can beDefault,End Call,Transfer Node,Knowledge Base, orWebhook.text— If static text is chosen, this is the text that will be said to the user.prompt— If dynamic text is chosen, this is the prompt that will be shown to the user.condition— The condition that needs to be met to proceed from this node.transferNumber- If the node is a transfer node, this is the number to which the call will be transferred.
kb- If the node is a knowledge base node, this is the knowledge base that will be used.
pathwayExamples- The fine-tuning examples for the agent at this node for the pathways chosen
conditionExamples- The fine-tuning examples for the condition at this node for the condition chosen
dialogueExamples- The fine-tuning examples for the dialogue at this node for the dialogue chosen.
modelOptionsmodelName— The name of the model to be used for this node.interruptionThreshold— The sensitivity to interruptions at this nodeinterruptibility— How readily the AI stops speaking when the caller talks over it on this node:0block (the AI finishes speaking, same asblock_interruptions: true),1difficult,2balanced (default),3easy. Applies only while this node is active; other nodes use the agent’s setting. Useful per node: e.g. difficult on a legal-disclaimer node.temperature— The temperature of the model.
extractVars- An array of array of strings. [[
varName,varType,varDescription]] e.g[["name", "string", "The name of the user"], ["age", "integer", "The age of the user"]]
- An array of array of strings. [[
Global Prompt
{
"globalConfig": {
"globalPrompt": "This is a phone call. Do not use exclamation marks.\n\nConvert 24HR format timings to 12 HR format - e.g 14:00 should be written as 2 PM."
},
"position": {
"x": 0,
"y": 0
}
}
object[]
An array of edge objects that define the connections and flow between nodes in your pathway. Each edge contains:Common Edge Structure:
{
"source": "source_node_id",
"target": "target_node_id",
"data": {
"label": "When this path should be taken",
// Optional: conditions, descriptions, etc.
}
}
Edge Object Parameters
Edge Object Parameters
id— unique id of the edgesource— id of the source nodetarget— id of the target nodelabel— Label for this edge. This is what the agent will use to decide which path to take.
Complete JSON Structure Example
For a comprehensive example of how pathways are structured with multiple nodes and edges in a realistic use case, download our example template: Download pathway example This example contains a complete car rental pathway with:- Multiple node types (Default, Transfer Call, Webhook, End Call, etc.)
- Complex edge routing and conditions
- Variable extraction and model configuration
- Real-world conversation flow patterns
Response
string
Can be
success or error.string
A unique identifier for the pathway (present only if status is
success).array of objects
Data about all the nodes in the pathway.
array of objects
Data about all the edges in the pathway.
{
"status": "success",
"message": "Pathway updated successfully",
"pathway_data": {
"pathway_id": "9d404c1b-6a23-4426-953a-a52c392ff8f1",
"name": "Updated Demo Pathway",
"description": "This is an updated description",
"nodes": [
{
"id": "1",
"data": {
"name": "Start",
"text": "Hey there, how are you doing today?",
"isStart": true,
},
"type": "Default"
},
{
"id": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "End Call"
},
{
"id": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
},
"type": "Default"
}
],
"edges": [
{
"id": "1",
"source": "1",
"target": "randomnode_1710288752186",
"data": {
"name": "End call",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
},
{
"id": "2",
"source": "1",
"target": "randomnode_1710288871721",
"data": {
"name": "New Node",
"prompt": "Click 'Add New Node' on the right to add a new node",
}
}
]
}
}
Docs for agents: llms.txt
Was this page helpful?