Activities

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

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

List activities

GET /c/api/v1/activities

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

Query parameters

FIELDTYPEDESCRIPTION
querystringFull-text search over subject and body.
filter[activity_type]stringComma-separated activity types (note, call, email, meeting, task).
filter[user_id]stringComma-separated user ids.
filter[contact_id]stringComma-separated contact ids.
filter[opportunity_id]stringComma-separated opportunity ids.
filter[account_id]stringComma-separated account ids.
filter[activity_status_id]stringComma-separated activity-status ids.
filter[incomplete]stringSet to true to return only activities with no completed_at.
filter[completed]stringSet to true to return only completed activities.
filter[due_from]stringOnly activities with due_at on or after this date.
filter[due_to]stringOnly activities with due_at on or before this date.
sortstringSort column, - prefix for descending. One of activity_type, occurred_at, due_at, completed_at, 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/activities' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/activities', {
  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/activities', {
  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/activities"
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/activities")

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

Create an activity

POST /c/api/v1/activities

Creates an activity. activity_type and occurred_at are required. The activity must be associated with at least one of contact_id, account_id, or opportunity_id. Requires activities_write.

Request body

FIELDTYPEDESCRIPTION
activityobject
activity.activity_typestring · required
one of note, call, email, meeting, task
Required.
activity.subjectstring
activity.bodystring
activity.occurred_atstring · requiredRequired.
activity.due_atstring
activity.completed_atstring
activity.contact_idstring
activity.opportunity_idstring
activity.account_idstring
activity.user_idstring
activity.activity_status_idstring
activity.custom_fieldsobject

Code samples

curl --request POST \
  --url 'https://api.cornerspot.net/c/api/v1/activities' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/activities', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "activity": {
      "activity_type": "note",
      "subject": "string",
      "body": "string",
      "occurred_at": "2026-01-15T09:30:00Z",
      "due_at": "2026-01-15T09:30:00Z",
      "completed_at": "2026-01-15T09:30:00Z",
      "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {}
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/activities', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "activity": {
      "activity_type": "note",
      "subject": "string",
      "body": "string",
      "occurred_at": "2026-01-15T09:30:00Z",
      "due_at": "2026-01-15T09:30:00Z",
      "completed_at": "2026-01-15T09:30:00Z",
      "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {}
    }
  })
});

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/activities"
payload = json.dumps({
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
}).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/activities")

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
})

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/activities',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'activity' => [
        'activity_type' => 'note',
        'subject' => 'string',
        'body' => 'string',
        'occurred_at' => '2026-01-15T09:30:00Z',
        'due_at' => '2026-01-15T09:30:00Z',
        'completed_at' => '2026-01-15T09:30:00Z',
        'contact_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'opportunity_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'account_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'user_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'activity_status_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'custom_fields' => [],
    ],
]),
]);

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

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

Responses

STATUSDESCRIPTION
201 Createdcreated
422 Unprocessable Contentvalidation errors (e.g. missing required fields or no associated entity)

Get an activity

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

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredActivity id.

Code samples

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

Update an activity

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

Updates an activity's attributes. Requires activities_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredActivity id.

Request body

FIELDTYPEDESCRIPTION
activityobject
activity.activity_typestring
one of note, call, email, meeting, task
activity.subjectstring
activity.bodystring
activity.occurred_atstring
activity.due_atstring
activity.completed_atstring
activity.contact_idstring
activity.opportunity_idstring
activity.account_idstring
activity.user_idstring
activity.activity_status_idstring
activity.custom_fieldsobject

Code samples

curl --request PATCH \
  --url 'https://api.cornerspot.net/c/api/v1/activities/abc123' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/activities/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "activity": {
      "activity_type": "note",
      "subject": "string",
      "body": "string",
      "occurred_at": "2026-01-15T09:30:00Z",
      "due_at": "2026-01-15T09:30:00Z",
      "completed_at": "2026-01-15T09:30:00Z",
      "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {}
    }
  })
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/activities/abc123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "activity": {
      "activity_type": "note",
      "subject": "string",
      "body": "string",
      "occurred_at": "2026-01-15T09:30:00Z",
      "due_at": "2026-01-15T09:30:00Z",
      "completed_at": "2026-01-15T09:30:00Z",
      "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
      "custom_fields": {}
    }
  })
});

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/activities/abc123"
payload = json.dumps({
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
}).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/activities/abc123")

request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "activity": {
    "activity_type": "note",
    "subject": "string",
    "body": "string",
    "occurred_at": "2026-01-15T09:30:00Z",
    "due_at": "2026-01-15T09:30:00Z",
    "completed_at": "2026-01-15T09:30:00Z",
    "contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "opportunity_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "account_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "user_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "activity_status_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
    "custom_fields": {}
  }
})

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/activities/abc123',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'activity' => [
        'activity_type' => 'note',
        'subject' => 'string',
        'body' => 'string',
        'occurred_at' => '2026-01-15T09:30:00Z',
        'due_at' => '2026-01-15T09:30:00Z',
        'completed_at' => '2026-01-15T09:30:00Z',
        'contact_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'opportunity_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'account_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'user_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'activity_status_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
        'custom_fields' => [],
    ],
]),
]);

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

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

Responses

STATUSDESCRIPTION
200 OKupdated
404 Not Foundno such activity in this team

Delete (soft) an activity

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

Soft-deletes the activity. Requires activities_write.

Path parameters

FIELDTYPEDESCRIPTION
idstring · requiredActivity id.

Code samples

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

Was this article helpful?