> ## 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.

# Broadcast event to all

> Broadcast event to all using the Novu REST API. Requires your environment secret key in the Authorization header.



## OpenAPI

````yaml POST /v1/events/trigger/broadcast
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/events/trigger/broadcast:
    post:
      tags:
        - Events
      summary: Broadcast event to all
      description: >-
        Trigger a broadcast event to all existing subscribers, could be used to
        send announcements, etc.
              In the future could be used to trigger events to a subset of subscribers based on defined filters.
      operationId: EventsController_broadcastEventToAll
      parameters:
        - 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/TriggerEventToAllRequestDto'
      responses:
        '200':
          description: OK
          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/TriggerEventResponseDto'
        '201':
          description: 'Broadcast request has been registered successfully '
          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/TriggerEventResponseDto'
        '400':
          description: >-
            Payload validation failed - returned when payload does not match the
            workflow schema
          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/PayloadValidationExceptionDto'
        '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();

            $triggerEventToAllRequestDto = new
            Components\TriggerEventToAllRequestDto(
                name: '<value>',
                payload: [
                    'comment_id' => 'string',
                    'post' => [
                        'text' => 'string',
                    ],
                ],
                overrides: new Components\TriggerEventToAllRequestDtoOverrides(
                    additionalProperties: [
                        'fcm' => [
                            'data' => [
                                'key' => 'value',
                            ],
                        ],
                    ],
                ),
                actor: new Components\SubscriberPayloadDto(
                    firstName: 'John',
                    lastName: 'Doe',
                    email: 'john.doe@example.com',
                    phone: '+1234567890',
                    avatar: 'https://example.com/avatar.jpg',
                    locale: 'en-US',
                    timezone: 'America/New_York',
                    subscriberId: '<id>',
                ),
                context: [
                    'key' => 'org-acme',
                ],
            );


            $response = $sdk->triggerBroadcast(
                triggerEventToAllRequestDto: $triggerEventToAllRequestDto
            );


            if ($response->triggerEventResponseDto !== 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.trigger_broadcast(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto(
                    name="<value>",
                    payload={
                        "comment_id": "string",
                        "post": {
                            "text": "string",
                        },
                    },
                    overrides=novu_py.TriggerEventToAllRequestDtoOverrides(
                        **{
                            "fcm": {
                                "data": {
                                    "key": "value",
                                },
                            },
                        },
                    ),
                    actor=novu_py.SubscriberPayloadDto(
                        first_name="John",
                        last_name="Doe",
                        email="john.doe@example.com",
                        phone="+1234567890",
                        avatar="https://example.com/avatar.jpg",
                        locale="en-US",
                        timezone="America/New_York",
                        subscriber_id="<id>",
                    ),
                    context={
                        "key": "org-acme",
                    },
                ))

                # 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.TriggerBroadcast(ctx, components.TriggerEventToAllRequestDto{\n        Name: \"<value>\",\n        Payload: map[string]any{\n            \"comment_id\": \"string\",\n            \"post\": map[string]any{\n                \"text\": \"string\",\n            },\n        },\n        Overrides: &components.TriggerEventToAllRequestDtoOverrides{\n            AdditionalProperties: map[string]map[string]any{\n                \"fcm\": map[string]any{\n                    \"data\": map[string]any{\n                        \"key\": \"value\",\n                    },\n                },\n            },\n        },\n        Actor: v3.Pointer(components.CreateTriggerEventToAllRequestDtoActorSubscriberPayloadDto(\n            components.SubscriberPayloadDto{\n                FirstName: v3.Pointer(\"John\"),\n                LastName: v3.Pointer(\"Doe\"),\n                Email: v3.Pointer(\"john.doe@example.com\"),\n                Phone: v3.Pointer(\"+1234567890\"),\n                Avatar: v3.Pointer(\"https://example.com/avatar.jpg\"),\n                Locale: v3.Pointer(\"en-US\"),\n                Timezone: v3.Pointer(\"America/New_York\"),\n                SubscriberID: \"<id>\",\n            },\n        )),\n        Context: map[string]components.TriggerEventToAllRequestDtoContext{\n            \"key\": components.CreateTriggerEventToAllRequestDtoContextStr(\n                \"org-acme\",\n            ),\n        },\n    }, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.TriggerEventResponseDto != 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.triggerBroadcast({
                name: "<value>",
                payload: {
                  "comment_id": "string",
                  "post": {
                    "text": "string",
                  },
                },
                overrides: {
                  additionalProperties: {
                    "fcm": {
                      "data": {
                        "key": "value",
                      },
                    },
                  },
                },
                actor: {
                  firstName: "John",
                  lastName: "Doe",
                  email: "john.doe@example.com",
                  phone: "+1234567890",
                  avatar: "https://example.com/avatar.jpg",
                  locale: "en-US",
                  timezone: "America/New_York",
                  subscriberId: "<id>",
                },
                context: {
                  "key": "org-acme",
                },
              });

              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.BroadcastAsync(triggerEventToAllRequestDto: new
            TriggerEventToAllRequestDto() {
                Name = "<value>",
                Payload = new Dictionary<string, object>() {
                    { "comment_id", "string" },
                    { "post", new Dictionary<string, object>() {
                        { "text", "string" },
                    } },
                },
                Overrides = new TriggerEventToAllRequestDtoOverrides() {
                    AdditionalProperties = new Dictionary<string, Dictionary<string, object>>() {
                        { "fcm", new Dictionary<string, object>() {
                            { "data", new Dictionary<string, object>() {
                                { "key", "value" },
                            } },
                        } },
                    },
                },
                Actor = TriggerEventToAllRequestDtoActor.CreateSubscriberPayloadDto(
                    new SubscriberPayloadDto() {
                        FirstName = "John",
                        LastName = "Doe",
                        Email = "john.doe@example.com",
                        Phone = "+1234567890",
                        Avatar = "https://example.com/avatar.jpg",
                        Locale = "en-US",
                        Timezone = "America/New_York",
                        SubscriberId = "<id>",
                    }
                ),
                Context = new Dictionary<string, TriggerEventToAllRequestDtoContext>() {
                    { "key", TriggerEventToAllRequestDtoContext.CreateStr(
                        "org-acme"
                    ) },
                },
            });


            // handle response
components:
  schemas:
    TriggerEventToAllRequestDto:
      type: object
      properties:
        name:
          type: string
          description: >-
            The trigger identifier associated for the template you wish to send.
            This identifier can be found on the template page.
        payload:
          type: object
          example:
            comment_id: string
            post:
              text: string
          description: |-
            The payload object is used to pass additional information that 
                could be used to render the template, or perform routing rules based on it. 
                  For In-App channel, payload data are also available in <Inbox />
          additionalProperties: true
        overrides:
          description: This could be used to override provider specific configurations
          example:
            fcm:
              data:
                key: value
          additionalProperties:
            type: object
            additionalProperties: true
          allOf:
            - $ref: '#/components/schemas/TriggerOverrides'
        transactionId:
          type: string
          description: >-
            A unique identifier for this transaction, we will generated a UUID
            if not provided.
        actor:
          description: >-
            It is used to display the Avatar of the provided actor's subscriber
            id or actor object.
                If a new actor object is provided, we will create a new subscriber in our system
                
          oneOf:
            - type: string
              description: Unique identifier of a subscriber in your systems
            - $ref: '#/components/schemas/SubscriberPayloadDto'
        tenant:
          description: |-
            It is used to specify a tenant context during trigger event.
                If a new tenant object is provided, we will create a new tenant.
                
          oneOf:
            - type: string
              description: Unique identifier of a tenant in your system
            - $ref: '#/components/schemas/TenantPayloadDto'
        context:
          type: object
          additionalProperties:
            oneOf:
              - type: string
                description: Simple context id
                example: org-acme
              - type: object
                description: Rich context object with id and optional data
                properties:
                  id:
                    type: string
                    example: org-acme
                  data:
                    type: object
                    description: Optional additional context data
                    additionalProperties: true
                    example:
                      name: Acme Corp
                      region: us-east-1
                required:
                  - id
      required:
        - name
        - payload
    TriggerEventResponseDto:
      type: object
      properties:
        acknowledged:
          type: boolean
          description: Indicates whether the trigger was acknowledged or not
        status:
          enum:
            - error
            - trigger_not_active
            - no_workflow_active_steps_defined
            - no_workflow_steps_defined
            - processed
            - no_tenant_found
            - invalid_recipients
          type: string
          description: Status of the trigger
        error:
          description: In case of an error, this field will contain the error message(s)
          type: array
          items:
            type: string
        transactionId:
          type: string
          description: The returned transaction ID of the trigger
        activityFeedLink:
          type: string
          description: Link to the activity feed for this trigger event
        jobData:
          type: object
      required:
        - acknowledged
        - status
    PayloadValidationExceptionDto:
      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
        type:
          type: string
          description: Type identifier for payload validation errors
          example: PAYLOAD_VALIDATION_ERROR
        errors:
          description: Array of detailed validation errors
          example:
            - field: user.name
              message: must have required property 'name'
              value:
                age: 25
              schemaPath: '#/required'
          type: array
          items:
            $ref: '#/components/schemas/PayloadValidationErrorDto'
        schema:
          type: object
          description: The JSON schema that was used for validation
          example:
            type: object
            properties:
              name:
                type: string
              age:
                type: number
            required:
              - name
      required:
        - statusCode
        - timestamp
        - path
        - type
        - errors
    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
    TriggerOverrides:
      type: object
      properties:
        steps:
          type: object
          description: >-
            This could be used to override provider specific configurations or
            layout at the step level
          example:
            email-step:
              providers:
                sendgrid:
                  templateId: '1234567890'
              layoutId: step-specific-layout
          additionalProperties:
            $ref: '#/components/schemas/StepsOverrides'
        channels:
          description: >-
            Channel-specific overrides that apply to all steps of a particular
            channel type. Step-level overrides take precedence over
            channel-level overrides.
          example:
            email:
              layoutId: promotional-layout-2024
          allOf:
            - $ref: '#/components/schemas/ChannelOverrides'
        providers:
          type: object
          description: >-
            Overrides the provider configuration for the entire workflow and all
            steps
          example:
            sendgrid:
              templateId: '1234567890'
          additionalProperties:
            type: object
            additionalProperties: true
        email:
          type: object
          description: >-
            Override the email provider specific configurations for the entire
            workflow
          deprecated: true
          additionalProperties: true
        push:
          type: object
          description: >-
            Override the push provider specific configurations for the entire
            workflow
          deprecated: true
          additionalProperties: true
        sms:
          type: object
          description: >-
            Override the sms provider specific configurations for the entire
            workflow
          deprecated: true
          additionalProperties: true
        chat:
          type: object
          description: >-
            Override the chat provider specific configurations for the entire
            workflow
          deprecated: true
          additionalProperties: true
        layoutIdentifier:
          type: string
          description: Override the layout identifier for the entire workflow
          deprecated: true
        severity:
          $ref: '#/components/schemas/SeverityLevelEnum'
    SubscriberPayloadDto:
      type: object
      properties:
        firstName:
          type: string
          nullable: true
          description: First name of the subscriber
          example: John
        lastName:
          type: string
          nullable: true
          description: Last name of the subscriber
          example: Doe
        email:
          type: string
          nullable: true
          description: Email address of the subscriber
          example: john.doe@example.com
        phone:
          type: string
          nullable: true
          description: Phone number of the subscriber
          example: '+1234567890'
        avatar:
          type: string
          nullable: true
          description: Avatar URL or identifier
          example: https://example.com/avatar.jpg
        locale:
          type: string
          nullable: true
          description: Locale of the subscriber
          example: en-US
        timezone:
          type: string
          nullable: true
          description: Timezone of the subscriber
          example: America/New_York
        data:
          type: object
          nullable: true
          description: Additional custom data associated with the subscriber
          additionalProperties: true
        subscriberId:
          type: string
          description: >-
            The internal identifier you used to create this subscriber, usually
            correlates to the id the user in your systems
          minLength: 1
        channels:
          description: An optional array of subscriber channels.
          type: array
          items:
            $ref: '#/components/schemas/SubscriberChannelDto'
      required:
        - subscriberId
    TenantPayloadDto:
      type: object
      properties:
        identifier:
          type: string
        name:
          type: string
        data:
          type: object
    PayloadValidationErrorDto:
      type: object
      properties:
        field:
          type: string
          description: Field path that failed validation
          example: user.name
        message:
          type: string
          description: Validation error message
          example: must have required property 'name'
        value:
          description: The actual 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:
            age: 25
        schemaPath:
          type: string
          description: JSON Schema path where the validation failed
          example: '#/required'
      required:
        - field
        - message
    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
    StepsOverrides:
      type: object
      properties:
        providers:
          type: object
          description: Passing the provider id and the provider specific configurations
          example:
            sendgrid:
              templateId: '1234567890'
          additionalProperties:
            type: object
            additionalProperties: true
        layoutId:
          type: string
          nullable: true
          description: Override the or remove the layout for this specific step
          example: welcome-email-layout
    ChannelOverrides:
      type: object
      properties:
        email:
          description: Email channel specific overrides
          allOf:
            - $ref: '#/components/schemas/EmailChannelOverrides'
    SeverityLevelEnum:
      type: string
      description: Severity of the workflow
      enum:
        - high
        - medium
        - low
        - none
    SubscriberChannelDto:
      type: object
      properties:
        providerId:
          type: string
          description: The ID of the chat or push provider.
          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
        integrationIdentifier:
          type: string
          description: An optional identifier for the integration.
        credentials:
          description: Credentials for the channel.
          allOf:
            - $ref: '#/components/schemas/ChannelCredentialsDto'
      required:
        - providerId
        - credentials
    EmailChannelOverrides:
      type: object
      properties:
        layoutId:
          type: string
          nullable: true
          description: Override or remove the layout for all email steps in the workflow
          example: promotional-layout-2024
    ChannelCredentialsDto:
      type: object
      properties:
        webhookUrl:
          type: string
          description: The URL for the webhook associated with the channel.
        deviceTokens:
          description: An array of device tokens for push notifications.
          type: array
          items:
            type: string
  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

````