The most powerful notification system you'll never build.
Knock is flexible, reliable notifications infrastructure that's built to scale with you. Use our APIs to engage users, power cross-channel workflows, and manage notification preferences.
TRUSTED BY DEVELOPERS AT
Move fast
Ship product notifications in hours, not months
Move fast with a notification engine that’s ready to scale from your first welcome email to a cross-channel system that puts your customer first. With Knock, you get a team that’s dedicated to one thing and one thing only: your notifications.
All the channels, for now and later
Start with email and in-app channels. Instantly add push, SMS, and Slack when you need them.
Pay-as-you-go
Predictable pricing that scales with you. No upfront fees or infrastructure set up required.
Built for scale and resiliency
Power high volume notifications without spending valuable engineering time on messaging infrastructure.
A complete set of notification primitives
Designed for flexibility
Knock handles even the most complex notifications use-cases, built on top of a series of primitives that make it easy to compose and create notification logic to power your product. Send fewer, higher relevancy notifications that respect the time and attention of your users.
Learn how Knock worksBrowse workflow templates
Effortless in-app experiences
A real-time notification inbox, out-of-the-box
Drop in our pre-built, real-time enabled components to complete your notification experience in your app, backed by Knock’s powerful notifications infrastructure.
Upgrade your notifications experience
Deliver a notifications experience that delights your customers. Knock helps you increase notification engagement by helping you reach your customers on the right channel, at the right time, with the right frequency.
Visibility for the whole team
Empower non-engineers to update your notifications logic and copy in minutes while giving developers time back to focus on your roadmap.
Secure and private by design
From day one we've built Knock to keep conversations between you and your customer as they should be: between you and your customer. Knock is SOC 2, Type II certified. Learn more.
Features
Your toolkit for product notifications
Move fast with a notification engine that’s ready to scale from your first welcome email to a cross-channel system that puts your customer first. With Knock, you get a team that’s dedicated to one thing and one thing only: your notifications.
Commit, reset, and audit your changes. Knock uses the same versioning workflow you do.
Test changes in a development environment before promoting them to production.
Look under the hood from API request to workflow run to downstream messages to understand how your users are receiving messages.
Customize colors, themes, and layouts to present a consistent brand across all of your notification surface areas.
Leverage our built-in tenancy model to support per-tenant feeds and to offer custom branding to your customers.
Easily test complex notification workflows across multiple channels, without needing to manually reproduce complex interactions in your product.
Built for developers
We obsess over the right abstractions so your team can focus on what matters.
Read our docs- A single, unified API for all of your
notifications code - SDKs available in
most major languages - Comprehensive documentation
to help you get started - Powerful primitives to help
you model your system
server.js
const { Knock } = require("@knocklabs/node");
const knock = new Knock(process.env.KNOCK_API_KEY);
await knock.notify("new-comment-on-page", {
actor: comment.authorId,
recipients: usersToNotify.map(u => u.id),
data: {
commentId: comment.id,
commentText: comment.text,
pageId: comment.pageId
},
tenant: comment.tenantId,
cancellationKey: comment.id,
});
const { Knock } = require("@knocklabs/node");
const knock = new Knock(process.env.KNOCK_API_KEY);
await knock.notify("new-comment-on-page", {
actor: comment.authorId,
recipients: usersToNotify.map(u => u.id),
data: {
commentId: comment.id,
commentText: comment.text,
pageId: comment.pageId
},
tenant: comment.tenantId,
cancellationKey: comment.id,
});