Knock Subscriptions API
A subscription represents a connection between a recipient and an object, used to represent a list.
A subscription represents a connection between a recipient and an object, used to represent a list.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/knock-subscriptions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Knock Subscriptions API
version: '1.0'
description: A subscription represents a connection between a recipient and an object, used to represent a list.
servers:
- url: https://api.knock.app
variables: {}
security:
- BearerAuth: []
tags:
- description: A subscription represents a connection between a recipient and an object, used to represent a list.
name: Subscriptions
paths:
/v1/users/{user_id}/subscriptions:
get:
callbacks: {}
description: Retrieves a paginated list of subscriptions for a specific user, in descending order.
operationId: listSubscriptionsForUser
parameters:
- description: The user ID to list subscriptions for.
in: path
name: user_id
required: true
schema:
type: string
x-struct: null
x-validate: null
- description: Associated resources to include in the response.
in: query
name: include[]
required: false
schema:
items:
enum:
- preferences
type: string
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
- description: Only returns subscriptions for the specified object references.
in: query
name: objects[]
required: false
schema:
items:
$ref: '#/components/schemas/RecipientReference'
type: array
x-struct: null
x-validate: null
- description: The cursor to fetch entries after.
in: query
name: after
required: false
schema:
type: string
x-struct: null
x-validate: null
- description: The cursor to fetch entries before.
in: query
name: before
required: false
schema:
type: string
x-struct: null
x-validate: null
- description: The number of items per page (defaults to 50).
in: query
name: page_size
required: false
schema:
type: integer
x-struct: null
x-validate: null
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListSubscriptionsResponse'
description: OK
summary: List user subscriptions
tags:
- Subscriptions
x-ratelimit-tier: 4
/v1/objects/{collection}/{object_id}/subscriptions:
delete:
callbacks: {}
description: Delete subscriptions for the specified recipients from an object. Returns the list of deleted subscriptions.
operationId: deleteSubscriptionsForObject
parameters:
- description: Unique identifier for the object.
in: path
name: object_id
required: true
schema:
type: string
x-struct: null
x-validate: null
- description: The collection this object belongs to.
in: path
name: collection
required: true
schema:
type: string
x-struct: null
x-validate: null
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteSubscriptionsRequest'
description: Params
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionsResponse'
description: OK
summary: Delete subscriptions
tags:
- Subscriptions
x-ratelimit-tier: 3
get:
callbacks: {}
description: 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.
operationId: listSubscriptionsForObject
parameters:
- 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.
in: query
name: mode
required: false
schema:
default: object
enum:
- recipient
- object
type: string
x-struct: null
x-validate: null
- description: Additional fields to include in the response.
in: query
name: include[]
required: false
schema:
items:
enum:
- preferences
type: string
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
- description: Recipients to filter by (only used if mode is `object`).
in: query
name: recipients[]
required: false
schema:
items:
$ref: '#/components/schemas/RecipientReference'
type: array
x-struct: null
x-validate: null
- description: Objects to filter by (only used if mode is `recipient`).
in: query
name: objects[]
required: false
schema:
items:
$ref: '#/components/schemas/ObjectReference'
type: array
x-struct: null
x-validate: null
- description: Unique identifier for the object.
in: path
name: object_id
required: true
schema:
type: string
x-struct: null
x-validate: null
- description: The collection this object belongs to.
in: path
name: collection
required: true
schema:
type: string
x-struct: null
x-validate: null
- description: The cursor to fetch entries after.
in: query
name: after
required: false
schema:
type: string
x-struct: null
x-validate: null
- description: The cursor to fetch entries before.
in: query
name: before
required: false
schema:
type: string
x-struct: null
x-validate: null
- description: The number of items per page (defaults to 50).
in: query
name: page_size
required: false
schema:
type: integer
x-struct: null
x-validate: null
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListSubscriptionsResponse'
description: OK
summary: List subscriptions
tags:
- Subscriptions
x-ratelimit-tier: 4
post:
callbacks: {}
description: 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`.
operationId: addSubscriptionsForObject
parameters:
- description: Unique identifier for the object.
in: path
name: object_id
required: true
schema:
type: string
x-struct: null
x-validate: null
- description: The collection this object belongs to.
in: path
name: collection
required: true
schema:
type: string
x-struct: null
x-validate: null
requestBody:
content:
application/json:
example:
properties:
key: value
recipients:
- user_1
- user_2
schema:
$ref: '#/components/schemas/UpsertSubscriptionsRequest'
description: Params
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionsResponse'
description: OK
summary: Add subscriptions
tags:
- Subscriptions
x-ratelimit-tier: 3
components:
schemas:
DiscordIncomingWebhookConnection:
description: Discord incoming webhook connection.
example:
incoming_webhook:
url: https://example.com/webhook
properties:
incoming_webhook:
description: Discord incoming webhook object.
properties:
url:
description: Incoming webhook URL.
example: https://example.com/webhook
type: string
x-struct: null
x-validate: null
required:
- url
type: object
x-struct: null
x-validate: null
required:
- incoming_webhook
title: DiscordIncomingWebhookConnection
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.DiscordChannelData.IncomingWebhookConnection
x-validate: null
InlineChannelDataRequest:
additionalProperties:
description: Channel data for a given channel type.
oneOf:
- $ref: '#/components/schemas/PushChannelDataTokensOnly'
- $ref: '#/components/schemas/PushChannelDataDevicesOnly'
- $ref: '#/components/schemas/AWSSNSPushChannelDataTargetARNsOnly'
- $ref: '#/components/schemas/AWSSNSPushChannelDataDevicesOnly'
- $ref: '#/components/schemas/OneSignalChannelDataPlayerIdsOnly'
- $ref: '#/components/schemas/SlackChannelData'
- $ref: '#/components/schemas/MsTeamsChannelData'
- $ref: '#/components/schemas/DiscordChannelData'
x-struct: null
x-validate: null
description: A request to set channel data for a type of channel inline.
example:
97c5837d-c65c-4d54-aa39-080eeb81c69d:
tokens:
- push_token_xxx
title: InlineChannelDataRequest
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.InlineChannelDataRequest
x-validate: null
PushChannelDataTokensOnly:
description: Push channel data.
example:
tokens:
- push_token_1
- push_token_2
properties:
tokens:
description: A list of push channel tokens.
items:
description: The device token to send the push notification to.
type: string
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
required:
- tokens
title: PushChannelDataTokensOnly
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.PushChannelDataTokensOnly
x-validate: null
OneSignalChannelDataPlayerIdsOnly:
description: OneSignal channel data.
example:
player_ids:
- 123e4567-e89b-12d3-a456-426614174000
properties:
player_ids:
description: A list of OneSignal player IDs.
example:
- 123e4567-e89b-12d3-a456-426614174000
items:
description: OneSignal player ID.
format: uuid
type: string
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
required:
- player_ids
title: OneSignalChannelDataPlayerIdsOnly
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.OneSignalChannelDataPlayerIdsOnly
x-validate: null
DiscordChannelConnection:
description: Discord channel connection.
example:
channel_id: '123456789012345678'
properties:
channel_id:
description: Discord channel ID.
example: '123456789012345678'
type: string
x-struct: null
x-validate: null
required:
- channel_id
title: DiscordChannelConnection
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.DiscordChannelData.ChannelConnection
x-validate: null
PreferenceSetRequest:
description: A request to set a preference set for a recipient.
example:
__persistence_strategy__: merge
categories:
marketing: false
transactional:
channel_types:
email: false
channel_types:
email: true
channels:
2f641633-95d3-4555-9222-9f1eb7888a80:
conditions:
- argument: US
operator: equal_to
variable: recipient.country_code
aef6e715-df82-4ab6-b61e-b743e249f7b6: true
commercial_subscribed: true
workflows:
dinosaurs-loose:
channel_types:
email: false
properties:
__persistence_strategy__:
description: Controls how the preference set is persisted. 'replace' will completely replace the preference set, 'merge' will merge with existing preferences.
enum:
- merge
- replace
type: string
x-struct: null
x-validate: null
categories:
anyOf:
- additionalProperties:
$ref: '#/components/schemas/PreferenceSetWorkflowCategorySetting'
description: An object where the key is the category and the values are the preference settings for that category.
example:
marketing:
channel_types:
email: false
transactional: true
title: PreferenceSetRequestCategories
type: object
x-struct: null
x-validate: null
- x-struct: null
x-validate: null
description: An object where the key is the category and the values are the preference settings for that category.
x-struct: null
x-validate: null
channel_types:
anyOf:
- $ref: '#/components/schemas/PreferenceSetChannelTypes'
- x-struct: null
x-validate: null
description: An object where the key is the channel type and the values are the preference settings for that channel type.
x-struct: null
x-validate: null
channels:
anyOf:
- $ref: '#/components/schemas/PreferenceSetChannels'
- x-struct: null
x-validate: null
description: An object where the key is the channel ID and the values are the preference settings for that channel ID.
x-struct: null
x-validate: null
commercial_subscribed:
description: Whether the recipient is subscribed to commercial communications. When false, the recipient will not receive commercial workflow notifications.
type:
- boolean
- 'null'
x-struct: null
x-validate: null
workflows:
anyOf:
- additionalProperties:
$ref: '#/components/schemas/PreferenceSetWorkflowCategorySetting'
description: An object where the key is the workflow key and the values are the preference settings for that workflow.
example:
dinosaurs-loose:
channel_types:
email: false
sms: true
welcome-sequence: true
title: PreferenceSetRequestWorkflows
type: object
x-struct: null
x-validate: null
- x-struct: null
x-validate: null
description: An object where the key is the workflow key and the values are the preference settings for that workflow.
x-struct: null
x-validate: null
title: PreferenceSetRequest
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetRequest
x-validate: null
PreferenceSetWorkflowCategorySetting:
description: Workflow or category preferences within a preference set
example:
channel_types:
email: false
channels:
aef6e715-df82-4ab6-b61e-b743e249f7b6: true
oneOf:
- example: false
type: boolean
x-struct: null
x-validate: null
- description: The settings object for a workflow or category, where you can specify channel types or conditions.
example:
channel_types:
email: false
channels:
aef6e715-df82-4ab6-b61e-b743e249f7b6: true
conditions: null
properties:
channel_types:
anyOf:
- $ref: '#/components/schemas/PreferenceSetChannelTypes'
- x-struct: null
x-validate: null
description: An object where the key is the channel type and the values are the preference settings for that channel type.
x-struct: null
x-validate: null
channels:
anyOf:
- $ref: '#/components/schemas/PreferenceSetChannels'
- x-struct: null
x-validate: null
description: An object where the key is the channel ID and the values are the preference settings for that channel ID.
x-struct: null
x-validate: null
conditions:
description: A list of conditions to apply to a channel type.
items:
$ref: '#/components/schemas/Condition'
type:
- array
- 'null'
x-struct: null
x-validate: null
title: PreferenceSetWorkflowCategorySettingObject
type: object
x-struct: null
x-validate: null
title: PreferenceSetWorkflowCategorySetting
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetWorkflowCategorySetting
x-validate: null
SlackTokenConnection:
description: A Slack connection token.
example:
access_token: xoxb-1234567890
channel_id: C01234567890
user_id: U01234567890
properties:
access_token:
description: A Slack access token.
example: xoxb-1234567890
type:
- string
- 'null'
x-struct: null
x-validate: null
channel_id:
description: A Slack channel ID from the Slack provider.
example: C01234567890
type:
- string
- 'null'
x-struct: null
x-validate: null
user_id:
description: A Slack user ID from the Slack provider.
example: U01234567890
type:
- string
- 'null'
x-struct: null
x-validate: null
title: SlackTokenConnection
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.SlackChannelData.TokenConnection
x-validate: null
PushChannelDataDevicesOnly:
description: Push channel data.
example:
devices:
- locale: en-US
timezone: America/Los_Angeles
token: push_token_1
properties:
devices:
description: A list of devices. Each device contains a token, and optionally a locale and timezone.
items:
properties:
locale:
description: The locale of the object. Used for [message localization](/concepts/translations).
type:
- string
- 'null'
x-struct: null
x-validate: null
timezone:
description: The timezone of the object. Must be a valid [tz database time zone string](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Used for [recurring schedules](/concepts/schedules#scheduling-workflows-with-recurring-schedules-for-recipients).
type:
- string
- 'null'
x-struct: null
x-validate: null
token:
description: The device token to send the push notification to.
type: string
x-struct: null
x-validate: null
required:
- token
type: object
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
required:
- devices
title: PushChannelDataDevicesOnly
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.PushChannelDataDevicesOnly
x-validate: null
Object:
description: A custom [Object](/concepts/objects) entity which belongs to a collection.
example:
__typename: Object
collection: assets
created_at: null
id: specimen_25
properties:
classification: Theropod
config:
biz: baz
foo: bar
name: Velociraptor
status: contained
updated_at: '2024-05-22T12:00:00Z'
properties:
__typename:
description: The typename of the schema.
example: Object
type: string
x-struct: null
x-validate: null
collection:
description: The collection this object belongs to.
type: string
x-struct: null
x-validate: null
created_at:
description: Timestamp when the resource was created.
format: date-time
type:
- string
- 'null'
x-struct: null
x-validate: null
id:
description: Unique identifier for the object.
type: string
x-struct: null
x-validate: null
properties:
additionalProperties: true
description: The custom properties associated with the object.
type: object
x-struct: null
x-validate: null
updated_at:
description: The timestamp when the resource was last updated.
format: date-time
type: string
x-struct: null
x-validate: null
required:
- __typename
- id
- collection
- updated_at
title: Object
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.Object
x-validate: null
UpsertSubscriptionsRequest:
description: A request to upsert subscriptions for a set of recipients.
example:
properties:
key: value
recipients:
- user_1
- user_2
properties:
properties:
additionalProperties: true
description: The custom properties associated with the subscription relationship.
type:
- object
- 'null'
x-struct: null
x-validate: null
recipients:
description: The recipients of the subscription. You can subscribe up to 100 recipients to an object at a time.
items:
$ref: '#/components/schemas/RecipientRequest'
type: array
x-struct: null
x-validate: null
required:
- recipients
title: UpsertSubscriptionsRequest
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.UpsertSubscriptionsRequest
x-validate: null
MsTeamsTokenConnection:
description: Microsoft Teams token connection.
example:
ms_teams_channel_id: 123e4567-e89b-12d3-a456-426614174000
ms_teams_team_id: 123e4567-e89b-12d3-a456-426614174000
ms_teams_tenant_id: null
ms_teams_user_id: null
properties:
ms_teams_channel_id:
description: Microsoft Teams channel ID.
format: uuid
type:
- string
- 'null'
x-struct: null
x-validate: null
ms_teams_team_id:
description: Microsoft Teams team ID.
format: uuid
type:
- string
- 'null'
x-struct: null
x-validate: null
ms_teams_tenant_id:
description: Microsoft Teams tenant ID.
format: uuid
type:
- string
- 'null'
x-struct: null
x-validate: null
ms_teams_user_id:
description: Microsoft Teams user ID.
format: uuid
type:
- string
- 'null'
x-struct: null
x-validate: null
title: MsTeamsTokenConnection
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.MsTeamsChannelData.TokenConnection
x-validate: null
InlineIdentifyObjectRequest:
additionalProperties: true
description: A custom [Object](/concepts/objects) entity which belongs to a collection.
example:
collection: projects
id: project_1
name: My project
properties:
channel_data:
description: An optional set of [channel data](/managing-recipients/setting-channel-data) for the object. This is a list of `ChannelData` objects.
oneOf:
- $ref: '#/components/schemas/InlineChannelDataRequest'
- x-struct: null
x-validate: null
x-struct: null
x-validate: null
collection:
description: The collection this object belongs to.
type: string
x-struct: null
x-validate: null
created_at:
description: Timestamp when the resource was created.
format: date-time
type:
- string
- 'null'
x-struct: null
x-validate: null
id:
description: Unique identifier for the object.
type: string
x-struct: null
x-validate: null
name:
description: An optional name for the object.
type:
- string
- 'null'
x-struct: null
x-validate: null
preferences:
description: An optional set of [preferences](/concepts/preferences) for the object.
oneOf:
- $ref: '#/components/schemas/InlinePreferenceSetRequest'
- x-struct: null
x-validate: null
x-struct: null
x-validate: null
required:
- id
- collection
title: InlineIdentifyObjectRequest
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.InlineIdentifyObjectRequest
x-validate: null
DiscordChannelData:
description: Discord channel data.
example:
connections:
- channel_id: '123456789012345678'
properties:
connections:
description: List of Discord channel connections.
items:
description: Discord channel connection, either a channel connection or an incoming webhook connection.
oneOf:
- $ref: '#/components/schemas/DiscordChannelConnection'
- $ref: '#/components/schemas/DiscordIncomingWebhookConnection'
type: object
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
required:
- connections
title: DiscordChannelData
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.DiscordChannelData
x-validate: null
SlackChannelData:
description: Slack channel data.
example:
connections:
- access_token: xoxb-1234567890
channel_id: C01234567890
user_id: U01234567890
token:
access_token: xoxb-1234567890
properties:
connections:
description: List of Slack channel connections.
items:
description: A Slack connection, either an access token or an incoming webhook
oneOf:
- $ref: '#/components/schemas/SlackTokenConnection'
- $ref: '#/components/schemas/SlackIncomingWebhookConnection'
type: object
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
token:
description: A Slack connection token.
example:
access_token: xoxb-1234567890
properties:
access_token:
description: A Slack access token.
example: xoxb-1234567890
type:
- string
- 'null'
x-struct: null
x-validate: null
required:
- access_token
title: SlackChannelDataTokenObject
type:
- object
- 'null'
x-struct: null
x-validate: null
required:
- connections
title: SlackChannelData
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.SlackChannelData
x-validate: null
PreferenceSetChannels:
additionalProperties:
description: Whether the specific channel (by channel_id) is enabled for the preference set, or a settings object with conditions.
oneOf:
- type: boolean
x-struct: null
x-validate: null
- $ref: '#/components/schemas/PreferenceSetChannelSetting'
x-struct: null
x-validate: null
description: Channel preferences.
example:
2f641633-95d3-4555-9222-9f1eb7888a80:
conditions:
- argument: US
operator: equal_to
variable: recipient.country_code
aef6e715-df82-4ab6-b61e-b743e249f7b6: true
title: PreferenceSetChannels
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetChannels
x-validate: null
SubscriptionsResponse:
description: A response containing a list of subscriptions.
example:
- __typename: Subscription
inserted_at: '2021-01-01T00:00:00Z'
object:
__typename: Object
collection: assets
created_at: null
id: specimen_25
properties:
classification: Theropod
config:
biz: baz
foo: bar
name: Velociraptor
status: contained
updated_at: '2024-05-22T12:00:00Z'
recipient:
__typename: User
avatar: null
created_at: null
email: jane@ingen.net
id: jane
name: Jane Doe
phone_number: null
timezone: null
updated_at: '2024-05-22T12:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
items:
$ref: '#/components/schemas/Subscription'
title: SubscriptionsResponse
type: array
x-struct: Elixir.SwitchboardWeb.V1.Specs.SubscriptionsResponse
x-validate: null
AWSSNSPushChannelDataDevicesOnly:
description: AWS SNS push channel data.
example:
devices:
- locale: en-US
target_arn: arn:aws:sns:us-west-2:123456789012:endpoint/GCM/gcmpushapp/5e3e9847-3183-3f18-a7e8-671c3a57d4b3
timezone: America/Los_Angeles
properties:
devices:
description: A list of devices. Each device contains a target_arn, and optionally a locale and timezone.
items:
properties:
locale:
description: The locale of the object. Used for [message localization](/concepts/translations).
type:
- string
- 'null'
x-struct: null
x-validate: null
target_arn:
description: The ARN of a platform endpoint associated with a platform application and a device token. See [Setting up an Amazon SNS platform endpoint for mobile notifications](https://docs.aws.amazon.com/sns/latest/dg/mobile-platform-endpoint.html).
type: string
x-struct: null
x-validate: null
timezone:
description: The timezone of the object. Must be a valid [tz database time zone string](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Used for [recurring schedules](/concepts/schedules#scheduling-workflows-with-recurring-schedules-for-recipients).
type:
- string
- 'null'
x-struct: null
x-validate: null
required:
- target_arn
type: object
x-struct: null
x-validate: null
type: array
x-struct: null
x-validate: null
required:
- devices
title: AWSSNSPushChannelDataDevicesOnly
type: object
x-struct: Elixir.SwitchboardWeb.V1.Specs.AWSSNSPushChannelDataDevicesOnly
x-validate: null
AWSSNSPushChannelDataTargetARNsOnly:
description: AWS SNS push channel data.
example:
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/knock/refs/heads/main/openapi/knock-subscriptions-api-openapi.yml