Migration Split
Update Migration Split Request Policy
Change whether the request’s call settings or the agent’s win on traffic a migration split sends to an agent.
PATCH
/
v1
/
convo_pathway
/
{pathway_id}
/
migration_split
Update Migration Split Request Policy
curl --request PATCH \
--url https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split \
--header 'authorization: <authorization>' \
--header 'content-type: <content-type>' \
--data '
{
"request_policy": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split"
payload = { "request_policy": "<string>" }
headers = {
"authorization": "<authorization>",
"content-type": "<content-type>"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {authorization: '<authorization>', 'content-type': '<content-type>'},
body: JSON.stringify({request_policy: '<string>'})
};
fetch('https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split', 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/convo_pathway/{pathway_id}/migration_split",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'request_policy' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"authorization: <authorization>",
"content-type: <content-type>"
],
]);
$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/convo_pathway/{pathway_id}/migration_split"
payload := strings.NewReader("{\n \"request_policy\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("content-type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split")
.header("authorization", "<authorization>")
.header("content-type", "<content-type>")
.body("{\n \"request_policy\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["content-type"] = '<content-type>'
request.body = "{\n \"request_policy\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"request_policy": "agent_owned"
}
{
"data": {
"migration_split": {
"agent_id": "6f2c8a41-3b7e-4d19-9c55-0e8a1f3b7d24",
"v2_percentage": 50,
"request_policy": "agent_owned",
"updated_at": "2026-11-12T19:22:07.845Z",
"rollout_id": "0c6d3f9e-58a2-4b7f-a1d4-93e2b6c7f510"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "request_policy must be 'honor' or 'agent_owned'"
}
]
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Migration split not found"
}
]
}
Changes only the
Docs for agents: llms.txt
request_policy of an existing migration split. The share of traffic and the agent stay as they are, so this request is accepted while a rollout is moving the pathway’s share. The new policy applies from the next call. Set Migration Split describes what each policy does.
Requires an admin, owner, or operator role.
Headers
Path Parameters
The V1 pathway. Must be a UUID of a pathway in your organization. Returns
400 BAD_REQUEST for an invalid UUID, 404 NOT_FOUND for a pathway outside your organization, and 400 BAD_REQUEST for a pathway that Bland compiled from a V2 agent.Body Parameters
honor (the request’s call settings win) or agent_owned (the agent’s settings win). Any other value, or a missing value, returns 400 BAD_REQUEST.Response
The split after the change.
Show migration split object
Show migration split object
null on success, or a list of error objects if the request failed. Returns 404 NOT_FOUND when the pathway has no split. Create one with Set Migration Split.{
"request_policy": "agent_owned"
}
{
"data": {
"migration_split": {
"agent_id": "6f2c8a41-3b7e-4d19-9c55-0e8a1f3b7d24",
"v2_percentage": 50,
"request_policy": "agent_owned",
"updated_at": "2026-11-12T19:22:07.845Z",
"rollout_id": "0c6d3f9e-58a2-4b7f-a1d4-93e2b6c7f510"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "request_policy must be 'honor' or 'agent_owned'"
}
]
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Migration split not found"
}
]
}
Docs for agents: llms.txt
Was this page helpful?
⌘I
Update Migration Split Request Policy
curl --request PATCH \
--url https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split \
--header 'authorization: <authorization>' \
--header 'content-type: <content-type>' \
--data '
{
"request_policy": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split"
payload = { "request_policy": "<string>" }
headers = {
"authorization": "<authorization>",
"content-type": "<content-type>"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {authorization: '<authorization>', 'content-type': '<content-type>'},
body: JSON.stringify({request_policy: '<string>'})
};
fetch('https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split', 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/convo_pathway/{pathway_id}/migration_split",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'request_policy' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"authorization: <authorization>",
"content-type: <content-type>"
],
]);
$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/convo_pathway/{pathway_id}/migration_split"
payload := strings.NewReader("{\n \"request_policy\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("content-type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split")
.header("authorization", "<authorization>")
.header("content-type", "<content-type>")
.body("{\n \"request_policy\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/convo_pathway/{pathway_id}/migration_split")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["content-type"] = '<content-type>'
request.body = "{\n \"request_policy\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"request_policy": "agent_owned"
}
{
"data": {
"migration_split": {
"agent_id": "6f2c8a41-3b7e-4d19-9c55-0e8a1f3b7d24",
"v2_percentage": 50,
"request_policy": "agent_owned",
"updated_at": "2026-11-12T19:22:07.845Z",
"rollout_id": "0c6d3f9e-58a2-4b7f-a1d4-93e2b6c7f510"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "request_policy must be 'honor' or 'agent_owned'"
}
]
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Migration split not found"
}
]
}