---
title: "Full Preference"
method: GET
path: "/v1/user/{distinct_id}/preference/"
---

# Full Preference

`GET /v1/user/{distinct_id}/preference/`

API to fetch user preferences across all channels and categories.

## Path parameters

- `distinct_id` string, required

## Query parameters

- `tenant_id` string
- `show_opt_out_channels` boolean
- `tags` string
- `locale` string

## Response `200`

200

- object
  - `sections` object[]
    - `subcategories` object[]
      - `name` string — Display name of the notification category.
      - `category` string — Slug of the notification category.
      - `description` string — Description of the notification category.
      - `preference` 'opt_in' | 'opt_out'
      - `is_editable` boolean — false when category default preference is set to can't unsubscribe
      - `channels` object[]
        - `channel` string
        - `preference` 'opt_in' | 'opt_out'
        - `is_editable` boolean — false when category default preference is set to can't unsubscribe
      - `digest_schedule_options` object, nullable — All digest schedule options configured on the category, with the recipient's current selection. `null` if digest schedule is not enabled on the category.
        - `options` object[]
          - `id` string — Unique identifier of the digest schedule option.
          - `label` string — Display label shown to the recipient for this option.
          - `frequency` 'instantly' | 'minutely' | 'hourly' | 'daily' | 'weekly' | 'weekly_mo2fr' | 'monthly' — Frequency of the digest schedule.
          - `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 the recipient's override.
            - `edit_policy` 'locked' | 'editable' — `editable` means the recipient can change this value; `locked` means it is fixed.
            - `default_value` string — Default time in HH:MM (24-hour) format.
            - `value` string, nullable — Recipient's overridden value, if any.
          - `weekdays` object — Days of the week to send on (for `weekly` frequency), with edit policy and recipient override.
            - `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.
            - `value` string[], nullable
          - `monthdays` object — Days of the month to send on (for `monthly` frequency), with edit policy and recipient override.
            - `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.
              - …
            - `value` object[], nullable
              - …
          - `dtstart` object — Start datetime from which the recurring schedule is calculated, with edit policy and recipient override.
            - `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.
            - `value` string, nullable
          - `is_default` boolean — Whether this option is the category default.
          - `is_user_selected` boolean — Whether the recipient has selected this option.
      - `digest_schedule` object, nullable — 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.
        - `id` string — Unique identifier of the digest schedule option.
        - `label` string — Display label shown to the recipient.
        - `frequency` 'instantly' | 'minutely' | 'hourly' | 'daily' | 'weekly' | 'weekly_mo2fr' | 'monthly' — 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` string — Resolved time in HH:MM (24-hour) format.
        - `weekdays` string[] — Days of the week to send on (for weekly frequency), with edit policy and value.
        - `monthdays` object[] — Days of the month to send on (for monthly frequency), with edit policy and value.
          - `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).
        - `is_default` boolean — Whether this option is the default selection.
        - `is_user_selected` boolean
      - `properties` object[], nullable — Category condition properties with the recipient's overrides. Referenced in workflows as `$category.properties.<key>`.
        - `key` string — Property key identifier, referenced in workflows as `$category.properties.<key>`.
        - `label` string — Display label for the property.
        - `value_type` 'integer' | 'string' | 'string_choice' | 'list_choice' | 'string_dynamic' | 'list_dynamic' — Data type of the property value.
        - `default_value` unknown
        - `is_optional` boolean — Whether this property is optional.
        - `edit_policy` 'locked' | 'editable' — `editable` means the recipient can override the value; `locked` means it is fixed.
        - `is_overridden` boolean — Whether the recipient has overridden the default value.
        - `value` unknown
  - `channel_preferences` object[]
    - `channel` string — channel name
    - `is_restricted` boolean — True means notification will be sent in categories where this channel is marked as mandatory channel. False means opt_in on channel.

## Other responses

- `404` — 404

---

[API](https://skmtc.net/suprsend/apis/suprsend-api.md) · [All operations](https://skmtc.net/suprsend/apis/suprsend-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/suprsend/suprsend-api/versions/8bd2574bd2c3/schema)
