Portal Branding

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

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

Get portal branding

GET /c/api/v1/portal/branding

Returns the team's current member-portal branding — logo, favicon, accent color, brand name, sign-in greeting, support email, sidebar menu config, and the "Powered by Cornerspot" toggle (plus whether the team owns the white-label add-on). Requires the portal_branding_read scope and the Member Portal module.

Code samples

curl --request GET \
  --url 'https://api.cornerspot.net/c/api/v1/portal/branding' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/branding', {
  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/branding', {
  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/branding"
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/branding")

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/branding',
    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 OKcurrent portal branding
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_branding_read scope

Update portal branding

PATCH /c/api/v1/portal/branding

Updates any subset of the team's member-portal branding fields. Send the fields to change nested under portal_branding; omitted fields are left unchanged. Set a text field to null (or blank) to clear it back to its default (e.g. a blank portal_brand_name falls back to the team name).

Turning portal_powered_by_enabled off requires the white-label add-on; without it the flag is silently ignored.

Requires the portal_branding_write scope and the Member Portal module.

Request body

FIELDTYPEDESCRIPTION
portal_brandingobject · requiredAny subset of the portal branding fields to update.
portal_branding.portal_brand_namestring
portal_branding.portal_logo_urlstring
portal_branding.portal_favicon_urlstring
portal_branding.portal_accent_colorstring6-digit hex, e.g. #2d3a8c.
portal_branding.portal_login_greetingstring
portal_branding.portal_support_emailstring
portal_branding.portal_payments_enabledboolean
portal_branding.portal_support_enabledboolean
portal_branding.portal_live_chat_enabledboolean
portal_branding.portal_powered_by_enabledboolean
portal_branding.portal_menu_configobject

Code samples

curl --request PATCH \
  --url 'https://api.cornerspot.net/c/api/v1/portal/branding' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
  "portal_branding": {
    "portal_brand_name": "string",
    "portal_logo_url": "string",
    "portal_favicon_url": "string",
    "portal_accent_color": "string",
    "portal_login_greeting": "string",
    "portal_support_email": "user@example.com",
    "portal_payments_enabled": true,
    "portal_support_enabled": true,
    "portal_live_chat_enabled": true,
    "portal_powered_by_enabled": true,
    "portal_menu_config": {}
  }
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/branding', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "portal_branding": {
      "portal_brand_name": "string",
      "portal_logo_url": "string",
      "portal_favicon_url": "string",
      "portal_accent_color": "string",
      "portal_login_greeting": "string",
      "portal_support_email": "user@example.com",
      "portal_payments_enabled": true,
      "portal_support_enabled": true,
      "portal_live_chat_enabled": true,
      "portal_powered_by_enabled": true,
      "portal_menu_config": {}
    }
  })
});

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/branding', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    "portal_branding": {
      "portal_brand_name": "string",
      "portal_logo_url": "string",
      "portal_favicon_url": "string",
      "portal_accent_color": "string",
      "portal_login_greeting": "string",
      "portal_support_email": "user@example.com",
      "portal_payments_enabled": true,
      "portal_support_enabled": true,
      "portal_live_chat_enabled": true,
      "portal_powered_by_enabled": true,
      "portal_menu_config": {}
    }
  })
});

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/branding"
payload = json.dumps({
  "portal_branding": {
    "portal_brand_name": "string",
    "portal_logo_url": "string",
    "portal_favicon_url": "string",
    "portal_accent_color": "string",
    "portal_login_greeting": "string",
    "portal_support_email": "user@example.com",
    "portal_payments_enabled": true,
    "portal_support_enabled": true,
    "portal_live_chat_enabled": true,
    "portal_powered_by_enabled": true,
    "portal_menu_config": {}
  }
}).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/branding")

request = Net::HTTP::Patch.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
  "portal_branding": {
    "portal_brand_name": "string",
    "portal_logo_url": "string",
    "portal_favicon_url": "string",
    "portal_accent_color": "string",
    "portal_login_greeting": "string",
    "portal_support_email": "user@example.com",
    "portal_payments_enabled": true,
    "portal_support_enabled": true,
    "portal_live_chat_enabled": true,
    "portal_powered_by_enabled": true,
    "portal_menu_config": {}
  }
})

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/branding',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer YOUR_API_KEY',
    ],
    CURLOPT_POSTFIELDS => json_encode([
    'portal_branding' => [
        'portal_brand_name' => 'string',
        'portal_logo_url' => 'string',
        'portal_favicon_url' => 'string',
        'portal_accent_color' => 'string',
        'portal_login_greeting' => 'string',
        'portal_support_email' => 'user@example.com',
        'portal_payments_enabled' => true,
        'portal_support_enabled' => true,
        'portal_live_chat_enabled' => true,
        'portal_powered_by_enabled' => true,
        'portal_menu_config' => [],
    ],
]),
]);

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

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

Responses

STATUSDESCRIPTION
200 OKupdated portal branding
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_branding_write scope

Was this article helpful?