openapi: 3.0.3 info: title: Knock Workflows API version: '1.0' description: Trigger and cancel notification workflows, and inspect workflow recipient runs. Workflows are Knock's core programmable notification model — orchestrating channel steps (email, SMS, push, in-app, chat), function steps (batch, delay, branch, throttle, fetch, AI agent), and conditions across recipients. contact: name: Knock url: https://knock.app license: name: Proprietary servers: - url: https://api.knock.app variables: {} security: - BearerAuth: [] paths: /v1/workflows/{key}/trigger: post: callbacks: {} description: Trigger a workflow (specified by the key) to run for the given recipients, using the parameters provided. Returns an identifier for the workflow run request. All workflow runs are executed asynchronously. This endpoint also handles [inline identifications](/managing-recipients/identifying-recipients#inline-identifying-recipients) for the `actor`, `recipient`, and `tenant` fields. operationId: triggerWorkflow (2) parameters: - description: Key of the workflow to trigger. in: path name: key required: true schema: type: string x-struct: null x-validate: null requestBody: content: application/json: example: actor: mr_dna cancellation_key: isla_nublar_incident_1993 data: affected_areas: - visitor_center - raptor_pen - trex_paddock attraction_id: paddock_rex_01 evacuation_protocol: active message: Life finds a way severity: critical system_status: fences_failing recipients: - dr_grant - dr_sattler - dr_malcolm tenant: ingen_isla_nublar schema: $ref: '#/components/schemas/TriggerWorkflowRequest' description: Params required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TriggerWorkflowResponse' description: OK summary: Trigger workflow tags: - Workflows x-idempotent: true x-ratelimit-tier: 5 /v1/workflow_recipient_runs/{id}: get: callbacks: {} description: Returns a single workflow recipient run with its associated events. operationId: getWorkflowRecipientRun parameters: - description: The unique identifier for the workflow recipient run (per-recipient). in: path name: id required: true schema: type: string x-struct: null x-validate: null responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkflowRecipientRunDetail' description: OK summary: Get a workflow recipient run tags: - Workflow recipient runs x-ratelimit-tier: 2 x-retention-policy: true /v1/workflow_recipient_runs: get: callbacks: {} description: Returns a paginated list of workflow recipient runs for the current environment. operationId: listWorkflowRecipientRuns parameters: - 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 - description: Limits the results to workflow recipient runs for the given workflow key. in: query name: workflow required: false schema: type: string x-struct: null x-validate: null - description: Limits the results to workflow recipient runs with the given status. in: query name: status[] required: false schema: items: enum: - queued - processing - paused - completed - cancelled type: string x-struct: null x-validate: null type: array x-struct: null x-validate: null - description: Limits the results to workflow recipient runs for the given tenant. in: query name: tenant required: false schema: type: string x-struct: null x-validate: null - description: Limits the results to workflow recipient runs that have errors. in: query name: has_errors required: false schema: type: boolean x-struct: null x-validate: null - description: Limits the results to workflow recipient runs for the given recipient. Accepts a user ID string or an object reference with `id` and `collection`. in: query name: recipient required: false schema: $ref: '#/components/schemas/RecipientReference' - description: Limits the results to workflow recipient runs started after the given date. example: '2025-01-01T00:00:00Z' in: query name: starting_at required: false schema: format: date-time type: string x-struct: null x-validate: null - description: Limits the results to workflow recipient runs started before the given date. example: '2025-01-01T00:00:00Z' in: query name: ending_at required: false schema: format: date-time type: string x-struct: null x-validate: null responses: '200': content: application/json: schema: $ref: '#/components/schemas/ListWorkflowRecipientRunsResponse' description: OK summary: List workflow recipient runs tags: - Workflow recipient runs x-ratelimit-tier: 2 x-retention-policy: true /v1/workflows/{key}/cancel: post: callbacks: {} description: When invoked for a workflow using a specific workflow key and cancellation key, will cancel any queued workflow runs associated with that key/cancellation key pair. Can optionally be provided one or more recipients to scope the request to. operationId: cancelWorkflow parameters: - description: The key of the workflow to cancel. in: path name: key required: true schema: type: string x-struct: null x-validate: null requestBody: content: application/json: example: cancellation_key: cancel-workflow-123 recipients: - jhammond schema: $ref: '#/components/schemas/CancelWorkflowRequest' description: Params required: true responses: '204': description: No Content summary: Cancel workflow tags: - Workflows x-ratelimit-tier: 5 components: securitySchemes: BearerAuth: type: http scheme: bearer description: Knock API key as a Bearer token. Use a public key (pk_...) for client-side requests or a secret key (sk_...) for server-side. schemas: TriggerWorkflowResponse: description: The response from triggering a workflow. example: workflow_run_id: 123e4567-e89b-12d3-a456-426614174000 properties: workflow_run_id: description: This value allows you to track individual messages associated with this trigger request. example: 123e4567-e89b-12d3-a456-426614174000 format: uuid type: string x-struct: null x-validate: null required: - workflow_run_id title: TriggerWorkflowResponse type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.TriggerWorkflowResponse x-validate: null CancelWorkflowRequest: description: When invoked using a specific workflow key and cancellation key, will cancel any queued workflow runs associated with that key/cancellation key pair. Can optionally provide one or more recipients to scope the request to. example: cancellation_key: cancel-workflow-123 recipients: - jhammond properties: cancellation_key: description: An optional key that is used to reference a specific workflow trigger request when issuing a [workflow cancellation](/send-notifications/canceling-workflows) request. Must be provided while triggering a workflow in order to enable subsequent cancellation. Should be unique across trigger requests to avoid unintentional cancellations. type: string x-struct: null x-validate: null recipients: description: A list of recipients to cancel the notification for. If omitted, cancels for all recipients associated with the cancellation key. items: $ref: '#/components/schemas/RecipientReference' nullable: true type: array x-struct: null x-validate: null required: - cancellation_key title: CancelWorkflowRequest type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.CancelWorkflowRequest x-validate: null RecipientReference: description: A reference to a recipient, either a user identifier (string) or an object reference (ID, collection). example: user_123 oneOf: - description: The ID of the user which is used as the reference for the recipient. example: user_123 nullable: false title: UserReference type: string x-struct: null x-validate: null - description: A reference to a recipient object. example: collection: projects id: project_123 properties: collection: description: The collection the recipient object belongs to. example: projects nullable: false type: string x-struct: null x-validate: null id: description: An identifier for the recipient object. example: project_123 nullable: false type: string x-struct: null x-validate: null title: ObjectReference type: object x-struct: null x-validate: null title: RecipientReference x-struct: Elixir.SwitchboardWeb.V1.Specs.RecipientReference x-validate: null TriggerWorkflowRequest: description: A request to trigger a notification workflow. example: actor: mr_dna cancellation_key: isla_nublar_incident_1993 data: affected_areas: - visitor_center - raptor_pen - trex_paddock attraction_id: paddock_rex_01 evacuation_protocol: active message: Life finds a way severity: critical system_status: fences_failing recipients: - dr_grant - dr_sattler - dr_malcolm tenant: ingen_isla_nublar properties: actor: anyOf: - $ref: '#/components/schemas/RecipientRequest' - nullable: true x-struct: null x-validate: null description: A map of properties describing a user or an object to identify in Knock and mark as who or what performed the action. x-struct: null x-validate: null cancellation_key: description: An optional key that is used to reference a specific workflow trigger request when issuing a [workflow cancellation](/send-notifications/canceling-workflows) request. Must be provided while triggering a workflow in order to enable subsequent cancellation. Should be unique across trigger requests to avoid unintentional cancellations. nullable: true type: string x-struct: null x-validate: null data: additionalProperties: true description: An optional map of data to pass into the workflow execution. There is a 10MB limit on the size of the full `data` payload. Any individual string value greater than 1024 bytes in length will be [truncated](/developer-tools/api-logs#log-truncation) in your logs. nullable: true type: object x-struct: null x-validate: null recipients: description: The recipients to trigger the workflow for. Can inline identify users, objects, or use a list of user IDs. Limited to 1,000 recipients. items: $ref: '#/components/schemas/RecipientRequest' type: array x-struct: null x-validate: null tenant: anyOf: - $ref: '#/components/schemas/InlineTenantRequest' - nullable: true x-struct: null x-validate: null description: The tenant to trigger the workflow for. Triggering with a tenant will use any tenant-level overrides associated with the tenant object, and all messages produced from workflow runs will be tagged with the tenant. x-struct: null x-validate: null required: - recipients title: TriggerWorkflowRequest type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.TriggerWorkflowRequest x-validate: null InlineTenantRequest: description: An request to set a tenant inline. example: id: tenant_1 name: Acme Corp, Inc. oneOf: - description: The unique identifier for the tenant. type: string x-struct: null x-validate: null - $ref: '#/components/schemas/TenantRequest' title: InlineTenantRequest x-struct: Elixir.SwitchboardWeb.V1.Specs.InlineTenantRequest x-validate: null TenantRequest: additionalProperties: true description: A tenant to be set in the system. You can supply any additional properties on the tenant object. example: id: tenant_123 name: ACME Corp, Inc. settings: branding: icon_url: https://example.com/icon.png logo_url: https://example.com/logo.png primary_color: '#000000' primary_color_contrast: '#FFFFFF' properties: channel_data: description: The channel data for the tenant. oneOf: - nullable: true x-struct: null x-validate: null - $ref: '#/components/schemas/InlineChannelDataRequest' x-struct: null x-validate: null id: description: The unique identifier for the tenant. type: string x-struct: null x-validate: null name: description: An optional name for the tenant. nullable: true type: string x-struct: null x-validate: null preferences: description: The preferences for the tenant. oneOf: - nullable: true x-struct: null x-validate: null - $ref: '#/components/schemas/InlinePreferenceSetRequest' x-struct: null x-validate: null settings: description: The settings for the tenant. Includes branding and preference set. properties: branding: description: The branding for the tenant. properties: icon_url: description: The icon URL for the tenant. Must point to a valid image with an image MIME type. nullable: true type: string x-struct: null x-validate: null logo_url: description: The logo URL for the tenant. Must point to a valid image with an image MIME type. nullable: true type: string x-struct: null x-validate: null primary_color: description: The primary color for the tenant, provided as a hex value. nullable: true type: string x-struct: null x-validate: null primary_color_contrast: description: The primary color contrast for the tenant, provided as a hex value. nullable: true type: string x-struct: null x-validate: null type: object x-struct: null x-validate: null preference_set: description: The preference set for the tenant. Used to override the default preference set. oneOf: - nullable: true x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetRequest' x-struct: null x-validate: null type: object x-struct: null x-validate: null required: - id title: TenantRequest type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.TenantRequest 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 - nullable: true 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' - nullable: true 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' - nullable: true 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. nullable: true type: boolean 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 - nullable: true 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' - nullable: true 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' - nullable: true 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' nullable: true type: array 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 Condition: description: A condition to be evaluated. example: argument: frog_genome operator: contains variable: specimen.dna_sequence properties: argument: description: The argument value to compare against in the condition. example: some_property nullable: true type: string x-struct: null x-validate: null operator: description: The operator to use in the condition evaluation. enum: - equal_to - not_equal_to - greater_than - less_than - greater_than_or_equal_to - less_than_or_equal_to - contains - not_contains - empty - not_empty - exists - not_exists - contains_all - is_timestamp - is_not_timestamp - is_timestamp_on_or_after - is_timestamp_before - is_timestamp_on_or_after_date - is_timestamp_before_date - is_timestamp_between - is_between - is_audience_member - is_not_audience_member example: equal_to type: string x-struct: null x-validate: null variable: description: The variable to be evaluated in the condition. example: recipient.property type: string x-struct: null x-validate: null required: - variable - operator - argument title: Condition type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.Condition 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 PreferenceSetChannelSetting: description: A set of settings for a specific channel. Currently, this can only be a list of conditions to apply. example: conditions: - argument: US operator: equal_to variable: recipient.country_code properties: conditions: description: A list of conditions to apply to a specific channel. items: $ref: '#/components/schemas/Condition' type: array x-struct: null x-validate: null required: - conditions title: PreferenceSetChannelSetting type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetChannels.PreferenceSetChannelSetting x-validate: null PreferenceSetChannelTypes: description: Channel type preferences. example: email: true sms: conditions: - argument: US operator: equal_to variable: recipient.country_code properties: chat: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null email: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null http: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null in_app_feed: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null push: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null sms: description: Whether the channel type is enabled for the preference set. oneOf: - type: boolean x-struct: null x-validate: null - $ref: '#/components/schemas/PreferenceSetChannelTypeSetting' x-struct: null x-validate: null title: PreferenceSetChannelTypes type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetChannelTypes x-validate: null PreferenceSetChannelTypeSetting: description: A set of settings for a channel type. Currently, this can only be a list of conditions to apply. example: conditions: - argument: US operator: equal_to variable: recipient.country_code properties: conditions: description: A list of conditions to apply to a channel type. items: $ref: '#/components/schemas/Condition' type: array x-struct: null x-validate: null required: - conditions title: PreferenceSetChannelTypeSetting type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PreferenceSetChannelTypes.PreferenceSetChannelTypeSetting x-validate: null InlinePreferenceSetRequest: additionalProperties: $ref: '#/components/schemas/PreferenceSetRequest' description: Inline set preferences for a recipient, where the key is the preference set id. Preferences that are set inline will be merged into any existing preferences rather than replacing them. example: default: categories: transactional: channel_types: email: false channel_types: email: true title: InlinePreferenceSetRequest type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.InlinePreferenceSetRequest x-validate: null InlineChannelDataRequest: additionalProperties: description: Channel data for a given channel type. nullable: false 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 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 nullable: false type: array x-struct: null x-validate: null required: - connections title: DiscordChannelData type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.DiscordChannelData x-validate: null 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 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 MsTeamsChannelData: description: Microsoft Teams channel data. example: connections: - 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 ms_teams_tenant_id: null properties: connections: description: List of Microsoft Teams connections. items: oneOf: - $ref: '#/components/schemas/MsTeamsTokenConnection' - $ref: '#/components/schemas/MsTeamsIncomingWebhookConnection' type: object x-struct: null x-validate: null nullable: false type: array x-struct: null x-validate: null ms_teams_tenant_id: description: Microsoft Teams tenant ID. example: 123e4567-e89b-12d3-a456-426614174000 format: uuid nullable: true type: string x-struct: null x-validate: null required: - connections title: MsTeamsChannelData type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.MsTeamsChannelData x-validate: null MsTeamsIncomingWebhookConnection: description: Microsoft Teams incoming webhook connection. example: incoming_webhook: url: https://example.com/webhook properties: incoming_webhook: description: Microsoft Teams incoming webhook. properties: url: description: Microsoft Teams 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: MsTeamsIncomingWebhookConnection type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.MsTeamsChannelData.IncomingWebhookConnection 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 nullable: true type: string x-struct: null x-validate: null ms_teams_team_id: description: Microsoft Teams team ID. format: uuid nullable: true type: string x-struct: null x-validate: null ms_teams_tenant_id: description: Microsoft Teams tenant ID. format: uuid nullable: true type: string x-struct: null x-validate: null ms_teams_user_id: description: Microsoft Teams user ID. format: uuid nullable: true type: string x-struct: null x-validate: null title: MsTeamsTokenConnection type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.MsTeamsChannelData.TokenConnection 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 nullable: false oneOf: - $ref: '#/components/schemas/SlackTokenConnection' - $ref: '#/components/schemas/SlackIncomingWebhookConnection' type: object x-struct: null x-validate: null nullable: false type: array x-struct: null x-validate: null token: description: A Slack connection token. example: access_token: xoxb-1234567890 nullable: true properties: access_token: description: A Slack access token. example: xoxb-1234567890 nullable: true type: string x-struct: null x-validate: null required: - access_token title: SlackChannelDataTokenObject type: object x-struct: null x-validate: null required: - connections title: SlackChannelData type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.SlackChannelData x-validate: null SlackIncomingWebhookConnection: description: A Slack connection incoming webhook. example: url: https://hooks.slack.com/services/T01234567890/B01234567890/1234567890 properties: url: description: The URL of the incoming webhook for a Slack connection. example: https://hooks.slack.com/services/T01234567890/B01234567890/1234567890 nullable: false type: string x-struct: null x-validate: null required: - url title: SlackIncomingWebhookConnection type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.SlackChannelData.IncomingWebhookConnection 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 nullable: true type: string x-struct: null x-validate: null channel_id: description: A Slack channel ID from the Slack provider. example: C01234567890 nullable: true type: string x-struct: null x-validate: null user_id: description: A Slack user ID from the Slack provider. example: U01234567890 nullable: true type: string x-struct: null x-validate: null title: SlackTokenConnection type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.SlackChannelData.TokenConnection 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 nullable: false type: string x-struct: null x-validate: null nullable: false 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 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). nullable: true type: string 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). nullable: true type: string x-struct: null x-validate: null required: - target_arn type: object x-struct: null x-validate: null nullable: false 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: target_arns: - arn:aws:sns:us-west-2:123456789012:endpoint/GCM/gcmpushapp/5e3e9847-3183-3f18-a7e8-671c3a57d4b3 properties: target_arns: description: A list of platform endpoint ARNs. See [Setting up an Amazon SNS platform endpoint for mobile notifications](https://docs.aws.amazon.com/sns/latest/dg/mobile-platform-endpoint.html). example: - arn:aws:sns:us-west-2:123456789012:endpoint/GCM/gcmpushapp/5e3e9847-3183-3f18-a7e8-671c3a57d4b3 items: 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). nullable: false type: string x-struct: null x-validate: null nullable: false type: array x-struct: null x-validate: null required: - target_arns title: AWSSNSPushChannelDataTargetARNsOnly type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.AWSSNSPushChannelDataTargetARNsOnly 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). nullable: true 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). nullable: true type: string 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 nullable: false type: array x-struct: null x-validate: null required: - devices title: PushChannelDataDevicesOnly type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PushChannelDataDevicesOnly 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. nullable: false type: string x-struct: null x-validate: null nullable: false type: array x-struct: null x-validate: null required: - tokens title: PushChannelDataTokensOnly type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PushChannelDataTokensOnly x-validate: null RecipientRequest: description: Specifies a recipient in a request. This can either be a user identifier (string), an inline user request (object), or an inline object request, which is determined by the presence of a `collection` property. example: id: user_1 nullable: false oneOf: - description: The ID of the user which is used as the reference for the recipient. example: user_123 title: UserRecipient type: string x-struct: null x-validate: null - $ref: '#/components/schemas/InlineIdentifyUserRequest' - $ref: '#/components/schemas/InlineIdentifyObjectRequest' title: RecipientRequest x-struct: Elixir.SwitchboardWeb.V1.Specs.RecipientRequest 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' - nullable: true x-struct: null x-validate: null x-struct: null x-validate: null collection: description: The collection this object belongs to. nullable: false type: string x-struct: null x-validate: null created_at: description: Timestamp when the resource was created. format: date-time nullable: true type: string x-struct: null x-validate: null id: description: Unique identifier for the object. nullable: false type: string x-struct: null x-validate: null name: description: An optional name for the object. nullable: true type: string x-struct: null x-validate: null preferences: description: An optional set of [preferences](/concepts/preferences) for the object. oneOf: - $ref: '#/components/schemas/InlinePreferenceSetRequest' - nullable: true 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 InlineIdentifyUserRequest: additionalProperties: true description: A set of parameters to inline-identify a user with. Inline identifying the user will ensure that the user is available before the request is executed in Knock. It will perform an upsert for the user you're supplying, replacing any properties specified. example: channel_data: 97c5837d-c65c-4d54-aa39-080eeb81c69d: tokens: - push_token_123 email: jane@ingen.net id: user_1 name: Jane Doe preferences: default: channel_types: email: true workflows: dinosaurs-loose: channel_types: email: true timezone: America/New_York properties: avatar: description: A URL for the avatar of the user. nullable: true type: string x-struct: null x-validate: null channel_data: allOf: - $ref: '#/components/schemas/InlineChannelDataRequest' description: Channel-specific information that's needed to deliver a notification to an end provider. nullable: true x-struct: null x-validate: null created_at: description: The creation date of the user from your system. format: date-time nullable: true type: string x-struct: null x-validate: null email: description: The primary email address for the user. nullable: true type: string x-struct: null x-validate: null id: description: The unique identifier of the user. nullable: false type: string x-struct: null x-validate: null locale: description: The locale of the user. Used for [message localization](/concepts/translations). nullable: true type: string x-struct: null x-validate: null name: description: Display name of the user. nullable: true type: string x-struct: null x-validate: null phone_number: description: The [E.164](https://www.twilio.com/docs/glossary/what-e164) phone number of the user (required for SMS channels). nullable: true type: string x-struct: null x-validate: null preferences: allOf: - $ref: '#/components/schemas/InlinePreferenceSetRequest' description: A set of preferences for the user. nullable: true x-struct: null x-validate: null timezone: description: The timezone of the user. 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). nullable: true type: string x-struct: null x-validate: null required: - id title: InlineIdentifyUserRequest type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.InlineIdentifyUserRequest x-validate: null ListWorkflowRecipientRunsResponse: description: A paginated list of workflow recipient runs. example: items: - __typename: WorkflowRecipientRun actor: user_456 error_count: 0 id: 550e8400-e29b-41d4-a716-446655440000 inserted_at: '2025-01-01T00:00:00Z' recipient: user_123 status: completed tenant: tenant_abc trigger_source: cancellation_key: comment-123-user-456 type: api updated_at: '2025-01-01T00:05:00Z' workflow: comment-created workflow_run_id: 660e8400-e29b-41d4-a716-446655440000 page_info: __typename: PageInfo after: null before: null page_size: 25 properties: items: description: A list of workflow recipient runs. items: $ref: '#/components/schemas/WorkflowRecipientRun' type: array x-struct: null x-validate: null page_info: $ref: '#/components/schemas/PageInfo' required: - items - page_info title: ListWorkflowRecipientRunsResponse type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.ListWorkflowRecipientRunsResponse x-validate: null PageInfo: description: Pagination information for a list of resources. example: __typename: PageInfo after: null before: null page_size: 25 properties: __typename: description: The typename of the schema. example: PageInfo type: string x-struct: null x-validate: null after: description: The cursor to fetch entries after. nullable: true type: string x-struct: null x-validate: null before: description: The cursor to fetch entries before. nullable: true type: string x-struct: null x-validate: null page_size: description: The number of items per page (defaults to 50). type: integer x-struct: null x-validate: null required: - __typename - page_size title: PageInfo type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.PageInfo x-validate: null WorkflowRecipientRun: description: A workflow recipient run represents an individual execution of a workflow for a specific recipient. example: __typename: WorkflowRecipientRun actor: user_456 error_count: 0 id: 550e8400-e29b-41d4-a716-446655440000 inserted_at: '2025-01-01T00:00:00Z' recipient: user_123 status: completed tenant: tenant_abc trigger_source: cancellation_key: comment-123-user-456 type: api updated_at: '2025-01-01T00:05:00Z' workflow: comment-created workflow_run_id: 660e8400-e29b-41d4-a716-446655440000 properties: __typename: description: The typename of the schema. example: WorkflowRecipientRun type: string x-struct: null x-validate: null actor: anyOf: - $ref: '#/components/schemas/RecipientReference' - nullable: true x-struct: null x-validate: null description: The actor who triggered the workflow recipient run. x-struct: null x-validate: null error_count: description: The number of errors encountered during the workflow recipient run. example: 0 type: integer x-struct: null x-validate: null id: description: The unique identifier for the workflow recipient run (per-recipient). format: uuid type: string x-struct: null x-validate: null inserted_at: description: Timestamp when the resource was created. example: '2025-01-01T00:00:00Z' format: date-time type: string x-struct: null x-validate: null recipient: $ref: '#/components/schemas/RecipientReference' status: description: The current status of the workflow recipient run. One of `queued`, `processing`, `paused`, `completed`, or `cancelled`. enum: - queued - processing - paused - completed - cancelled example: completed type: string x-struct: null x-validate: null tenant: description: The tenant associated with the workflow recipient run. example: tenant_abc nullable: true type: string x-struct: null x-validate: null trigger_source: $ref: '#/components/schemas/WorkflowRecipientRunTriggerSource' updated_at: description: The timestamp when the resource was last updated. example: '2025-01-01T00:05:00Z' format: date-time type: string x-struct: null x-validate: null workflow: description: The key of the workflow that was executed. example: comment-created type: string x-struct: null x-validate: null workflow_run_id: description: The identifier for the top-level workflow run shared across all recipients in a single trigger. format: uuid type: string x-struct: null x-validate: null required: - __typename - id - workflow_run_id - workflow - status - recipient - trigger_source - inserted_at - updated_at title: WorkflowRecipientRun type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.WorkflowRecipientRun x-validate: null WorkflowRecipientRunTriggerSource: description: Describes how the workflow was triggered. example: cancellation_key: comment-123-user-456 type: api properties: audience_key: description: The key of the audience that triggered the workflow. nullable: true type: string x-struct: null x-validate: null cancellation_key: description: The cancellation key provided when the workflow was triggered via the API. nullable: true type: string x-struct: null x-validate: null schedule_id: description: The ID of the schedule that triggered the workflow. nullable: true type: string x-struct: null x-validate: null type: description: The type of trigger source. One of `api`, `audience`, `schedule`, `broadcast`, `workflow_step`, `integration`, or `rehearsal`. enum: - api - audience - schedule - broadcast - workflow_step - integration - rehearsal type: string x-struct: null x-validate: null required: - type title: WorkflowRecipientRunTriggerSource type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.WorkflowRecipientRunTriggerSource x-validate: null WorkflowRecipientRunDetail: allOf: - $ref: '#/components/schemas/WorkflowRecipientRun' - properties: events: description: A list of events that occurred during the workflow recipient run. items: $ref: '#/components/schemas/WorkflowRecipientRunEvent' type: array x-struct: null x-validate: null required: - events type: object x-struct: null x-validate: null description: A single workflow recipient run with its events. example: __typename: WorkflowRecipientRun actor: user_456 error_count: 0 events: - __typename: WorkflowRecipientRunEvent attempt: 1 data: channel_type: email message_id: 2FVHPWxRqNuXQ9krvNP5A6Z4qXe event: message_enqueued id: 2FVHPWxRqNuXQ9krvNP5A6Z4qXe inserted_at: '2025-01-01T00:00:00Z' status: ok step_ref: email_step_1 step_type: channel id: 550e8400-e29b-41d4-a716-446655440000 inserted_at: '2025-01-01T00:00:00Z' recipient: user_123 status: completed tenant: tenant_abc trigger_source: cancellation_key: comment-123-user-456 type: api updated_at: '2025-01-01T00:05:00Z' workflow: comment-created workflow_run_id: 660e8400-e29b-41d4-a716-446655440000 title: WorkflowRecipientRunDetail x-struct: Elixir.SwitchboardWeb.V1.Specs.WorkflowRecipientRunDetail x-validate: null WorkflowRecipientRunEvent: description: An event that occurred during a workflow recipient run. example: __typename: WorkflowRecipientRunEvent attempt: 1 data: channel_type: email message_id: 2FVHPWxRqNuXQ9krvNP5A6Z4qXe event: message_enqueued id: 2FVHPWxRqNuXQ9krvNP5A6Z4qXe inserted_at: '2025-01-01T00:00:00Z' status: ok step_ref: email_step_1 step_type: channel properties: __typename: description: The typename of the schema. example: WorkflowRecipientRunEvent type: string x-struct: null x-validate: null attempt: description: The attempt number of the workflow recipient run event. Increments for each retry. example: 1 type: integer x-struct: null x-validate: null data: additionalProperties: true description: Event-specific data associated with the event. nullable: true type: object x-struct: null x-validate: null event: description: The type of event that occurred. example: message_enqueued type: string x-struct: null x-validate: null id: description: The unique identifier for the event. example: 2FVHPWxRqNuXQ9krvNP5A6Z4qXe type: string x-struct: null x-validate: null inserted_at: description: Timestamp when the resource was created. example: '2025-01-01T00:00:00Z' format: date-time type: string x-struct: null x-validate: null status: description: Whether the event represents a successful or error state. enum: - ok - error example: ok type: string x-struct: null x-validate: null step_ref: description: The reference of the workflow step associated with this event. example: email_step_1 nullable: true type: string x-struct: null x-validate: null step_type: description: The type of workflow step associated with this event. example: channel nullable: true type: string x-struct: null x-validate: null required: - __typename - id - event - status - inserted_at title: WorkflowRecipientRunEvent type: object x-struct: Elixir.SwitchboardWeb.V1.Specs.WorkflowRecipientRunEvent x-validate: null