Knock · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Knock Users API
19 actions
19 updates
phrasing
extends
openapi/knock-app-users-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Knock's API. It is a proposal applied on top of the contract, not a document Knock publishes.
What the actions change
x-apievangelist-phrasing
Targets 19 · first 16 shown; the file carries all of them
$.info
$.paths['/v1/users/{user_id}'].get
$.paths['/v1/users/{user_id}'].put
$.paths['/v1/users/{user_id}'].delete
$.paths['/v1/users/{user_id}/preferences/{id}/categories/{key}'].put
$.paths['/v1/users/{user_id}/merge'].post
$.paths['/v1/users/bulk/preferences'].post
$.paths['/v1/users/bulk/identify'].post
$.paths['/v1/users/{user_id}/preferences/{id}/workflows'].put
$.paths['/v1/users/{user_id}/preferences/{id}/categories'].put
$.paths['/v1/users/bulk/delete'].post
$.paths['/v1/users/{user_id}/preferences/{id}/channel_types/{type}'].put
$.paths['/v1/users/{user_id}/preferences'].get
$.paths['/v1/users'].get
$.paths['/v1/users/{user_id}/preferences/{id}/workflows/{key}'].put
$.paths['/v1/users/{user_id}/preferences/{id}'].get
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Knock Users API
version: 1.0.0
extends: openapi/knock-app-users-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-10-01'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 18
- target: $.paths['/v1/users/{user_id}'].get
update:
x-apievangelist-phrasing:
intent: Get a user
effect: read
questions:
- How do I look up a user's profile and contact details?
- Can I fetch one recipient by their user ID?
instructions:
- text: Get user {user_id}.
slots:
user_id: path.user_id
- text: Show the profile of user {user_id}.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}'].put
update:
x-apievangelist-phrasing:
intent: Create or update a user
effect: write
questions:
- How do I add a new recipient with their email and phone number?
- Are a user's existing properties merged or overwritten when I identify them again?
instructions:
- text: Identify user {user_id} with email {email}.
slots:
user_id: path.user_id
email: requestBody.email
- text: Update user {user_id}'s phone number to {phone_number} and timezone to {timezone}.
slots:
user_id: path.user_id
phone_number: requestBody.phone_number
timezone: requestBody.timezone
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}'].delete
update:
x-apievangelist-phrasing:
intent: Delete a user and their data
effect: destructive
questions:
- How do I permanently delete a user and all their notification data?
- Can a deleted user be restored?
instructions:
- text: Delete user {user_id}.
slots:
user_id: path.user_id
- text: Permanently erase user {user_id} and their data.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/categories/{key}'].put
update:
x-apievangelist-phrasing:
intent: Update one category in a user's preferences (deprecated)
effect: write
questions:
- Can I still change a single category preference for a user through the deprecated endpoint?
- How do I opt a user out of one notification category?
instructions:
- text: Turn off category {key} in user {user_id}'s preference set {id} using the deprecated single-category endpoint.
slots:
user_id: path.user_id
id: path.id
key: path.key
- text: Update the single category {key} for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
key: path.key
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two users into one
effect: write
questions:
- How do I combine a duplicate user record into the main one?
- Which user survives when two users are merged?
instructions:
- text: Merge user {from_user_id} into user {user_id}.
slots:
from_user_id: requestBody.from_user_id
user_id: path.user_id
- text: Fold duplicate {from_user_id} into {user_id}.
slots:
from_user_id: requestBody.from_user_id
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/bulk/preferences'].post
update:
x-apievangelist-phrasing:
intent: Set preferences for many users
effect: write
questions:
- How do I apply the same preference set to thousands of users?
- Can I bulk set per-tenant preferences for many users?
instructions:
- text: Set preferences {preferences} for users {user_ids}.
slots:
preferences: requestBody.preferences
user_ids: requestBody.user_ids
- text: 'Apply preference set {preferences} to these users in bulk: {user_ids}.'
slots:
preferences: requestBody.preferences
user_ids: requestBody.user_ids
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/bulk/identify'].post
update:
x-apievangelist-phrasing:
intent: Create or update many users at once
effect: write
questions:
- How do I import up to 1,000 users in one request?
- Can I sync users with channel data in bulk?
instructions:
- text: Bulk identify users {users}.
slots:
users: requestBody.users
- text: 'Create or update this batch of recipients: {users}.'
slots:
users: requestBody.users
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/workflows'].put
update:
x-apievangelist-phrasing:
intent: Update a user's workflow preferences (deprecated)
effect: write
questions:
- How do I replace every workflow opt-in in a user's preference set with the deprecated endpoint?
- Can a user opt out of several workflows in one update?
instructions:
- text: Replace the workflows section of user {user_id}'s preference set {id}.
slots:
user_id: path.user_id
id: path.id
- text: Update every workflow opt-in at once for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/categories'].put
update:
x-apievangelist-phrasing:
intent: Update a user's category preferences (deprecated)
effect: write
questions:
- How do I replace a user's category preferences all at once?
- Can I set every category opt-in for a user in one call?
instructions:
- text: Replace the categories section of user {user_id}'s preference set {id}.
slots:
user_id: path.user_id
id: path.id
- text: Update every category opt-in at once for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/bulk/delete'].post
update:
x-apievangelist-phrasing:
intent: Delete many users at once
effect: destructive
questions:
- How do I permanently delete a batch of users?
- How many users can I delete in a single bulk request?
instructions:
- text: Bulk delete users {user_ids}.
slots:
user_ids: requestBody.user_ids
- text: 'Permanently erase these users at once: {user_ids}.'
slots:
user_ids: requestBody.user_ids
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/channel_types/{type}'].put
update:
x-apievangelist-phrasing:
intent: Update one channel type in a user's preferences (deprecated)
effect: write
questions:
- How do I turn off only SMS for a user?
- Can I toggle a single channel type for a user without touching others?
instructions:
- text: Disable channel type {type} in user {user_id}'s preference set {id}.
slots:
user_id: path.user_id
id: path.id
type: path.type
- text: Update only the {type} channel type setting for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
type: path.type
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences'].get
update:
x-apievangelist-phrasing:
intent: List a user's preference sets
effect: read
questions:
- Which preference sets does a user have, including per-tenant ones?
- Can I see all of a user's notification preferences?
instructions:
- text: List preference sets for user {user_id}.
slots:
user_id: path.user_id
- text: Show every preference set stored for user {user_id}.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users'].get
update:
x-apievangelist-phrasing:
intent: List users
effect: read
questions:
- Which users exist in this environment?
- How many users come back per page by default?
instructions:
- text: List all users.
- text: List users including {include}, {page_size} per page.
slots:
include: query.include[]
page_size: query.page_size
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/workflows/{key}'].put
update:
x-apievangelist-phrasing:
intent: Update one workflow in a user's preferences (deprecated)
effect: write
questions:
- How do I opt a user out of a single workflow?
- Can I change one workflow preference for a user and leave the rest?
instructions:
- text: Turn off workflow {key} in user {user_id}'s preference set {id}.
slots:
user_id: path.user_id
id: path.id
key: path.key
- text: Update just the {key} workflow preference for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
key: path.key
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one of a user's preference sets
effect: read
questions:
- How do I read a user's default preference set?
- Can I get a user's preferences for a specific tenant?
instructions:
- text: Get preference set {id} for user {user_id}.
slots:
user_id: path.user_id
id: path.id
- text: Show user {user_id}'s {id} preferences for tenant {tenant}.
slots:
user_id: path.user_id
id: path.id
tenant: query.tenant
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}'].put
update:
x-apievangelist-phrasing:
intent: Replace or merge a user's preference set
effect: write
questions:
- How do I save all of a user's notification preferences in one call?
- Can I merge new preferences rather than replacing the whole set?
instructions:
- text: Update preference set {id} for user {user_id}.
slots:
user_id: path.user_id
id: path.id
- text: Set user {user_id}'s {id} preferences with channel types {channel_types}.
slots:
user_id: path.user_id
id: path.id
channel_types: requestBody.channel_types
- text: Merge into user {user_id}'s preference set {id} using strategy {strategy}.
slots:
user_id: path.user_id
id: path.id
strategy: requestBody.__persistence_strategy__
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}'].delete
update:
x-apievangelist-phrasing:
intent: Delete a user's preference set
effect: destructive
questions:
- How do I remove a preference set from a user entirely?
- Can I unset a user's per-tenant preferences?
instructions:
- text: Delete preference set {id} for user {user_id}.
slots:
user_id: path.user_id
id: path.id
- text: Unset user {user_id}'s {id} preferences.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/preferences/{id}/channel_types'].put
update:
x-apievangelist-phrasing:
intent: Update a user's channel type preferences (deprecated)
effect: write
questions:
- How do I set every channel type preference for a user at once?
- Can I replace a user's email, SMS and push settings together?
instructions:
- text: Replace the channel types section of user {user_id}'s preference set {id}.
slots:
user_id: path.user_id
id: path.id
- text: Update every channel type setting at once for user {user_id} in preference set {id}.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'