> ## Documentation Index
> Fetch the complete documentation index at: https://docs.boringdatabase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks

> Testing Stripe Webhooks on Local + Production

## Setting Up Stripe Webhook for Testing with ngrok

This guide will help you set up a Stripe webhook for testing purposes using ngrok to create a secure tunnel to your localhost.

### Prerequisites

* A Stripe account
* Node.js and npm installed
* ngrok installed (`npm install -g ngrok`)
* Your application running on `localhost:3000`

### Steps

#### 1. Start Your Local Server

Ensure your application is running on `localhost:3000`.

#### 2. Start ngrok

Open a new terminal window and run:

```bash theme={null}
ngrok http 3000
```

You'll see output similar to this:

```
Session Status                online
Account                       your_account_name
Version                       x.x.x
Region                        United States (us)
Forwarding                    http://xxxx-xx-xxx-xxx-xx.ngrok.io -> localhost:3000
Forwarding                    https://xxxx-xx-xxx-xxx-xx.ngrok.io -> localhost:3000
```

Copy the HTTPS forwarding URL (e.g., [https://xxxx-xx-xxx-xxx-xx.ngrok.io](https://xxxx-xx-xxx-xxx-xx.ngrok.io)).

#### 3. Configure Stripe Webhook

Log in to your Stripe Dashboard.
Navigate to Developers > Webhooks.
Click Add endpoint.
In the Endpoint URL field, paste your ngrok HTTPS URL and add your webhook route.
For example: [https://xxxx-xx-xxx-xxx-xx.ngrok.io/api/webhook](https://xxxx-xx-xxx-xxx-xx.ngrok.io/api/webhook)
Select the events you want to listen for - we just need to listen to checkout success events.
Click Add endpoint.

#### 4. Get Your Webhook Signing Secret

After creating the webhook:

Click on the newly created webhook in your Stripe Dashboard.
Look for Signing secret and click Reveal.
Copy this secret. You'll need it to verify webhook signatures.

#### 5. Set .env for Webhook secret

Copy the webhook sigining secret in your `.env` file for `STRIPE_WEBHOOK_ENDPOINT`

## Ready to test

Remember everytime you want to test locally you will need to have ngrok running. This will likely give you a new tunnel URL which you will have to update in the stripe dashboard.

When you deploy your app you can update the webhook endpoint to your production url /api/webhook
