Skip to main content
GET
/
v1
/
object
/
{object_type}
/
{id}
/
preference
/
category
/
{category_slug}
/
Single Category
curl --request GET \
  --url https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/ \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/', 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/object/{object_type}/{id}/preference/category/{category_slug}/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/")
  .header("Authorization", "Bearer <token>")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://hub.suprsend.com/v1/object/{object_type}/{id}/preference/category/{category_slug}/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "name": "Newsletter",
  "category": "newsletter",
  "description": "Send me updates on new product updates",
  "original_preference": null,
  "preference": "opt_in",
  "is_editable": false,
  "channels": [
    {
      "channel": "email",
      "preference": "opt_in",
      "is_editable": false
    },
    {
      "channel": "ms_teams",
      "preference": "opt_in",
      "is_editable": false
    }
  ]
}
{
  "code": 404,
  "message": "category 'category_slug' not found"
}

Authorizations

Authorization
string
header
required

Pass as Bearer <API_KEY>. Get API Key from SuprSend dashboard Developers -> API Keys section.

Path Parameters

object_type
string
required

Used to group similar objects together. Give plural namespace like teams, organizations, and roles.

id
string
required

Unique identifier of the object in your system

category_slug
string
required

notification category slug. You can get this from Notification Categories page on SuprSend dashboard -> Settings page

Query Parameters

tenant_id
string

to fetch object preferences for a particular tenant

show_opt_out_channels
boolean
default:false

set this flag to true if you want to fetch channel list for opt-out categories.

locale
string

Locale code (e.g., es, fr, de, ja, es-AR) to fetch preference translations in user's locale. When provided, the API looks for category and section names and descriptions in the respective locale file. If a translation is missing for the requested locale, the system automatically falls back in this order: locale-region (e.g., es-AR) → locale (e.g., es) → en (English - always available).

Response

200

name
string

Display name of the notification category.

Example:

"Newsletter"

category
string

Slug of the notification category.

Example:

"newsletter"

description
string

Description of the notification category.

Example:

"Send me updates on new product updates"

original_preference
enum<string> | null

Category default preference, before the recipient's override is applied.

Available options:
opt_in,
opt_out
Example:

null

preference
enum<string>
Available options:
opt_in,
opt_out
Example:

"opt_in"

is_editable
boolean
Example:

false

channels
object[]
digest_schedule_options
object | null

All digest schedule options configured on the category, with the recipient's current selection. null if digest schedule is not enabled on the category.

digest_schedule
object | null

The recipient's currently active digest schedule, resolved in order recipient selection -> tenant default -> category default. null if digest schedule is not enabled on the category.

properties
object[] | null

Category condition properties with the recipient's overrides. Referenced in workflows as $category.properties.<key>.