Bridge Endpoint Setup
The Bridge Endpoint is a single HTTP route on your application (/api/novu by default) that Novu Cloud calls to:
- Discover registered workflows (
GET) - Resolve step content for a given subscriber + payload (
POST) - Verify HMAC signatures on incoming requests
- Respond to
OPTIONSpreflight requests
serve wrapper that handles parsing, HMAC verification, and response shaping.
Defaults
| Default | Value |
|---|---|
| Path | /api/novu |
| Methods | GET, POST, OPTIONS |
| Required env var | NOVU_SECRET_KEY |
| HMAC | On when NODE_ENV !== "development" |
<your-app-base-url><path>. Example: https://api.acme.com/internal/novu.
Next.js (App Router)
Next.js (Pages Router)
Express
NestJS
Basic
With Dependency Injection
Remix
SvelteKit
Nuxt
H3
AWS Lambda
novu to API Gateway / Lambda Function URL. Use a stable URL for the bridge — avoid generated stage URLs that rotate.
Custom serve Function (Any Framework)
If your framework isn’t directly supported, wrap NovuRequestHandler:
| Method | Returns |
|---|---|
method() | "GET" | "POST" | "OPTIONS" |
headers(key) | string | undefined |
queryString(key) | string | undefined |
body() | parsed JSON body |
url() | full URL object |
transformResponse({ body, headers, status }) | the framework’s response object |
Tunnel URL vs Bridge URL
| Generated by | Use for | |
|---|---|---|
| Tunnel URL | npx novu@latest dev (e.g. https://<id>.novu.sh/api/novu) | Local development & Studio testing |
| Bridge URL | Your deployed app (e.g. https://api.acme.com/api/novu) | Production sync |
npx novu dev runs.
FAQ
Does the bridge endpoint need to be publicly accessible?
Yes. Novu Cloud calls it from autoscaled workers — there’s no static IP to allowlist. Use HTTPS in production.Can I use a path other than /api/novu?
Yes. Set the path you want when mounting serve and pass the full URL (https://app.com/<path>) when syncing.
Does the bridge use my application’s auth middleware?
You can place the bridge behind any middleware as long asserve receives untouched GET/POST/OPTIONS requests. Don’t attach JWT auth to the bridge — Novu authenticates with HMAC instead.