Webhooks
Webhooks in Nautilus are the Relay API (/v1/relay/*, for API keys with the relay scope): your application publishes an event once, and it reaches every endpoint subscribed to it, with retries, signatures and a delivery log you do not have to build. For the events of your end users themselves (sign-ups, sign-ins, password changes), see Webhooks for sign-in and user events. This section calls it Relay wherever it names the API.
How it works
At its core, Relay is an HTTP event pipeline: your application publishes events, and Relay guarantees they reach every registered endpoint with retries, signing, and observability built in.
Under the hood, Relay is powered by Svix, an open-source webhooks engine, behind our Rust gateway, which handles authentication, rate limiting and keeping each account's events apart.
What you get
| Capability | Description |
|---|---|
| Guaranteed Delivery | Automatic retries with exponential backoff, on a fixed schedule. |
| Cryptographic Signing | Every payload is HMAC-signed so consumers can verify authenticity. |
| Delivery Log | See every delivery attempt for a message in the dashboard — the payload you sent, the response status code and the body your server returned — and send it again from there with Resend, or replay everything that failed since a moment you pick (up to 14 days back) with Replay failed. |
| Multi-tenant | Each tenant gets isolated endpoints, keys, and event types. |
| Zero Ops | No queues to manage, no workers to scale — just an API call. |
Quick Start
- Create an API key with Webhooks ticked on Dashboard → API Keys.
- Register a webhook endpoint in the dashboard, under Webhooks.
- Start sending events from your backend.
curl -X POST https://api.vernesoft.com/v1/relay/messages \
-H "Authorization: Bearer vrn_9f8a7..." \
-H "Content-Type: application/json" \
-d '{"event_type": "user.created", "payload": {"id": "usr_001"}}'
That's it — Relay handles delivery, retries, and logging.