Opportunities

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

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

List opportunities

GET /c/api/v1/opportunities

Returns a paginated, filterable, searchable page of the team's deals. Supports full-text search and rich filters. Requires the opportunities_read scope and the CRM module.

Query parameters

FIELDTYPEDESCRIPTION
querystringFull-text search over deal name.
filter[account_id]stringComma-separated account ids.
filter[owner_id]stringComma-separated owner (user) ids.
filter[pipeline_stage_id]stringComma-separated pipeline-stage ids.
filter[pipeline_id]stringComma-separated pipeline ids; returns deals in any stage of these pipelines.
filter[expected_close_date_from]stringOnly deals with expected_close_date on or after this date.
filter[expected_close_date_to]stringOnly deals with expected_close_date on or before this date.
filter[tags]stringComma-separated tag ids; returns deals carrying any of them.
sortstringSort column, - prefix for descending. One of name, amount, expected_close_date, created_at, updated_at. Default -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/opportunities' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities', {
  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/opportunities', {
  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/opportunities"
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/opportunities")

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/opportunities',
    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 deals
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the CRM module
403 Forbiddenthe key lacks the opportunities_read scope

Create a deal

POST /c/api/v1/opportunities

Creates a new deal. name, account_id, owner_id, and pipeline_stage_id are required.

Optionally initiates the e-signature flow in the same request when esign_enabled: true and esign_template_id are both present — in that case the body MUST also carry esign.recipients mapping every template role to a signer (returns 422 esign_recipients_required if omitted). Requires opportunities_write; e-signature initiation additionally requires esign_write + the E-Signature module.

Request body

FIELDTYPEDESCRIPTION
opportunityobject
opportunity.namestring · requiredRequired.
opportunity.account_idstring · requiredRequired.
opportunity.owner_idstring · requiredRequired.
opportunity.pipeline_stage_idstring · requiredRequired.
opportunity.amountnumber
opportunity.amount_sourcestring
one of manual, from_line_items
opportunity.currency_idstring
opportunity.expected_close_datestring
opportunity.closed_atstring
opportunity.esign_enabledboolean
opportunity.esign_template_idstring
opportunity.esign_auto_send_stage_idstring
opportunity.esign_success_stage_idstring
opportunity.esign_failure_stage_idstring
opportunity.custom_fieldsobject
opportunity.tag_ids[]array of string
esignobjectRequired when initiating the e-signature flow on create.
esign.recipients[]array of objectMaps each template role to a signer.
esign.recipients[].role_labelstring · requiredMust match a recipient_roles label on the template.
esign.recipients[].namestring · required
esign.recipients[].emailstring · required
esign.recipients[].contact_idstring
esign.subjectstring
esign.messagestring

Code samples

curl --request POST \
  --url 'https://api.cornerspot.net/c/api/v1/opportunities' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  },
  "esign": {
    "recipients": [
      {}
    ],
    "subject": "string",
    "message": "string"
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "opportunity": {
      "name": "string",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "amount": 1.0,
      "amount_source": "manual",
      "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "expected_close_date": "2026-01-15",
      "closed_at": "2026-01-15T09:30:00Z",
      "esign_enabled": true,
      "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {},
      "tag_ids": [
        "abc123"
      ]
    },
    "esign": {
      "recipients": [
        {}
      ],
      "subject": "string",
      "message": "string"
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "opportunity": {
      "name": "string",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "amount": 1.0,
      "amount_source": "manual",
      "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "expected_close_date": "2026-01-15",
      "closed_at": "2026-01-15T09:30:00Z",
      "esign_enabled": true,
      "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {},
      "tag_ids": [
        "abc123"
      ]
    },
    "esign": {
      "recipients": [
        {}
      ],
      "subject": "string",
      "message": "string"
    }
  })
});

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/opportunities"
payload = json.dumps({
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  },
  "esign": {
    "recipients": [
      {}
    ],
    "subject": "string",
    "message": "string"
  }
}).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/opportunities")

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  },
  "esign": {
    "recipients": [
      {}
    ],
    "subject": "string",
    "message": "string"
  }
})

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/opportunities',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'opportunity' => [
        'name' => 'string',
        'account_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'owner_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'pipeline_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'amount' => 1.0,
        'amount_source' => 'manual',
        'currency_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'expected_close_date' => '2026-01-15',
        'closed_at' => '2026-01-15T09:30:00Z',
        'esign_enabled' => true,
        'esign_template_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_auto_send_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_success_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_failure_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'custom_fields' => [],
        'tag_ids' => [
            'abc123',
        ],
    ],
    'esign' => [
        'recipients' => [
            [],
        ],
        'subject' => 'string',
        'message' => 'string',
    ],
]),
]);

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

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

Responses

STATUSDESCRIPTION
201 Createdcreated
422 Unprocessable Contentvalidation errors (missing required fields or associations)

Get a deal

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

Returns a single deal. Requires opportunities_read.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredOpportunity id (UUID).

Code samples

curl --request GET \
  --url 'https://api.cornerspot.net/c/api/v1/opportunities/abc123' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities/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/opportunities/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/opportunities/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/opportunities/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/opportunities/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 deal
404 Not Foundno such deal in this team

Update a deal

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

Updates a deal. If the change moves the deal forward across its configured esign_auto_send_stage, the draft envelope is automatically sent and the response includes delivery details under esign.delivery. Requires opportunities_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredOpportunity id (UUID).

Request body

FIELDTYPEDESCRIPTION
opportunityobject
opportunity.namestring
opportunity.account_idstring
opportunity.owner_idstring
opportunity.pipeline_stage_idstring
opportunity.amountnumber
opportunity.amount_sourcestring
one of manual, from_line_items
opportunity.currency_idstring
opportunity.expected_close_datestring
opportunity.closed_atstring
opportunity.esign_enabledboolean
opportunity.esign_template_idstring
opportunity.esign_auto_send_stage_idstring
opportunity.esign_success_stage_idstring
opportunity.esign_failure_stage_idstring
opportunity.custom_fieldsobject
opportunity.tag_ids[]array of string

Code samples

curl --request PATCH \
  --url 'https://api.cornerspot.net/c/api/v1/opportunities/abc123' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "opportunity": {
      "name": "string",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "amount": 1.0,
      "amount_source": "manual",
      "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "expected_close_date": "2026-01-15",
      "closed_at": "2026-01-15T09:30:00Z",
      "esign_enabled": true,
      "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {},
      "tag_ids": [
        "abc123"
      ]
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "opportunity": {
      "name": "string",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "amount": 1.0,
      "amount_source": "manual",
      "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "expected_close_date": "2026-01-15",
      "closed_at": "2026-01-15T09:30:00Z",
      "esign_enabled": true,
      "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {},
      "tag_ids": [
        "abc123"
      ]
    }
  })
});

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/opportunities/abc123"
payload = json.dumps({
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  }
}).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/opportunities/abc123")

request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "opportunity": {
    "name": "string",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "owner_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "pipeline_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "amount": 1.0,
    "amount_source": "manual",
    "currency_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "expected_close_date": "2026-01-15",
    "closed_at": "2026-01-15T09:30:00Z",
    "esign_enabled": true,
    "esign_template_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_auto_send_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_success_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "esign_failure_stage_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {},
    "tag_ids": [
      "abc123"
    ]
  }
})

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/opportunities/abc123',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'opportunity' => [
        'name' => 'string',
        'account_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'owner_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'pipeline_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'amount' => 1.0,
        'amount_source' => 'manual',
        'currency_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'expected_close_date' => '2026-01-15',
        'closed_at' => '2026-01-15T09:30:00Z',
        'esign_enabled' => true,
        'esign_template_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_auto_send_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_success_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'esign_failure_stage_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'custom_fields' => [],
        'tag_ids' => [
            'abc123',
        ],
    ],
]),
]);

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

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

Responses

STATUSDESCRIPTION
200 OKupdated
404 Not Foundno such deal in this team

Delete (soft) a deal

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

Soft-deletes the deal. Requires opportunities_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredOpportunity id (UUID).

Code samples

curl --request DELETE \
  --url 'https://api.cornerspot.net/c/api/v1/opportunities/abc123' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/opportunities/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/opportunities/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/opportunities/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/opportunities/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/opportunities/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
404 Not Foundno such deal in this team

Was this article helpful?