Knock
Knock is a notification infrastructure platform with workflows, channels (email, SMS, push, in-app), preferences, and digests. Stripe-style API for sending and orchestrating multi-channel notifications.
APIs
Knock Workflows API
Trigger and orchestrate notification workflows with batch, throttle and delay logic.
Knock Messages API
Manage individual messages with delivery and engagement tracking.
Knock Users API
Identify users, manage preferences, channel data, subscriptions and schedules.
Knock Objects API
Non-user resources that receive notifications or have subscribers.
Knock Feeds API
In-app message feeds with pagination and filtering for client rendering.
Knock Guides API
Step-by-step in-app guided experiences.
Knock Schedules API
Recurring and one-time workflow triggers per recipient.
Knock Preferences API
User and object preferences by channel, category, or workflow.
Collections
Knock API
OPENPricing Plans
Rate Limits
FinOps
Knock Finops
FINOPSEvent Specifications
Knock Real-Time In-App Feed (Phoenix Channels)
AsyncAPI specification for Knock's real-time in-app notification feed transport. Knock exposes a Phoenix Channels WebSocket that pushes feed updates to subscribed clients. The c...
ASYNCAPIResources
Sources
opencollection: 1.0.0
info:
name: Knock API
version: '1.0'
request:
auth:
type: bearer
token: '{{bearerToken}}'
items:
- info:
name: Objects
type: folder
items:
- info:
name: Update workflows in preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/workflows
docs: Updates the workflow preferences for an object's preference set.
- info:
name: Update a channel type preference
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/channel_types/:type
docs: Updates a specific channel type preference for an object's preference set.
- info:
name: Bulk delete objects
type: http
http:
method: POST
url: https://api.knock.app/v1/objects/:collection/bulk/delete
params:
- name: collection
value: ''
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Bulk deletes objects from the specified collection.
- info:
name: Update a category preference
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/categories/:key
docs: Updates a specific category preference for an object's preference set. Deprecated.
- info:
name: List preference sets
type: http
http:
method: GET
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
docs: Returns a paginated list of preference sets for the specified object.
- info:
name: Update a workflow preference
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/workflows/:key
docs: Updates a specific workflow preference for an object's preference set.
- info:
name: Bulk add subscriptions
type: http
http:
method: POST
url: https://api.knock.app/v1/objects/:collection/bulk/subscriptions/add
params:
- name: collection
value: projects
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Add subscriptions for all objects in a single collection. If a subscription for an object in the collection already
exists, it will be updated. This endpoint also handles [inline identifications](/managing-recipients/identifying-recipients#inline-identifying-recipients)
for the `recipient` field.
- info:
name: Update categories in preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/categories
docs: Updates the category preferences for an object's preference set.
- info:
name: Get an object
type: http
http:
method: GET
url: https://api.knock.app/v1/objects/:collection/:id
params:
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the object.
docs: Retrieves a specific object by its ID from the specified collection. Returns the object with all its properties.
- info:
name: Set an object
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:id
params:
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the object.
body:
type: json
data: '{}'
docs: Creates a new object or updates an existing one in the specified collection. This operation is used to identify
objects with their properties, as well as optional preferences and channel data.
- info:
name: Delete an object
type: http
http:
method: DELETE
url: https://api.knock.app/v1/objects/:collection/:id
params:
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the object.
docs: Permanently removes an object from the specified collection. This operation cannot be undone.
- info:
name: List objects in a collection
type: http
http:
method: GET
url: https://api.knock.app/v1/objects/:collection
params:
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: include[]
value: ''
type: query
description: Includes preferences of the objects in the response.
docs: Returns a paginated list of objects from the specified collection. Optionally includes preference data for the objects.
- info:
name: Update channel types in preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id/channel_types
docs: Updates the channel type preferences for an object's preference set.
- info:
name: Create schedules in bulk
type: http
http:
method: POST
url: https://api.knock.app/v1/schedules/bulk/create
body:
type: json
data: '{}'
docs: Bulk creates up to 1,000 schedules at a time. This endpoint also handles [inline identifications](/managing-recipients/identifying-recipients#inline-identifying-recipients)
for the `actor`, `recipient`, and `tenant` fields.
- info:
name: Bulk delete subscriptions
type: http
http:
method: POST
url: https://api.knock.app/v1/objects/:collection/bulk/subscriptions/delete
params:
- name: collection
value: projects
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Delete subscriptions for many objects in a single collection type. If a subscription for an object in the collection
doesn't exist, it will be skipped.
- info:
name: Get object preference set
type: http
http:
method: GET
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the preference set.
docs: Returns the preference set for the specified object and preference set `id`.
- info:
name: Update a preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the preference set.
body:
type: json
data: '{}'
docs: 'Sets preferences within the given preference set. By default, this is a destructive operation and will replace
any existing preferences with the preferences given. Use ''__persistence_strategy'': ''merge'' to merge with existing
preferences instead. If no object exists in the current environment for the given `:collection` and `:object_id`, Knock
will create the object as part of this request. The preference set `:id` can be either `default` or a `tenant.id`. Learn
more about [per-tenant preferences'
- info:
name: Delete object preference set
type: http
http:
method: DELETE
url: https://api.knock.app/v1/objects/:collection/:object_id/preferences/:id
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: id
value: ''
type: path
description: Unique identifier for the preference set.
docs: Unsets the preference set for the object, removing it entirely.
- info:
name: Bulk set objects
type: http
http:
method: POST
url: https://api.knock.app/v1/objects/:collection/bulk/set
params:
- name: collection
value: ''
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Bulk sets up to 1,000 objects at a time in the specified collection.
- info:
name: Guides
type: folder
items:
- info:
name: Mark guide as seen
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/seen
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a guide has been seen by a user, triggering any associated seen events.
- info:
name: Mark guide as seen
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/:message_id/seen
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a guide has been seen by a user, triggering any associated seen events.
- info:
name: Mark guide as archived
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/archived
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a guide has been archived by a user, triggering any associated archived events.
- info:
name: Mark guide as unarchived
type: http
http:
method: DELETE
url: https://api.knock.app/v1/users/:user_id/guides/messages/archived
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a guide has been unarchived, triggering any associated unarchived events.
- info:
name: Mark guide as interacted
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/interacted
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a user has interacted with a guide, triggering any associated interacted events.
- info:
name: Reset guide engagement
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/engagements/reset
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Resets the engagement state of a guide for a user, removing the guide's engagement log entry so the next interaction
creates a fresh engagement.
- info:
name: List guides
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/guides/:channel_id
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
- name: channel_id
value: ''
type: path
description: The unique identifier for the channel.
- name: tenant
value: ''
type: query
description: The tenant ID to use for targeting and rendering guides.
- name: data
value: ''
type: query
description: The data (JSON encoded object) to use for targeting and rendering guides.
- name: type
value: ''
type: query
description: The type of guides to filter by.
docs: Returns a list of eligible in-app guides for a specific user and channel.
- info:
name: Mark guide as interacted
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/:message_id/interacted
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a user has interacted with a guide, triggering any associated interacted events.
- info:
name: Mark guide as archived
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/guides/messages/:message_id/archived
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Records that a guide has been archived by a user, triggering any associated archived events.
- info:
name: Tenants
type: folder
items:
- info:
name: Get a tenant
type: http
http:
method: GET
url: https://api.knock.app/v1/tenants/:id
params:
- name: id
value: ''
type: path
description: The unique identifier for the tenant.
- name: resolve_full_preference_settings
value: ''
type: query
description: When true, merges environment-level default preferences into the tenant's `settings.preference_set` field
before returning the response. Defaults to false.
docs: Get a tenant by ID.
- info:
name: Set a tenant
type: http
http:
method: PUT
url: https://api.knock.app/v1/tenants/:id
params:
- name: id
value: ''
type: path
description: The unique identifier for the tenant.
- name: resolve_full_preference_settings
value: ''
type: query
description: When true, merges environment-level default preferences into the tenant's `settings.preference_set` field
before returning the response. Defaults to false.
body:
type: json
data: '{}'
docs: Sets a tenant within an environment, performing an upsert operation. Any existing properties will be merged with
the incoming properties.
- info:
name: Delete a tenant
type: http
http:
method: DELETE
url: https://api.knock.app/v1/tenants/:id
params:
- name: id
value: ''
type: path
description: The unique identifier for the tenant.
docs: Delete a tenant and all associated data. This operation cannot be undone.
- info:
name: List tenants
type: http
http:
method: GET
url: https://api.knock.app/v1/tenants
params:
- name: tenant_id
value: ''
type: query
description: Filter tenants by ID.
- name: name
value: ''
type: query
description: Filter tenants by name.
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
docs: List tenants for the current environment.
- info:
name: Bulk delete tenants
type: http
http:
method: POST
url: https://api.knock.app/v1/tenants/bulk/delete
params:
- name: tenant_ids[]
value: ''
type: query
description: The IDs of the tenants to delete.
docs: Delete up to 1,000 tenants at a time in a single operation. This operation cannot be undone.
- info:
name: Bulk set tenants
type: http
http:
method: POST
url: https://api.knock.app/v1/tenants/bulk/set
body:
type: json
data: '{}'
docs: Set or update up to 1,000 tenants in a single operation.
- info:
name: Feeds
type: folder
items:
- info:
name: List feed items
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/feeds/:id
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
- name: id
value: ''
type: path
description: The unique identifier for the channel.
- name: status
value: unread
type: query
description: The status of the feed items.
- name: source
value: my_source
type: query
description: The workflow key associated with the message in the feed.
- name: tenant
value: my_tenant
type: query
description: The tenant associated with the feed items.
- name: has_tenant
value: 'true'
type: query
description: Whether the feed items have a tenant.
- name: workflow_categories[]
value: my_workflow_category
type: query
description: The workflow categories of the feed items.
- name: archived
value: exclude
type: query
description: The archived status of the feed items.
- name: trigger_data
value: '{ "key": "value" }'
type: query
description: The trigger data of the feed items (as a JSON string).
- name: locale
value: en-US
type: query
description: The locale to render the feed items in. Must be in the IETF 5646 format (e.g. `en-US`). When not provided,
will default to the locale that the feed items were rendered in. Only available for enterprise plan customers using
custom translations.
- name: exclude
value: entries.archived_at,entries.clicked_at
type: query
description: Comma-separated list of field paths to exclude from the response. Use dot notation for nested fields
(e.g., `entries.archived_at`). Limited to 3 levels deep.
- name: mode
value: compact
type: query
description: The mode to render the feed items in. Can be `compact` or `rich`. Defaults to `rich`. When `mode` is
`compact`, feed items will not have `activities` and `total_activities` fields; the `data` field will not include
nested arrays and objects; and the `actors` field will only have up to one actor.
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
- name: inserted_at.gt
value: '2025-01-01T00:00:00Z'
type: query
description: Limits the results to items inserted after the given date.
- name: inserted_at.gte
value: '2025-01-01T00:00:00Z'
type: query
description: Limits the results to items inserted after or on the given date.
- name: inserted_at.lt
value: '2025-01-01T00:00:00Z'
type: query
description: Limits the results to items inserted before the given date.
- name: inserted_at.lte
value: '2025-01-01T00:00:00Z'
type: query
description: Limits the results to items inserted before or on the given date.
docs: 'Returns a paginated list of feed items for a user in reverse chronological order, including metadata about the
feed. If the user has not yet been identified within Knock, an empty feed will be returned.
You can customize the response using [response filters](/integrations/in-app/knock#customizing-api-response-content)
to exclude or only include specific properties on your resources.
**Notes:**
* When making this call from a client-side environment, use your publishable key along with a user to'
- info:
name: Get feed settings
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/feeds/:id/settings
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
- name: id
value: ''
type: path
description: The unique identifier for the channel.
docs: Returns the feed settings for a user.
- info:
name: Integrations
type: folder
items:
- info:
name: Process a Census RPC request
type: http
http:
method: POST
url: https://api.knock.app/v1/integrations/census/custom-destination
body:
type: json
data: '{}'
docs: Processes a Census custom destination RPC request.
- info:
name: Process a Hightouch RPC request
type: http
http:
method: POST
url: https://api.knock.app/v1/integrations/hightouch/embedded-destination
body:
type: json
data: '{}'
docs: Processes a Hightouch embedded destination RPC request.
- info:
name: Bulk operations
type: folder
items:
- info:
name: Get bulk operation
type: http
http:
method: GET
url: https://api.knock.app/v1/bulk_operations/:id
params:
- name: id
value: ''
type: path
description: The ID of the bulk operation to retrieve.
docs: Retrieves a bulk operation (if it exists) and displays the current state of it.
- info:
name: Subscriptions
type: folder
items:
- info:
name: List user subscriptions
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/subscriptions
params:
- name: user_id
value: ''
type: path
description: The user ID to list subscriptions for.
- name: include[]
value: ''
type: query
description: Associated resources to include in the response.
- name: objects[]
value: ''
type: query
description: Only returns subscriptions for the specified object references.
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
docs: Retrieves a paginated list of subscriptions for a specific user, in descending order.
- info:
name: List subscriptions
type: http
http:
method: GET
url: https://api.knock.app/v1/objects/:collection/:object_id/subscriptions
params:
- name: mode
value: ''
type: query
description: Mode of the request. `recipient` to list the objects that the provided object is subscribed to, `object`
to list the recipients that subscribe to the provided object.
- name: include[]
value: ''
type: query
description: Additional fields to include in the response.
- name: recipients[]
value: ''
type: query
description: Recipients to filter by (only used if mode is `object`).
- name: objects[]
value: ''
type: query
description: Objects to filter by (only used if mode is `recipient`).
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
docs: List subscriptions for an object. Either list the recipients that subscribe to the provided object, or list the
objects that the provided object is subscribed to. Determined by the `mode` query parameter.
- info:
name: Add subscriptions
type: http
http:
method: POST
url: https://api.knock.app/v1/objects/:collection/:object_id/subscriptions
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Add subscriptions for an object. If a subscription already exists, it will be updated. This endpoint also handles
[inline identifications](/managing-recipients/identifying-recipients#inline-identifying-recipients) for the `recipient`.
- info:
name: Delete subscriptions
type: http
http:
method: DELETE
url: https://api.knock.app/v1/objects/:collection/:object_id/subscriptions
params:
- name: object_id
value: ''
type: path
description: Unique identifier for the object.
- name: collection
value: ''
type: path
description: The collection this object belongs to.
body:
type: json
data: '{}'
docs: Delete subscriptions for the specified recipients from an object. Returns the list of deleted subscriptions.
- info:
name: Users
type: folder
items:
- info:
name: Get user
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id
params:
- name: user_id
value: ''
type: path
description: The ID of the user to retrieve.
docs: Retrieve a specific user by their ID.
- info:
name: Identify user
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
body:
type: json
data: '{}'
docs: Create or update a user with the provided identification data. When you identify an existing user, the system merges
the properties you specific with what is currently set on the user, updating only the fields included in your requests.
- info:
name: Delete user
type: http
http:
method: DELETE
url: https://api.knock.app/v1/users/:user_id
params:
- name: user_id
value: ''
type: path
description: The ID of the user to delete.
docs: Permanently delete a user and all associated data.
- info:
name: Update category in user preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/preferences/:id/categories/:key
docs: Updates a single category in a specific user preference set. This operation is deprecated.
- info:
name: Merge users
type: http
http:
method: POST
url: https://api.knock.app/v1/users/:user_id/merge
params:
- name: user_id
value: ''
type: path
description: The id of the user to merge into.
body:
type: json
data: '{}'
docs: Merge two users together, where the user specified with the `from_user_id` param will be merged into the user specified
by `user_id`.
- info:
name: Bulk set preferences
type: http
http:
method: POST
url: https://api.knock.app/v1/users/bulk/preferences
body:
type: json
data: '{}'
docs: Bulk sets the preferences for up to 1,000 users at a time. The preference set `:id` can be either `default` or a `tenant.id`.
Learn more about [per-tenant preferences](/preferences/tenant-preferences). Note that this is a destructive operation
and will replace any existing users' preferences with the preferences sent.
- info:
name: Bulk identify users
type: http
http:
method: POST
url: https://api.knock.app/v1/users/bulk/identify
body:
type: json
data: '{}'
docs: Identifies multiple users in a single operation. Allows creating or updating up to 1,000 users in a single batch
with various properties, preferences, and channel data.
- info:
name: Update workflows in preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/preferences/:id/workflows
docs: Updates the workflows in a specific user preference set. This operation is deprecated.
- info:
name: Update categories in user preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/preferences/:id/categories
docs: Updates the categories in a specific user preference set. This operation is deprecated.
- info:
name: Bulk delete users
type: http
http:
method: POST
url: https://api.knock.app/v1/users/bulk/delete
body:
type: json
data: '{}'
docs: Permanently deletes up to 1,000 users at a time.
- info:
name: Update channel type in preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/preferences/:id/channel_types/:type
docs: Updates a single channel type in a specific user preference set. This operation is deprecated.
- info:
name: List user preference sets
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/preferences
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
docs: Retrieves a list of all preference sets for a specific user.
- info:
name: List users
type: http
http:
method: GET
url: https://api.knock.app/v1/users
params:
- name: include[]
value: ''
type: query
description: Associated resources to include in the response.
- name: after
value: ''
type: query
description: The cursor to fetch entries after.
- name: before
value: ''
type: query
description: The cursor to fetch entries before.
- name: page_size
value: ''
type: query
description: The number of items per page (defaults to 50).
docs: Retrieve a paginated list of users in the environment. Defaults to 50 users per page.
- info:
name: Update workflow in user preference set
type: http
http:
method: PUT
url: https://api.knock.app/v1/users/:user_id/preferences/:id/workflows/:key
docs: Updates a single workflow in a specific user preference set. This operation is deprecated.
- info:
name: Get user preference set
type: http
http:
method: GET
url: https://api.knock.app/v1/users/:user_id/preferences/:id
params:
- name: user_id
value: ''
type: path
description: The unique identifier of the user.
- name: id
value: ''
type: path
# --- truncated at 32 KB (76 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/knock/refs/heads/main/apis.yml