diff --git a/content/docs/platform/meta.json b/content/docs/platform/meta.json
index 4a829b02e..794892bf3 100644
--- a/content/docs/platform/meta.json
+++ b/content/docs/platform/meta.json
@@ -31,6 +31,8 @@
"workflow/step-conditions",
"workflow/tags",
"workflow/translations",
+ "---Subscribers and Topics ---",
+ "...subscribers-and-topics",
"---Channels---",
"...integrations",
"---Account---",
diff --git a/content/docs/platform/subscribers-and-topics/manage-subscribers.mdx b/content/docs/platform/subscribers-and-topics/manage-subscribers.mdx
new file mode 100644
index 000000000..203bd7bef
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/manage-subscribers.mdx
@@ -0,0 +1,293 @@
+---
+title: 'Manage Subscribers'
+description: "Learn how to create, update, search, retrieve, and delete subscriber profiles using both the Dashboard and the API."
+icon: 'UserCog'
+---
+
+You can manage subscribers from the Novu Dashboard for manual operations or the Novu API for automated, large-scale management.
+
+## Create a subscriber
+
+A subscriber must exist before notifications can be sent. Subscribers can be created in two ways:
+
+### Create subscribers via dashboard
+
+You can create subscribers from the Novu dashboard and add user attributes or custom data for each subscriber.
+
+To create a subscriber in the dashboard:
+1. Sign in to the Novu dashboard.
+2. Navigate to **Subscribers** page.
+3. Click **Add subscriber** or **Create subscriber**.
+ 
+4. Fill in the subscriber details such as `subscriberId` (required), first name, last name, email, phone number, and locale.
+ 
+ The `subscriberId` can only the edited during creation and cannot be updated aftwards
+5. Click **Create subscriber** to save the subscriber profile.
+
+### Create subscribers via API
+
+You can create subscribers with the Novu API in three ways and add user attributes, custom data, and channel credentials.
+
+#### Create subscribers just in time
+
+Novu allows you to create a subscriber automatically at the moment a notification is triggered. If the subscriber doesn't already exist, then Novu uses the information provided in the workflow trigger to create the subscriber on the fly. If the subscriber exists, then Novu updates the stored data with the latest values.
+
+This approach is useful when:
+
+- Your system does not store subscriber profiles ahead of time.
+- Notifications are sent during real-time events like sign-ups or transactions.
+- You want to keep the creation and delivery logic tightly coupled.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "", });
+
+async function run() {
+ const result = await novu.trigger({
+ to: {
+ subscriberId: "subscriber_identifier",
+ firstName: "Albert",
+ lastName: "Einstein",
+ email: "albert@einstein.com",
+ phone: "+1234567890",
+ },
+ workflowId: "workflow_identifier",
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+#### Create subscribers ahead of trigger
+
+You can create and store subscriber profiles ahead of time, typically during onboarding, registration, or data sync events. This approach allows you to manage subscriber preferences, enrich profiles, and inspect delivery readiness before any notification is sent.
+
+This approach is useful when:
+
+- You want to decouple user creation from notification logic.
+- You rely on persistent user data or prefer strict validation before delivery.
+- You plan to use advanced segmentation or preference-based delivery.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.subscribers.create({
+ subscriberId: "",
+ firstName: "Albert",
+ lastName: "Einstein",
+ email: "albert@einstein.com",
+ phone: "+1234567890",
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+#### Create subscribers in bulk
+
+For scenarios like data migration, syncing large lists, or preloading subscribers, Novu supports bulk creation. This is especially useful when integrating with existing systems or importing subscriber data from external sources.
+
+Bulk creation is limited to 500 subscribers per request
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({
+ secretKey: "YOUR_SECRET_KEY_HERE",
+});
+
+async function run() {
+ const result = await novu.subscribers.createBulk({
+ subscribers: [],
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+For more information about creating subscribers in bulk, refer to the [API Reference](/api-reference/subscribers/bulk-create-subscribers) documentation.
+
+## Update subscriber profile
+
+You can manually update a subscriber's profile from the Novu Dashboard or via the API. This is important for keeping subscriber information, such as standard user attributes, custom data, or channel credentials up-to-date.
+
+### Update subscribers via dashboard
+
+You can manually update a subscriber’s attributes and custom data from the Novu dashboard:
+1. Sign into the Novu dashboard.
+2. Open the **Subscribers** page.
+3. Select the subscriber profile you want to update.
+4. Edit structured attributes such as name, email, phone, or custom data.
+5. Click **Save changes** to apply the updates.
+
+
+
+Channel credentials (such as device tokens or webhook URLs) cannot be created or updated in the dashboard. These must be managed via the API.
+
+### Update subscribers via API
+
+The Novu API lets you update subscriber profiles programmatically, including user attributes, custom data, and channel credentials.
+
+#### Update subscriber profile
+
+To update a subscriber's basic profile attributes like `firstName` or `email`, or to modify their custom `data` object, use the `subscribers.patch` method. This method updates only the fields you specify, leaving others untouched.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.subscribers.patch("subscriber-id-123", {
+ firstName: "Albert",
+ lastName: "Einstein",
+ data: {
+ membershipLevel: "premium"
+ }
+ });
+ console.log(result);
+}
+run();
+```
+
+#### Manage subscriber channel credentials
+
+To deliver notifications to channels like push or chat, a subscriber's profile must contain the correct credentials (for example, deviceTokens or webhookUrl). Novu provides two methods to manage these credentials: update and append.
+
+- The `update` method completely replaces the existing credentials for a given provider with the new data you provide. This is useful when you have a definitive, single source of truth for the credentials.
+- The `append` method adds new credentials or updates existing ones without removing others. This is particularly useful for push notifications where a single user may have multiple devices.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+// Example 1: Use `update` to replace existing credentials for a provider like Slack.
+const result = await novu.subscribers.credentials.update(
+ {
+ providerId: "slack",
+ credentials: {
+ webhookUrl: "https://example.com/webhook",
+ },
+ // use integrationIdentifier in case of multiple slack integrations
+ integrationIdentifier: "slack-abcd"
+ },
+ ""
+);
+
+// Example 2: Use `append` to add a new device token for a push provider without overwriting existing ones.
+const result = await novu.subscribers.credentials.append(
+ {
+ providerId: "expo",
+ credentials: {
+ deviceTokens: ["token1", "token2", "token3"],
+ },
+ // use integrationIdentifier in case of multiple expo integrations
+ integrationIdentifier: "slack-abcd"
+ },
+ ""
+);
+```
+
+For more detailed information on request payloads and supported providers, refer to the [Update](/api-reference/subscribers/update-provider-credentials) and [Upsert](/api-reference/subscribers/upsert-provider-credentials) provider credentials endpoints in the API Reference documentation.
+
+## Search subscribers
+
+Novu provides a way to search for subscribers, which is useful for troubleshooting, auditing user data, or verifying profile information. You can search for subscribers using either the Novu Dashboard or the API.
+
+### Search for subscribers via dashboard
+
+From the **Subscribers** page in the Novu Dashboard, you can search for a subscriber by Subscriber ID, Email, Phone, or Name.
+
+
+
+### Search for subscribers via API
+
+You can use the Search Subscribers API to look up subscribers.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.subscribers.search({
+ email: "albert@einstein.com",
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+To learn more about searching for subscribers, refer to the [Search Subscribers](/api-reference/subscribers/search-subscribers) endpoint.
+
+
+## Retrieve a subscriber
+
+You can fetch a complete subscriber profile using their unique `subscriberId`. This is done using the `subscribers.get` method. This method takes the `subscriberId` as a single parameter and returns a full JSON object containing all of the subscriber's stored information.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.subscribers.retrieve("subscriber-123");
+
+ console.log(result);
+}
+
+run();
+```
+
+To learn more about retrieving a subscriber information, refer to the [Subscribers API reference](/api-reference/subscribers/retrieve-subscriber-subscriptions) documentation.
+
+## Delete a subscriber
+
+Deleting a subscriber permanently removes their profile and all associated data, including preferences, activity history, and credentials.
+
+This action is irreversible.
+
+### Delete a subscriber via dashboard
+
+You can manually delete a subscriber’s from the Novu dashboard:
+
+1. Sign in to the Novu dashboard.
+2. Open the **Subscribers** page.
+3. Select the subscriber profile you want to update.
+4. Click **Delete subscriber**.
+5. Click **Delete subscriber** again to confirm.
+
+
+
+### Delete a subscriber via API
+
+You can delete a subscriber using the `subscribers.delete()` method. The call deletes the subscriber record associated with the given `subscriberId`.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.subscribers.delete("subscriber-123");
+
+ console.log(result);
+}
+
+run();
+```
+
+To learn more about deleting a subscriber information, refer to the [Delete a Subscriber](/api-reference/subscribers/delete-a-subscriber) endpoint.
\ No newline at end of file
diff --git a/content/docs/platform/subscribers-and-topics/manage-topics.mdx b/content/docs/platform/subscribers-and-topics/manage-topics.mdx
new file mode 100644
index 000000000..35f82772b
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/manage-topics.mdx
@@ -0,0 +1,335 @@
+---
+title: 'Manage Topics'
+description: "Learn how to use topics to group subscribers and broadcast notifications to thousands of users with a single API call."
+icon: 'Tags'
+---
+
+Novu provides multiple ways to manage topics, either through the dashboard or the API. Both options give you flexibility depending on whether you prefer a UI-based workflow or direct API integration.
+
+### Create a Topic
+
+Creating a topic defines a new group of subscribers that can later be targeted in workflow triggers. You can create a topic either from the Dashboard or using the API:
+
+#### Create a topic via dashboard
+
+1. Login to the Novu dashboard
+2. Go to **Topics** in the left navigation.
+3. Click the **Create Topic** button.
+4. Provide a unique **Name** and **Topic Key**.
+5. Click on the **Create topic** button.
+
+
+
+#### Create a topic via API
+
+You can create a new topic using the `topics.create` method.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.topics.create({
+ key: "task:12345",
+ name: "Task Title",
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+Novu also supports on-the-fly topic creation. If you attempt to add subscribers to a topic key that doesn't exist for the selected environment and organization, Novu will automatically create a new topic named `Autogenerated-` and assign the subscribers to it.
+
+This auto-generated topic can then be renamed and managed just like any other topic created manually.
+
+### Retrieve a topic
+
+Retrieving a topic allows you to confirm that it exists and view its details, including the name and key.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.topics.get("");
+
+ console.log(result);
+}
+
+run();
+```
+
+### Update a topic name
+
+You can update the display name of a topic to better reflect its purpose. The `topicKey` itself is permanent and cannot be modified after the topic is created.
+
+#### Update a topic name via dashboard
+
+1. Log in to the Novu dashboard
+2. From the **Topics** page, click on the topic you want to update
+3. From the Overview tab, update the name of the topic
+4. Click **Save changes** to save.
+
+
+
+#### Update a topic name via API
+
+Use the `topics.update` method with the topic's key to update the name of a topic
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.topics.update(
+ { name: "Updated Topic Name" },
+ "task:12345" // topicKey
+ );
+
+ console.log(result);
+}
+
+run();
+```
+
+### List all topics
+
+Listing topics lets you see all groups that have been created in the current environment. This is useful for confirming available topic keys and checking which topics exist before triggering workflows.
+
+#### Get list of topics via dashboard
+1. Log in to the Novu dashboard
+2. From the **Topics** page, you will see the list of all topics that have bee created either from the dashboard or using the API.
+
+#### List all topics via API
+Use the `topics.list` method.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE", });
+
+async function run() {
+ const result = await novu.topics.list({});
+ console.log(result);
+}
+
+run();
+```
+
+### Delete a topic
+
+Deleting a topic permanently removes the grouping, but it does not affect the subscribers themselves. This action is irreversible, so be sure you no longer need the topic before deleting it.
+
+#### Delete a topic via dashboard
+
+1. Log in to the Novu dashboard
+2. From the **Topics** page, click on the topic you want to delete.
+3. Click **Delete topic**.
+4. A modal will appear; click **Delete topic** again to confirm.
+
+
+
+#### Delete a topic via API
+
+Use the `topics.delete` method with the topic's key.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.topics.delete("task:12345"); // topicKey
+
+ console.log(result);
+}
+
+run();
+```
+
+## Manage topic subscriptions
+
+A topic subscription is a relationship between a subscriber and a topic. Subscriptions track which subscribers belong to which topics.
+
+Subscribers can be added to or removed from a topic at any time, either from the Novu dashboard or through the API.
+
+### Add subscribers to a topic
+
+Adding subscribers to a topic ensures that they receive all notifications sent to that topic. You can add individual subscribers or multiple subscribers at once, depending on your needs.
+
+#### Add subscribers to a topic via dashboard
+
+1. Log in to the Novu dashboard.
+2. From the **Topics** page, select the topic you want to manage.
+3. Go to the **Subscriptions** tab.
+4. Search for and select the subscribers you want to add either using Email, Name, Phone or `SubscriberId`.
+5. Select the subscriber to add them to the topic.
+
+
+
+#### Add subscribers to a topic via API
+
+Use the `topics.subscriptions.create()` method to add one or more subscribers to a topic, referencing the topic's key and an array of `subscriberIds`.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.topics.subscriptions.create("task:12345", {
+ subscriberIds: [
+ "subscriberId1",
+ "subscriberId2",
+ ],
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+### Remove subscribers from a topic
+
+Removing subscribers from a topic stops them from receiving notifications sent to that topic. The subscribers remain active in Novu but will no longer be part of that specific group.
+
+#### Remove subscribers from a topic via dashboard
+
+1. Log in to the Novu dashboard.
+2. From the **Topics** page, select the topic.
+3. Go to the **Subscriptions** tab.
+4. Locate the subscriber(s) you want to remove.
+5. Click on the delete icon next to the user who you want to remove from the topic.
+6. In the menu that appears, click **Remove**.
+
+
+
+#### Remove subscribers from a topic via API
+
+You can use the API to remove one or more subscribers from the topic which a single API call by providing their `subscriberIds`.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({
+ secretKey: "YOUR_SECRET_KEY_HERE",
+});
+
+async function run() {
+ const result = await novu.topics.subscriptions.delete({
+ subscriberIds: [
+ "subscriberId1",
+ "subscriberId2",
+ ],
+ }, "");
+
+ console.log(result);
+}
+
+run();
+```
+
+### List subscribers in a topic
+
+You can view all subscribers currently assigned to a specific topic.
+
+#### List subscribers in a topic via dashboard
+
+1. Log in to the Novu dashboard.
+2. From the **Topics** page, select the topic.
+3. Go to the **Subscriptions** tab to see the list of subscribers currently assigned.
+
+
+
+#### List subscribers in a topic via API
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.topics.subscriptions.list({
+ topicKey: "task:12345",
+ });
+
+ console.log(result);
+}
+
+run();
+```
+
+### Check subscriber subscription
+
+You can confirm whether a specific subscriber belongs to a given topic. This is useful when validating membership before triggering workflows or debugging unexpected notification behavior.
+
+#### Check subscriber subscription via dashboard
+
+1. Log in to the Novu dashboard.
+2. From the **Topics** page, select the topic.
+3. Go to the **Subscriptions** tab.
+4. Use the search bar to look up the subscriber. If they are subscribed, they will appear in the list.
+
+
+
+#### Check subscriber subscription via API
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({ secretKey: "YOUR_SECRET_KEY_HERE" });
+
+async function run() {
+ const result = await novu.topics.subscribers.retrieve(
+ "task:12345", // topicKey
+ "subscriber-id-to-check" // subscriberId
+ );
+
+ console.log(result);
+}
+
+run();
+```
+
+## Explore the topics APIs
+
+These are commonly used topics APIs. Explore all topics APIs on topics [API Reference documentation](/api-reference/topics/topic-schema).
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/platform/subscribers-and-topics/meta.json b/content/docs/platform/subscribers-and-topics/meta.json
new file mode 100644
index 000000000..e4536653a
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/meta.json
@@ -0,0 +1,10 @@
+{
+ "pages": [
+ "overview",
+ "subscriber-attributes",
+ "manage-subscribers",
+ "subscriber-preferences",
+ "manage-topics",
+ "trigger-workflows-to-topics"
+ ]
+}
diff --git a/content/docs/platform/subscribers-and-topics/overview.mdx b/content/docs/platform/subscribers-and-topics/overview.mdx
new file mode 100644
index 000000000..444cff09d
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/overview.mdx
@@ -0,0 +1,60 @@
+---
+title: 'Overview'
+description: "Introduction to Subscribers and Topics in Novu"
+icon: 'Users'
+---
+import { Card, Cards } from 'fumadocs-ui/components/card';
+
+Subscribers and topics are the foundation of how Novu delivers notifications. While Subscribers represent the individual entities who will receive notifications, topics provide a way to group subscribers under a shared identifier so that you can broadcast messages to many users with a single workflow trigger.
+
+Topics removes the need to target individual subscriber IDs for each notification, making it ideal for scenarios like product announcements, or feature rollouts.
+
+
+
+Together, Subscribers and Topics makes it possible to deliver notifications both at the individual level and to dynamic groups, ensuring messages are routed and personalized correctly for every recipient.
+
+## Subscriber ID and Topic Key
+
+Each subscriber in Novu is uniquely identified by a `subscriberId`, which serves as the permanent reference for that subscriber across workflows, preferences, and activity history.
+
+Similarly, each topic is uniquely identified by a `topicKey`, an internal, permanent identifier. A topic key ensures that groups of subscribers can always be referenced consistently, regardless of how the topic is named or described.
+
+Both `subscriberId` and `topicKey` cannot be changed after creation. Subscribers can belong to multiple topics, and topics don’t override [subscriber preferences](/platform/subscribers-and-topics/subscriber-preferences), each subscriber still controls which channels they receive notifications on.
+
+## Subscribers, topics and environment
+
+Subscribers and topics are scoped to a specific environment. Novu uses isolated environments, typically Development, Production or Custom environments to separate testing data from live user data.
+
+This means a subscriber created in the Development environment is a completely separate entity from a subscriber with the same `subscriberId` in the Production environment.
+
+This isolation is crucial for safe testing, as it prevents accidental notifications from being sent to real users from your development or staging setups. To target a subscriber in a different environment, they must be created within that environment.
+
+## Next steps
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/platform/subscribers-and-topics/subscriber-attributes.mdx b/content/docs/platform/subscribers-and-topics/subscriber-attributes.mdx
new file mode 100644
index 000000000..4012a7052
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/subscriber-attributes.mdx
@@ -0,0 +1,92 @@
+---
+title: 'Subscriber Attributes'
+description: "Introduction to Subscribers and Topics in Novu"
+icon: 'Users'
+---
+
+import { Card, Cards } from 'fumadocs-ui/components/card';
+
+Subscriber attributes define the data model used by Novu to represent each subscriber. These attributes are stored in the subscriber profile and can be used to personalize content, configure steps conditions, and control which channels a subscriber can receive notifications through.
+
+
+
+## Subscriber schema
+
+Each subscriber is represented as a structured object, following a defined schema. The schema includes:
+- The user attributes.
+- The data field to store any custom attributes in key value pairs.
+- Channel credentials for push and chat channel provider's integrations.
+
+All metadata tied to a subscriber is centralized and accessible via API or dashboard. This structure ensures that when notifications are triggered, Novu references the most up-to-date context for delivery and personalization.
+
+To learn more about the subscriber schema, refer to the [Subscribers API Reference](/api-reference/subscribers/subscriber-schema).
+
+### User attributes
+
+These are the predefined, top-level fields for storing structured information about a subscriber. This contains basic info such as email, phone, firstName, locale, and others. These fields are optional except for `subscriberId`, which is required.
+
+| Field | Type | Description |
+| -------------- | -------------- | ------------------------------------------------------------------------------------------------ |
+| `subscriberId` | string | Unique identifier assigned by your system. Serves as the permanent reference for the subscriber. |
+| `firstName` | string \| null | First name of the subscriber. Useful for personalization in templates. |
+| `lastName` | string \| null | Last name of the subscriber. |
+| `email` | string \| null | Email address for email channel delivery. |
+| `phone` | string \| null | Phone number for SMS delivery. |
+| `avatar` | string \| null | URL to the subscriber’s avatar image, often displayed in in-app or chat notifications. |
+| `locale` | string \| null | Language/region setting (`en-US`) used to localize notifications. |
+| `timezone` | string \| null | Timezone identifier (`America/New_York`) for scheduling and localized delivery. |
+
+### Custom data
+
+The `data` field lets you store any arbitrary, unstructured information relevant to your application. It accepts any valid JSON object, making it a powerful tool for deep personalization.
+
+You can use this field to store attributes like a membership level, or any other custom property you wish to reference in your notification templates.
+
+```json
+{
+ "data": {
+ "membershipLevel": "Pro",
+ "lastLogin": "2025-09-02T10:00:00Z",
+ "userRole": "admin"
+ }
+}
+```
+
+### Channel credentials
+
+The channels object in the subscriber profile is used to store credentials required for specific delivery providers. This ensures that Novu can deliver notifications through channels that need platform-specific tokens or URLs.
+
+Currently, Novu supports credentials for Push and Chat providers.
+
+- `deviceTokens`: An array of tokens used to target a subscriber's mobile devices for push notifications. Providers like Firebase Cloud Messaging (FCM) or Apple Push Notification service (APNs) use these tokens to route notifications to the correct device. A single subscriber can have multiple devices and thus multiple device tokens.
+- `webhookUrl`: A unique URL used by chat providers, such as Slack or Discord, to reach a specific subscriber or channel.
+
+```json
+{
+ "subscriberId": "user-123",
+ "channels": [
+ {
+ "providerId": "slack",
+ "integrationIdentifier": "team-slack",
+ "credentials": {
+ "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
+ "channel": "general",
+ "deviceTokens": [
+ "token1",
+ "token2"
+ ]
+ }
+ }
+ ]
+}
+```
+
+Novu uses a `ChannelSettingsDto` object to manage multiple credentials per provider and integration. This makes it possible to support multiple push or chat integrations for the same subscriber.
+
+The channel credentials can only be updated and inserted via the API. To learn more, refer to the [Subscriber API Reference](/api-reference/subscribers/upsert-provider-credentials).
+
+## Security and compliance considerations
+
+Because subscriber attributes can contain personal data, you may need to align their usage with your organization’s security and regulatory requirements.
+
+For details on GDPR, SOC 2, ISO 27001, data residency, storage duration, and reporting vulnerabilities, see the [Security and Compliance](/platform/additional-resources/security) guide.
diff --git a/content/docs/platform/subscribers-and-topics/subscriber-preferences.mdx b/content/docs/platform/subscribers-and-topics/subscriber-preferences.mdx
new file mode 100644
index 000000000..cbc0dbc32
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/subscriber-preferences.mdx
@@ -0,0 +1,103 @@
+---
+title: 'Subscribers Preferences'
+description: "Learn how to manage subscribers preferences from the Novu dashboard and using the Novu API"
+icon: 'Settings2'
+---
+
+Novu provides a flexible system with multiple levels of preferences that dictate how and where a subscriber receives messages. These settings influence both the delivery channels and the types of notifications a subscriber will receive.
+
+Subscribers can define how they want to receive notifications. These preferences influence both the delivery channels and the types of notifications a subscriber will receive.
+
+Preferences can be managed in three ways:
+
+- By the subscriber, using the [Inbox UI](/platform/inbox/configuration/preferences).
+- By the organization owner, using the dashboard.
+- By developers, programmatically through the API.
+
+Novu supports both global preferences and workflow-specific preferences for each subscriber. However, you can a subscriber preferences from the Novu dashboard.
+
+## Global preferences
+
+Global preferences act as a default "on/off" switch for a specific channel across all workflows. A subscriber can use this setting vai the Inbox component to unsubscribe from a channel like SMS or email entirely.
+
+For example, if a subscriber disables a channel globally, that channel will also be disabled for all workflows that use that channel, and vice versa, unless they override it on the workflow level.
+
+### Manage global preferences via dashboard
+
+1. Log into the Novu dashboard.
+2. From the **Subscribers** page, click on a subscriber's profile.
+3. Navigate to the **Preferences** tab.
+4. Under the **Global Preferences** section, you can enable or disable channels.
+
+
+
+## Workflow preferences
+
+Workflow preferences provide a more precise control, letting subscribers customize their channel choices for specific workflows.
+
+For example, a subscriber can choose to only enable in-app notifications for a particular workflow. This preference will be honored while their global settings remain intact.
+
+You can mark a workflow as critical in the workflow settings. This ensures the workflow will not appear in the subscriber's preference settings, and they will always receive notifications from it.
+
+## Managing preferences in the dashboard
+
+1. Log into the Novu dashboard.
+2. From the **Subscribers** page, click on a subscriber's profile and go to their Preferences tab.
+3. In the **Workflow Preferences** section, you will see a list of all workflows the subscriber is associated with.
+4. For each workflow, you can toggle individual channel preferences on or off.
+
+
+
+## Managing preferences via API
+
+Developers can use the Novu API to manage a subscriber's preferences. This is useful for building custom preference centers within your application or for automated management based on user behavior.
+
+### Retrieve subscriber preferences
+
+To inspect a subscriber's current preferences, including their global settings and all workflow-specific overrides, you can retrieve their preferences via the API using the `list` method.
+
+```ts
+import { Novu } from "@novu/api";
+
+const novu = new Novu({
+ secretKey: "YOUR_SECRET_KEY_HERE",
+});
+
+async function run() {
+ const result = await novu.subscribers.preferences.list("");
+ console.log(result);
+}
+
+run();
+```
+
+For full request and response schemas, see the [Retrieve Subscriber Preferences](/api-reference/subscribers/retrieve-subscriber-preferences) endpoint.
+
+### Update subscriber preferences
+
+You can use the API to update a subscriber's preferences. You can update global channel preferences or specific workflow preferences using the same endpoint.
+
+```typescript
+import { Novu } from "@novu/api";
+
+const novu = new Novu({
+ secretKey: "YOUR_SECRET_KEY_HERE",
+});
+
+async function run() {
+ const result = await novu.subscribers.preferences.update(
+ {
+ channels: {
+ email: { enabled: false }, // disable globally
+ },
+ },
+ ""
+ );
+
+ console.log(result);
+}
+
+run();
+```
+
+For full request and response schemas, see the [Update Subscriber Preferences](/api-reference/subscribers/update-subscriber-preferences) endpoint.
diff --git a/content/docs/platform/subscribers-and-topics/trigger-workflows-to-topics.mdx b/content/docs/platform/subscribers-and-topics/trigger-workflows-to-topics.mdx
new file mode 100644
index 000000000..517d2b819
--- /dev/null
+++ b/content/docs/platform/subscribers-and-topics/trigger-workflows-to-topics.mdx
@@ -0,0 +1,134 @@
+---
+title: 'Trigger workflows to topics'
+description: "Learn how to trigger workflows to one or more topics and how to exclude specific subscribers from a trigger."
+icon: 'Share2'
+---
+
+Once you've created your topics and added subscribers, you're ready to send them notifications. Triggering a workflow to a topic is the core mechanism for broadcasting a message to a large audience with a single API call.
+
+When you trigger a workflow using a topic key, Novu performs a **fan-out**: it identifies all subscribers within that topic and creates an individual workflow run for each one.
+
+This process is handled entirely by Novu, saving you from writing complex loops or sending thousands of separate API requests. The trigger syntax is the same as for individual subscribers; you only need to specify the `type` as `Topic` in the `to` field.
+
+
+### Trigger to a single topic
+
+The most common use case is broadcasting a notification to every subscriber within a single topic. This is ideal for product announcements, incident updates, or other targeted mass communications.
+
+To trigger a workflow to a topic, use the `to` field with `type: "Topic"` and the corresponding `topicKey`.
+
+
+
+```ts
+import { Novu } from "@novu/api"
+
+const novu = new Novu({ secretKey: "", });
+
+await novu.trigger({
+ to: { type: "Topic", topicKey: "topic_key" },
+ workflowId: "workflow_identifier",
+});
+```
+
+
+```bash
+curl -L -g -X POST 'https://api.novu.co/v1/events/trigger' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: ApiKey ' \
+-d '{
+ "name": "workflow_identifier",
+ "to": {
+ "type": "Topic",
+ "topicKey": "topic_key"
+ }
+}'
+```
+
+
+
+### Trigger to multiple topics
+
+You can also broadcast a notification to several topics at once by passing an array in the to field. This is useful when your audience spans multiple groups, such as notifying both "paying-customers" and "beta-testers" about an important update.
+
+Novu automatically handles de-duplication, so if a subscriber belongs to more than one of the specified topics, they will only receive the notification once.
+
+
+
+```ts
+import { Novu } from "@novu/api"
+
+const novu = new Novu({ secretKey: "", });
+
+await novu.trigger({
+ to: [
+ { type: "Topic", topicKey: "topic_key_1" },
+ { type: "Topic", topicKey: "topic_key_2" }
+ ],
+ workflowId: "workflow_identifier",
+});
+```
+
+
+```bash
+curl -L -g -X POST 'https://api.novu.co/v1/events/trigger' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: ApiKey ' \
+-d '{
+ "name": "workflow_identifier",
+ "to": [
+ {
+ "type": "Topic",
+ "topicKey": "topic_key_1"
+ },
+ {
+ "type": "Topic",
+ "topicKey": "topic_key_2"
+ }
+ ]
+}'
+```
+
+
+
+### Exclude an actor for a notification
+
+When a workflow is triggered to a topic, notification is sent to all subscribers present in the topic. However, you can exclude a specific subscriber (for example, the user who performed the action) by passing their subscriberId in the actor field.
+
+You can achieve this by passing the `subscriberId` of the initiator in the `actor` field. Novu will then exclude this subscriber from that specific trigger event.
+
+
+
+
+```ts
+import { Novu } from "@novu/api"
+
+const novu = new Novu({ secretKey: "", });
+
+await novu.trigger({
+ to: [{ type: "Topic", topicKey: "topic_key_1" }],
+ workflowId: "workflow_identifier",
+ actor: "actor_subscriber_Id"
+});
+```
+
+
+```bash
+curl -L -g -X POST 'https://api.novu.co/v1/events/trigger' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: ApiKey ' \
+-d '{
+ "name": "workflow_identifier",
+ "to": [
+ {
+ "type": "Topic",
+ "topicKey": "topic_key_1"
+ }
+ ],
+ "actor": "actor_subscriber_Id"
+}'
+```
+
+
\ No newline at end of file
diff --git a/public/images/manage-subscribers/add-subscriber-to-topic.gif b/public/images/manage-subscribers/add-subscriber-to-topic.gif
new file mode 100644
index 000000000..abac52239
Binary files /dev/null and b/public/images/manage-subscribers/add-subscriber-to-topic.gif differ
diff --git a/public/images/manage-subscribers/add-subscriber.png b/public/images/manage-subscribers/add-subscriber.png
new file mode 100644
index 000000000..f38a6cb2b
Binary files /dev/null and b/public/images/manage-subscribers/add-subscriber.png differ
diff --git a/public/images/manage-subscribers/add-topic.png b/public/images/manage-subscribers/add-topic.png
new file mode 100644
index 000000000..56a91c566
Binary files /dev/null and b/public/images/manage-subscribers/add-topic.png differ
diff --git a/public/images/manage-subscribers/check-subscriber-subscription.gif b/public/images/manage-subscribers/check-subscriber-subscription.gif
new file mode 100644
index 000000000..a3c2dca83
Binary files /dev/null and b/public/images/manage-subscribers/check-subscriber-subscription.gif differ
diff --git a/public/images/manage-subscribers/create-subscriber.png b/public/images/manage-subscribers/create-subscriber.png
new file mode 100644
index 000000000..4da2769c8
Binary files /dev/null and b/public/images/manage-subscribers/create-subscriber.png differ
diff --git a/public/images/manage-subscribers/delete-subscriber.gif b/public/images/manage-subscribers/delete-subscriber.gif
new file mode 100644
index 000000000..bc02767a6
Binary files /dev/null and b/public/images/manage-subscribers/delete-subscriber.gif differ
diff --git a/public/images/manage-subscribers/delete-topic.png b/public/images/manage-subscribers/delete-topic.png
new file mode 100644
index 000000000..dd6a55fae
Binary files /dev/null and b/public/images/manage-subscribers/delete-topic.png differ
diff --git a/public/images/manage-subscribers/list-subscribers.png b/public/images/manage-subscribers/list-subscribers.png
new file mode 100644
index 000000000..76b3b14d2
Binary files /dev/null and b/public/images/manage-subscribers/list-subscribers.png differ
diff --git a/public/images/manage-subscribers/remove-subscriber-from-topic.gif b/public/images/manage-subscribers/remove-subscriber-from-topic.gif
new file mode 100644
index 000000000..6725a91e5
Binary files /dev/null and b/public/images/manage-subscribers/remove-subscriber-from-topic.gif differ
diff --git a/public/images/manage-subscribers/search-subscriber.gif b/public/images/manage-subscribers/search-subscriber.gif
new file mode 100644
index 000000000..9722e13a9
Binary files /dev/null and b/public/images/manage-subscribers/search-subscriber.gif differ
diff --git a/public/images/manage-subscribers/subscriber-global-preferences.gif b/public/images/manage-subscribers/subscriber-global-preferences.gif
new file mode 100644
index 000000000..1fd1d8db1
Binary files /dev/null and b/public/images/manage-subscribers/subscriber-global-preferences.gif differ
diff --git a/public/images/manage-subscribers/subscriber-workflow-preferences.gif b/public/images/manage-subscribers/subscriber-workflow-preferences.gif
new file mode 100644
index 000000000..9787e9c68
Binary files /dev/null and b/public/images/manage-subscribers/subscriber-workflow-preferences.gif differ
diff --git a/public/images/manage-subscribers/subscribers-editor.png b/public/images/manage-subscribers/subscribers-editor.png
new file mode 100644
index 000000000..4bcf516e1
Binary files /dev/null and b/public/images/manage-subscribers/subscribers-editor.png differ
diff --git a/public/images/manage-subscribers/topics.png b/public/images/manage-subscribers/topics.png
new file mode 100644
index 000000000..bed91d46d
Binary files /dev/null and b/public/images/manage-subscribers/topics.png differ
diff --git a/public/images/manage-subscribers/update-subscriber.gif b/public/images/manage-subscribers/update-subscriber.gif
new file mode 100644
index 000000000..cbeb09ab6
Binary files /dev/null and b/public/images/manage-subscribers/update-subscriber.gif differ
diff --git a/public/images/manage-subscribers/update-topic.png b/public/images/manage-subscribers/update-topic.png
new file mode 100644
index 000000000..569751d0c
Binary files /dev/null and b/public/images/manage-subscribers/update-topic.png differ