openapi: 3.1.0
info:
title: Novu Activity Domains 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: Domains
description: Used to manage your inbound email domains.
externalDocs:
url: https://docs.novu.co/platform/domains
paths:
/v1/domains:
get:
operationId: DomainsController_listDomains
x-speakeasy-name-override: list
summary: Novu List Domains for an Environment
description: Returns a paginated list of inbound-email domains in the current environment. Supports cursor pagination and a name contains filter.
parameters:
- name: after
required: false
in: query
description: Cursor for pagination indicating the starting point after which to fetch results.
schema:
type: string
- name: before
required: false
in: query
description: Cursor for pagination indicating the ending point before which to fetch results.
schema:
type: string
- name: limit
required: false
in: query
description: Limit the number of items to return
example: 10
schema:
type: number
- name: orderDirection
required: false
in: query
description: Direction of sorting
schema:
enum:
- ASC
- DESC
type: string
- name: orderBy
required: false
in: query
description: Field to order by
schema:
type: string
- name: includeCursor
required: false
in: query
description: Include cursor item in response
schema:
type: boolean
- name: name
required: false
in: query
description: Domain name to filter results by.
schema:
type: string
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/ListDomainsResponseDto'
'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:
- Domains
security:
- secretKey: []
post:
operationId: DomainsController_createDomain
x-speakeasy-name-override: create
summary: Novu Create a Domain
description: Registers a new inbound-email domain. The response includes the DNS records customers must add at their DNS provider before the domain can receive mail.
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainDto'
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/DomainResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}:
get:
operationId: DomainsController_getDomain
x-speakeasy-name-override: retrieve
summary: Novu Retrieve a Domain by Name
description: Returns the domain configuration and the DNS records that must be in place. This is a pure read; call `domains.verify` to refresh verification status from DNS.
parameters:
- name: domain
required: true
in: path
schema:
type: string
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/DomainResponseDto'
'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:
- Domains
security:
- secretKey: []
patch:
operationId: DomainsController_updateDomain
x-speakeasy-name-override: update
summary: Novu Update a Domain
description: Updates optional domain fields. When `data` is provided, it replaces the entire metadata object; omit `data` to leave it unchanged.
parameters:
- name: domain
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDomainDto'
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/DomainResponseDto'
'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:
- Domains
security:
- secretKey: []
delete:
operationId: DomainsController_deleteDomain
x-speakeasy-name-override: delete
summary: Novu Delete a Domain
description: Removes the domain and cascades the deletion to all of its routes. Inbound mail for that domain stops being processed immediately.
parameters:
- name: domain
required: true
in: path
schema:
type: string
responses:
'204':
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: ''
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/verify:
post:
operationId: DomainsController_verifyDomain
x-speakeasy-name-override: verify
summary: Novu Verify a Domain
description: Performs a live DNS lookup to refresh the MX record status of the domain and updates the verification status accordingly. Returns the latest domain configuration.
parameters:
- name: domain
required: true
in: path
schema:
type: string
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/DomainResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/diagnose:
post:
operationId: DomainsController_diagnoseDomain
x-speakeasy-name-override: diagnose
summary: Novu Diagnose Inbound DNS for a Domain
description: Runs live DNS checks for inbound email readiness (MX correctness, apex CNAME collision, and common DNS blocklists for the Novu mail host). Returns structured issues with plain-language fixes.
parameters:
- name: domain
required: true
in: path
schema:
type: string
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/DiagnoseDomainResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/routes:
get:
operationId: DomainsController_listDomainRoutes
x-speakeasy-name-override: list
x-speakeasy-group: Domains.Routes
summary: Novu List Routes for a Domain
description: Returns a paginated list of routes attached to the domain. Optionally filter by an agent identifier to find routes pointing to a specific agent.
parameters:
- name: domain
required: true
in: path
schema:
type: string
- name: after
required: false
in: query
description: Cursor for pagination indicating the starting point after which to fetch results.
schema:
type: string
- name: before
required: false
in: query
description: Cursor for pagination indicating the ending point before which to fetch results.
schema:
type: string
- name: limit
required: false
in: query
description: Limit the number of items to return
example: 10
schema:
type: number
- name: orderDirection
required: false
in: query
description: Direction of sorting
schema:
enum:
- ASC
- DESC
type: string
- name: orderBy
required: false
in: query
description: Field to order by
schema:
type: string
- name: includeCursor
required: false
in: query
description: Include cursor item in response
schema:
type: boolean
- name: agentId
required: false
in: query
description: Agent identifier to filter routes by.
schema:
type: string
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/ListDomainRoutesResponseDto'
'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:
- Domains
security:
- secretKey: []
post:
operationId: DomainsController_createDomainRoute
x-speakeasy-name-override: create
x-speakeasy-group: Domains.Routes
summary: Novu Create a Route
description: Creates a route on the domain that forwards inbound mail addressed to `
@` to either a webhook or an agent. Each address on a domain may only have a single route.
parameters:
- name: domain
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DomainRouteDto'
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/DomainRouteResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/routes/{address}:
get:
operationId: DomainsController_getDomainRoute
x-speakeasy-name-override: retrieve
x-speakeasy-group: Domains.Routes
summary: Novu Retrieve a Route by Address
description: Returns the route bound to `@`. Use `*` as the address to retrieve the wildcard route for the domain.
parameters:
- name: domain
required: true
in: path
schema:
type: string
- name: address
required: true
in: path
schema:
type: string
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/DomainRouteResponseDto'
'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:
- Domains
security:
- secretKey: []
patch:
operationId: DomainsController_updateDomainRoute
x-speakeasy-max-method-params: 4
x-speakeasy-name-override: update
x-speakeasy-group: Domains.Routes
summary: Novu Update a Route
description: Updates the destination of the route bound to `@`. The address itself is the resource identity and cannot be changed; delete and recreate the route to rename it.
parameters:
- name: domain
required: true
in: path
schema:
type: string
- name: address
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDomainRouteDto'
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/DomainRouteResponseDto'
'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:
- Domains
security:
- secretKey: []
delete:
operationId: DomainsController_deleteDomainRoute
x-speakeasy-name-override: delete
x-speakeasy-group: Domains.Routes
summary: Novu Delete a Route
description: Removes the route bound to `@`. Inbound mail for that address will no longer be processed.
parameters:
- name: domain
required: true
in: path
schema:
type: string
- name: address
required: true
in: path
schema:
type: string
responses:
'204':
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: ''
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/routes/{address}/test:
post:
operationId: DomainsController_testDomainRoute
x-speakeasy-max-method-params: 4
x-speakeasy-name-override: test
x-speakeasy-group: Domains.Routes
summary: Novu Test an Inbound Route
description: 'Sends a synthetic inbound email through the same delivery path as production (outbound webhooks for webhook routes, signed HTTP to the agent for agent routes). Use `dryRun: true` to preview the payload without delivering.'
parameters:
- name: domain
required: true
in: path
schema:
type: string
- name: address
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TestDomainRouteDto'
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/TestDomainRouteResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/auto-configure:
get:
operationId: DomainsController_getDomainAutoConfigure
x-speakeasy-name-override: retrieve
x-speakeasy-group: Domains.AutoConfigure
summary: Novu Retrieve Auto-configuration Availability
description: Returns whether DNS auto-configuration (Domain Connect) is available for this domain. When `available` is `false`, `manualRecords` lists the DNS records the customer must add manually.
parameters:
- name: domain
required: true
in: path
schema:
type: string
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/DomainConnectStatusResponseDto'
'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:
- Domains
security:
- secretKey: []
/v1/domains/{domain}/auto-configure/start:
post:
operationId: DomainsController_startDomainAutoConfigure
x-speakeasy-name-override: start
x-speakeasy-group: Domains.AutoConfigure
summary: Novu Start DNS Auto-configuration
description: Generates a signed redirect URL the customer can follow to apply Novu DNS records at their DNS provider. After the provider completes the flow, it redirects back to `redirectUri`.
parameters:
- name: domain
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainConnectApplyUrlDto'
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/DomainConnectApplyUrlResponseDto'
'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:
- Domains
security:
- secretKey: []
components:
schemas:
TestDomainRouteAgentResultDto:
type: object
properties:
agentId:
type: string
httpStatus:
type: number
agentReply:
type: object
description: Parsed JSON body from the agent webhook response when JSON.
latencyMs:
type: number
required:
- agentId
- httpStatus
- latencyMs
CreateDomainConnectApplyUrlDto:
type: object
properties:
redirectUri:
type: string
description: Dashboard URL to return to after the DNS provider consent flow completes.
ListDomainsResponseDto:
type: object
properties:
data:
description: List of returned domains
type: array
items:
$ref: '#/components/schemas/DomainResponseDto'
next:
type:
- string
- 'null'
description: The cursor for the next page of results, or null if there are no more pages.
previous:
type:
- string
- 'null'
description: The cursor for the previous page of results, or null if this is the first page.
totalCount:
type: number
description: The total count of items (up to 50,000)
totalCountCapped:
type: boolean
description: Whether there are more than 50,000 results available
required:
- data
- next
- previous
- totalCount
- totalCountCapped
DomainConnectApplyUrlResponseDto:
type: object
properties:
applyUrl:
type: string
providerName:
type: string
redirectUri:
type: string
required:
- applyUrl
- providerName
- redirectUri
DiagnoseDomainResponseDto:
type: object
properties:
ok:
type: boolean
description: True when there are no error-severity issues
runAt:
type: string
description: ISO timestamp when the diagnostic run finished
checks:
type: array
items:
$ref: '#/components/schemas/DomainDiagnosticCheckDto'
issues:
type: array
items:
$ref: '#/components/schemas/DomainDiagnosticIssueDto'
required:
- ok
- runAt
- checks
- issues
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
TestDomainRouteResponseDto:
type: object
properties:
matched:
type: boolean
dryRun:
type: boolean
domainStatus:
enum:
- pending
- verified
type: string
mxRecordConfigured:
type: boolean
type:
enum:
- agent
- webhook
type: string
wouldDeliverTo:
type: string
description: Human-readable delivery target summary in dry-run mode.
payload:
type: object
description: The outbound payload (dry-run only).
additionalProperties: true
webhook:
$ref: '#/components/schemas/TestDomainRouteWebhookResultDto'
agent:
$ref: '#/components/schemas/TestDomainRouteAgentResultDto'
required:
- matched
- dryRun
ListDomainRoutesResponseDto:
type: object
properties:
data:
description: List of returned domain routes
type: array
items:
$ref: '#/components/schemas/DomainRouteResponseDto'
next:
type:
- string
- 'null'
description: The cursor for the next page of results, or null if there are no more pages.
previous:
type:
- string
- 'null'
description: The cursor for the previous page of results, or null if this is the first page.
totalCount:
type: number
description: The total count of items (up to 50,000)
totalCountCapped:
type: boolean
description: Whether there are more than 50,000 results available
required:
- data
- next
- previous
- totalCount
- totalCountCapped
UpdateDomainDto:
type: object
properties:
data:
type: object
description: Replaces domain metadata when provided (max 10 keys, 500 characters total for keys+values).
additionalProperties:
type: string
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
TestDomainRouteDto:
type: object
properties:
from:
$ref: '#/components/schemas/TestDomainRouteFromDto'
subject:
type: string
text:
type: string
html:
type: string
dryRun:
type: boolean
description: When true, returns the payload that would be delivered without invoking outbound webhooks or the agent HTTP endpoint.
required:
- from
- subject
DomainRouteDto:
type: object
properties:
address:
type: string
description: Inbox address local part (e.g. "support", "*")
agentId:
type: string
description: Agent identifier; required when type is agent, unused for webhook
type:
enum:
- agent
- webhook
type: string
data:
type: object
description: Optional string key-value metadata (max 10 keys, 500 characters total for keys+values).
additionalProperties:
type: string
required:
- address
- type
DomainDiagnosticCheckDto:
type: object
properties:
code:
enum:
- mx_missing
- mx_wrong_target
- mx_low_priority
- apex_cname_collision
- dnsbl_listed
type: string
status:
enum:
- pass
- fail
- skipped
type: string
latencyMs:
type: number
description: Round-trip time for this check in milliseconds
required:
- code
- status
- latencyMs
TestDomainRouteWebhookResultDto:
type: object
properties:
skipped:
type: boolean
description: True when outbound webhooks are disabled for this environment (nothing was emitted).
latencyMs:
type: number
required:
- latencyMs
DomainRouteResponseDto:
type: object
properties:
_id:
type: string
_domainId:
type: string
address:
type: string
agentId:
type: string
description: Internal id of the destination agent. Only present for agent routes.
type:
enum:
- agent
- webhook
type: string
_environmentId:
type: string
_organizationId:
type: string
createdAt:
type: string
updatedAt:
type: string
data:
type: object
description: String key-value metadata (max 10 keys, 500 characters total when set via API).
additionalProperties:
type: string
required:
- _id
- _domainId
- address
- type
- _environmentId
- _organizationId
- createdAt
- updatedAt
TestDomainRouteFromDto:
type: object
properties:
address:
type: string
name:
type: string
required:
- address
DomainDiagnosticIssueDto:
type: object
properties:
code:
enum:
- mx_missing
- mx_wrong_target
- mx_low_priority
- apex_cname_collision
- dnsbl_listed
type: string
severity:
enum:
- warn
- error
type: string
message:
type: string
fix:
type: string
description: Plain-language remediation guidance
required:
- code
- severity
- message
- fix
CreateDomainDto:
type: object
properties:
name:
type: string
description: The domain name (e.g. "recent.dev")
data:
type: object
description: Optional string key-value metadata (max 10 keys, 500 characters total for keys+values).
additionalProperties:
type: string
required:
- name
UpdateDomainRouteDto:
type: object
properties:
agentId:
type: string
description: Agent identifier; required when type is agent, ignored when type is webhook.
type:
enum:
- agent
- webhook
type: string
data:
type: object
description: Replaces route metadata when provided (max 10 keys, 500 characters total for keys+values).
additionalProperties:
type: string
DomainConnectStatusResponseDto:
type: object
properties:
available:
type: boolean
providerName:
type: string
providerId:
type: string
reason:
type: string
reasonCode:
enum:
- disabled
- discovery_not_configured
- unsupported_provider
- incomplete_configuration
- provider_settings_unavailable
- untrusted_provider_flow
- template_not_onboarded
type: string
manualRecords:
type: array
items:
$ref: '#/components/schemas/ExpectedDnsRecordDto'
required:
- available
- manualRecords
ExpectedDnsRecordDto:
type: object
properties:
type:
type: string
example: MX
name:
type: string
example: inbound
content:
type: string
example: inbound-smtp.us-east-1.amazonaws.com
ttl:
type: string
example: Auto
priority:
type: number
example: 10
required:
- type
- name
- content
- ttl
DomainResponseDto:
type: object
properties:
_id:
type: string
name:
type: string
status:
enum:
- pending
- verified
type: string
mxRecordConfigured:
type: boolean
dnsProvider:
type: string
_environmentId:
type: string
_organizationId:
type: string
createdAt:
type: string
updatedAt:
type: string
expectedDnsRecords:
type: array
items:
$ref: '#/components/schemas/ExpectedDnsRecordDto'
data:
type: object
description: String key-value metadata (max 10 keys, 500 characters total when set via API).
additionalProperties:
type: string
required:
- _id
- name
- status
- mxRecordConfigured
- _environmentId
- _organizationId
- createdAt
- updatedAt
headers:
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"
Content-Type:
required: true
description: The MIME type of the response body.
schema:
type: string
example: application/json
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