Knock Users API

The Users API from Knock — 28 operation(s) for users.

Operations 35

PUT /v1/users/{user_id}/guides/messages/seen Mark guide as seen #
GET /v1/users/{user_id}/feeds/{id} List feed items #
GET /v1/users/{user_id}/feeds/{id}/settings Get feed settings #
GET /v1/users/{user_id}/subscriptions List user subscriptions #
DELETE /v1/users/{user_id} Delete user #
GET /v1/users/{user_id} Get user #
PUT /v1/users/{user_id} Identify user #
PUT /v1/users/{user_id}/preferences/{id}/categories/{key} Update category in user preference set #
PUT /v1/users/{user_id}/guides/messages/{message_id}/seen Mark guide as seen #
DELETE /v1/users/{user_id}/guides/messages/archived Mark guide as unarchived #
PUT /v1/users/{user_id}/guides/messages/archived Mark guide as archived #
DELETE /v1/users/{user_id}/channel_data/{channel_id} Unset channel data #
GET /v1/users/{user_id}/channel_data/{channel_id} Get channel data #
PUT /v1/users/{user_id}/channel_data/{channel_id} Set channel data #
POST /v1/users/{user_id}/merge Merge users #
PUT /v1/users/{user_id}/guides/messages/interacted Mark guide as interacted #
PUT /v1/users/{user_id}/guides/engagements/reset Reset guide engagement #
POST /v1/users/bulk/preferences Bulk set preferences #
GET /v1/users/{user_id}/guides/{channel_id} List guides #
POST /v1/users/bulk/identify Bulk identify users #
PUT /v1/users/{user_id}/preferences/{id}/workflows Update workflows in preference set #
PUT /v1/users/{user_id}/preferences/{id}/categories Update categories in user preference set #
PUT /v1/users/{user_id}/guides/messages/{message_id}/interacted Mark guide as interacted #
POST /v1/users/bulk/delete Bulk delete users #
PUT /v1/users/{user_id}/preferences/{id}/channel_types/{type} Update channel type in preference set #
GET /v1/users/{user_id}/preferences List user preference sets #
GET /v1/users/{user_id}/schedules List user schedules #
PUT /v1/users/{user_id}/guides/messages/{message_id}/archived Mark guide as archived #
GET /v1/users/{user_id}/messages List user messages #
GET /v1/users List users #
PUT /v1/users/{user_id}/preferences/{id}/workflows/{key} Update workflow in user preference set #
DELETE /v1/users/{user_id}/preferences/{id} Delete user preference set #
GET /v1/users/{user_id}/preferences/{id} Get user preference set #
PUT /v1/users/{user_id}/preferences/{id} Update user preference set #
PUT /v1/users/{user_id}/preferences/{id}/channel_types Update channel types in preference set #

Documentation

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/knock-app-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

knock-app-users-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Knock Audiences Accounts Users API
  version: '1.0'
  description: Manage static Audiences and their members. Audiences power lifecycle messaging — when a user joins an audience, configured workflows fire automatically.
  contact:
    name: Knock
    url: https://knock.app
  license:
    name: Proprietary
servers:
- url: https://api.knock.app
  variables: {}
security:
- BearerAuth: []
tags:
- name: Users
paths:
  /v1/users/{user_id}/guides/messages/seen:
    put:
      callbacks: {}
      description: Records that a guide has been seen by a user, triggering any associated seen events.
      operationId: markUserGuideAsSeen (2)
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            example:
              channel_id: 123e4567-e89b-12d3-a456-426614174000
              content:
                body: Limited spots available for today's behind-the-scenes DNA extraction demonstration.
                title: DNA Lab Tour Available
              data:
                next_time: '14:30'
                spots_left: 8
                tour_id: dna_lab_tour
              guide_id: 7e9dc78c-b3b1-4127-a54e-71f1899b831a
              guide_key: tour_notification
              guide_step_ref: lab_tours
              is_final: false
              metadata:
                cta: Reserve Spot
                theme: amber
                type: banner
              tenant: ingen_isla_nublar
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as seen
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/feeds/{id}:
    get:
      callbacks: {}
      description: '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 token.

        * This endpoint’s rate limit is always scoped per-user and per-environment. This is true even for requests made without a signed user token.

        * Any [attachments](/integrations/email/attachments) present in trigger data are automatically excluded from both the `data` and `activities` fields of `UserInAppFeedResponse`.

        '
      operationId: listUserInAppFeedItems
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      - description: The status of the feed items.
        example: unread
        in: query
        name: status
        required: false
        schema:
          enum:
          - unread
          - read
          - unseen
          - seen
          - all
          type: string
          x-struct: null
          x-validate: null
      - description: The workflow key associated with the message in the feed.
        example: my_source
        in: query
        name: source
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The tenant associated with the feed items.
        example: my_tenant
        in: query
        name: tenant
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: Whether the feed items have a tenant.
        example: true
        in: query
        name: has_tenant
        required: false
        schema:
          type: boolean
          x-struct: null
          x-validate: null
      - description: The workflow categories of the feed items.
        example:
        - my_workflow_category
        in: query
        name: workflow_categories[]
        required: false
        schema:
          items:
            type: string
            x-struct: null
            x-validate: null
          type: array
          x-struct: null
          x-validate: null
      - description: The archived status of the feed items.
        example: exclude
        in: query
        name: archived
        required: false
        schema:
          enum:
          - exclude
          - include
          - only
          type: string
          x-struct: null
          x-validate: null
      - description: The trigger data of the feed items (as a JSON string).
        example: '{ "key": "value" }'
        in: query
        name: trigger_data
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - 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.
        example: en-US
        in: query
        name: locale
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - 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.
        example: entries.archived_at,entries.clicked_at
        in: query
        name: exclude
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - 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.
        example: compact
        in: query
        name: mode
        required: false
        schema:
          default: rich
          enum:
          - compact
          - rich
          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
      - description: Limits the results to items inserted after the given date.
        example: '2025-01-01T00:00:00Z'
        in: query
        name: inserted_at.gt
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: Limits the results to items inserted after or on the given date.
        example: '2025-01-01T00:00:00Z'
        in: query
        name: inserted_at.gte
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: Limits the results to items inserted before the given date.
        example: '2025-01-01T00:00:00Z'
        in: query
        name: inserted_at.lt
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: Limits the results to items inserted before or on the given date.
        example: '2025-01-01T00:00:00Z'
        in: query
        name: inserted_at.lte
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserInAppFeedResponse'
          description: OK
      summary: List feed items
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/feeds/{id}/settings:
    get:
      callbacks: {}
      description: Returns the feed settings for a user.
      operationId: getUserInAppFeedSettings
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserInAppFeedSettingsResponse'
          description: OK
      summary: Get feed settings
      tags:
      - Users
      x-ratelimit-tier: 4
  /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:
      - Users
      x-ratelimit-tier: 4
  /v1/users/{user_id}:
    delete:
      callbacks: {}
      description: Permanently delete a user and all associated data.
      operationId: deleteUser
      parameters:
      - description: The ID of the user to delete.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      responses:
        '204':
          description: No Content
      summary: Delete user
      tags:
      - Users
      x-ratelimit-tier: 2
    get:
      callbacks: {}
      description: Retrieve a specific user by their ID.
      operationId: getUser
      parameters:
      - description: The ID of the user to retrieve.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: OK
      summary: Get user
      tags:
      - Users
      x-ratelimit-tier: 4
    put:
      callbacks: {}
      description: 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.
      operationId: identifyUser
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            example:
              channel_data:
                97c5837d-c65c-4d54-aa39-080eeb81c69d:
                  tokens:
                  - push_token_123
              email: ian.malcolm@chaos.theory
              name: Dr. Ian Malcolm
              preferences:
                default:
                  channel_types:
                    email: true
                  workflows:
                    dinosaurs-loose:
                      channel_types:
                        email: true
              timezone: America/New_York
            schema:
              $ref: '#/components/schemas/IdentifyUserRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: OK
      summary: Identify user
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/preferences/{id}/categories/{key}:
    put:
      callbacks: {}
      deprecated: true
      description: Updates a single category in a specific user preference set. This operation is deprecated.
      operationId: updateUserPreferenceCategory
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreferenceSet'
          description: OK
      summary: Update category in user preference set
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/guides/messages/{message_id}/seen:
    put:
      callbacks: {}
      description: Records that a guide has been seen by a user, triggering any associated seen events.
      operationId: markUserGuideAsSeen
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            example:
              channel_id: 123e4567-e89b-12d3-a456-426614174000
              content:
                body: Limited spots available for today's behind-the-scenes DNA extraction demonstration.
                title: DNA Lab Tour Available
              data:
                next_time: '14:30'
                spots_left: 8
                tour_id: dna_lab_tour
              guide_id: 7e9dc78c-b3b1-4127-a54e-71f1899b831a
              guide_key: tour_notification
              guide_step_ref: lab_tours
              is_final: false
              metadata:
                cta: Reserve Spot
                theme: amber
                type: banner
              tenant: ingen_isla_nublar
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as seen
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/guides/messages/archived:
    delete:
      callbacks: {}
      description: Records that a guide has been unarchived, triggering any associated unarchived events.
      operationId: markUserGuideAsUnarchived
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as unarchived
      tags:
      - Users
      x-ratelimit-tier: 2
    put:
      callbacks: {}
      description: Records that a guide has been archived by a user, triggering any associated archived events.
      operationId: markUserGuideAsArchived (2)
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as archived
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/channel_data/{channel_id}:
    delete:
      callbacks: {}
      description: Deletes channel data for a specific user and channel ID.
      operationId: unsetUserChannelData
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: channel_id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      responses:
        '204':
          description: No Content
      summary: Unset channel data
      tags:
      - Users
      x-ratelimit-tier: 3
    get:
      callbacks: {}
      description: Retrieves the channel data for a specific user and channel ID.
      operationId: getUserChannelData
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: channel_id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelData'
          description: OK
      summary: Get channel data
      tags:
      - Users
      x-ratelimit-tier: 4
    put:
      callbacks: {}
      description: Updates or creates channel data for a specific user and channel ID. If no user exists in the current environment for the given `user_id`, Knock will create the user entry as part of this request.
      operationId: setUserChannelData
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: channel_id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            example:
              data:
                tokens:
                - push_token_1
            schema:
              $ref: '#/components/schemas/ChannelDataRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelData'
          description: OK
      summary: Set channel data
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/merge:
    post:
      callbacks: {}
      description: Merge two users together, where the user specified with the `from_user_id` param will be merged into the user specified by `user_id`.
      operationId: mergeUser
      parameters:
      - description: The id of the user to merge into.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            example:
              from_user_id: user_1
            schema:
              $ref: '#/components/schemas/MergeUserRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: OK
      summary: Merge users
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/guides/messages/interacted:
    put:
      callbacks: {}
      description: Records that a user has interacted with a guide, triggering any associated interacted events.
      operationId: markUserGuideAsInteracted (2)
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as interacted
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/{user_id}/guides/engagements/reset:
    put:
      callbacks: {}
      description: 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.
      operationId: resetUserGuideEngagement
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Reset guide engagement
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/bulk/preferences:
    post:
      callbacks: {}
      description: 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.
      operationId: bulkSetUserPreferences
      parameters: []
      requestBody:
        content:
          application/json:
            example:
              preferences:
                __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
              user_ids:
              - user_1
              - user_2
            schema:
              $ref: '#/components/schemas/BulkSetUserPreferencesRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkOperation'
          description: OK
      summary: Bulk set preferences
      tags:
      - Users
      x-ratelimit-tier: 1
  /v1/users/{user_id}/guides/{channel_id}:
    get:
      callbacks: {}
      description: Returns a list of eligible in-app guides for a specific user and channel.
      operationId: listUserGuides
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The unique identifier for the channel.
        in: path
        name: channel_id
        required: true
        schema:
          format: uuid
          type: string
          x-struct: null
          x-validate: null
      - description: The tenant ID to use for targeting and rendering guides.
        in: query
        name: tenant
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The data (JSON encoded object) to use for targeting and rendering guides.
        in: query
        name: data
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      - description: The type of guides to filter by.
        in: query
        name: type
        required: false
        schema:
          type: string
          x-struct: null
          x-validate: null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuidesResponse'
          description: OK
      summary: List guides
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/bulk/identify:
    post:
      callbacks: {}
      description: 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.
      operationId: bulkIdentifyUsers
      parameters: []
      requestBody:
        content:
          application/json:
            example:
              users:
              - email: jane@ingen.net
                id: user_1
                name: Jane Doe
                timezone: America/New_York
            schema:
              $ref: '#/components/schemas/BulkIdentifyUsersRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkOperation'
          description: OK
      summary: Bulk identify users
      tags:
      - Users
      x-ratelimit-tier: 1
  /v1/users/{user_id}/preferences/{id}/workflows:
    put:
      callbacks: {}
      deprecated: true
      description: Updates the workflows in a specific user preference set. This operation is deprecated.
      operationId: updateUserPreferenceWorkflows
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreferenceSet'
          description: OK
      summary: Update workflows in preference set
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/preferences/{id}/categories:
    put:
      callbacks: {}
      deprecated: true
      description: Updates the categories in a specific user preference set. This operation is deprecated.
      operationId: updateUserPreferenceCategories
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreferenceSet'
          description: OK
      summary: Update categories in user preference set
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/guides/messages/{message_id}/interacted:
    put:
      callbacks: {}
      description: Records that a user has interacted with a guide, triggering any associated interacted events.
      operationId: markUserGuideAsInteracted
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
        required: true
        schema:
          type: string
          x-struct: null
          x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuideActionRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuideActionResponse'
          description: OK
      summary: Mark guide as interacted
      tags:
      - Users
      x-ratelimit-tier: 2
  /v1/users/bulk/delete:
    post:
      callbacks: {}
      description: Permanently deletes up to 1,000 users at a time.
      operationId: bulkDeleteUsers
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDeleteUsersRequest'
        description: Params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkOperation'
          description: OK
      summary: Bulk delete users
      tags:
      - Users
      x-ratelimit-tier: 1
  /v1/users/{user_id}/preferences/{id}/channel_types/{type}:
    put:
      callbacks: {}
      deprecated: true
      description: Updates a single channel type in a specific user preference set. This operation is deprecated.
      operationId: updateUserPreferenceChannelType
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreferenceSet'
          description: OK
      summary: Update channel type in preference set
      tags:
      - Users
      x-ratelimit-tier: 3
  /v1/users/{user_id}/preferences:
    get:
      callbacks: {}
      description: Retrieves a list of all preference sets for a specific user.
      operationId: listUserPreferenceSets
      parameters:
      - description: The unique identifier of the user.
        in: path
        name: user_id
     

# --- truncated at 32 KB (167 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/knock-app/refs/heads/main/openapi/knock-app-users-api-openapi.yml