openapi: 3.1.0 info: title: Novu Activity Workflows 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: Workflows description: All notifications are sent via a workflow. Each workflow acts as a container for the logic and blueprint that are associated with a type of notification in your system. externalDocs: url: https://docs.novu.co/workflows paths: /v2/workflows: post: operationId: WorkflowController_create summary: Novu Create a Workflow description: Creates a new workflow in the Novu Cloud environment parameters: [] requestBody: required: true description: Workflow creation details content: application/json: schema: $ref: '#/components/schemas/CreateWorkflowDto' 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/WorkflowResponseDto' '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: - Workflows security: - secretKey: [] get: operationId: WorkflowController_searchWorkflows x-speakeasy-name-override: list summary: Novu List All Workflows description: Retrieves a list of workflows with optional filtering and pagination parameters: - name: limit required: false in: query description: Number of items to return per page example: 10 schema: type: number - name: offset required: false in: query description: Number of items to skip before starting to return results example: 0 schema: type: number - name: orderDirection required: false in: query description: Direction of sorting schema: $ref: '#/components/schemas/DirectionEnum' - name: orderBy required: false in: query description: Field to sort the results by schema: $ref: '#/components/schemas/WorkflowResponseDtoSortField' - name: query required: false in: query description: Search query to filter workflows schema: type: string - name: tags required: false in: query description: Filter workflows by tags schema: type: array items: type: string - name: status required: false in: query description: Filter workflows by status schema: type: array items: $ref: '#/components/schemas/WorkflowStatusEnum' 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/ListWorkflowResponse' '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: - Workflows security: - secretKey: [] /v2/workflows/{workflowId}/sync: put: operationId: WorkflowController_sync x-speakeasy-name-override: sync summary: Novu Sync a Workflow description: Synchronizes a workflow to the target environment parameters: - name: workflowId required: true in: path schema: type: string requestBody: required: true description: Sync workflow details content: application/json: schema: $ref: '#/components/schemas/SyncWorkflowDto' 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/WorkflowResponseDto' '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: - Workflows security: - secretKey: [] /v2/workflows/{workflowId}: put: operationId: WorkflowController_update summary: Novu Update a Workflow description: Updates the details of an existing workflow, here **workflowId** is the identifier of the workflow parameters: - name: workflowId required: true in: path schema: type: string requestBody: required: true description: Workflow update details content: application/json: schema: $ref: '#/components/schemas/UpdateWorkflowDto' 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/WorkflowResponseDto' '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: - Workflows security: - secretKey: [] get: operationId: WorkflowController_getWorkflow x-speakeasy-name-override: get summary: Novu Retrieve a Workflow description: Fetches details of a specific workflow by its unique identifier **workflowId** parameters: - name: workflowId required: true in: path schema: type: string - name: environmentId required: false in: query 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/WorkflowResponseDto' '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: - Workflows security: - secretKey: [] delete: operationId: WorkflowController_removeWorkflow x-speakeasy-name-override: delete summary: Novu Delete a Workflow description: Removes a specific workflow by its unique identifier **workflowId** parameters: - name: workflowId required: true in: path schema: type: string responses: '204': 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: - Workflows security: - secretKey: [] patch: operationId: WorkflowController_patchWorkflow x-speakeasy-name-override: patch summary: Novu Update a Workflow description: Partially updates a workflow by its unique identifier **workflowId** parameters: - name: workflowId required: true in: path schema: type: string requestBody: required: true description: Workflow patch details content: application/json: schema: $ref: '#/components/schemas/PatchWorkflowDto' 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/WorkflowResponseDto' '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: - Workflows security: - secretKey: [] /v2/workflows/{workflowId}/step/{stepId}/preview: post: operationId: WorkflowController_generatePreview x-speakeasy-name-override: generatePreview x-speakeasy-group: Workflows.Steps summary: Novu Generate a Step Preview description: Generates a preview for a specific workflow step by its unique identifier **stepId** parameters: - name: workflowId required: true in: path schema: type: string - name: stepId required: true in: path schema: type: string requestBody: required: true description: Preview generation details content: application/json: schema: $ref: '#/components/schemas/GeneratePreviewRequestDto' 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/GeneratePreviewResponseDto' '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: - Workflows security: - secretKey: [] /v2/workflows/{workflowId}/steps/{stepId}: get: operationId: WorkflowController_getWorkflowStepData x-speakeasy-name-override: retrieve x-speakeasy-group: Workflows.Steps summary: Novu Retrieve Workflow Step description: Retrieves data for a specific step in a workflow parameters: - name: workflowId required: true in: path schema: type: string - name: stepId 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/StepResponseDto' '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: - Workflows security: - secretKey: [] components: schemas: ContentIssueEnum: type: string description: Type of step content issue enum: - ILLEGAL_VARIABLE_IN_CONTROL_VALUE - INVALID_FILTER_ARG_IN_VARIABLE - INVALID_URL - MISSING_VALUE - TIER_LIMIT_EXCEEDED ChatStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Chat step. oneOf: - $ref: '#/components/schemas/ChatControlDto' - type: object additionalProperties: true required: - name - type WorkflowResponseDto: type: object properties: name: type: string description: Name of the workflow description: type: string description: Description of the workflow tags: description: Tags associated with the workflow type: array items: type: string active: type: boolean description: Whether the workflow is active default: false validatePayload: type: boolean description: Enable or disable payload schema validation payloadSchema: type: - object - 'null' description: The payload JSON Schema for the workflow additionalProperties: true isTranslationEnabled: type: boolean description: Enable or disable translations for this workflow default: false _id: type: string description: Database identifier of the workflow workflowId: type: string description: Workflow identifier slug: type: string description: Slug of the workflow updatedAt: type: string description: Last updated timestamp createdAt: type: string description: Creation timestamp updatedBy: description: User who last updated the workflow allOf: - $ref: '#/components/schemas/UserResponseDto' lastPublishedAt: type: - string - 'null' description: Timestamp of the last workflow publication lastPublishedBy: description: User who last published the workflow allOf: - $ref: '#/components/schemas/UserResponseDto' steps: type: array description: Steps of the workflow items: oneOf: - $ref: '#/components/schemas/InAppStepResponseDto' - $ref: '#/components/schemas/EmailStepResponseDto' - $ref: '#/components/schemas/SmsStepResponseDto' - $ref: '#/components/schemas/PushStepResponseDto' - $ref: '#/components/schemas/ChatStepResponseDto' - $ref: '#/components/schemas/DelayStepResponseDto' - $ref: '#/components/schemas/DigestStepResponseDto' - $ref: '#/components/schemas/CustomStepResponseDto' - $ref: '#/components/schemas/ThrottleStepResponseDto' - $ref: '#/components/schemas/HttpRequestStepResponseDto' discriminator: propertyName: type mapping: in_app: '#/components/schemas/InAppStepResponseDto' email: '#/components/schemas/EmailStepResponseDto' sms: '#/components/schemas/SmsStepResponseDto' push: '#/components/schemas/PushStepResponseDto' chat: '#/components/schemas/ChatStepResponseDto' delay: '#/components/schemas/DelayStepResponseDto' digest: '#/components/schemas/DigestStepResponseDto' custom: '#/components/schemas/CustomStepResponseDto' throttle: '#/components/schemas/ThrottleStepResponseDto' http_request: '#/components/schemas/HttpRequestStepResponseDto' origin: $ref: '#/components/schemas/ResourceOriginEnum' preferences: description: Preferences for the workflow allOf: - $ref: '#/components/schemas/WorkflowPreferencesResponseDto' status: $ref: '#/components/schemas/WorkflowStatusEnum' issues: type: object description: Runtime issues for workflow creation and update additionalProperties: $ref: '#/components/schemas/RuntimeIssueDto' lastTriggeredAt: type: - string - 'null' description: Timestamp of the last workflow trigger payloadExample: type: - object - 'null' description: Generated payload example based on the payload schema additionalProperties: true severity: $ref: '#/components/schemas/SeverityLevelEnum' required: - name - _id - workflowId - slug - updatedAt - createdAt - steps - origin - preferences - status - severity UpdateWorkflowDto: type: object properties: name: type: string description: Name of the workflow description: type: string description: Description of the workflow tags: description: Tags associated with the workflow type: array items: type: string active: type: boolean description: Whether the workflow is active default: false validatePayload: type: boolean description: Enable or disable payload schema validation payloadSchema: type: - object - 'null' description: The payload JSON Schema for the workflow additionalProperties: true isTranslationEnabled: type: boolean description: Enable or disable translations for this workflow default: false workflowId: type: string description: Workflow ID (allowed only for code-first workflows) steps: type: array description: Steps of the workflow items: oneOf: - $ref: '#/components/schemas/InAppStepUpsertDto' - $ref: '#/components/schemas/EmailStepUpsertDto' - $ref: '#/components/schemas/SmsStepUpsertDto' - $ref: '#/components/schemas/PushStepUpsertDto' - $ref: '#/components/schemas/ChatStepUpsertDto' - $ref: '#/components/schemas/DelayStepUpsertDto' - $ref: '#/components/schemas/DigestStepUpsertDto' - $ref: '#/components/schemas/CustomStepUpsertDto' - $ref: '#/components/schemas/HttpRequestStepUpsertDto' discriminator: propertyName: type mapping: in_app: '#/components/schemas/InAppStepUpsertDto' email: '#/components/schemas/EmailStepUpsertDto' sms: '#/components/schemas/SmsStepUpsertDto' push: '#/components/schemas/PushStepUpsertDto' chat: '#/components/schemas/ChatStepUpsertDto' delay: '#/components/schemas/DelayStepUpsertDto' digest: '#/components/schemas/DigestStepUpsertDto' custom: '#/components/schemas/CustomStepUpsertDto' http_request: '#/components/schemas/HttpRequestStepUpsertDto' preferences: description: Workflow preferences allOf: - $ref: '#/components/schemas/PreferencesRequestDto' origin: $ref: '#/components/schemas/ResourceOriginEnum' severity: $ref: '#/components/schemas/SeverityLevelEnum' required: - name - steps - preferences - origin CustomControlDto: type: object properties: custom: type: object description: Custom control values for the step. additionalProperties: true CustomStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Custom step. oneOf: - $ref: '#/components/schemas/CustomControlDto' - type: object additionalProperties: true required: - name - type InAppStepResponseDto: type: object properties: controls: description: Controls metadata for the in-app step allOf: - $ref: '#/components/schemas/InAppControlsMetadataResponseDto' controlValues: description: Control values for the in-app step additionalProperties: true allOf: - $ref: '#/components/schemas/InAppControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId HttpRequestKeyValuePairDto: type: object properties: key: type: string description: Key of the key-value pair value: type: string description: Value of the key-value pair required: - key - value ThrottleControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Throttle allOf: - $ref: '#/components/schemas/ThrottleControlDto' required: - values 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 InAppRenderOutput: type: object properties: subject: type: string description: Subject of the in-app notification body: type: string description: Body of the in-app notification avatar: type: string description: Avatar for the in-app notification primaryAction: description: Primary action details allOf: - $ref: '#/components/schemas/ActionDto' secondaryAction: description: Secondary action details allOf: - $ref: '#/components/schemas/ActionDto' data: type: object description: Additional data additionalProperties: true redirect: description: Redirect details allOf: - $ref: '#/components/schemas/RedirectDto' required: - body HttpRequestStepResponseDto: type: object properties: controls: description: Controls metadata for the HTTP request step allOf: - $ref: '#/components/schemas/HttpRequestControlsMetadataResponseDto' controlValues: description: Control values for the HTTP request step additionalProperties: true allOf: - $ref: '#/components/schemas/HttpRequestControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId DelayControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Delay allOf: - $ref: '#/components/schemas/DelayControlDto' required: - values InAppStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the In-App step. oneOf: - $ref: '#/components/schemas/InAppControlDto' - type: object additionalProperties: true required: - name - type ChatRenderOutput: type: object properties: body: type: string description: Body of the chat message required: - body StepTypeEnum: type: string description: Type of the step enum: - in_app - email - sms - chat - push - digest - trigger - delay - throttle - custom - http_request WorkflowListResponseDto: type: object properties: name: type: string description: Name of the workflow tags: type: array description: Tags associated with the workflow items: type: string updatedAt: type: string description: Last updated timestamp createdAt: type: string description: Creation timestamp updatedBy: description: User who last updated the workflow allOf: - $ref: '#/components/schemas/UserResponseDto' lastPublishedAt: type: - string - 'null' description: Timestamp of the last workflow publication lastPublishedBy: description: User who last published the workflow allOf: - $ref: '#/components/schemas/UserResponseDto' _id: type: string description: Unique database identifier workflowId: type: string description: Workflow identifier slug: type: string description: Workflow slug status: $ref: '#/components/schemas/WorkflowStatusEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' lastTriggeredAt: type: - string - 'null' description: Timestamp of the last workflow trigger stepTypeOverviews: type: array description: Overview of step types in the workflow items: $ref: '#/components/schemas/StepTypeEnum' isTranslationEnabled: type: boolean description: Is translation enabled for the workflow steps: description: Steps of the workflow type: array items: $ref: '#/components/schemas/StepListResponseDto' required: - name - updatedAt - createdAt - _id - workflowId - slug - status - origin - stepTypeOverviews - steps LookBackWindowDto: type: object properties: amount: type: number description: Amount of time for the look-back window. minimum: 1 unit: type: string description: Unit of time for the look-back window. enum: - seconds - minutes - hours - days - weeks - months required: - amount - unit ChannelCredentials: type: object properties: webhookUrl: type: string description: Webhook URL used by chat app integrations. The webhook should be obtained from the chat app provider. example: https://example.com/webhook channel: type: string description: Channel specification for Mattermost chat notifications. example: general deviceTokens: description: Contains an array of the subscriber device tokens for a given provider. Used on Push integrations. example: - token1 - token2 - token3 type: array items: type: string alertUid: type: string description: Alert UID for Grafana on-call webhook payload. example: 12345-abcde title: type: string description: Title to be used with Grafana on-call webhook. example: Critical Alert imageUrl: type: string description: Image URL property for Grafana on-call webhook. example: https://example.com/image.png state: type: string description: State property for Grafana on-call webhook. example: resolved externalUrl: type: string description: Link to upstream details property for Grafana on-call webhook. example: https://example.com/details UiSchemaGroupEnum: type: string description: Group of the UI Schema enum: - IN_APP - EMAIL - DIGEST - DELAY - THROTTLE - SMS - CHAT - PUSH - SKIP - LAYOUT - HTTP_REQUEST SmsStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the SMS step. oneOf: - $ref: '#/components/schemas/SmsControlDto' - type: object additionalProperties: true required: - name - type UiSchema: type: object properties: group: $ref: '#/components/schemas/UiSchemaGroupEnum' properties: type: object description: Properties of the UI Schema additionalProperties: $ref: '#/components/schemas/UiSchemaProperty' PushRenderOutput: type: object properties: subject: type: string description: Subject of the push notification body: type: string description: Body of the push notification required: - subject - body CreateWorkflowDto: type: object properties: name: type: string description: Name of the workflow description: type: string description: Description of the workflow tags: description: Tags associated with the workflow type: array items: type: string active: type: boolean description: Whether the workflow is active default: false validatePayload: type: boolean description: Enable or disable payload schema validation payloadSchema: type: - object - 'null' description: The payload JSON Schema for the workflow additionalProperties: true isTranslationEnabled: type: boolean description: Enable or disable translations for this workflow default: false workflowId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the workflow steps: type: array description: Steps of the workflow items: oneOf: - $ref: '#/components/schemas/InAppStepUpsertDto' - $ref: '#/components/schemas/EmailStepUpsertDto' - $ref: '#/components/schemas/SmsStepUpsertDto' - $ref: '#/components/schemas/PushStepUpsertDto' - $ref: '#/components/schemas/ChatStepUpsertDto' - $ref: '#/components/schemas/DelayStepUpsertDto' - $ref: '#/components/schemas/DigestStepUpsertDto' - $ref: '#/components/schemas/ThrottleStepUpsertDto' - $ref: '#/components/schemas/CustomStepUpsertDto' - $ref: '#/components/schemas/HttpRequestStepUpsertDto' discriminator: propertyName: type mapping: in_app: '#/components/schemas/InAppStepUpsertDto' email: '#/components/schemas/EmailStepUpsertDto' sms: '#/components/schemas/SmsStepUpsertDto' push: '#/components/schemas/PushStepUpsertDto' chat: '#/components/schemas/ChatStepUpsertDto' delay: '#/components/schemas/DelayStepUpsertDto' digest: '#/components/schemas/DigestStepUpsertDto' throttle: '#/components/schemas/ThrottleStepUpsertDto' custom: '#/components/schemas/CustomStepUpsertDto' http_request: '#/components/schemas/HttpRequestStepUpsertDto' __source: $ref: '#/components/schemas/WorkflowCreationSourceEnum' preferences: description: Workflow preferences allOf: - $ref: '#/components/schemas/PreferencesRequestDto' severity: $ref: '#/components/schemas/SeverityLevelEnum' required: - name - workflowId - steps RuntimeIssueDto: type: object properties: {} WorkflowStatusEnum: type: string description: Status of the workflow enum: - ACTIVE - INACTIVE - ERROR ThrottleStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Throttle step. oneOf: - $ref: '#/components/schemas/ThrottleControlDto' - type: object additionalProperties: true required: - name - type HttpRequestControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to HTTP Request step allOf: - $ref: '#/components/schemas/HttpRequestControlDto' required: - values PatchWorkflowDto: type: object properties: active: type: boolean description: Activate or deactivate the workflow name: type: string description: New name for the workflow description: type: string description: Updated description of the workflow tags: type: array description: Tags associated with the workflow items: type: string payloadSchema: type: - object - 'null' description: The payload JSON Schema for the workflow additionalProperties: true validatePayload: type: boolean description: Enable or disable payload schema validation isTranslationEnabled: type: boolean description: Enable or disable translations for this workflow ChannelPreferenceDto: type: object properties: enabled: type: boolean description: A flag specifying if notification delivery is enabled for the channel. If true, notification delivery is enabled. default: true required: - enabled StepResponseDto: type: object properties: controls: description: Controls metadata for the step allOf: - $ref: '#/components/schemas/ControlsMetadataDto' controlValues: type: object description: Control values for the step (alias for controls.values) additionalProperties: true variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId WorkflowPreferencesDto: type: object properties: all: description: A preference for the workflow. The values specified here will be used if no preference is specified for a channel. oneOf: - $ref: '#/components/schemas/WorkflowPreferenceDto' allOf: - $ref: '#/components/schemas/WorkflowPreferenceDto' channels: type: object description: Preferences for different communication channels additionalProperties: $ref: '#/components/schemas/ChannelPreferenceDto' example: email: enabled: true sms: enabled: false required: - all - channels ChatControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Chat allOf: - $ref: '#/components/schemas/ChatControlDto' required: - values DigestControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Digest allOf: - $ref: '#/components/schemas/DigestControlDto' required: - values PreviewErrorDto: type: object properties: title: type: string description: Short error title message: type: string description: Detailed error message hint: type: string description: Actionable hint for the user required: - title - message - hint WorkflowResponseDtoSortField: type: string enum: - createdAt - updatedAt - name - lastTriggeredAt ChatStepResponseDto: type: object properties: controls: description: Controls metadata for the chat step allOf: - $ref: '#/components/schemas/ChatControlsMetadataResponseDto' controlValues: description: Control values for the chat step additionalProperties: true allOf: - $ref: '#/components/schemas/ChatControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId WorkflowPreferencesResponseDto: type: object properties: user: description: User-specific workflow preferences allOf: - $ref: '#/components/schemas/WorkflowPreferencesDto' default: description: Default workflow preferences allOf: - $ref: '#/components/schemas/WorkflowPreferencesDto' required: - default EmailRenderOutput: type: object properties: subject: type: string description: Subject of the email body: type: string description: Body of the email required: - subject - body ResourceOriginEnum: type: string description: Origin of the layout enum: - novu-cloud - novu-cloud-v1 - external PushControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true subject: type: string description: Subject/title of the push notification. body: type: string description: Body content of the push notification. IntegrationIssueEnum: type: string description: Type of integration issue enum: - MISSING_INTEGRATION - INBOX_NOT_CONNECTED DelayControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true type: type: string description: Type of the delay. Currently only 'regular' is supported by the schema. enum: - regular - timed default: regular amount: type: number description: Amount of time to delay. minimum: 1 unit: type: string description: Unit of time for the delay amount. enum: - seconds - minutes - hours - days - weeks - months cron: type: string description: Cron expression for the delay. Min length 1. required: - type DirectionEnum: type: string enum: - ASC - DESC ListWorkflowResponse: type: object properties: workflows: description: List of workflows type: array items: $ref: '#/components/schemas/WorkflowListResponseDto' totalCount: type: number description: Total number of workflows required: - workflows - totalCount DigestRegularOutput: type: object properties: amount: type: number description: Amount of time units unit: $ref: '#/components/schemas/TimeUnitEnum' digestKey: type: string description: Optional digest key lookBackWindow: type: object description: Look back window configuration required: - amount - unit ControlsMetadataDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' StepIssuesDto: type: object properties: controls: type: object description: Controls-related issues additionalProperties: type: array items: $ref: '#/components/schemas/StepContentIssueDto' integration: type: object description: Integration-related issues additionalProperties: type: array items: $ref: '#/components/schemas/StepIntegrationIssue' CustomControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Custom step allOf: - $ref: '#/components/schemas/CustomControlDto' required: - values ThrottleStepResponseDto: type: object properties: controls: description: Controls metadata for the throttle step allOf: - $ref: '#/components/schemas/ThrottleControlsMetadataResponseDto' controlValues: description: Control values for the throttle step additionalProperties: true allOf: - $ref: '#/components/schemas/ThrottleControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId InAppControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to In-App allOf: - $ref: '#/components/schemas/InAppControlDto' required: - values UiComponentEnum: type: string description: Component type for the UI Schema Property enum: - EMAIL_EDITOR_SELECT - LAYOUT_SELECT - BLOCK_EDITOR - EMAIL_BODY - TEXT_FULL_LINE - TEXT_INLINE_LABEL - IN_APP_BODY - IN_APP_AVATAR - IN_APP_PRIMARY_SUBJECT - IN_APP_BUTTON_DROPDOWN - IN_APP_DISABLE_SANITIZATION_SWITCH - DISABLE_SANITIZATION_SWITCH - URL_TEXT_BOX - DIGEST_AMOUNT - DIGEST_UNIT - DIGEST_TYPE - DIGEST_KEY - DIGEST_CRON - DELAY_AMOUNT - DELAY_UNIT - DELAY_TYPE - DELAY_CRON - DELAY_DYNAMIC_KEY - THROTTLE_TYPE - THROTTLE_WINDOW - THROTTLE_UNIT - THROTTLE_DYNAMIC_KEY - THROTTLE_THRESHOLD - THROTTLE_KEY - EXTEND_TO_SCHEDULE - SMS_BODY - CHAT_BODY - PUSH_BODY - PUSH_SUBJECT - QUERY_EDITOR - DATA - LAYOUT_EMAIL - DESTINATION_METHOD - DESTINATION_URL - DESTINATION_HEADERS - DESTINATION_BODY - DESTINATION_RESPONSE_BODY_SCHEMA - DESTINATION_ENFORCE_SCHEMA_VALIDATION - DESTINATION_CONTINUE_ON_FAILURE - DESTINATION_TIMEOUT PreferencesRequestDto: type: object properties: user: description: User workflow preferences oneOf: - $ref: '#/components/schemas/WorkflowPreferencesDto' workflow: description: Workflow-specific preferences allOf: - $ref: '#/components/schemas/WorkflowPreferencesDto' SmsStepResponseDto: type: object properties: controls: description: Controls metadata for the SMS step allOf: - $ref: '#/components/schemas/SmsControlsMetadataResponseDto' controlValues: description: Control values for the SMS step additionalProperties: true allOf: - $ref: '#/components/schemas/SmsControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId ChannelSettingsDto: type: object properties: providerId: $ref: '#/components/schemas/ChatOrPushProviderEnum' integrationIdentifier: type: string description: The integration identifier credentials: description: Credentials payload for the specified provider allOf: - $ref: '#/components/schemas/ChannelCredentials' _integrationId: type: string description: The unique identifier of the integration associated with this channel. required: - providerId - credentials - _integrationId DelayStepResponseDto: type: object properties: controls: description: Controls metadata for the delay step allOf: - $ref: '#/components/schemas/DelayControlsMetadataResponseDto' controlValues: description: Control values for the delay step additionalProperties: true allOf: - $ref: '#/components/schemas/DelayControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId SyncWorkflowDto: type: object properties: targetEnvironmentId: type: string description: Target environment identifier to sync the workflow to required: - targetEnvironmentId PushControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Push allOf: - $ref: '#/components/schemas/PushControlDto' required: - values SmsControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true body: type: string description: Content of the SMS message. EmailControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to Email allOf: - $ref: '#/components/schemas/EmailControlDto' required: - values GeneratePreviewResponseDto: type: object properties: previewPayloadExample: description: Preview payload example allOf: - $ref: '#/components/schemas/PreviewPayloadDto' schema: type: - object - 'null' description: The payload schema that was used to generate the preview payload example additionalProperties: true novuSignature: type: string description: Sample novu-signature header value for HTTP request steps result: description: Preview result oneOf: - type: object additionalProperties: true - properties: type: enum: - email preview: $ref: '#/components/schemas/EmailRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - email preview: $ref: '#/components/schemas/EmailRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - in_app preview: $ref: '#/components/schemas/InAppRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - sms preview: $ref: '#/components/schemas/SmsRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - push preview: $ref: '#/components/schemas/PushRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - chat preview: $ref: '#/components/schemas/ChatRenderOutput' error: $ref: '#/components/schemas/PreviewErrorDto' - properties: type: enum: - delay preview: $ref: '#/components/schemas/DigestRegularOutput' - properties: type: enum: - digest preview: $ref: '#/components/schemas/DigestRegularOutput' required: - previewPayloadExample - result PreviewPayloadDto: type: object properties: subscriber: description: Partial subscriber information allOf: - $ref: '#/components/schemas/SubscriberResponseDtoOptional' payload: type: object description: Payload data additionalProperties: true steps: type: object description: Steps data additionalProperties: true context: type: object additionalProperties: oneOf: - type: string description: Simple context id example: org-acme - type: object description: Rich context object with id and optional data properties: id: type: string example: org-acme data: type: object description: Optional additional context data additionalProperties: true example: name: Acme Corp region: us-east-1 required: - id env: type: object description: Environment variables data additionalProperties: true 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 StepListResponseDto: type: object properties: slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' required: - slug - type 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 WorkflowCreationSourceEnum: type: string description: Source of workflow creation default: editor enum: - template_store - editor - notification_directory - onboarding_digest_demo - onboarding_in_app - empty_state - dropdown - onboarding_get_started - bridge - dashboard - ai TimeUnitEnum: type: string description: Time unit enum: - seconds - minutes - hours - days - weeks - months ThrottleControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true type: type: string description: The type of throttle window. enum: - fixed - dynamic default: fixed amount: type: number description: The amount of time for the throttle window (required for fixed type). minimum: 1 unit: type: string description: The unit of time for the throttle window (required for fixed type). enum: - minutes - hours - days dynamicKey: type: string description: Key path to retrieve dynamic window value (required for dynamic type). example: payload.timestamp threshold: type: number description: The maximum number of executions allowed within the window. Defaults to 1. minimum: 1 default: 1 throttleKey: type: string description: Optional key for grouping throttle rules. If not provided, defaults to workflow and subscriber combination. required: - type GeneratePreviewRequestDto: type: object properties: controlValues: type: object description: Optional control values additionalProperties: true previewPayload: description: Optional payload for preview generation allOf: - $ref: '#/components/schemas/PreviewPayloadDto' StepIntegrationIssue: type: object properties: issueType: $ref: '#/components/schemas/IntegrationIssueEnum' variableName: type: string description: Name of the variable related to the issue message: type: string description: Detailed message describing the issue required: - issueType - message SmsRenderOutput: type: object properties: body: type: string description: Body of the SMS message required: - body PushStepResponseDto: type: object properties: controls: description: Controls metadata for the push step allOf: - $ref: '#/components/schemas/PushControlsMetadataResponseDto' controlValues: description: Control values for the push step additionalProperties: true allOf: - $ref: '#/components/schemas/PushControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId EmailStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Email step. oneOf: - $ref: '#/components/schemas/EmailControlDto' - type: object additionalProperties: true required: - name - type WorkflowPreferenceDto: type: object properties: enabled: type: boolean description: A flag specifying if notification delivery is enabled for the workflow. If true, notification delivery is enabled by default for all channels. This setting can be overridden by the channel preferences. default: true readOnly: type: boolean description: A flag specifying if the preference is read-only. If true, the preference cannot be changed by the Subscriber. default: false required: - enabled - readOnly SubscriberResponseDtoOptional: type: object properties: _id: type: string description: The internal ID generated by Novu for your subscriber. This ID does not match the `subscriberId` used in your queries. Refer to `subscriberId` for that identifier. firstName: type: - string - 'null' description: The first name of the subscriber. lastName: type: - string - 'null' description: The last name of the subscriber. email: type: - string - 'null' description: The email address of the subscriber. phone: type: - string - 'null' description: The phone number of the subscriber. avatar: type: - string - 'null' description: The URL of the subscriber's avatar image. locale: type: - string - 'null' description: The locale setting of the subscriber, indicating their preferred language or region. channels: description: An array of channel settings associated with the subscriber. type: array items: $ref: '#/components/schemas/ChannelSettingsDto' topics: description: An array of topics that the subscriber is subscribed to. deprecated: true type: array items: type: string isOnline: type: - boolean - 'null' description: Indicates whether the subscriber is currently online. lastOnlineAt: type: - string - 'null' description: The timestamp indicating when the subscriber was last online, in ISO 8601 format. __v: type: number description: The version of the subscriber document. data: type: - object - 'null' description: Additional custom data for the subscriber additionalProperties: true timezone: type: - string - 'null' description: Timezone of the subscriber HttpRequestStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the HTTP Request step. oneOf: - $ref: '#/components/schemas/HttpRequestControlDto' - type: object additionalProperties: true required: - name - type RedirectDto: type: object properties: url: type: string description: URL to redirect to target: type: string description: Target attribute for the redirect link enum: - _self - _blank - _parent - _top - _unfencedTop required: - url ChatControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true body: type: string description: Content of the chat message. EmailControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true subject: type: string description: Subject of the email. minLength: 1 body: type: string description: Body content of the email, either a valid Maily JSON object, or html string. default: '' editorType: type: string description: Type of editor to use for the body. enum: - block - html default: block disableOutputSanitization: type: boolean description: Disable sanitization of the output. default: false layoutId: type: - string - 'null' description: Layout ID to use for the email. Null means no layout, undefined means default layout. required: - subject - body DelayStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Delay step. oneOf: - $ref: '#/components/schemas/DelayControlDto' - type: object additionalProperties: true required: - name - type DigestStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Digest step. oneOf: - $ref: '#/components/schemas/DigestControlDto' - type: object additionalProperties: true required: - name - type SeverityLevelEnum: type: string description: Severity of the workflow enum: - high - medium - low - none HttpMethodEnum: type: string description: HTTP method enum: - GET - POST - PUT - DELETE - PATCH UserResponseDto: type: object properties: _id: type: string description: User ID firstName: type: - string - 'null' description: User first name lastName: type: - string - 'null' description: User last name externalId: type: - string - 'null' description: User external ID required: - _id StepContentIssueDto: type: object properties: issueType: $ref: '#/components/schemas/ContentIssueEnum' variableName: type: string description: Name of the variable related to the issue message: type: string description: Detailed message describing the issue required: - issueType - message DigestStepResponseDto: type: object properties: controls: description: Controls metadata for the digest step allOf: - $ref: '#/components/schemas/DigestControlsMetadataResponseDto' controlValues: description: Control values for the digest step additionalProperties: true allOf: - $ref: '#/components/schemas/DigestControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId HttpRequestControlDto: type: object properties: method: $ref: '#/components/schemas/HttpMethodEnum' url: type: string description: Target URL for the HTTP request headers: description: Request headers as key-value pairs type: array items: $ref: '#/components/schemas/HttpRequestKeyValuePairDto' body: description: Request body as a raw JSON string. Key-value arrays are supported for legacy workflows. oneOf: - type: string - type: array items: $ref: '#/components/schemas/HttpRequestKeyValuePairDto' responseBodySchema: type: object description: JSON schema to validate response body against additionalProperties: true enforceSchemaValidation: type: boolean description: Whether to enforce response body schema validation continueOnFailure: type: boolean description: Whether to continue workflow execution on failure required: - method - url DigestControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true type: type: string description: The type of digest strategy. Determines which fields are applicable. enum: - regular - timed amount: type: number description: The amount of time for the digest interval (for REGULAR type). Min 1. minimum: 1 unit: type: string description: The unit of time for the digest interval (for REGULAR type). enum: - seconds - minutes - hours - days - weeks - months lookBackWindow: description: Configuration for look-back window (for REGULAR type). allOf: - $ref: '#/components/schemas/LookBackWindowDto' cron: type: string description: Cron expression for TIMED digest. Min length 1. digestKey: type: string description: Specify a custom key for digesting events instead of the default event key. CustomStepResponseDto: type: object properties: controls: description: Controls metadata for the custom step allOf: - $ref: '#/components/schemas/CustomControlsMetadataResponseDto' controlValues: description: Control values for the custom step additionalProperties: true allOf: - $ref: '#/components/schemas/CustomControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId UiSchemaProperty: type: object properties: placeholder: description: Placeholder for the UI Schema Property anyOf: - type: string - type: number - type: boolean - type: object additionalProperties: true - type: array items: anyOf: - type: string - type: number - type: boolean - type: object additionalProperties: true component: $ref: '#/components/schemas/UiComponentEnum' properties: type: object description: Properties of the UI Schema additionalProperties: $ref: '#/components/schemas/UiSchemaProperty' required: - component InAppControlDto: type: object properties: skip: type: object description: JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference. example: and: - ==: - var: payload.tier - pro - ==: - var: subscriber.data.role - admin - '>': - var: payload.amount - '4' additionalProperties: true body: type: string description: Content/body of the in-app message. Required if subject is empty. minLength: 1 subject: type: string description: Subject/title of the in-app message. Required if body is empty. minLength: 1 avatar: type: string description: URL for an avatar image. Must be a valid URL or start with / or {{ variable }}. primaryAction: description: Primary action button details. allOf: - $ref: '#/components/schemas/ActionDto' secondaryAction: description: Secondary action button details. allOf: - $ref: '#/components/schemas/ActionDto' redirect: description: Redirection URL configuration for the main content click (if no actions defined/clicked).. allOf: - $ref: '#/components/schemas/RedirectDto' disableOutputSanitization: type: boolean description: Disable sanitization of the output. default: false data: type: object description: Additional data payload for the step. additionalProperties: true SmsControlsMetadataResponseDto: type: object properties: dataSchema: type: object description: JSON Schema for data additionalProperties: true uiSchema: description: UI Schema for rendering allOf: - $ref: '#/components/schemas/UiSchema' values: description: Control values specific to SMS allOf: - $ref: '#/components/schemas/SmsControlDto' required: - values EmailStepResponseDto: type: object properties: controls: description: Controls metadata for the email step allOf: - $ref: '#/components/schemas/EmailControlsMetadataResponseDto' controlValues: description: Control values for the email step additionalProperties: true allOf: - $ref: '#/components/schemas/EmailControlDto' variables: type: object description: JSON Schema for variables, follows the JSON Schema standard additionalProperties: true stepId: type: string description: Unique identifier of the step _id: type: string description: Database identifier of the step name: type: string description: Name of the step slug: type: string description: Slug of the step type: $ref: '#/components/schemas/StepTypeEnum' origin: $ref: '#/components/schemas/ResourceOriginEnum' workflowId: type: string description: Workflow identifier workflowDatabaseId: type: string description: Workflow database identifier issues: description: Issues associated with the step allOf: - $ref: '#/components/schemas/StepIssuesDto' stepResolverHash: type: string description: Hash identifying the deployed Cloudflare Worker for this step required: - controls - variables - stepId - _id - name - slug - type - origin - workflowId - workflowDatabaseId PushStepUpsertDto: type: object properties: _id: type: string description: Database identifier of the step. Used for updating the step. stepId: type: string pattern: SLUG_IDENTIFIER_REGEX description: Unique identifier for the step name: type: string description: Name of the step type: $ref: '#/components/schemas/StepTypeEnum' controlValues: description: Control values for the Push step. oneOf: - $ref: '#/components/schemas/PushControlDto' - type: object additionalProperties: true required: - name - type ChatOrPushProviderEnum: type: string description: The provider identifier for the credentials enum: - slack - discord - msteams - mattermost - ryver - zulip - grafana-on-call - getstream - rocket-chat - whatsapp-business - chat-webhook - novu-slack - telegram - fcm - apns - expo - one-signal - pushpad - push-webhook - pusher-beams - appio ActionDto: type: object properties: label: type: string description: Label for the action button. redirect: description: Redirect configuration for the action. allOf: - $ref: '#/components/schemas/RedirectDto' headers: 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-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' 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" 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' 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