Base URL: https://api.cornerspot.net
Authentication: requests use a bearer token, for example Authorization: Bearer YOUR_API_KEY.
List portal users
GET /c/api/v1/portal/users
Returns a paginated, filterable list of the team's portal users. Requires the portal_users_read scope and the Member Portal module.
Query parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
filter[status] | string | Comma-separated membership statuses to filter by (active, invited, suspended, revoked). |
filter[account_id] | string | Comma-separated account ids — returns users with a membership on any of those accounts. |
filter[invitation] | string | Invitation state filter: pending (must_set_password=true), accepted, or never_sent. |
filter[active] | boolean | Filter by the user's active flag. |
filter[q] | string | Case-insensitive substring match against name and email. |
sort | string | Sort column; - prefix for descending. One of name, email, active, sign_in_count, last_sign_in_at, invitation_sent_at, invitation_accepted_at, created_at, updated_at. Default -updated_at. |
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/portal/users' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users', {
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/portal/users', {
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/portal/users"
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/portal/users")
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/portal/users',
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 portal users |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_read scope |
Invite a contact as a portal user
POST /c/api/v1/portal/users
Invites a contact to the member portal. The contact must have a valid email and must already be linked to an account (the portal membership hangs off the account). Returns 422 contact_missing_account if the contact has no account, or 422 contact_not_found if contact_id is invalid. Requires portal_users_write.
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
portal_user | object | |
portal_user.contact_id | string · required | Required — id of the Contact to invite. |
portal_user.send_invitation | boolean | When true the invitation email is sent immediately; false defers sending. |
portal_user.name | string | Optional name override. Defaults to the contact's full name. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/portal/users' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"portal_user": {
"contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
"send_invitation": true,
"name": "string"
}
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"portal_user": {
"contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
"send_invitation": true,
"name": "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/portal/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"portal_user": {
"contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
"send_invitation": true,
"name": "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/portal/users"
payload = json.dumps({
"portal_user": {
"contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
"send_invitation": true,
"name": "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/portal/users")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"portal_user": {
"contact_id": "1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d",
"send_invitation": true,
"name": "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/portal/users',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'portal_user' => [
'contact_id' => '1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
'send_invitation' => true,
'name' => 'string',
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
201 Created | portal user created and invited |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
422 Unprocessable Content | contact_id does not exist in this team |
Get a portal user
GET /c/api/v1/portal/users/{id}
Returns a single portal user with their membership list. Requires portal_users_read.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request GET \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/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/portal/users/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/portal/users/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/portal/users/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/portal/users/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 portal user |
404 Not Found | no portal user with that id in this team |
Update a portal user
PATCH /c/api/v1/portal/users/{id}
Updates name, email, phone, active flag, or password for a portal user. When password is blank the existing credential is left unchanged. Password must be at least 10 characters when provided. Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
portal_user | object | |
portal_user.name | string | |
portal_user.email | string | |
portal_user.phone | string | |
portal_user.active | boolean | |
portal_user.password | string | Min 10 chars. Leave blank to leave unchanged. |
portal_user.password_confirmation | string |
Code samples
curl --request PATCH \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"portal_user": {
"name": "string",
"email": "user@example.com",
"phone": "string",
"active": true,
"password": "string",
"password_confirmation": "string"
}
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/abc123', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"portal_user": {
"name": "string",
"email": "user@example.com",
"phone": "string",
"active": true,
"password": "string",
"password_confirmation": "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/portal/users/abc123', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"portal_user": {
"name": "string",
"email": "user@example.com",
"phone": "string",
"active": true,
"password": "string",
"password_confirmation": "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/portal/users/abc123"
payload = json.dumps({
"portal_user": {
"name": "string",
"email": "user@example.com",
"phone": "string",
"active": true,
"password": "string",
"password_confirmation": "string"
}
}).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/portal/users/abc123")
request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"portal_user": {
"name": "string",
"email": "user@example.com",
"phone": "string",
"active": true,
"password": "string",
"password_confirmation": "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/portal/users/abc123',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'portal_user' => [
'name' => 'string',
'email' => 'user@example.com',
'phone' => 'string',
'active' => true,
'password' => 'string',
'password_confirmation' => 'string',
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | updated portal user |
404 Not Found | no portal user with that id in this team |
422 Unprocessable Content | validation failure (e.g. password too short) |
Delete a portal user
DELETE /c/api/v1/portal/users/{id}
Destroys the portal user (and all associated memberships/sessions). Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request DELETE \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/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/portal/users/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/portal/users/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/portal/users/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/portal/users/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 |
404 Not Found | no portal user with that id in this team |
Resend the portal invitation
POST /c/api/v1/portal/users/{id}/resend_invitation
Resends the invitation email to the portal user by re-running PortalInvitationService with send_now: true. Returns 422 no_memberships if the user has no memberships, or 422 no_contact_for_membership if no contact is linked. Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123/resend_invitation' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/abc123/resend_invitation', {
method: 'POST',
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/portal/users/abc123/resend_invitation', {
method: 'POST',
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/portal/users/abc123/resend_invitation"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, 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/portal/users/abc123/resend_invitation")
request = Net::HTTP::Post.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/portal/users/abc123/resend_invitation',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
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 | invitation resent — returns the updated portal user |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
404 Not Found | no portal user with that id in this team |
422 Unprocessable Content | user has no memberships to re-invite |
Suspend a portal user
POST /c/api/v1/portal/users/{id}/suspend
Sets all active memberships to suspended and invalidates all active portal sessions. Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123/suspend' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/abc123/suspend', {
method: 'POST',
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/portal/users/abc123/suspend', {
method: 'POST',
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/portal/users/abc123/suspend"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, 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/portal/users/abc123/suspend")
request = Net::HTTP::Post.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/portal/users/abc123/suspend',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
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 | user suspended — returns the updated portal user |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
404 Not Found | no portal user with that id in this team |
Unsuspend a portal user
POST /c/api/v1/portal/users/{id}/unsuspend
Restores all suspended memberships to active. Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123/unsuspend' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/abc123/unsuspend', {
method: 'POST',
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/portal/users/abc123/unsuspend', {
method: 'POST',
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/portal/users/abc123/unsuspend"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, 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/portal/users/abc123/unsuspend")
request = Net::HTTP::Post.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/portal/users/abc123/unsuspend',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
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 | user unsuspended — returns the updated portal user |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
404 Not Found | no portal user with that id in this team |
Revoke all portal memberships
POST /c/api/v1/portal/users/{id}/revoke
Sets all non-revoked memberships to revoked and invalidates all active portal sessions. Requires portal_users_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Portal user id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/portal/users/abc123/revoke' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/abc123/revoke', {
method: 'POST',
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/portal/users/abc123/revoke', {
method: 'POST',
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/portal/users/abc123/revoke"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, 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/portal/users/abc123/revoke")
request = Net::HTTP::Post.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/portal/users/abc123/revoke',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
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 | memberships revoked — returns the updated portal user |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
404 Not Found | no portal user with that id in this team |
