Create / Update Tenants
API to create a new Tenant OR update an existing Tenant
curl --request POST \
--url https://hub.suprsend.com/v1/tenant/{tenant_id}/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Awesome Tenant",
"tenant_name": "<string>",
"parent_id": "acme-corp",
"blocked_channels": [
"sms"
],
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"primary_color": "#ff0000",
"secondary_color": "#00ff00",
"tertiary_color": "#0000ff",
"preference_page_url": "<string>",
"social_links": {
"website": "https://suprsend.com",
"facebook": "<string>",
"LinkedIn": "<string>",
"x": "<string>",
"instagram": "<string>",
"medium": "<string>",
"discord": "<string>",
"telegram": "<string>",
"youtube": "<string>",
"tiktok": "<string>"
},
"properties": {}
}
'import requests
url = "https://hub.suprsend.com/v1/tenant/{tenant_id}/"
payload = {
"name": "Awesome Tenant",
"tenant_name": "<string>",
"parent_id": "acme-corp",
"blocked_channels": ["sms"],
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"primary_color": "#ff0000",
"secondary_color": "#00ff00",
"tertiary_color": "#0000ff",
"preference_page_url": "<string>",
"social_links": {
"website": "https://suprsend.com",
"facebook": "<string>",
"LinkedIn": "<string>",
"x": "<string>",
"instagram": "<string>",
"medium": "<string>",
"discord": "<string>",
"telegram": "<string>",
"youtube": "<string>",
"tiktok": "<string>"
},
"properties": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Awesome Tenant',
tenant_name: '<string>',
parent_id: 'acme-corp',
blocked_channels: ['sms'],
logo: 'https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png',
primary_color: '#ff0000',
secondary_color: '#00ff00',
tertiary_color: '#0000ff',
preference_page_url: '<string>',
social_links: {
website: 'https://suprsend.com',
facebook: '<string>',
LinkedIn: '<string>',
x: '<string>',
instagram: '<string>',
medium: '<string>',
discord: '<string>',
telegram: '<string>',
youtube: '<string>',
tiktok: '<string>'
},
properties: {}
})
};
fetch('https://hub.suprsend.com/v1/tenant/{tenant_id}/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hub.suprsend.com/v1/tenant/{tenant_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Awesome Tenant',
'tenant_name' => '<string>',
'parent_id' => 'acme-corp',
'blocked_channels' => [
'sms'
],
'logo' => 'https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png',
'primary_color' => '#ff0000',
'secondary_color' => '#00ff00',
'tertiary_color' => '#0000ff',
'preference_page_url' => '<string>',
'social_links' => [
'website' => 'https://suprsend.com',
'facebook' => '<string>',
'LinkedIn' => '<string>',
'x' => '<string>',
'instagram' => '<string>',
'medium' => '<string>',
'discord' => '<string>',
'telegram' => '<string>',
'youtube' => '<string>',
'tiktok' => '<string>'
],
'properties' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hub.suprsend.com/v1/tenant/{tenant_id}/"
payload := strings.NewReader("{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hub.suprsend.com/v1/tenant/{tenant_id}/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hub.suprsend.com/v1/tenant/{tenant_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "acme-corp",
"name": "Awesome Tenant",
"tenant_id": "acme-corp",
"tenant_name": "Awesome Tenant",
"parent_id": null,
"ancestors": [],
"level": 0,
"children_count": 0,
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"timezone": null,
"blocked_channels": [
"sms"
],
"embedded_preference_url": "https://app.suprsend.com/settings",
"hosted_preference_domain": "preferences.suprsend.com",
"primary_color": "#ff0000",
"secondary_color": "#0000ff",
"tertiary_color": "#00ffff",
"social_links": {
"website": "https://suprsend.com",
"facebook": "",
"linkedin": "",
"x": "",
"instagram": "",
"medium": "",
"discord": "",
"telegram": "",
"youtube": ""
},
"properties": {
"region": "US",
"support_email": "help@example.com"
},
"updated_at": "2026-08-27T21:01:35.359787Z"
}{
"code": 400,
"error_code": "error",
"type": "ValidationError",
"message": "{\"tenant_name\": [\"Ensure this field contains non-html text\"]}",
"detail": {
"tenant_name": [
"Ensure this field contains non-html text"
]
}
}Authorizations
Pass as Bearer <API_KEY>. Get API Key from SuprSend dashboard Developers -> API Keys section.
Path Parameters
Tenant identifier to create or update. Max 64 chars; allowed characters [a-z0-9_.-].
64^[a-z0-9_.-]+$Body
Tenant display name. Replaces the legacy tenant_name field; both are accepted.
Will be deprecated in future. Use name instead.
ID of the parent tenant if you want to add this tenant as a sub-tenant. Skip this field, or pass null or "" to create the tenant as a root. Setting it on an existing tenant re-parents it or leave it null to delink existing parent. Must reference an existing tenant. See Sub-tenants.
"acme-corp"
Channels turned off for this tenant. Notifications on these channels won't be sent to any user of the tenant — including on root categories (which users normally can't unsubscribe from) — and users can't override this. If sub-tenants are used, a block set here also applies to every sub-tenant below and can't be removed lower down. Allowed: email, sms, whatsapp, androidpush, iospush, webpush, slack, ms_teams, inbox.
["sms"]
Tenant logo URL.
Primary brand color, used in the tenant's email header, buttons, and footer. If left empty on create, it's copied from the default tenant.
Secondary brand color. Not part of the default tenant component but can be used in templates as {{$tenant.secondary_color}}. If left empty on create, it's copied from the default tenant.
"#00ff00"
Tertiary brand color. Not part of the default tenant component but can be used in templates as {{$tenant.tertiary_color}}. If left empty on create, it's copied from the default tenant.
"#0000ff"
URL of your product's preference page.
Tenant's social media URLs. Pass "" to clear a link (not null).
Show child attributes
Show child attributes
Custom tenant properties. Merged per top-level key on update — keys not in the payload are kept as-is.
Show child attributes
Show child attributes
Response
201 - Created
Tenant object returned. Fields hold the tenant's own local values — values not set on this tenant come back as null (or as empty objects/arrays). For flat tenants (no sub-tenants), unset fields stay unresolved and the tenant simply has no value for them. For sub-tenants, unset fields still return null here, but are resolved from the closest ancestor that has a value set at trigger time.
Was this page helpful?
curl --request POST \
--url https://hub.suprsend.com/v1/tenant/{tenant_id}/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Awesome Tenant",
"tenant_name": "<string>",
"parent_id": "acme-corp",
"blocked_channels": [
"sms"
],
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"primary_color": "#ff0000",
"secondary_color": "#00ff00",
"tertiary_color": "#0000ff",
"preference_page_url": "<string>",
"social_links": {
"website": "https://suprsend.com",
"facebook": "<string>",
"LinkedIn": "<string>",
"x": "<string>",
"instagram": "<string>",
"medium": "<string>",
"discord": "<string>",
"telegram": "<string>",
"youtube": "<string>",
"tiktok": "<string>"
},
"properties": {}
}
'import requests
url = "https://hub.suprsend.com/v1/tenant/{tenant_id}/"
payload = {
"name": "Awesome Tenant",
"tenant_name": "<string>",
"parent_id": "acme-corp",
"blocked_channels": ["sms"],
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"primary_color": "#ff0000",
"secondary_color": "#00ff00",
"tertiary_color": "#0000ff",
"preference_page_url": "<string>",
"social_links": {
"website": "https://suprsend.com",
"facebook": "<string>",
"LinkedIn": "<string>",
"x": "<string>",
"instagram": "<string>",
"medium": "<string>",
"discord": "<string>",
"telegram": "<string>",
"youtube": "<string>",
"tiktok": "<string>"
},
"properties": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Awesome Tenant',
tenant_name: '<string>',
parent_id: 'acme-corp',
blocked_channels: ['sms'],
logo: 'https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png',
primary_color: '#ff0000',
secondary_color: '#00ff00',
tertiary_color: '#0000ff',
preference_page_url: '<string>',
social_links: {
website: 'https://suprsend.com',
facebook: '<string>',
LinkedIn: '<string>',
x: '<string>',
instagram: '<string>',
medium: '<string>',
discord: '<string>',
telegram: '<string>',
youtube: '<string>',
tiktok: '<string>'
},
properties: {}
})
};
fetch('https://hub.suprsend.com/v1/tenant/{tenant_id}/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hub.suprsend.com/v1/tenant/{tenant_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Awesome Tenant',
'tenant_name' => '<string>',
'parent_id' => 'acme-corp',
'blocked_channels' => [
'sms'
],
'logo' => 'https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png',
'primary_color' => '#ff0000',
'secondary_color' => '#00ff00',
'tertiary_color' => '#0000ff',
'preference_page_url' => '<string>',
'social_links' => [
'website' => 'https://suprsend.com',
'facebook' => '<string>',
'LinkedIn' => '<string>',
'x' => '<string>',
'instagram' => '<string>',
'medium' => '<string>',
'discord' => '<string>',
'telegram' => '<string>',
'youtube' => '<string>',
'tiktok' => '<string>'
],
'properties' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hub.suprsend.com/v1/tenant/{tenant_id}/"
payload := strings.NewReader("{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hub.suprsend.com/v1/tenant/{tenant_id}/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hub.suprsend.com/v1/tenant/{tenant_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Awesome Tenant\",\n \"tenant_name\": \"<string>\",\n \"parent_id\": \"acme-corp\",\n \"blocked_channels\": [\n \"sms\"\n ],\n \"logo\": \"https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png\",\n \"primary_color\": \"#ff0000\",\n \"secondary_color\": \"#00ff00\",\n \"tertiary_color\": \"#0000ff\",\n \"preference_page_url\": \"<string>\",\n \"social_links\": {\n \"website\": \"https://suprsend.com\",\n \"facebook\": \"<string>\",\n \"LinkedIn\": \"<string>\",\n \"x\": \"<string>\",\n \"instagram\": \"<string>\",\n \"medium\": \"<string>\",\n \"discord\": \"<string>\",\n \"telegram\": \"<string>\",\n \"youtube\": \"<string>\",\n \"tiktok\": \"<string>\"\n },\n \"properties\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "acme-corp",
"name": "Awesome Tenant",
"tenant_id": "acme-corp",
"tenant_name": "Awesome Tenant",
"parent_id": null,
"ancestors": [],
"level": 0,
"children_count": 0,
"logo": "https://ik.imagekit.io/l0quatz6utm/suprsend/staging/media/suprsend-only-logo_c8aa27faef118418e8c5bd7b31a1cafc74e09200.png",
"timezone": null,
"blocked_channels": [
"sms"
],
"embedded_preference_url": "https://app.suprsend.com/settings",
"hosted_preference_domain": "preferences.suprsend.com",
"primary_color": "#ff0000",
"secondary_color": "#0000ff",
"tertiary_color": "#00ffff",
"social_links": {
"website": "https://suprsend.com",
"facebook": "",
"linkedin": "",
"x": "",
"instagram": "",
"medium": "",
"discord": "",
"telegram": "",
"youtube": ""
},
"properties": {
"region": "US",
"support_email": "help@example.com"
},
"updated_at": "2026-08-27T21:01:35.359787Z"
}{
"code": 400,
"error_code": "error",
"type": "ValidationError",
"message": "{\"tenant_name\": [\"Ensure this field contains non-html text\"]}",
"detail": {
"tenant_name": [
"Ensure this field contains non-html text"
]
}
}