Webhooks Tutorial
In this tutorial, we’ll create a Node.js Express app that handles webhook callbacks and uses ngrok (ngrok.com) to expose the app to the Internet. Then, we’ll create a webhook and observe the callback using the ngrok web interface when the event is triggered.
Prerequisites
- A store or app API account with OAuth scopes that include Information & Settings read-only and Products read-only.
- Webhooks Overview
- Familiarity with working in the terminal
- Familiarity working with
nodeandnpm
Create an Express app
First, let’s make a webhooks-test directory and initialize a Node.js Express app inside of it. To do so, run the following commands in your terminal. These commands work the same across macOS, Linux, and Windows (PowerShell).
Then, create a file named index.js in the project directory and copy and paste the following JavaScript code into it.
This app listens to requests on port 3000, then responds with a 200 status once it receives a POST request to /webhooks.
Next, install ngrok so you can expose the app to the Internet.
- Ngrok is a helpful tool for viewing webhook callbacks BigCommerce sends to your app. Ngrok creates a publicly accessible tunnel URL to an application running on your machine. When using ngrok you can view HTTP request details in its web interface.
- For simplicity, this tutorial uses an npm package to run ngrok. For official ngrok usage and installation instructions, visit ngrok.com.
Download the installer for your operating system from the ngrok downloads page, which provides packages for macOS, Windows, and Linux. If you prefer a package manager, you can use brew install ngrok/ngrok/ngrok on macOS or choco install ngrok on Windows instead.
Once ngrok is installed, connect it to your account by running the following command, which is the same on every platform:
You can obtain your authtoken by going to https://dashboard.ngrok.com/get-started/your-authtoken.
Start the app
First, navigate to your webhooks-test project directory and start the Node.js app:
Then, in a second terminal, start ngrok and point it at the app’s port:
Navigate to http://localhost:4040/ in your browser. You should see the ngrok web interface like shown in the image below. Copy the HTTPS tunnel URL and keep the app running.

Create a webhook
Now, we’ll create a webhook that subscribes to the store/product/updated webhook event. To do so, send a POST request to /stores/{{STORE_HASH}}/v3/hooks.
- Be sure to replace
6a35e97b.ngrok.iowith your ngrok HTTPS tunnel URL and structure the destination URL as follows:https://{ngrok_url}/webhooks. - Currently, BigCommerce does not support destination URLs served over custom HTTPS ports. Use the default HTTPS port 443.
Trigger the webhook event
Webhooks fire when shoppers perform actions on the storefront and when users make changes in the control panel. They will also fire when you make changes using an API. Trigger the webhook you just created by performing the following actions in your BigCommerce control panel:
- Navigate to Products > View.
- Edit a product and change something like name or description.
- Click Save.
Now, visit the ngrok web interface address (http://127.0.0.1:4040) and check for a 200 response.

The summary shows the webhook fired and our Express app returned a 200 response along with the text OK. The response is generated by res.send(‘OK') in our app code. For more information, see Express Routing.
Unless you have a paid ngrok account, the destination URL will only be valid for a few hours. After that, the webhook will stop working. Send a DELETE request to the specific webhook ID to disable the hook.
Adding custom headers
You can add custom headers to your create webhook request for added security. The headers property accepts any key-value pair as a string. BigCommerce will include the headers in callback requests made to your application.
Troubleshooting
Custom ports
Currently, BigCommerce does not support destination URLs served over custom HTTPS ports. Use the default HTTPS port 443.
Getting a 404 error using the root (/) url?
Add this snippet to your code to respond to incoming GET requests with ‘hello’:
Getting error “ngrok not found”?
This usually means ngrok is not on your system PATH. You have two options:
- Add ngrok to your
PATHso it’s available globally from any directory. On macOS and Linux, this typically means moving the binary into a directory already on yourPATH, for examplemv ngrok /usr/local/bin. On Windows, add the folder containingngrok.exeto yourPATHenvironment variable (see the link below). - Run ngrok directly from the folder where it lives without changing your
PATH. On macOS and Linux, use./ngrok http 3000; on Windows PowerShell, use.\ngrok.exe http 3000.
Setting the PATH on Windows
If you are having trouble getting ngrok started on Windows, try setting the PATH.