curl --request POST \
--url https://your-instance.example.com/api/pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales pipeline",
"description": "NA sales pipeline",
"pipelineId": "66f0a0b0c0d0e0f0a0b0c0d0",
"pipelineStages": [
{
"name": "New",
"color": "#3B82F6",
"position": 0
},
{
"name": "Qualified",
"color": "#10B981",
"position": 1
},
{
"name": "Won",
"color": "#F59E0B",
"position": 2
}
]
}
'import requests
url = "https://your-instance.example.com/api/pipelines"
payload = {
"name": "Sales pipeline",
"description": "NA sales pipeline",
"pipelineId": "66f0a0b0c0d0e0f0a0b0c0d0",
"pipelineStages": [
{
"name": "New",
"color": "#3B82F6",
"position": 0
},
{
"name": "Qualified",
"color": "#10B981",
"position": 1
},
{
"name": "Won",
"color": "#F59E0B",
"position": 2
}
]
}
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({
name: 'Sales pipeline',
description: 'NA sales pipeline',
pipelineId: '66f0a0b0c0d0e0f0a0b0c0d0',
pipelineStages: [
{name: 'New', color: '#3B82F6', position: 0},
{name: 'Qualified', color: '#10B981', position: 1},
{name: 'Won', color: '#F59E0B', position: 2}
]
})
};
fetch('https://your-instance.example.com/api/pipelines', 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://your-instance.example.com/api/pipelines",
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' => 'Sales pipeline',
'description' => 'NA sales pipeline',
'pipelineId' => '66f0a0b0c0d0e0f0a0b0c0d0',
'pipelineStages' => [
[
'name' => 'New',
'color' => '#3B82F6',
'position' => 0
],
[
'name' => 'Qualified',
'color' => '#10B981',
'position' => 1
],
[
'name' => 'Won',
'color' => '#F59E0B',
'position' => 2
]
]
]),
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://your-instance.example.com/api/pipelines"
payload := strings.NewReader("{\n \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\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://your-instance.example.com/api/pipelines")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/pipelines")
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 \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Pipeline updated",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline",
"type": "Contact",
"isDefault": true
},
"contactsMigrated": {
"New Lead -> New": 14,
"Qualified Lead -> Qualified": 8
}
}{
"message": "Pipeline updated",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline",
"type": "Contact",
"isDefault": true
},
"contactsMigrated": {
"New Lead -> New": 14,
"Qualified Lead -> Qualified": 8
}
}{
"message": "Pipeline updated with partial migration failure",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline"
},
"migrationError": "Some records failed to migrate from \"Stalled\" -> \"Lost\"",
"contactsMigrated": {
"New Lead -> New": 14
}
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}Update or create organization pipeline
Upsert the org’s default pipeline for the given type. When the legacy stages mapping is provided, the controller also migrates existing records from oldStage to newStage and returns the per-stage migration counts on the response.
curl --request POST \
--url https://your-instance.example.com/api/pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales pipeline",
"description": "NA sales pipeline",
"pipelineId": "66f0a0b0c0d0e0f0a0b0c0d0",
"pipelineStages": [
{
"name": "New",
"color": "#3B82F6",
"position": 0
},
{
"name": "Qualified",
"color": "#10B981",
"position": 1
},
{
"name": "Won",
"color": "#F59E0B",
"position": 2
}
]
}
'import requests
url = "https://your-instance.example.com/api/pipelines"
payload = {
"name": "Sales pipeline",
"description": "NA sales pipeline",
"pipelineId": "66f0a0b0c0d0e0f0a0b0c0d0",
"pipelineStages": [
{
"name": "New",
"color": "#3B82F6",
"position": 0
},
{
"name": "Qualified",
"color": "#10B981",
"position": 1
},
{
"name": "Won",
"color": "#F59E0B",
"position": 2
}
]
}
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({
name: 'Sales pipeline',
description: 'NA sales pipeline',
pipelineId: '66f0a0b0c0d0e0f0a0b0c0d0',
pipelineStages: [
{name: 'New', color: '#3B82F6', position: 0},
{name: 'Qualified', color: '#10B981', position: 1},
{name: 'Won', color: '#F59E0B', position: 2}
]
})
};
fetch('https://your-instance.example.com/api/pipelines', 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://your-instance.example.com/api/pipelines",
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' => 'Sales pipeline',
'description' => 'NA sales pipeline',
'pipelineId' => '66f0a0b0c0d0e0f0a0b0c0d0',
'pipelineStages' => [
[
'name' => 'New',
'color' => '#3B82F6',
'position' => 0
],
[
'name' => 'Qualified',
'color' => '#10B981',
'position' => 1
],
[
'name' => 'Won',
'color' => '#F59E0B',
'position' => 2
]
]
]),
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://your-instance.example.com/api/pipelines"
payload := strings.NewReader("{\n \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\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://your-instance.example.com/api/pipelines")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/pipelines")
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 \"name\": \"Sales pipeline\",\n \"description\": \"NA sales pipeline\",\n \"pipelineId\": \"66f0a0b0c0d0e0f0a0b0c0d0\",\n \"pipelineStages\": [\n {\n \"name\": \"New\",\n \"color\": \"#3B82F6\",\n \"position\": 0\n },\n {\n \"name\": \"Qualified\",\n \"color\": \"#10B981\",\n \"position\": 1\n },\n {\n \"name\": \"Won\",\n \"color\": \"#F59E0B\",\n \"position\": 2\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Pipeline updated",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline",
"type": "Contact",
"isDefault": true
},
"contactsMigrated": {
"New Lead -> New": 14,
"Qualified Lead -> Qualified": 8
}
}{
"message": "Pipeline updated",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline",
"type": "Contact",
"isDefault": true
},
"contactsMigrated": {
"New Lead -> New": 14,
"Qualified Lead -> Qualified": 8
}
}{
"message": "Pipeline updated with partial migration failure",
"pipeline": {
"_id": "66f0a0b0c0d0e0f0a0b0c0d0",
"name": "Sales pipeline"
},
"migrationError": "Some records failed to migrate from \"Stalled\" -> \"Lost\"",
"contactsMigrated": {
"New Lead -> New": 14
}
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}{
"error": "Pipeline not found"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Contact, Application Body
Pipeline display name; trimmed and unique within the organization.
Optional human-readable summary of the pipeline's purpose.
Pipeline to update; if omitted, the org's default pipeline for the given type is updated.
Legacy stage-rename mapping — pairs of oldStage -> newStage used to migrate existing records. Prefer pipelineStages.
Show child attributes
Show child attributes
Stage definitions with _id (for updates), name, color, and position; omitted stages are deactivated.
Show child attributes
Show child attributes
Response
Pipeline updated
Show child attributes
Show child attributes
{ "_id": "66f0a0b0c0d0e0f0a0b0c0d0", "name": "Sales pipeline", "description": "NA sales pipeline", "organizationId": "65a0e0e0e0e0e0e0e0e0e0e0", "type": "Contact", "isDefault": true, "isActive": true, "stages": [ { "name": "New", "color": "#3B82F6" }, { "name": "Qualified", "color": "#10B981" } ], "pipelineStageIds": [ "67f0a0b0c0d0e0f0a0b0c0d0", "67f0a0b0c0d0e0f0a0b0c0d1" ], "pipelineStages": [ { "_id": "67f0a0b0c0d0e0f0a0b0c0d0", "name": "New", "color": "#3B82F6", "position": 0 }, { "_id": "67f0a0b0c0d0e0f0a0b0c0d1", "name": "Qualified", "color": "#10B981", "position": 1 } ], "createdBy": "65b1f0a2c3d4e5f6a7b8c9d0", "updatedBy": "65b1f0a2c3d4e5f6a7b8c9d0" }
Show child attributes
Show child attributes