Base URL: https://api.cornerspot.net
Authentication: requests use a bearer token, for example Authorization: Bearer YOUR_API_KEY.
List contact statuses
GET /c/api/v1/contact_statuses
Returns a paginated list of the team's contact statuses. Default order is by position; pass sort to override. Requires the contacts_read scope.
Query parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
query | string | Search by name. |
filter[active] | boolean | Filter by active/inactive flag. |
filter[search] | string | Alternative name search (same as query). |
sort | string | Sort column, - prefix for descending. One of: name, position, active, is_default, created_at, updated_at. Default: position. |
page | integer | 1-based page number. |
per_page | integer | Page size (1–100, default 25). |
Code samples
curl --request GET \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses', {
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/contact_statuses', {
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/contact_statuses"
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/contact_statuses")
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/contact_statuses',
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
| STATUS | DESCRIPTION |
|---|---|
200 OK | a page of contact statuses |
401 Unauthorized | missing or invalid API key |
403 Forbidden | the key lacks the contacts_read scope |
Create a contact status
POST /c/api/v1/contact_statuses
Creates a new contact status for the team. Requires contacts_write.
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
contact_status | object | |
contact_status.name | string · required | Required. Unique per team, max 60 characters. |
contact_status.color | string · required | Required. Hex colour (#rrggbb). |
contact_status.description | string | Optional free-text description. |
contact_status.position | integer | Display position (acts_as_list). Defaults to last. |
contact_status.is_default | boolean | Mark as the team's default status. |
contact_status.active | boolean | Whether the status is active. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"contact_status": {
"name": "string",
"color": "#10b981",
"description": "string",
"position": 1,
"is_default": true,
"active": true
}
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"contact_status": {
"name": "string",
"color": "#10b981",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"contact_status": {
"name": "string",
"color": "#10b981",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses"
payload = json.dumps({
"contact_status": {
"name": "string",
"color": "#10b981",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"contact_status": {
"name": "string",
"color": "#10b981",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'contact_status' => [
'name' => 'string',
'color' => '#10b981',
'description' => 'string',
'position' => 1,
'is_default' => true,
'active' => true,
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
201 Created | created |
401 Unauthorized | missing or invalid API key |
403 Forbidden | the key lacks contacts_write scope |
422 Unprocessable Content | validation errors (e.g. missing name, invalid color) |
Get a contact status
GET /c/api/v1/contact_statuses/{id}
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Contact status id. |
Code samples
curl --request GET \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses/abc123' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses/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/contact_statuses/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/contact_statuses/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/contact_statuses/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/contact_statuses/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
| STATUS | DESCRIPTION |
|---|---|
200 OK | the contact status |
401 Unauthorized | missing or invalid API key |
404 Not Found | no such contact status in this team |
Update a contact status
PATCH /c/api/v1/contact_statuses/{id}
Updates a contact status. Requires contacts_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Contact status id. |
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
contact_status | object | |
contact_status.name | string | |
contact_status.color | string | |
contact_status.description | string | |
contact_status.position | integer | |
contact_status.is_default | boolean | |
contact_status.active | boolean |
Code samples
curl --request PATCH \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses/abc123' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"contact_status": {
"name": "string",
"color": "#f59e0b",
"description": "string",
"position": 1,
"is_default": true,
"active": true
}
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses/abc123', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"contact_status": {
"name": "string",
"color": "#f59e0b",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses/abc123', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"contact_status": {
"name": "string",
"color": "#f59e0b",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses/abc123"
payload = json.dumps({
"contact_status": {
"name": "string",
"color": "#f59e0b",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses/abc123")
request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"contact_status": {
"name": "string",
"color": "#f59e0b",
"description": "string",
"position": 1,
"is_default": true,
"active": 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/contact_statuses/abc123',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'contact_status' => [
'name' => 'string',
'color' => '#f59e0b',
'description' => 'string',
'position' => 1,
'is_default' => true,
'active' => true,
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | updated |
401 Unauthorized | missing or invalid API key |
403 Forbidden | the key lacks contacts_write scope |
404 Not Found | no such contact status in this team |
422 Unprocessable Content | validation errors (e.g. blank name, duplicate name) |
Delete a contact status
DELETE /c/api/v1/contact_statuses/{id}
Deletes a contact status. The DeletionService reassigns any contacts using this status to the team's default status before removing it. Returns 422 if the status is the team's default (set another status as default first) or if no default status exists to reassign contacts to. Requires contacts_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Contact status id. |
Code samples
curl --request DELETE \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses/abc123' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses/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/contact_statuses/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/contact_statuses/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/contact_statuses/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/contact_statuses/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
| STATUS | DESCRIPTION |
|---|---|
204 No Content | deleted |
401 Unauthorized | missing or invalid API key |
403 Forbidden | the key lacks contacts_write scope |
404 Not Found | no such contact status in this team |
422 Unprocessable Content | cannot delete the default status |
Reorder contact statuses
POST /c/api/v1/contact_statuses/reorder
Sets the position of every contact status in one atomic operation. The ids array must contain exactly the ids of every contact status in the team — a partial list returns 422 incomplete_reorder. Requires contacts_write.
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
ids[] | array of string · required | Complete ordered list of all contact status ids for the team. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/contact_statuses/reorder' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"ids": [
"1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
]
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/contact_statuses/reorder', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"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/contact_statuses/reorder', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"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/contact_statuses/reorder"
payload = json.dumps({
"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/contact_statuses/reorder")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"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/contact_statuses/reorder',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'ids' => [
'1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | reordered — returns the full list in new order |
401 Unauthorized | missing or invalid API key |
403 Forbidden | the key lacks contacts_write scope |
422 Unprocessable Content | incomplete reorder — ids list does not match all team statuses |
