> ## Documentation Index
> Fetch the complete documentation index at: https://novu-c5de82d9-docs-homepage-redesign.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Update notifications state

> Update notifications state using the Novu REST API. Requires your environment secret key in the Authorization header.



## OpenAPI

````yaml POST /v1/subscribers/{subscriberId}/messages/mark-as
openapi: 3.0.0
info:
  title: Novu API
  description: >-
    Novu REST API. Please see https://docs.novu.co/api-reference for more
    details.
  version: 3.15.0
  contact:
    name: Novu Support
    url: https://discord.gg/novu
    email: support@novu.co
  termsOfService: https://novu.co/terms
  license:
    name: MIT
    url: https://opensource.org/license/mit
servers:
  - url: https://api.novu.co
  - url: https://eu.api.novu.co
security:
  - secretKey: []
tags:
  - name: Events
    description: >-
      Events represent a change in state of a subscriber. They are used to
      trigger workflows, and enable you to send notifications to subscribers
      based on their actions.
    externalDocs:
      url: https://docs.novu.co/workflows
  - name: Subscribers
    description: >-
      A subscriber in Novu represents someone who should receive a message. A
      subscriber's profile information contains important attributes about the
      subscriber that will be used in messages (name, email). The subscriber
      object can contain other key-value pairs that can be used to further
      personalize your messages.
    externalDocs:
      url: https://docs.novu.co/subscribers/subscribers
  - name: Topics
    description: >-
      Topics are a way to group subscribers together so that they can be
      notified of events at once. A topic is identified by a custom key. This
      can be helpful for things like sending out marketing emails or notifying
      users of new features. Topics can also be used to send notifications to
      the subscribers who have been grouped together based on their interests,
      location, activities and much more.
    externalDocs:
      url: https://docs.novu.co/subscribers/topics
  - name: Integrations
    description: >-
      With the help of the Integration Store, you can easily integrate your
      favorite delivery provider. During the runtime of the API, the
      Integrations Store is responsible for storing the configurations of all
      the providers.
    externalDocs:
      url: https://docs.novu.co/platform/integrations/overview
  - name: Workflows
    description: >-
      All notifications are sent via a workflow. Each workflow acts as a
      container for the logic and blueprint that are associated with a type of
      notification in your system.
    externalDocs:
      url: https://docs.novu.co/workflows
  - name: Messages
    description: >-
      A message in Novu represents a notification delivered to a recipient on a
      particular channel. Messages contain information about the request that
      triggered its delivery, a view of the data sent to the recipient, and a
      timeline of its lifecycle events. Learn more about messages.
    externalDocs:
      url: https://docs.novu.co/workflows/messages
  - name: Environments
    description: >-
      Environments allow you to manage different stages of your application
      development lifecycle. Each environment has its own set of API keys and
      configurations, enabling you to separate development, staging, and
      production workflows.
    externalDocs:
      url: https://docs.novu.co/platform/environments
  - name: Layouts
    description: Layouts are reusable wrappers for your email notifications.
    externalDocs:
      url: https://docs.novu.co/platform/workflow/layouts
  - name: Translations
    description: Used to localize your notifications to different languages.
    externalDocs:
      url: https://docs.novu.co/platform/workflow/advanced-features/translations
  - name: Domains
    description: Used to manage your inbound email domains.
    externalDocs:
      url: https://docs.novu.co/platform/domains
externalDocs:
  description: Novu Documentation
  url: https://docs.novu.co
paths:
  /v1/subscribers/{subscriberId}/messages/mark-as:
    post:
      tags:
        - Subscribers
      summary: Update notifications state
      description: >-
        Update subscriber's multiple in-app (inbox) notifications state such as
        seen, read, unseen or unread by **subscriberId**. 
              **messageId** is of type mongodbId of notifications
      operationId: SubscribersV1Controller_markMessagesAs
      parameters:
        - name: subscriberId
          required: true
          in: path
          schema:
            type: string
        - name: idempotency-key
          in: header
          description: A header for idempotency purposes
          required: false
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageMarkAsRequestDto'
      responses:
        '201':
          description: Created
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MessageResponseDto'
        '400':
          description: Bad Request
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '401':
          description: Unauthorized
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '405':
          description: Method Not Allowed
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '409':
          description: Conflict
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '413':
          description: Payload Too Large
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '414':
          description: URI Too Long
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '415':
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '422':
          description: Unprocessable Entity
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorDto'
        '429':
          description: 'The client has sent too many requests in a given amount of time. '
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                type: string
                example: API rate limit exceeded
        '500':
          description: Internal Server Error
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '503':
          description: >-
            The server is currently unable to handle the request due to a
            temporary overload or scheduled maintenance, which will likely be
            alleviated after some delay.
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                type: string
                example: Please wait some time, then try again.
      security:
        - secretKey: []
      x-codeSamples:
        - lang: php
          label: PHP
          source: |-
            declare(strict_types=1);

            require 'vendor/autoload.php';

            use novu;
            use novu\Models\Components;

            $sdk = novu\Novu::builder()
                ->setSecurity(
                    'YOUR_SECRET_KEY_HERE'
                )
                ->build();

            $messageMarkAsRequestDto = new Components\MessageMarkAsRequestDto(
                messageId: [],
                markAs: Components\MessageMarkAsRequestDtoMarkAs::Seen,
            );

            $response = $sdk->subscribers->messages->markAllAs(
                subscriberId: '<id>',
                messageMarkAsRequestDto: $messageMarkAsRequestDto

            );

            if ($response->messageResponseDtos !== null) {
                // handle response
            }
        - lang: python
          label: Python
          source: |-
            import novu_py
            from novu_py import Novu


            with Novu(
                secret_key="YOUR_SECRET_KEY_HERE",
            ) as novu:

                res = novu.subscribers.messages.mark_all_as(subscriber_id="<id>", message_mark_as_request_dto={
                    "message_id": [],
                    "mark_as": novu_py.MessageMarkAsRequestDtoMarkAs.SEEN,
                })

                # Handle response
                print(res)
        - lang: go
          label: Go
          source: "package main\n\nimport(\n\t\"context\"\n\t\"github.com/novuhq/novu-go/v3\"\n\t\"github.com/novuhq/novu-go/v3/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := v3.New(\n        v3.WithSecurity(\"YOUR_SECRET_KEY_HERE\"),\n    )\n\n    res, err := s.Subscribers.Messages.MarkAllAs(ctx, \"<id>\", components.MessageMarkAsRequestDto{\n        MessageID: components.CreateMessageIDArrayOfStr(\n            []string{},\n        ),\n        MarkAs: components.MessageMarkAsRequestDtoMarkAsSeen,\n    }, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.MessageResponseDtos != nil {\n        // handle response\n    }\n}"
        - lang: typescript
          label: TypeScript
          source: |-
            import { Novu } from "@novu/api";

            const novu = new Novu({
              secretKey: "YOUR_SECRET_KEY_HERE",
            });

            async function run() {
              const result = await novu.subscribers.messages.markAllAs({
                messageId: [],
                markAs: "seen",
              }, "<id>");

              console.log(result);
            }

            run();
        - lang: csharp
          label: Csharp (SDK)
          source: |-
            using Novu;
            using Novu.Models.Components;
            using System.Collections.Generic;

            var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");

            var res = await sdk.SubscribersMessages.MarkAllAsAsync(
                subscriberId: "<id>",
                messageMarkAsRequestDto: new MessageMarkAsRequestDto() {
                    MessageId = MessageId.CreateArrayOfStr(
                        new List<string>() {}
                    ),
                    MarkAs = MessageMarkAsRequestDtoMarkAs.Seen,
                }
            );

            // handle response
components:
  schemas:
    MessageMarkAsRequestDto:
      type: object
      properties:
        messageId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        markAs:
          enum:
            - read
            - seen
            - unread
            - unseen
          type: string
      required:
        - messageId
        - markAs
    MessageResponseDto:
      type: object
      properties:
        _id:
          type: string
          description: Unique identifier for the message
        _templateId:
          type: string
          nullable: true
          description: Template ID associated with the message
        _environmentId:
          type: string
          description: Environment ID where the message is sent
        _messageTemplateId:
          type: string
          nullable: true
          description: Message template ID
        _organizationId:
          type: string
          description: Organization ID associated with the message
        _notificationId:
          type: string
          description: Notification ID associated with the message
        _subscriberId:
          type: string
          description: Subscriber ID associated with the message
        subscriber:
          description: Subscriber details, if available
          allOf:
            - $ref: '#/components/schemas/SubscriberResponseDto'
        template:
          description: Workflow template associated with the message
          allOf:
            - $ref: '#/components/schemas/WorkflowResponse'
        templateIdentifier:
          type: string
          description: Identifier for the message template
        createdAt:
          type: string
          description: Creation date of the message
        deliveredAt:
          description: >-
            Array of delivery dates for the message, if the message has multiple
            delivery dates, for example after being snoozed
          type: array
          items:
            type: string
        lastSeenDate:
          type: string
          description: Last seen date of the message, if available
        lastReadDate:
          type: string
          description: Last read date of the message, if available
        content:
          nullable: true
          oneOf:
            - type: array
              items:
                $ref: '#/components/schemas/EmailBlock'
            - type: string
              description: String representation of the content
          description: Content of the message, can be an email block or a string
        transactionId:
          type: string
          description: Transaction ID associated with the message
        subject:
          type: string
          description: Subject of the message, if applicable
        channel:
          $ref: '#/components/schemas/ChannelTypeEnum'
        read:
          type: boolean
          description: Indicates if the message has been read
        seen:
          type: boolean
          description: Indicates if the message has been seen
        snoozedUntil:
          type: string
          description: Date when the message will be unsnoozed
        email:
          type: string
          description: Email address associated with the message, if applicable
        phone:
          type: string
          description: Phone number associated with the message, if applicable
        directWebhookUrl:
          type: string
          description: Direct webhook URL for the message, if applicable
        providerId:
          type: string
          description: Provider ID associated with the message, if applicable
        deviceTokens:
          description: Device tokens associated with the message, if applicable
          type: array
          items:
            type: string
        title:
          type: string
          description: Title of the message, if applicable
        cta:
          description: Call to action associated with the message
          allOf:
            - $ref: '#/components/schemas/MessageCTA'
        _feedId:
          type: string
          nullable: true
          description: Feed ID associated with the message, if applicable
        status:
          $ref: '#/components/schemas/MessageStatusEnum'
        errorId:
          type: string
          description: Error ID if the message has an error
        errorText:
          type: string
          description: Error text if the message has an error
        payload:
          type: object
          description: The payload that was used to send the notification trigger
          additionalProperties: true
        overrides:
          type: object
          description: Provider specific overrides used when triggering the notification
          additionalProperties: true
        contextKeys:
          description: Context (single or multi) in which the message was sent
          example:
            - tenant:org-123
            - region:us-east-1
          type: array
          items:
            type: string
      required:
        - _environmentId
        - _organizationId
        - _notificationId
        - _subscriberId
        - createdAt
        - transactionId
        - channel
        - read
        - seen
        - cta
        - status
    ErrorDto:
      type: object
      properties:
        statusCode:
          type: number
          description: HTTP status code of the error response.
          example: 404
        timestamp:
          type: string
          description: Timestamp of when the error occurred.
          example: '2024-12-12T13:00:00Z'
        path:
          type: string
          description: The path where the error occurred.
          example: /api/v1/resource
        message:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
              nullable: true
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
        ctx:
          type: object
          description: Optional context object for additional error details.
          additionalProperties: true
          example:
            workflowId: some_wf_id
            stepId: some_wf_id
        errorId:
          type: string
          description: >-
            Optional unique identifier for the error, useful for tracking using
            Sentry and 
                  New Relic, only available for 500.
          example: abc123
      required:
        - statusCode
        - timestamp
        - path
    ValidationErrorDto:
      type: object
      properties:
        statusCode:
          type: number
          description: HTTP status code of the error response.
          example: 404
        timestamp:
          type: string
          description: Timestamp of when the error occurred.
          example: '2024-12-12T13:00:00Z'
        path:
          type: string
          description: The path where the error occurred.
          example: /api/v1/resource
        message:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
              nullable: true
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
        ctx:
          type: object
          description: Optional context object for additional error details.
          additionalProperties: true
          example:
            workflowId: some_wf_id
            stepId: some_wf_id
        errorId:
          type: string
          description: >-
            Optional unique identifier for the error, useful for tracking using
            Sentry and 
                  New Relic, only available for 500.
          example: abc123
        errors:
          type: object
          description: A record of validation errors keyed by field name
          additionalProperties:
            $ref: '#/components/schemas/ConstraintValidation'
          example:
            fieldName1:
              messages:
                - Field is required
                - Must be a valid email address
              value: invalidEmail
            fieldName2:
              messages:
                - Must be at least 18 years old
              value: 17
            fieldName3:
              messages:
                - Must be a boolean value
              value: true
            fieldName4:
              messages:
                - Must be a valid object
              value:
                key: value
            fieldName5:
              messages:
                - Field is missing
              value: null
            fieldName6:
              messages:
                - Undefined value
      required:
        - statusCode
        - timestamp
        - path
        - errors
    SubscriberResponseDto:
      type: object
      properties:
        _id:
          type: string
          description: >-
            The internal ID generated by Novu for your subscriber. This ID does
            not match the `subscriberId` used in your queries. Refer to
            `subscriberId` for that identifier.
        firstName:
          type: string
          description: The first name of the subscriber.
          nullable: true
        lastName:
          type: string
          description: The last name of the subscriber.
          nullable: true
        email:
          type: string
          description: The email address of the subscriber.
          nullable: true
        phone:
          type: string
          description: The phone number of the subscriber.
          nullable: true
        avatar:
          type: string
          description: The URL of the subscriber's avatar image.
          nullable: true
        locale:
          type: string
          description: >-
            The locale setting of the subscriber, indicating their preferred
            language or region.
          nullable: true
        channels:
          description: An array of channel settings associated with the subscriber.
          type: array
          items:
            $ref: '#/components/schemas/ChannelSettingsDto'
        topics:
          description: An array of topics that the subscriber is subscribed to.
          deprecated: true
          type: array
          items:
            type: string
        isOnline:
          type: boolean
          description: Indicates whether the subscriber is currently online.
          nullable: true
        lastOnlineAt:
          type: string
          description: >-
            The timestamp indicating when the subscriber was last online, in ISO
            8601 format.
          nullable: true
        __v:
          type: number
          description: The version of the subscriber document.
        data:
          type: object
          description: Additional custom data for the subscriber
          additionalProperties: true
          nullable: true
        timezone:
          type: string
          description: Timezone of the subscriber
          nullable: true
        subscriberId:
          type: string
          description: >-
            The identifier used to create this subscriber, which typically
            corresponds to the user ID in your system.
        _organizationId:
          type: string
          description: >-
            The unique identifier of the organization to which the subscriber
            belongs.
        _environmentId:
          type: string
          description: >-
            The unique identifier of the environment associated with this
            subscriber.
        deleted:
          type: boolean
          description: Indicates whether the subscriber has been deleted.
        createdAt:
          type: string
          description: >-
            The timestamp indicating when the subscriber was created, in ISO
            8601 format.
        updatedAt:
          type: string
          description: >-
            The timestamp indicating when the subscriber was last updated, in
            ISO 8601 format.
      required:
        - subscriberId
        - _organizationId
        - _environmentId
        - deleted
        - createdAt
        - updatedAt
    WorkflowResponse:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        description:
          type: string
        active:
          type: boolean
        draft:
          type: boolean
        preferenceSettings:
          $ref: '#/components/schemas/SubscriberPreferenceChannels'
        critical:
          type: boolean
        tags:
          type: array
          items:
            type: string
        steps:
          type: array
          items:
            $ref: '#/components/schemas/NotificationStepDto'
        _organizationId:
          type: string
        _creatorId:
          type: string
        _environmentId:
          type: string
        triggers:
          type: array
          items:
            $ref: '#/components/schemas/NotificationTrigger'
        _notificationGroupId:
          type: string
        _parentId:
          type: string
        deleted:
          type: boolean
        deletedAt:
          type: string
        deletedBy:
          type: string
        notificationGroup:
          $ref: '#/components/schemas/NotificationGroup'
        data:
          type: object
        workflowIntegrationStatus:
          type: object
      required:
        - name
        - description
        - active
        - draft
        - preferenceSettings
        - critical
        - tags
        - steps
        - _organizationId
        - _creatorId
        - _environmentId
        - triggers
        - _notificationGroupId
        - deleted
        - deletedAt
        - deletedBy
    EmailBlock:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/EmailBlockTypeEnum'
        content:
          type: string
          description: Content of the email block
        url:
          type: string
          description: URL associated with the email block, if any
        styles:
          description: Styles applied to the email block
          allOf:
            - $ref: '#/components/schemas/EmailBlockStyles'
      required:
        - type
        - content
    ChannelTypeEnum:
      type: string
      description: Channel type through which the message is sent
      enum:
        - in_app
        - email
        - sms
        - chat
        - push
    MessageCTA:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ChannelCTATypeEnum'
        data:
          description: Data associated with the call to action
          allOf:
            - $ref: '#/components/schemas/MessageCTAData'
        action:
          description: Action associated with the call to action
          allOf:
            - $ref: '#/components/schemas/MessageAction'
    MessageStatusEnum:
      type: string
      description: Status of the message
      enum:
        - sent
        - error
        - warning
    ConstraintValidation:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
          description: List of validation error messages
          example:
            - Field is required
            - Invalid format
        value:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
      required:
        - messages
    ChannelSettingsDto:
      type: object
      properties:
        providerId:
          $ref: '#/components/schemas/ChatOrPushProviderEnum'
        integrationIdentifier:
          type: string
          description: The integration identifier
        credentials:
          description: Credentials payload for the specified provider
          allOf:
            - $ref: '#/components/schemas/ChannelCredentials'
        _integrationId:
          type: string
          description: >-
            The unique identifier of the integration associated with this
            channel.
      required:
        - providerId
        - credentials
        - _integrationId
    SubscriberPreferenceChannels:
      type: object
      properties:
        email:
          type: boolean
          description: Email channel preference
          example: true
        sms:
          type: boolean
          description: SMS channel preference
          example: false
        in_app:
          type: boolean
          description: In-app channel preference
          example: true
        chat:
          type: boolean
          description: Chat channel preference
          example: false
        push:
          type: boolean
          description: Push notification channel preference
          example: true
    NotificationStepDto:
      type: object
      properties:
        _id:
          type: string
          description: Unique identifier for the notification step.
        uuid:
          type: string
          description: Universally unique identifier for the notification step.
        name:
          type: string
          description: Name of the notification step.
        _templateId:
          type: string
          description: ID of the template associated with this notification step.
        active:
          type: boolean
          description: Indicates whether the notification step is active.
        shouldStopOnFail:
          type: boolean
          description: Determines if the process should stop on failure.
        template:
          description: Message template used in this notification step.
          allOf:
            - $ref: '#/components/schemas/MessageTemplate'
        filters:
          description: Filters applied to this notification step.
          type: array
          items:
            $ref: '#/components/schemas/StepFilterDto'
        _parentId:
          type: string
          description: ID of the parent notification step, if applicable.
        metadata:
          description: >-
            Metadata associated with the workflow step. Can vary based on the
            type of step.
          oneOf:
            - $ref: '#/components/schemas/DigestRegularMetadata'
            - $ref: '#/components/schemas/DigestTimedMetadata'
            - $ref: '#/components/schemas/DelayRegularMetadata'
            - $ref: '#/components/schemas/DelayScheduledMetadata'
        replyCallback:
          description: >-
            Callback information for replies, including whether it is active and
            the callback URL.
          allOf:
            - $ref: '#/components/schemas/ReplyCallback'
        variants:
          type: array
          items:
            $ref: '#/components/schemas/NotificationStepData'
    NotificationTrigger:
      type: object
      properties:
        type:
          type: string
          enum:
            - event
        identifier:
          type: string
        variables:
          type: array
          items:
            $ref: '#/components/schemas/NotificationTriggerVariable'
        subscriberVariables:
          type: array
          items:
            $ref: '#/components/schemas/NotificationTriggerVariable'
      required:
        - type
        - identifier
        - variables
    NotificationGroup:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        _environmentId:
          type: string
        _organizationId:
          type: string
        _parentId:
          type: string
      required:
        - name
        - _environmentId
        - _organizationId
    EmailBlockTypeEnum:
      type: string
      description: Type of the email block
      enum:
        - button
        - text
    EmailBlockStyles:
      type: object
      properties:
        textAlign:
          $ref: '#/components/schemas/TextAlignEnum'
      required:
        - textAlign
    ChannelCTATypeEnum:
      type: string
      description: Type of call to action
      enum:
        - redirect
    MessageCTAData:
      type: object
      properties:
        url:
          type: string
          description: URL for the call to action
    MessageAction:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/MessageActionStatusEnum'
        buttons:
          description: List of buttons associated with the message action
          type: array
          items:
            $ref: '#/components/schemas/MessageButton'
        result:
          description: Result of the message action
          allOf:
            - $ref: '#/components/schemas/MessageActionResult'
    ChatOrPushProviderEnum:
      type: string
      description: The provider identifier for the credentials
      enum:
        - slack
        - discord
        - msteams
        - mattermost
        - ryver
        - zulip
        - grafana-on-call
        - getstream
        - rocket-chat
        - whatsapp-business
        - chat-webhook
        - novu-slack
        - telegram
        - fcm
        - apns
        - expo
        - one-signal
        - pushpad
        - push-webhook
        - pusher-beams
        - appio
    ChannelCredentials:
      type: object
      properties:
        webhookUrl:
          type: string
          description: >-
            Webhook URL used by chat app integrations. The webhook should be
            obtained from the chat app provider.
          example: https://example.com/webhook
        channel:
          type: string
          description: Channel specification for Mattermost chat notifications.
          example: general
        deviceTokens:
          description: >-
            Contains an array of the subscriber device tokens for a given
            provider. Used on Push integrations.
          example:
            - token1
            - token2
            - token3
          type: array
          items:
            type: string
        alertUid:
          type: string
          description: Alert UID for Grafana on-call webhook payload.
          example: 12345-abcde
        title:
          type: string
          description: Title to be used with Grafana on-call webhook.
          example: Critical Alert
        imageUrl:
          type: string
          description: Image URL property for Grafana on-call webhook.
          example: https://example.com/image.png
        state:
          type: string
          description: State property for Grafana on-call webhook.
          example: resolved
        externalUrl:
          type: string
          description: Link to upstream details property for Grafana on-call webhook.
          example: https://example.com/details
    MessageTemplate:
      type: object
      properties: {}
    StepFilterDto:
      type: object
      properties:
        isNegated:
          type: boolean
        type:
          $ref: '#/components/schemas/BuilderFieldTypeEnum'
        value:
          type: string
          enum:
            - AND
            - OR
        children:
          type: array
          items:
            $ref: '#/components/schemas/FieldFilterPartDto'
      required:
        - isNegated
        - type
        - value
        - children
    DigestRegularMetadata:
      type: object
      properties:
        amount:
          type: number
        unit:
          type: string
          enum:
            - seconds
            - minutes
            - hours
            - days
            - weeks
            - months
        digestKey:
          type: string
        type:
          type: string
          enum:
            - regular
            - backoff
        backoff:
          type: boolean
        backoffAmount:
          type: number
        backoffUnit:
          type: string
          enum:
            - seconds
            - minutes
            - hours
            - days
            - weeks
            - months
        updateMode:
          type: boolean
      required:
        - type
    DigestTimedMetadata:
      type: object
      properties:
        amount:
          type: number
        unit:
          type: string
          enum:
            - seconds
            - minutes
            - hours
            - days
            - weeks
            - months
        digestKey:
          type: string
        type:
          type: string
          enum:
            - timed
        timed:
          $ref: '#/components/schemas/TimedConfig'
      required:
        - type
    DelayRegularMetadata:
      type: object
      properties:
        amount:
          type: number
        unit:
          type: string
          enum:
            - seconds
            - minutes
            - hours
            - days
            - weeks
            - months
        type:
          type: string
          enum:
            - regular
      required:
        - type
    DelayScheduledMetadata:
      type: object
      properties:
        type:
          type: string
          enum:
            - scheduled
        delayPath:
          type: string
      required:
        - type
        - delayPath
    ReplyCallback:
      type: object
      properties:
        active:
          type: boolean
          description: Indicates whether the reply callback is active.
        url:
          type: string
          description: The URL to which replies should be sent.
    NotificationStepData:
      type: object
      properties:
        _id:
          type: string
          description: Unique identifier for the notification step.
        uuid:
          type: string
          description: Universally unique identifier for the notification step.
        name:
          type: string
          description: Name of the notification step.
        _templateId:
          type: string
          description: ID of the template associated with this notification step.
        active:
          type: boolean
          description: Indicates whether the notification step is active.
        shouldStopOnFail:
          type: boolean
          description: Determines if the process should stop on failure.
        template:
          description: Message template used in this notification step.
          allOf:
            - $ref: '#/components/schemas/MessageTemplate'
        filters:
          description: Filters applied to this notification step.
          type: array
          items:
            $ref: '#/components/schemas/StepFilterDto'
        _parentId:
          type: string
          description: ID of the parent notification step, if applicable.
        metadata:
          description: >-
            Metadata associated with the workflow step. Can vary based on the
            type of step.
          oneOf:
            - $ref: '#/components/schemas/DigestRegularMetadata'
            - $ref: '#/components/schemas/DigestTimedMetadata'
            - $ref: '#/components/schemas/DelayRegularMetadata'
            - $ref: '#/components/schemas/DelayScheduledMetadata'
        replyCallback:
          description: >-
            Callback information for replies, including whether it is active and
            the callback URL.
          allOf:
            - $ref: '#/components/schemas/ReplyCallback'
    NotificationTriggerVariable:
      type: object
      properties:
        name:
          type: string
          description: Name of the variable
      required:
        - name
    TextAlignEnum:
      type: string
      description: Text alignment for the email block
      enum:
        - center
        - left
        - right
    MessageActionStatusEnum:
      type: string
      description: Status of the message action
      enum:
        - pending
        - done
    MessageButton:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ButtonTypeEnum'
        content:
          type: string
          description: Content of the button
        resultContent:
          type: string
          description: Content of the result when the button is clicked
      required:
        - type
        - content
    MessageActionResult:
      type: object
      properties:
        payload:
          type: object
          description: Payload of the action result
          additionalProperties: true
        type:
          $ref: '#/components/schemas/ButtonTypeEnum'
    BuilderFieldTypeEnum:
      type: string
      enum:
        - BOOLEAN
        - TEXT
        - DATE
        - NUMBER
        - STATEMENT
        - LIST
        - MULTI_LIST
        - GROUP
    FieldFilterPartDto:
      type: object
      properties:
        field:
          type: string
        value:
          type: string
        operator:
          type: string
          enum:
            - LARGER
            - SMALLER
            - LARGER_EQUAL
            - SMALLER_EQUAL
            - EQUAL
            - NOT_EQUAL
            - ALL_IN
            - ANY_IN
            - NOT_IN
            - BETWEEN
            - NOT_BETWEEN
            - LIKE
            - NOT_LIKE
            - IN
        'on':
          type: string
          enum:
            - subscriber
            - payload
      required:
        - field
        - value
        - operator
        - 'on'
    TimedConfig:
      type: object
      properties:
        atTime:
          type: string
        weekDays:
          type: array
          items:
            type: string
            enum:
              - monday
              - tuesday
              - wednesday
              - thursday
              - friday
              - saturday
              - sunday
        monthDays:
          type: array
          items:
            type: string
        ordinal:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
            - '4'
            - '5'
            - last
        ordinalValue:
          type: string
          enum:
            - day
            - weekday
            - weekend
            - sunday
            - monday
            - tuesday
            - wednesday
            - thursday
            - friday
            - saturday
        monthlyType:
          type: string
          enum:
            - each
            - 'on'
    ButtonTypeEnum:
      type: string
      description: Type of button for the action result
      enum:
        - primary
        - secondary
  headers:
    Content-Type:
      required: true
      description: The MIME type of the response body.
      schema:
        type: string
      example: application/json
    RateLimit-Limit:
      required: false
      description: >-
        The number of requests that the client is permitted to make per second.
        The actual maximum may differ when burst is enabled.
      schema:
        type: string
      example: '100'
    RateLimit-Remaining:
      required: false
      description: The number of requests remaining until the next window.
      schema:
        type: string
      example: '93'
    RateLimit-Reset:
      required: false
      description: >-
        The remaining seconds until a request of the same cost will be
        refreshed.
      schema:
        type: string
      example: '8'
    RateLimit-Policy:
      required: false
      description: The rate limit policy that was used to evaluate the request.
      schema:
        type: string
      example: >-
        100;w=1;burst=110;comment="token
        bucket";category="trigger";cost="single"
    Idempotency-Key:
      required: false
      description: The idempotency key used to evaluate the request.
      schema:
        type: string
      example: '8'
    Idempotency-Replay:
      required: false
      description: Whether the request was a replay of a previous request.
      schema:
        type: string
      example: 'true'
    Retry-After:
      required: false
      description: >-
        The number of seconds after which the client may retry the request that
        was previously rejected.
      schema:
        type: string
      example: '8'
  securitySchemes:
    secretKey:
      type: apiKey
      name: Authorization
      in: header
      description: >-
        API key authentication. Allowed headers-- "Authorization: ApiKey
        <novu_secret_key>".
      x-speakeasy-example: YOUR_SECRET_KEY_HERE

````