Update an existing pipeline
curl --request PUT \
--url https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id} \
--header 'Content-Type: application/json' \
--data '
{
"label": "<string>",
"displayOrder": 123,
"active": true,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"metadata": {
"probability": 0.5
}
}
]
}
'import requests
url = "https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}"
payload = {
"label": "<string>",
"displayOrder": 123,
"active": True,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": True,
"metadata": { "probability": 0.5 }
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
label: '<string>',
displayOrder: 123,
active: true,
stages: [
{
stageId: '<string>',
createdAt: 123,
updatedAt: 123,
label: '<string>',
displayOrder: 123,
active: true,
metadata: {probability: 0.5}
}
]
})
};
fetch('https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_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.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'label' => '<string>',
'displayOrder' => 123,
'active' => true,
'stages' => [
[
'stageId' => '<string>',
'createdAt' => 123,
'updatedAt' => 123,
'label' => '<string>',
'displayOrder' => 123,
'active' => true,
'metadata' => [
'probability' => 0.5
]
]
]
]),
CURLOPT_HTTPHEADER => [
"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://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}"
payload := strings.NewReader("{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"pipelineId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"default": true,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"metadata": {
"probability": 0.5
}
}
]
}v1
Update an existing pipeline
Update an existing pipeline for the specified object type.
PUT
/
crm-pipelines
/
v1
/
pipelines
/
{object_type}
/
{pipeline_id}
Update an existing pipeline
curl --request PUT \
--url https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id} \
--header 'Content-Type: application/json' \
--data '
{
"label": "<string>",
"displayOrder": 123,
"active": true,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"metadata": {
"probability": 0.5
}
}
]
}
'import requests
url = "https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}"
payload = {
"label": "<string>",
"displayOrder": 123,
"active": True,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": True,
"metadata": { "probability": 0.5 }
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
label: '<string>',
displayOrder: 123,
active: true,
stages: [
{
stageId: '<string>',
createdAt: 123,
updatedAt: 123,
label: '<string>',
displayOrder: 123,
active: true,
metadata: {probability: 0.5}
}
]
})
};
fetch('https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_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.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'label' => '<string>',
'displayOrder' => 123,
'active' => true,
'stages' => [
[
'stageId' => '<string>',
'createdAt' => 123,
'updatedAt' => 123,
'label' => '<string>',
'displayOrder' => 123,
'active' => true,
'metadata' => [
'probability' => 0.5
]
]
]
]),
CURLOPT_HTTPHEADER => [
"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://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}"
payload := strings.NewReader("{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm-pipelines/v1/pipelines/{object_type}/{pipeline_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"stages\": [\n {\n \"stageId\": \"<string>\",\n \"createdAt\": 123,\n \"updatedAt\": 123,\n \"label\": \"<string>\",\n \"displayOrder\": 123,\n \"active\": true,\n \"metadata\": {\n \"probability\": 0.5\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"pipelineId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"default": true,
"stages": [
{
"stageId": "<string>",
"createdAt": 123,
"updatedAt": 123,
"label": "<string>",
"displayOrder": 123,
"active": true,
"metadata": {
"probability": 0.5
}
}
]
}Please note: the v1 Pipelines API will be sunset on November 2nd, 2026. After that date, the API will no longer be supported. If you’re still using v1, migrate to the latest version of the Pipelines API.
Path Parameters
The object type of the pipeline that you want to update. Must be one of: deals, tickets
Available options:
deals, tickets The ID of the pipeline you want to update.
Body
application/json
The label for the pipeline. The label will be displayed when viewing records in HubSpot.
Maximum string length:
36When viewing records in HubSpot, pipelines are displayed starting with the pipeline with the lowest displayOrder value.
Whether or not the pipeline is active.
A list of stages for this pipeline. Pipelines may have up to 100 stages.
Maximum array length:
100Show child attributes
Show child attributes
Last modified on July 27, 2026
Was this page helpful?
⌘I