Portal Users

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

FIELDTYPEDESCRIPTION
filter[status]stringComma-separated membership statuses to filter by (active, invited, suspended, revoked).
filter[account_id]stringComma-separated account ids — returns users with a membership on any of those accounts.
filter[invitation]stringInvitation state filter: pending (must_set_password=true), accepted, or never_sent.
filter[active]booleanFilter by the user's active flag.
filter[q]stringCase-insensitive substring match against name and email.
sortstringSort 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.
pageinteger1-based page number.
per_pageintegerPage 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

STATUSDESCRIPTION
200 OKa page of portal users
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe 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

FIELDTYPEDESCRIPTION
portal_userobject
portal_user.contact_idstring · requiredRequired — id of the Contact to invite.
portal_user.send_invitationbooleanWhen true the invitation email is sent immediately; false defers sending.
portal_user.namestringOptional 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

STATUSDESCRIPTION
201 Createdportal user created and invited
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
422 Unprocessable Contentcontact_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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
200 OKthe portal user
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal user id.

Request body

FIELDTYPEDESCRIPTION
portal_userobject
portal_user.namestring
portal_user.emailstring
portal_user.phonestring
portal_user.activeboolean
portal_user.passwordstringMin 10 chars. Leave blank to leave unchanged.
portal_user.password_confirmationstring

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

STATUSDESCRIPTION
200 OKupdated portal user
404 Not Foundno portal user with that id in this team
422 Unprocessable Contentvalidation 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
204 No Contentdeleted
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
200 OKinvitation resent — returns the updated portal user
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
404 Not Foundno portal user with that id in this team
422 Unprocessable Contentuser 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
200 OKuser suspended — returns the updated portal user
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
200 OKuser unsuspended — returns the updated portal user
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredPortal 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

STATUSDESCRIPTION
200 OKmemberships revoked — returns the updated portal user
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
404 Not Foundno portal user with that id in this team

Was this article helpful?