---
title: "Configure webhooks"
description: "Send signed delivery and application events from Notifiable to your backend."
canonical: https://docs.notifiable.sh/configure-webhooks
source: https://docs.notifiable.sh/configure-webhooks.md
---

# Configure webhooks

A webhook is an HTTPS endpoint on your server that Notifiable calls after selected events. Use it when your backend needs delivery, failure, open, click, or named application-event data.

![The Webhooks page creates an endpoint and chooses the delivery or application events sent to it.](/images/dashboard/webhooks.jpg)

## Create an endpoint

1. Create an HTTPS route in your backend.
2. Make it read the raw request body before JSON parsing if signature verification requires it.
3. Open **Webhooks** in the correct dashboard environment.
4. Choose **New webhook**.
5. Enter the endpoint URL and select the events it should receive.
6. Save the webhook and store its signing secret securely.
7. Trigger one development event and verify the received message.

Development and production webhooks are separate. Point development at a test endpoint or test log so experimental events do not enter production systems.

## Process messages safely

Verify the signature before trusting the body. Return a successful response quickly, then process slow work in a queue. Make processing idempotent because network retries can deliver the same logical message more than once.

Log the webhook message identifier, event type, related notification or subscriber identifier, processing result, and time. Do not log secrets or full push tokens.

## Diagnose delivery

Open the webhook detail to inspect recent messages. A failed message can be replayed after the endpoint is healthy. Fix the underlying authentication, timeout, or server error before replaying a large number of messages.

## Questions you may have

**Webhook or automation?**  
A webhook informs your server. An automation runs steps inside Notifiable.

**Why am I receiving duplicates?**  
Retries are normal in webhook systems. Use the message identifier to make processing idempotent.

**Why does development work but production does not?**  
Confirm that a production webhook exists, its URL is reachable publicly, its secret is configured, and the event happened in Production.

**Can I expose a local URL?**  
Not directly. Use a secure development tunnel only for temporary testing and never reuse its secret or endpoint assumptions in production.
