openapi: 3.1.0
info:
title: Novu Activity Events 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
paths:
/v1/events/trigger:
post:
operationId: EventsController_trigger
x-speakeasy-group: ''
x-speakeasy-usage-example:
title: Trigger Notification Event
x-speakeasy-name-override: trigger
summary: Novu Trigger Event
description: "\n Trigger event is the main (and only) way to send notifications to subscribers. The trigger identifier is used to match the particular workflow associated with it. Maximum number of recipients can be 100. Additional information can be passed according the body interface below.\n To prevent duplicate triggers, you can optionally pass a **transactionId** in the request body. If the same **transactionId** is used again, the trigger will be ignored. The retention period depends on your billing tier."
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerEventRequestDto'
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:
properties:
data:
$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.
tags:
- Events
security:
- secretKey: []
/v1/events/trigger/bulk:
post:
operationId: EventsController_triggerBulk
x-speakeasy-group: ''
x-speakeasy-usage-example:
title: Trigger Notification Events in Bulk
x-speakeasy-name-override: triggerBulk
summary: Novu Bulk Trigger Event
description: "\n Using this endpoint you can trigger multiple events at once, to avoid multiple calls to the API.\n The bulk API is limited to 100 events per request.\n "
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkTriggerEventDto'
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:
properties:
data:
type: array
items:
$ref: '#/components/schemas/TriggerEventResponseDto'
'400':
description: Payload validation failed - returned when any event 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.
tags:
- Events
security:
- secretKey: []
/v1/events/trigger/broadcast:
post:
operationId: EventsController_broadcastEventToAll
x-speakeasy-group: ''
x-speakeasy-usage-example:
title: Broadcast Event to All
x-speakeasy-name-override: triggerBroadcast
summary: Novu Broadcast Event to All
description: "Trigger a broadcast event to all existing subscribers, could be used to send announcements, etc.\n In the future could be used to trigger events to a subset of subscribers based on defined filters."
parameters: []
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:
properties:
data:
$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.
tags:
- Events
security:
- secretKey: []
/v1/events/trigger/{transactionId}:
delete:
operationId: EventsController_cancel
x-speakeasy-group: ''
x-speakeasy-usage-example:
title: Cancel Triggered Event
x-speakeasy-name-override: cancel
summary: Novu Cancel Triggered Event
description: "\n Using a previously generated transactionId during the event trigger,\n will cancel any active or pending workflows. This is useful to cancel active digests, delays etc...\n "
parameters:
- name: transactionId
required: true
in: path
schema:
type: string
responses:
'200':
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'
description: ''
content:
application/json:
schema:
type: boolean
'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.
tags:
- Events
security:
- secretKey: []
components:
schemas:
TenantPayloadDto:
type: object
properties:
identifier:
type: string
name:
type: string
data:
type: object
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
SeverityLevelEnum:
type: string
description: Severity of the workflow
enum:
- high
- medium
- low
- none
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
- 'null'
- type: number
- type: boolean
- type: object
- type: array
items:
anyOf:
- type:
- string
- 'null'
- type: number
- type: boolean
- type: object
additionalProperties: true
example: 'xx xx xx '
required:
- messages
TopicPayloadDto:
type: object
properties:
topicKey:
type: string
minLength: 1
type:
$ref: '#/components/schemas/TriggerRecipientsTypeEnum'
exclude:
description: Optional array of subscriber IDs to exclude from the topic trigger
type: array
items:
type: string
required:
- topicKey
- type
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
TriggerRecipientsTypeEnum:
type: string
enum:
- Subscriber
- Topic
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
- 'null'
description: Override the or remove the layout for this specific step
example: welcome-email-layout
TriggerEventRequestDto:
type: object
properties:
name:
type: string
description: The trigger identifier of the workflow you wish to send. This identifier can be found on the workflow page.
example: workflow_identifier
x-speakeasy-name-override: workflowId
payload:
type: object
description: "The payload object is used to pass additional custom information that could be \n used to render the workflow, or perform routing rules based on it. \n This data will also be available when fetching the notifications feed from the API to display certain parts of the UI."
additionalProperties: true
example:
comment_id: string
post:
text: string
overrides:
description: This could be used to override provider specific configurations
example:
fcm:
data:
key: value
allOf:
- $ref: '#/components/schemas/TriggerOverrides'
to:
description: The recipients list of people who will receive the notification. Maximum number of recipients can be 100.
oneOf:
- type: array
items:
oneOf:
- $ref: '#/components/schemas/SubscriberPayloadDto'
- $ref: '#/components/schemas/TopicPayloadDto'
- type: string
minLength: 1
description: Unique identifier of a subscriber in your systems
example: SUBSCRIBER_ID
- type: string
minLength: 1
description: Unique identifier of a subscriber in your systems
example: SUBSCRIBER_ID
- $ref: '#/components/schemas/SubscriberPayloadDto'
- $ref: '#/components/schemas/TopicPayloadDto'
transactionId:
type: string
description: "A unique identifier for deduplication. If the same **transactionId** is sent again, \n the trigger is ignored. Useful to prevent duplicate notifications. The retention period depends on your billing tier."
actor:
description: "It is used to display the Avatar of the provided actor's subscriber id or actor object.\n 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.\n Existing tenants will be updated with the provided details."
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
- to
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
- 'null'
- type: number
- type: boolean
- type:
- object
- 'null'
- type: array
items:
anyOf:
- type:
- string
- 'null'
- 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 \n 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
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
- 'null'
- type: number
- type: boolean
- type:
- object
- 'null'
- type: array
items:
anyOf:
- type:
- string
- 'null'
- 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 \n New Relic, only available for 500."
example: abc123
required:
- statusCode
- timestamp
- path
SubscriberPayloadDto:
type: object
properties:
firstName:
type:
- string
- 'null'
description: First name of the subscriber
example: John
lastName:
type:
- string
- 'null'
description: Last name of the subscriber
example: Doe
email:
type:
- string
- 'null'
description: Email address of the subscriber
example: john.doe@example.com
phone:
type:
- string
- 'null'
description: Phone number of the subscriber
example: '+1234567890'
avatar:
type:
- string
- 'null'
description: Avatar URL or identifier
example: https://example.com/avatar.jpg
locale:
type:
- string
- 'null'
description: Locale of the subscriber
example: en-US
timezone:
type:
- string
- 'null'
description: Timezone of the subscriber
example: America/New_York
data:
type:
- object
- 'null'
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
EmailChannelOverrides:
type: object
properties:
layoutId:
type:
- string
- 'null'
description: Override or remove the layout for all email steps in the workflow
example: promotional-layout-2024
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'
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 \n could be used to render the template, or perform routing rules based on it. \n For In-App channel, payload data are also available in "
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.\n If a new actor object is provided, we will create a new subscriber in our system\n "
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.\n If a new tenant object is provided, we will create a new tenant.\n "
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
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
- 'null'
- type: number
- type: boolean
- type:
- object
- 'null'
- type: array
items:
anyOf:
- type:
- string
- 'null'
- 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 \n 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
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
- 'null'
- type: number
- type: boolean
- type:
- object
- 'null'
- type: array
items:
anyOf:
- type:
- string
- 'null'
- 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
BulkTriggerEventDto:
type: object
properties:
events:
type: array
items:
$ref: '#/components/schemas/TriggerEventRequestDto'
required:
- events
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
ChannelOverrides:
type: object
properties:
email:
description: Email channel specific overrides
allOf:
- $ref: '#/components/schemas/EmailChannelOverrides'
headers:
Content-Type:
required: true
description: The MIME type of the response body.
schema:
type: string
example: application/json
RateLimit-Remaining:
required: false
description: The number of requests remaining until the next window.
schema:
type: string
example: '93'
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'
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-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"
securitySchemes:
secretKey:
type: apiKey
name: Authorization
in: header
description: 'API key authentication. Allowed headers-- "Authorization: ApiKey ".'
x-speakeasy-example: YOUR_SECRET_KEY_HERE
externalDocs:
description: Novu Documentation
url: https://docs.novu.co
x-webhooks:
message.sent:
post:
summary: 'Event: message.sent'
description: This webhook is triggered when a `message` event (`message.sent`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.sent` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.failed:
post:
summary: 'Event: message.failed'
description: This webhook is triggered when a `message` event (`message.failed`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.failed` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageFailedDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.delivered:
post:
summary: 'Event: message.delivered'
description: This webhook is triggered when a `message` event (`message.delivered`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.delivered` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.seen:
post:
summary: 'Event: message.seen'
description: This webhook is triggered when a `message` event (`message.seen`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.seen` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.read:
post:
summary: 'Event: message.read'
description: This webhook is triggered when a `message` event (`message.read`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.read` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.unread:
post:
summary: 'Event: message.unread'
description: This webhook is triggered when a `message` event (`message.unread`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.unread` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.archived:
post:
summary: 'Event: message.archived'
description: This webhook is triggered when a `message` event (`message.archived`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.archived` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.unarchived:
post:
summary: 'Event: message.unarchived'
description: This webhook is triggered when a `message` event (`message.unarchived`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.unarchived` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.snoozed:
post:
summary: 'Event: message.snoozed'
description: This webhook is triggered when a `message` event (`message.snoozed`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.snoozed` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.unsnoozed:
post:
summary: 'Event: message.unsnoozed'
description: This webhook is triggered when a `message` event (`message.unsnoozed`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.unsnoozed` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
message.deleted:
post:
summary: 'Event: message.deleted'
description: This webhook is triggered when a `message` event (`message.deleted`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `message.deleted` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookMessageDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
workflow.created:
post:
summary: 'Event: workflow.created'
description: This webhook is triggered when a `workflow` event (`workflow.created`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `workflow.created` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookCreatedWorkflowDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
workflow.updated:
post:
summary: 'Event: workflow.updated'
description: This webhook is triggered when a `workflow` event (`workflow.updated`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `workflow.updated` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookUpdatedWorkflowDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
workflow.deleted:
post:
summary: 'Event: workflow.deleted'
description: This webhook is triggered when a `workflow` event (`workflow.deleted`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `workflow.deleted` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookDeletedWorkflowDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
workflow.published:
post:
summary: 'Event: workflow.published'
description: This webhook is triggered when a `workflow` event (`workflow.published`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `workflow.published` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookUpdatedWorkflowDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
preference.updated:
post:
summary: 'Event: preference.updated'
description: This webhook is triggered when a `preference` event (`preference.updated`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `preference.updated` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookPreferenceDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks
email.received:
post:
summary: 'Event: email.received'
description: This webhook is triggered when a `email_inbound` event (`email.received`) occurs. The payload contains the details of the event. Configure your webhook endpoint URL in the Novu dashboard.
requestBody:
description: Webhook payload for the `email.received` event.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookInboundEmailDtoWebhookPayloadWrapper'
responses:
'200':
description: Acknowledges successful receipt of the webhook. No response body is expected.
tags:
- Webhooks