Core concepts

Learn about the key concepts in Knock.


In Knock, all notifications are sent via a workflow. Each workflow acts as a container for the logic and templates that are associated with a type of notification in your system.

Learn more →


A channel in Knock represents a configured provider, such as Sendgrid for email, to send notifications to your recipients. Most providers within Knock use credentials that you supply to deliver notifications on your behalf. These credentials and other settings are what make a configured channel.

Learn more →


Knock uses a commit model to version changes that you make to all of your Knock resources. When you make a change to a workflow or a layout in the Knock dashboard, you'll need to commit it to your development environment before those changes will appear in workflows triggered via the API.

Learn more →


Knock uses the concept of environments to ensure logical separation of your data and configuration. This means that users and preferences created in one environment are never accessible to another. Environments usually map to the environments you have in your software development life cycle (SDLC).

Learn more →


A Recipient within Knock is any User or Object that may wish to receive notifications.

Learn more →


A user in Knock represents an individual who should receive a message. A user's profile information contains important attributes about the user that will be used in messages (name, email). The user object can contain other key-value pairs that can be used to further personalize your messages.

Learn more →


Preferences enable your users to opt-out of the notifications you send using Knock.

Learn more →


An object represents a resource in your system that you want to map into Knock. Objects are a powerful and flexible way to ensure Knock always has the most up-to-date information required to send your notifications. They also enable you to send notifications to non-user recipients.

You can use objects to:

  • send in-app notifications to non-user resources in your product (the activity feed you see on a Notion page is a good example)
  • send out-of-app notifications to non-user recipients (such as a Slack channels)
  • reference mutable data in your notification templates (such as when a user edits a comment before a notification is sent)

Learn more →


A subscription represents a relationship between a non-user entity (an Object) and a Recipient (the subscriber). Subscriptions are used to model pub/sub behavior and lists of recipients that Knock will automatically fan out a workflow trigger to on your behalf.

Learn more →


A schedule allows you to automatically trigger a workflow at a given time for one or more recipients. You can think of a schedule as a managed, recipient-timezone-aware cron job that Knock will run on your behalf.

Read more →


Tenants represent segments your users belong to. You might call these "accounts," "organizations," "workspaces," or similar. This is a common pattern in many SaaS applications: users have a single login joined to multiple tenants to represent their membership within each. Within Knock you can model your tenant objects as first-class entities and use them to scope features.

Learn more →


A message in Knock represents a notification delivered to a recipient on a particular channel. Messages contain information about the request that triggered its delivery, a view of the data sent to the recipient, and a timeline of its lifecycle events.

Learn more →


Translations support localization in Knock. They hold the translated content for a given locale, which you can reference in your message templates with the t Liquid function filter.

Learn more →


Knock uses conditions to model checks that determine variations in your workflow runs. They provide a powerful way to create more advanced notification logic flows.

Learn more →


Variables within Knock let you set shared constants or secrets that you can use in all of the workflows and templates under your account. Variables can be overridden at the environment level to set per environment constants.

Learn more →