Pipelines

Base URL: https://api.cornerspot.net

Authentication: requests use a bearer token, for example Authorization: Bearer YOUR_API_KEY.

List pipelines

GET /c/api/v1/pipelines

Returns a paginated list of the team's deal pipelines (with their stages). By default only active pipelines are returned; pass filter[include_inactive]=true to include inactive ones. Requires the pipelines_read scope.

Query parameters

FIELDTYPEDESCRIPTION
filter[include_inactive]string
one of true, false
Set to true to include inactive pipelines. Default: active only.
sortstringSort column, - prefix for descending. One of name, active, is_default, created_at, updated_at.
pageinteger1-based page number.
per_pageintegerPage size (1–100, default 25).

Code samples

curl --request GET \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, headers=headers, method="GET")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
200 OKa page of pipelines
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_read scope

Create a pipeline

POST /c/api/v1/pipelines

Creates a new deal pipeline. name is required. Requires pipelines_write.

Request body

FIELDTYPEDESCRIPTION
pipelineobject
pipeline.namestring · requiredRequired — unique within the team.
pipeline.activebooleanWhether the pipeline is active. Default: true.
pipeline.is_defaultbooleanMark as the team's default pipeline (unsets any previous default).

Code samples

curl --request POST \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "pipeline": {
      "name": "string",
      "active": true,
      "is_default": true
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "pipeline": {
      "name": "string",
      "active": true,
      "is_default": true
    }
  })
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines"
payload = json.dumps({
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
}).encode("utf-8")
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, data=payload, headers=headers, method="POST")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines")

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
})

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'pipeline' => [
        'name' => 'string',
        'active' => true,
        'is_default' => true,
    ],
]),
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
201 Createdcreated
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_write scope
422 Unprocessable Contentvalidation errors (e.g. missing name or duplicate name)

Get a pipeline

GET /c/api/v1/pipelines/{id}

Returns a single pipeline with its stages. Requires pipelines_read.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredPipeline id (UUID).

Code samples

curl --request GET \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines/abc123' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines/abc123"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, headers=headers, method="GET")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines/abc123")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines/abc123',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
200 OKthe pipeline
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_read scope
404 Not Foundno such pipeline in this team

Update a pipeline

PATCH /c/api/v1/pipelines/{id}

Updates a pipeline's name, active flag, or default status. Requires pipelines_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredPipeline id (UUID).

Request body

FIELDTYPEDESCRIPTION
pipelineobject
pipeline.namestring
pipeline.activeboolean
pipeline.is_defaultboolean

Code samples

curl --request PATCH \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines/abc123' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "pipeline": {
      "name": "string",
      "active": true,
      "is_default": true
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "pipeline": {
      "name": "string",
      "active": true,
      "is_default": true
    }
  })
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines/abc123"
payload = json.dumps({
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
}).encode("utf-8")
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, data=payload, headers=headers, method="PATCH")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines/abc123")

request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "pipeline": {
    "name": "string",
    "active": true,
    "is_default": true
  }
})

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines/abc123',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'pipeline' => [
        'name' => 'string',
        'active' => true,
        'is_default' => true,
    ],
]),
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
200 OKupdated
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_write scope
404 Not Foundno such pipeline in this team
422 Unprocessable Contentvalidation errors (e.g. blank name)

Delete a pipeline

DELETE /c/api/v1/pipelines/{id}

Deletes a pipeline. Returns 422 if any deals are still assigned to stages in this pipeline — move or delete those deals first. Requires pipelines_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredPipeline id (UUID).

Code samples

curl --request DELETE \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines/abc123' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines/abc123"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, headers=headers, method="DELETE")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines/abc123")

request = Net::HTTP::Delete.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines/abc123',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'DELETE',
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
204 No Contentdeleted
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_write scope
404 Not Foundno such pipeline in this team
422 Unprocessable Contentpipeline has deals and cannot be deleted

Reorder pipeline stages

POST /c/api/v1/pipelines/{id}/reorder_stages

Repositions every stage in the pipeline. The request body must supply the complete set of the pipeline's stage ids (no more, no fewer) in the desired order. Returns 422 incomplete_reorder when the set is wrong. Requires pipelines_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredPipeline id (UUID).

Request body

FIELDTYPEDESCRIPTION
stage_ids[]array of string · requiredRequired — the complete ordered list of stage ids.

Code samples

curl --request POST \
  --url 'https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "stage_ids": [
    "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
  ]
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "stage_ids": [
      "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
    ]
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "stage_ids": [
      "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
    ]
  })
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages"
payload = json.dumps({
  "stage_ids": [
    "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
  ]
}).encode("utf-8")
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, data=payload, headers=headers, method="POST")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages")

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "stage_ids": [
    "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
  ]
})

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/pipelines/abc123/reorder_stages',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'stage_ids' => [
        '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
    ],
]),
]);

$response = curl_exec($curl);
curl_close($curl);

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
200 OKstages reordered
401 Unauthorizedmissing or invalid API key
403 Forbiddenthe key lacks the pipelines_write scope
404 Not Foundno such pipeline in this team
422 Unprocessable Contentstage_ids do not match the pipeline's stages exactly

Was this article helpful?