# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for Novu Subscribers API version: 1.0.0 extends: openapi/novu-subscribers-api-openapi.yml actions: - target: $.info update: x-apievangelist-phrasing: method: generated generated: '2026-09-26' generator: build-phrasing.py label: Generated by API Evangelist operations: 35 - target: $.paths['/v1/subscribers/bulk'].post update: x-apievangelist-phrasing: intent: Create many subscribers at once effect: write questions: - How do I import a large batch of users as subscribers in one request? - What's the maximum number of subscribers I can create in a single bulk call? instructions: - text: 'Bulk create these subscribers: {subscribers}.' slots: subscribers: requestBody.subscribers - text: 'Import this list of up to 500 users as subscribers: {subscribers}.' slots: subscribers: requestBody.subscribers method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/credentials'].put update: x-apievangelist-phrasing: intent: Replace a subscriber's provider credentials effect: write questions: - How do I overwrite a subscriber's push device tokens with a fresh set? - Can I replace the Slack webhook credentials stored for a subscriber? instructions: - text: Replace subscriber {subscriberId}'s {providerId} credentials with {credentials}. slots: subscriberId: path.subscriberId providerId: requestBody.providerId credentials: requestBody.credentials - text: Overwrite the device tokens for {subscriberId} on provider {providerId} with {credentials}. slots: subscriberId: path.subscriberId providerId: requestBody.providerId credentials: requestBody.credentials method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/credentials'].patch update: x-apievangelist-phrasing: intent: Add to a subscriber's provider credentials effect: write questions: - Can I append a new FCM device token to a subscriber without dropping the old ones? - Which call upserts provider credentials instead of replacing them? instructions: - text: Append device token credentials {credentials} for {providerId} to subscriber {subscriberId}. slots: credentials: requestBody.credentials providerId: requestBody.providerId subscriberId: path.subscriberId - text: Upsert {providerId} credentials {credentials} on subscriber {subscriberId}, keeping existing tokens. slots: providerId: requestBody.providerId credentials: requestBody.credentials subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/credentials/{providerId}'].delete update: x-apievangelist-phrasing: intent: Remove a subscriber's provider credentials effect: destructive questions: - How do I delete the stored push or chat credentials for a subscriber? - Can I remove one provider's credentials from a subscriber and keep the others? instructions: - text: Delete subscriber {subscriberId}'s credentials for provider {providerId}. slots: subscriberId: path.subscriberId providerId: path.providerId - text: Remove the {providerId} device tokens from subscriber {subscriberId}. slots: providerId: path.providerId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/online-status'].patch update: x-apievangelist-phrasing: intent: Set a subscriber's online status effect: write questions: - Can I mark a subscriber as online or offline? - Where do I update whether a subscriber is currently online? instructions: - text: Set subscriber {subscriberId} online status to {isOnline}. slots: subscriberId: path.subscriberId isOnline: requestBody.isOnline - text: Mark {subscriberId} as offline by setting isOnline to {isOnline}. slots: subscriberId: path.subscriberId isOnline: requestBody.isOnline method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/notifications/feed'].get update: x-apievangelist-phrasing: intent: Get a subscriber's inbox feed (v1) effect: read questions: - What does the older page-based inbox feed endpoint return for a subscriber? - Can I filter the legacy notifications feed by read or seen status and page number? instructions: - text: Get page {page} of subscriber {subscriberId}'s legacy inbox feed. slots: page: query.page subscriberId: path.subscriberId - text: Show the v1 notifications feed for {subscriberId} filtered to read={read}. slots: subscriberId: path.subscriberId read: query.read method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/notifications/unseen'].get update: x-apievangelist-phrasing: intent: Count a subscriber's unseen notifications effect: read questions: - How many unseen inbox notifications does a subscriber have for the bell badge? - Is there a quick endpoint just for the unseen count? instructions: - text: Get the unseen notification count for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Tell me how many unseen inbox items {subscriberId} has. slots: subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/messages/mark-as'].post update: x-apievangelist-phrasing: intent: Mark specific inbox messages (v1) effect: write questions: - With the older v1 endpoint, can I mark several message ids as seen, read, unseen or unread at once? - Which legacy call flips the state of selected messages by message id? instructions: - text: Mark messages {messageId} for subscriber {subscriberId} as {markAs}. slots: messageId: requestBody.messageId subscriberId: path.subscriberId markAs: requestBody.markAs - text: Using the v1 mark-as call, set message {messageId} of {subscriberId} to {markAs}. slots: messageId: requestBody.messageId subscriberId: path.subscriberId markAs: requestBody.markAs method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/messages/mark-all'].post update: x-apievangelist-phrasing: intent: Mark every inbox message in a feed (v1) effect: write questions: - Can I mark all of a subscriber's messages in one feed as seen or unread with the v1 API? - Which legacy endpoint changes the state of every message for a subscriber? instructions: - text: Mark all messages for subscriber {subscriberId} as {markAs}. slots: subscriberId: path.subscriberId markAs: requestBody.markAs - text: Set every message in feed {feedIdentifier} for {subscriberId} to {markAs}. slots: feedIdentifier: requestBody.feedIdentifier subscriberId: path.subscriberId markAs: requestBody.markAs method: generated generated: '2026-09-26' - target: $.paths['/v1/subscribers/{subscriberId}/messages/{messageId}/actions/{type}'].post update: x-apievangelist-phrasing: intent: Set an inbox message's action status (v1) effect: write questions: - How do I record that a subscriber clicked the primary button on a message using the v1 API? - Can I set the action status of a message's secondary button to done? instructions: - text: Set the {type} action on message {messageId} for subscriber {subscriberId} to {status}. slots: type: path.type messageId: path.messageId subscriberId: path.subscriberId status: requestBody.status - text: Record status {status} for the {type} button of message {messageId}, subscriber {subscriberId}, via the v1 call. slots: status: requestBody.status type: path.type messageId: path.messageId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers'].get update: x-apievangelist-phrasing: intent: Search subscribers effect: read questions: - How do I find a subscriber by their email address? - Is subscriber search case sensitive? - Can I look up subscribers by phone number or name? instructions: - text: Search subscribers with email {email}. slots: email: query.email - text: Find subscribers named {name}. slots: name: query.name - text: Look up subscribers by phone {phone}. slots: phone: query.phone method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers'].post update: x-apievangelist-phrasing: intent: Create a subscriber effect: write questions: - What do I need to add a new user as a Novu subscriber? - If the subscriber already exists, will creating it update the record instead? - Can I make subscriber creation fail when the id is already taken? instructions: - text: Create subscriber {subscriberId} with email {email}. slots: subscriberId: requestBody.subscriberId email: requestBody.email - text: Add a new subscriber {subscriberId} named {firstName} {lastName}. slots: subscriberId: requestBody.subscriberId firstName: requestBody.firstName lastName: requestBody.lastName - text: Create subscriber {subscriberId} only if new, with failIfExists {failIfExists}. slots: subscriberId: requestBody.subscriberId failIfExists: query.failIfExists method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}'].get update: x-apievangelist-phrasing: intent: Get a subscriber effect: read questions: - How can I pull up a subscriber's profile by their subscriberId? - What contact details are stored on a particular subscriber? instructions: - text: Show me subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Fetch the profile of subscriber {subscriberId}. slots: subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}'].delete update: x-apievangelist-phrasing: intent: Delete a subscriber effect: destructive questions: - What gets removed along with a subscriber when I delete them? - Can I delete a user and their topic subscriptions in one call? instructions: - text: Delete subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Remove {subscriberId} along with their messages, preferences and topic subscriptions. slots: subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}'].patch update: x-apievangelist-phrasing: intent: Update a subscriber's profile effect: write questions: - How do I change a subscriber's email or phone number? - Can I update a subscriber's timezone or locale? instructions: - text: Update subscriber {subscriberId}'s email to {email}. slots: subscriberId: path.subscriberId email: requestBody.email - text: Set existing subscriber {subscriberId}'s timezone to {timezone}. slots: subscriberId: path.subscriberId timezone: requestBody.timezone - text: Change the phone number on {subscriberId} to {phone}. slots: subscriberId: path.subscriberId phone: requestBody.phone method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/preferences'].get update: x-apievangelist-phrasing: intent: Get a subscriber's notification preferences effect: read questions: - Which channels has a subscriber opted out of for each workflow? - Can I see a subscriber's global and per-workflow preferences together? instructions: - text: Show notification preferences for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Get {subscriberId}'s preferences for {criticality} workflows. slots: subscriberId: path.subscriberId criticality: query.criticality method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/preferences'].patch update: x-apievangelist-phrasing: intent: Update a subscriber's preferences effect: write questions: - How do I turn off email for a subscriber on one workflow? - If I leave out the workflow, does the preference change apply globally? - Can I set a delivery schedule for when a subscriber receives notifications? instructions: - text: Update {subscriberId}'s channel preferences for workflow {workflowId} to {channels}. slots: subscriberId: path.subscriberId workflowId: requestBody.workflowId channels: requestBody.channels - text: Set global channel preferences for {subscriberId} to {channels}. slots: subscriberId: path.subscriberId channels: requestBody.channels - text: Give subscriber {subscriberId} the delivery schedule {schedule}. slots: subscriberId: path.subscriberId schedule: requestBody.schedule method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/preferences/bulk'].patch update: x-apievangelist-phrasing: intent: Update many workflow preferences at once effect: write questions: - Can I change a subscriber's preferences for several workflows in one request? - How many workflow preferences can I bulk update at a time? instructions: - text: Bulk update subscriber {subscriberId}'s workflow preferences to {preferences}. slots: subscriberId: path.subscriberId preferences: requestBody.preferences - text: 'Apply these per-workflow settings to {subscriberId} in one go: {preferences}.' slots: subscriberId: path.subscriberId preferences: requestBody.preferences method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/subscriptions'].get update: x-apievangelist-phrasing: intent: List a subscriber's topic subscriptions effect: read questions: - Which topics is a given subscriber subscribed to? - Can I check a subscriber's subscriptions filtered by topic key? instructions: - text: List the topics subscriber {subscriberId} belongs to. slots: subscriberId: path.subscriberId - text: Show {subscriberId}'s subscriptions for topic key {key}. slots: subscriberId: path.subscriberId key: query.key method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications'].get update: x-apievangelist-phrasing: intent: List a subscriber's inbox notifications effect: read questions: - What unread notifications does a subscriber have in their inbox? - Can I filter a subscriber's inbox by archived, snoozed or severity? - Is there a way to list inbox notifications created within a date range? instructions: - text: List inbox notifications for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Show {subscriberId}'s archived inbox notifications where archived is {archived}. slots: subscriberId: path.subscriberId archived: query.archived - text: List inbox notifications for {subscriberId} created after {createdGte}. slots: subscriberId: path.subscriberId createdGte: query.createdGte method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/count'].get update: x-apievangelist-phrasing: intent: Count a subscriber's inbox notifications by filter effect: read questions: - Can I count a subscriber's inbox notifications under several different filters at once? - How many filter criteria can I pass when counting inbox notifications? instructions: - text: Count subscriber {subscriberId}'s inbox notifications using filters {filters}. slots: subscriberId: path.subscriberId filters: query.filters - text: Give me per-filter notification counts for {subscriberId} with {filters}. slots: subscriberId: path.subscriberId filters: query.filters method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/read'].patch update: x-apievangelist-phrasing: intent: Mark one inbox notification as read effect: write questions: - How do I mark a single inbox notification as read for a subscriber? - Can I flag one notification read without touching the rest of the inbox? instructions: - text: Mark notification {notificationId} as read for subscriber {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Set just inbox item {notificationId} of {subscriberId} to read. slots: notificationId: path.notificationId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/unread'].patch update: x-apievangelist-phrasing: intent: Mark one inbox notification as unread effect: write questions: - Can a subscriber flag a notification they already read as unread again? - Which call reverts a single inbox notification back to unread? instructions: - text: Mark notification {notificationId} as unread for subscriber {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Flag inbox item {notificationId} of {subscriberId} as unread again. slots: notificationId: path.notificationId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/archive'].patch update: x-apievangelist-phrasing: intent: Archive one inbox notification effect: write questions: - How do I move one notification into a subscriber's archive? - Can I archive a single inbox notification by its id? instructions: - text: Archive notification {notificationId} for subscriber {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Move inbox item {notificationId} of {subscriberId} to the archive. slots: notificationId: path.notificationId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/unarchive'].patch update: x-apievangelist-phrasing: intent: Unarchive one inbox notification effect: write questions: - Can I restore an archived notification back to a subscriber's inbox? - Which call takes a single notification out of the archive? instructions: - text: Unarchive notification {notificationId} for subscriber {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Bring archived item {notificationId} back into {subscriberId}'s inbox. slots: notificationId: path.notificationId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/snooze'].patch update: x-apievangelist-phrasing: intent: Snooze an inbox notification effect: write questions: - Can a subscriber snooze a notification until later? - What time format do I give to snooze an inbox notification until a specific moment? instructions: - text: Snooze notification {notificationId} for {subscriberId} until {snoozeUntil}. slots: notificationId: path.notificationId subscriberId: path.subscriberId snoozeUntil: requestBody.snoozeUntil - text: Hide inbox item {notificationId} of {subscriberId} until {snoozeUntil}. slots: notificationId: path.notificationId subscriberId: path.subscriberId snoozeUntil: requestBody.snoozeUntil method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/unsnooze'].patch update: x-apievangelist-phrasing: intent: Unsnooze an inbox notification effect: write questions: - How do I bring a snoozed notification back right away? - Can I cancel the snooze on a single inbox notification? instructions: - text: Unsnooze notification {notificationId} for subscriber {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Cancel the snooze on {subscriberId}'s inbox item {notificationId}. slots: subscriberId: path.subscriberId notificationId: path.notificationId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}'].delete update: x-apievangelist-phrasing: intent: Delete one inbox notification effect: destructive questions: - Can I permanently delete a single notification from a subscriber's inbox? - Is deleting one inbox notification permanent? instructions: - text: Delete notification {notificationId} from subscriber {subscriberId}'s inbox. slots: notificationId: path.notificationId subscriberId: path.subscriberId - text: Permanently remove inbox item {notificationId} for {subscriberId}. slots: notificationId: path.notificationId subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/actions/{actionType}/complete'].patch update: x-apievangelist-phrasing: intent: Complete a notification's action button effect: write questions: - How do I mark a notification's primary action as completed? - Can I record that a subscriber finished the secondary action on an inbox item? instructions: - text: Complete the {actionType} action on notification {notificationId} for {subscriberId}. slots: actionType: path.actionType notificationId: path.notificationId subscriberId: path.subscriberId - text: Mark {subscriberId}'s {actionType} button on {notificationId} as done. slots: subscriberId: path.subscriberId actionType: path.actionType notificationId: path.notificationId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/{notificationId}/actions/{actionType}/revert'].patch update: x-apievangelist-phrasing: intent: Revert a notification's action to pending effect: write questions: - Can I undo a completed action on an inbox notification? - Which call puts a primary or secondary action back to pending? instructions: - text: Revert the {actionType} action on notification {notificationId} for {subscriberId}. slots: actionType: path.actionType notificationId: path.notificationId subscriberId: path.subscriberId - text: Reset {subscriberId}'s {actionType} button on {notificationId} to pending. slots: subscriberId: path.subscriberId actionType: path.actionType notificationId: path.notificationId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/seen'].post update: x-apievangelist-phrasing: intent: Mark inbox notifications as seen effect: write questions: - Can I mark several inbox notifications as seen when the subscriber opens the inbox? - Is it possible to mark notifications seen by tag instead of by id? instructions: - text: Mark notifications {notificationIds} as seen for subscriber {subscriberId}. slots: notificationIds: requestBody.notificationIds subscriberId: path.subscriberId - text: Mark all {tags} tagged notifications seen for {subscriberId}. slots: tags: requestBody.tags subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/read'].post update: x-apievangelist-phrasing: intent: Mark all inbox notifications as read effect: write questions: - How do I clear a subscriber's unread inbox by marking everything read? - Can I mark all read only for notifications with certain tags? instructions: - text: Mark all inbox notifications as read for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Mark every {tags} notification read for {subscriberId}. slots: tags: requestBody.tags subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/archive'].post update: x-apievangelist-phrasing: intent: Archive all inbox notifications effect: write questions: - Can I archive a subscriber's entire inbox in one call? - Is there a way to archive all notifications matching a tag filter? instructions: - text: Archive all inbox notifications for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Archive every notification tagged {tags} for {subscriberId}. slots: tags: requestBody.tags subscriberId: path.subscriberId method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/read-archive'].post update: x-apievangelist-phrasing: intent: Archive all read inbox notifications effect: write questions: - Can I archive only the notifications a subscriber has already read? - How do I tidy an inbox by archiving read items but leaving unread ones? instructions: - text: Archive all read notifications for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Move {subscriberId}'s already-read {tags} notifications to the archive. slots: subscriberId: path.subscriberId tags: requestBody.tags method: generated generated: '2026-09-26' - target: $.paths['/v2/subscribers/{subscriberId}/notifications/delete'].post update: x-apievangelist-phrasing: intent: Delete all inbox notifications effect: destructive questions: - Can I permanently wipe every notification in a subscriber's inbox? - Is it possible to delete all inbox notifications that match certain tags? instructions: - text: Delete all inbox notifications for subscriber {subscriberId}. slots: subscriberId: path.subscriberId - text: Permanently delete every {tags} notification in {subscriberId}'s inbox. slots: tags: requestBody.tags subscriberId: path.subscriberId method: generated generated: '2026-09-26'