---
title: "Get Tenant Preference All Categories"
method: GET
path: "/v1/tenant/{tenant_id}/preference/category/"
---

# Get Tenant Preference All Categories

`GET /v1/tenant/{tenant_id}/preference/category/`

## Request

- Base URL: `https://hub.suprsend.com`
- URL: `https://hub.suprsend.com/v1/tenant/{tenant_id}/preference/category/`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/suprsend/apis/suprsend-api/docs/v1/tenant/:tenant_id/preference/category/get.ts> (a function with typed inputs; its response is checked against the schema)

API to get tenant preferences for all categories with translated names and descriptions.

## Path parameters

- `tenant_id` string, required

## Query parameters

- `locale` string
- `limit` integer
- `offset` integer

## Response `200`

200

- object
  - `meta` object
    - `count` integer
    - `limit` integer
    - `offset` integer
  - `results` object[]
    - `name` string
    - `category` string
    - `description` string, nullable
    - `tags` string[], nullable
    - `effective_tags` string[], nullable
    - `root_category` 'system' | 'transactional' | 'promotional': Root category (system, transactional, or promotional) this sub-category belongs to.
    - `default_preference` 'opt_in' | 'opt_out' | 'cant_unsubscribe': Category-level default preference, inherited when the tenant has not overridden it.
    - `default_mandatory_channels` string[], nullable: Category-level mandatory channels (applies when the default preference is `cant_unsubscribe`).
    - `default_opt_in_channels` string[], nullable: Category-level opt-in channels, used when only selective channels are opted in by default.
    - `enabled_for_tenant` boolean: Whether the category is enabled for this tenant. When false, the category is hidden from the tenant's users and notifications are not sent in it.
    - `visible_to_subscriber` boolean: Whether the category appears on the tenant users' preference page.
    - `preference` 'opt_in' | 'opt_out' | 'cant_unsubscribe', nullable: Tenant's overridden preference for this category. `null` if the tenant has not overridden the category default.
    - `mandatory_channels` string[], nullable: Channels the user cannot unsubscribe from (when preference is `cant_unsubscribe`), as overridden for this tenant.
    - `opt_in_channels` string[], nullable: Channels opted in by default for this category, as overridden for this tenant.
    - `blocked_channels` string[], nullable: Channels opted out across all categories for this tenant.
    - `updated_at` string, date-time, nullable: Timestamp when the tenant preference for this category was last updated.
    - `digest_schedule` object, nullable: Digest schedule configuration with tenant overrides and original options
      - `options` object[]: Tenant-modified digest schedule options (merged with original options by id)
        - `id` string: Unique identifier of the digest schedule option.
        - `label` string: Display label shown to the recipient.
        - `frequency` string: Frequency of the digest schedule (instantly, hourly, daily, weekly, weekly_mo2fr, monthly).
        - `interval` integer: Recurrence multiplier for the frequency (for example, every 2 weeks).
        - `time` object: Time of day to send the digest, with its edit policy and value.
          - `edit_policy` 'locked' | 'editable': `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string: Default value applied when not overridden.
        - `weekdays` object: Days of the week to send on (for weekly frequency), with edit policy and value.
          - `edit_policy` 'locked' | 'editable': `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string[]: Default value applied when not overridden.
        - `monthdays` object: Days of the month to send on (for monthly frequency), with edit policy and value.
          - `edit_policy` 'locked' | 'editable': `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` object[]: Default value applied when not overridden.
            - `pos` integer: Position in the month (1-31; use a negative value to count from the end).
            - `day` string: Optional day of the week (su, mo, tu, we, th, fr, sa).
        - `dtstart` object: Start datetime from which the recurring schedule is calculated, with edit policy and value.
          - `edit_policy` 'locked' | 'editable': `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string, date-time: Default value applied when not overridden.
        - `is_default` boolean: Whether this option is the default selection.
      - `original_options` object[]: Original digest schedule options as configured at the category level
        - `id` string: Unique identifier of the digest schedule option.
        - `label` string: Display label shown to the recipient.
        - `frequency` string: Frequency of the digest schedule (instantly, hourly, daily, weekly, weekly_mo2fr, monthly).
        - `interval` integer: Recurrence multiplier for the frequency (for example, every 2 weeks).
        - `time` object: Time of day to send the digest, with its edit policy and value.
          - `edit_policy` string: `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string: Default value applied when not overridden.
        - `weekdays` object: Days of the week to send on (for weekly frequency), with edit policy and value.
          - `edit_policy` string: `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string[]: Default value applied when not overridden.
        - `monthdays` object: Days of the month to send on (for monthly frequency), with edit policy and value.
          - `edit_policy` string: `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` object[]: Default value applied when not overridden.
            - `pos` integer: Position in the month (1-31; use a negative value to count from the end).
            - `day` string: Optional day of the week (su, mo, tu, we, th, fr, sa).
        - `dtstart` object: Start datetime from which the recurring schedule is calculated, with edit policy and value.
          - `edit_policy` string: `editable` means the value can be overridden; `locked` means it is fixed.
          - `default_value` string, date-time: Default value applied when not overridden.
        - `is_default` boolean: Whether this option is the default selection.
    - `properties` object[], nullable: Category condition properties with tenant overrides
      - `key` string: Property key identifier, referenced in workflows as `$category.properties.<key>`.
      - `label` string: Display label shown to the recipient.
      - `value_type` string: Data type of the property value.
      - `default_value` string: Default value applied when not overridden.
      - `is_optional` boolean: Whether this property is optional.
      - `edit_policy` 'locked' | 'editable': `editable` means the value can be overridden; `locked` means it is fixed.
      - `is_overridden` boolean: Whether the tenant has overridden the default value
      - `value` unknown

## Other responses

- `404`: 404

## Changes

- **2026-07-13** `e54dd32705e8`: 2 info
  - added the optional property `results/items/digest_schedule` to the response with the `200` status
  - added the optional property `results/items/properties` to the response with the `200` status

[Operation history](https://skmtc.dev/suprsend/apis/suprsend-api/changes/v1/tenant/:tenant_id/preference/category/get.md)

---

[API](https://skmtc.dev/suprsend/apis/suprsend-api.md) - [All operations](https://skmtc.dev/suprsend/apis/suprsend-api/llms.txt) - [OpenAPI document](https://skmtc.dev/suprsend/apis/suprsend-api/revisions/9e64cbe802a5?raw)
