Signed webhooks with traceable retries.
Emit events from your NestJS controllers while Nestarc handles fan-out, HMAC signatures, retries, replay, delivery logs, and the public operational signals buyers expect before production rollout.
Delivery control plane
One event, multiple attempts, complete operational context
message.created
Fan-out prepared for 3 endpoints
delivery.http
503 received, next attempt in 30s
delivery.signed
200 OK with signature headers
orders.controller.ts
@Controller('orders')
export class OrdersController {
@Post()
@WebhookEmit('order.created', { await: true })
create(@Body() dto: CreateOrderDto) {
return this.orders.create(dto);
}
}status
Public status page
Live component health and incident updates at status.nestarc.dev.
support
Documented support paths
Reliability & Support Policy, support email, and security contact are public.
replay
Replay after recovery
Retry failed deliveries once an upstream endpoint is healthy again.
engine
Open-source engine
The delivery engine remains portable if your architecture evolves.
Core capabilities
NestJS-friendly delivery, with production-minded operations.
The public site now leads with the same operational concepts the dashboard exposes after signup.
@WebhookEmit decorator
Emit events from controllers with one line. The interceptor handles serialization, conditional emission, and serverless-safe awaiting.
NestJS-native module
`WebhookClientModule.forRoot()` and `forRootAsync()` fit naturally into Nest applications with DI, config integration, and typed errors.
Managed retry engine
Exponential backoff, circuit breaker protection, and SSRF defense run in the platform so your app code stays focused on business logic.
Signed, logged, replayable
Every payload is signed with HMAC-SHA256. Delivery attempts, latency, retries, and manual replay stay visible from the dashboard.
Failure handling
What happens when delivery fails
Failed attempts stay inspectable, retryable, and replayable from one operational flow.
delivery.http
Failed attempts are retained with status, latency, and error context so operators can understand impact before replaying.
The platform keeps retries, replay, and delivery visibility in one place instead of pushing each team to rebuild those flows from scratch.
Retry automatically
Temporary 5xx or timeout responses move into managed retry with backoff rather than disappearing silently.
Inspect the trace
Operators can review response codes, latency, retry count, and error bodies before taking action.
Replay when ready
Once the receiver recovers, replay failed deliveries from the dashboard instead of rebuilding payloads by hand.
The 3-minute setup
app.module.ts
WebhookClientModule.forRoot({
baseUrl: env.WEBHOOK_BASE_URL,
apiKey: env.WEBHOOK_API_KEY,
})Emit events from your controllers, then operate from the dashboard with delivery logs, retry visibility, and replay controls.
Install the SDK
`npm i @nestarc/webhook-client` and register `WebhookClientModule.forRoot()` in your Nest app.
Annotate your controllers
Add `@WebhookEmit('order.created')` to a controller method and let the interceptor publish the response as an event.
Operate from the dashboard
Register endpoint URLs, inspect every attempt, and replay failed deliveries without leaving the platform.
Operational transparency
The trust signals stay visible before and after signup.
Ship webhooks from your NestJS app today