---
title: "Get user subscription topic"
method: GET
path: "/users/{user_id}/preferences/{topic_id}"
tags: ["User Preferences"]
---

# Get user subscription topic

`GET /users/{user_id}/preferences/{topic_id}`

Returns a user's opt-in status and channel choices for one subscription topic, or the effective default if they have set no override.

## Path parameters

- `user_id` string, required
- `topic_id` string, required

## Query parameters

- `tenant_id` string, nullable

## Response `200`

- UsersUserPreferencesGetResponse
  - `topic` UsersTopicPreference, required
    - `custom_routing` ChannelClassification[], nullable — The channels the user has chosen to receive this topic on, present only when has_custom_routing is true. One or more of: direct_message, email, push, sms, webhook, inbox.
    - `default_status` 'OPTED_IN' | 'OPTED_OUT' | 'REQUIRED', required
    - `has_custom_routing` boolean, nullable — Whether the user has chosen specific delivery channels for this topic (listed in custom_routing) rather than the topic's default routing.
    - `status` 'OPTED_IN' | 'OPTED_OUT' | 'REQUIRED', required
    - `topic_id` string, required — The unique identifier of the subscription topic this preference applies to.
    - `topic_name` string, required — The display name of the subscription topic, returned on reads.

## Other responses

- `404`

---

[API](https://skmtc.net/trycourier/apis/courier.md) · [All operations](https://skmtc.net/trycourier/apis/courier/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/trycourier/courier/versions/04f69fbf96a5/schema)
