skills/manage-subscribers/SKILL.md
Create, update, search, and delete subscribers in Novu. Manage topics for group-based notification targeting. Set subscriber credentials for push and chat channels. Use when managing notification recipients, creating subscriber records, organizing subscribers into topics, or configuring channel-specific credentials.
npx skillsauth add novuhq/skills novu-manage-subscribersInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Subscribers are the recipients of your notifications. Each subscriber has a unique subscriberId — typically your application's user ID.
import { Novu } from "@novu/api";
const novu = new Novu({
secretKey: process.env.NOVU_SECRET_KEY,
});
await novu.subscribers.create({
subscriberId: "user-123", // required — your system's user ID
email: "[email protected]", // optional
firstName: "Jane", // optional
lastName: "Doe", // optional
phone: "+15551234567", // optional
avatar: "https://example.com/jane.jpg", // optional
locale: "en-US", // optional
timezone: "America/New_York", // optional
data: { // optional — custom key-value data
plan: "pro",
company: "Acme Inc",
},
});
Only subscriberId is required. All other fields are optional.
const subscriber = await novu.subscribers.retrieve("user-123");
const results = await novu.subscribers.search({
email: "[email protected]",
});
await novu.subscribers.patch(
{ firstName: "Jane", data: { plan: "enterprise" } },
// subscriberId
"user-123"
);
await novu.subscribers.delete("user-123");
Create multiple subscribers at once. 500 subscribers can be created in one request.
await novu.subscribers.createBulk({
subscribers: [
{ subscriberId: "user-1", email: "[email protected]", firstName: "Alice" },
{ subscriberId: "user-2", email: "[email protected]", firstName: "Bob" },
{ subscriberId: "user-3", email: "[email protected]", firstName: "Carol" },
],
});
Topics are named groups of subscribers. Use them to send notifications to multiple subscribers at once.
await novu.topics.create({
key: "engineering-team",
name: "Engineering Team",
});
await novu.topics.subscriptions.create(
{ subscriptions: ["subscriberId-1", "subscriberId-2", "subscriberId-3"] },
"engineering-team-topic"
);
await novu.topics.subscriptions.delete(
{ subscriptions: ["subscriberId-1", "subscriberId-2"] },
"engineering-team-topic"
);
const topics = await novu.topics.list({
});
await novu.topics.delete("engineering-team-topic");
See trigger-notification for topic trigger examples.
await novu.trigger({
workflowId: "project-update",
to: { type: "Topic", topicKey: "engineering-team-topic" },
payload: { message: "Sprint review at 3pm" },
});
Set channel-specific credentials for push and chat integrations.
await novu.subscribers.credentials.update(
{
providerId: "fcm",
// use integrationIdentifier if there are multiple fcm type active integrations
integrationIdentifier: "fcm-abc-123",
credentials: { deviceTokens: ["fcm-device-token-here"] }
},
"subsriberId-1"
);
await novu.subscribers.credentials.update(
{
providerId: "apns",
// use integrationIdentifier if there are multiple apns type active integrations
integrationIdentifier: "fcm-abc-123",
credentials: { deviceTokens: ["apns-device-token-here"] }
},
"user-123"
);
subscriberId is YOUR user ID — it bridges your system to Novu. Use a stable, unique identifier from your database.to when triggering, Novu creates the subscriber if it doesn't exist. But explicit creation gives you more control.data-ai
Trigger Novu notification workflows to send messages across email, SMS, push, chat, and in-app channels. Supports single triggers, bulk triggers, broadcast to all subscribers, topic-based targeting, and cancellation. Use when sending transactional notifications, alerts, or any event-driven messages.
development
Configure notification preferences in Novu at the workflow and subscriber level. Set default channel preferences (email, SMS, push, chat, in-app), mark preferences as read-only or subscriber-editable, and manage subscriber-specific overrides. Use when setting up notification opt-in/opt-out, configuring per-channel delivery preferences, or building a preferences management UI.
development
Integrate Novu's in-app notification inbox into web applications. Supports React, Next.js, and vanilla JavaScript. Includes the Inbox component (bell icon + notification feed), composable components (Bell, Notifications, InboxContent, Preferences), headless hooks, branded theming, custom render props, multi-tenancy via contexts, tabs, localization, and HMAC security. Use when adding an in-app notification center, bell icon, notification feed, real-time notification updates, or building a personalized and branded notification experience.
tools
Build code-first notification workflows with @novu/framework. Use when defining workflows in TypeScript (Zod / JSON Schema / Class Validator), composing channel steps (email, SMS, push, chat, in-app) with action steps (delay, digest, custom), exposing Step Controls for non-technical teammates, rendering React/Vue/Svelte Email templates, hosting the Bridge Endpoint inside Next.js, Express, NestJS, Remix, Nuxt, SvelteKit, H3, or AWS Lambda, syncing to Novu Cloud via CLI / GitHub Actions, securing production with HMAC, or implementing translations, hydration, multi-channel orchestration, and LLM-powered notification logic in code.