Documentation
First Steps
Testing Shopify Webhooks
Use UseWebhook to capture, inspect, and forward Shopify webhooks to your local development server - no public endpoint required.
1. Grab your webhook URL
Head to UseWebhook and grab your unique webhook URL. This is the public HTTPS endpoint you'll give to Shopify.

2. Configure Shopify to send webhooks
There are two ways to set up Shopify webhooks:
From the Shopify admin:
Go to Settings > Notifications > Webhooks in your Shopify admin. Click Create webhook and configure it:
- Event: Select the event you want (e.g.
Order creation,Product update,Customer creation) - Format: JSON
- URL: Paste your UseWebhook URL
- Webhook API version: Use the latest stable version
From your Shopify app:
If you're building a Shopify app, register webhooks using the Shopify API:
curl -X POST "https://{store}.myshopify.com/admin/api/2024-10/webhooks.json" \
-H "X-Shopify-Access-Token: {access_token}" \
-H "Content-Type: application/json" \
-d '{
"webhook": {
"topic": "orders/create",
"address": "YOUR_USEWEBHOOK_URL",
"format": "json"
}
}'
3. Trigger a test event
You can trigger Shopify webhook events in a few ways:
Using Shopify's test button:
In your Shopify admin under Settings > Notifications > Webhooks, click Send test notification next to any registered webhook. Shopify will send a sample payload for that event type.
Using real store activity:
Create a test order, update a product, or add a customer in your development store. Shopify will fire the corresponding webhook event. Use a Shopify development store to avoid affecting real data.
4. Inspect the webhook payload
After triggering an event, you'll see the request appear in your UseWebhook dashboard. You can inspect the full payload, including:
- Headers: Shopify sends
X-Shopify-Topic(event type),X-Shopify-Shop-Domain(store URL),X-Shopify-Hmac-Sha256(HMAC signature), andX-Shopify-Webhook-Id(unique ID) - Body: The JSON payload containing the full resource data (order, product, customer, etc.)

UseWebhook highlights any differences between consecutive requests, making it easy to spot changes between events - useful when comparing how orders/create and orders/updated payloads differ.
5. Forward to localhost
Now let's forward incoming Shopify webhooks to your local development server. Install the UseWebhook CLI:
curl -fsSL https://usewebhook.com/install.sh | bash
Make sure your local server is running, then start forwarding:
usewebhook $YOUR_WEBHOOK_URL \
--forward-to http://localhost:3000/webhooks/shopify/
Replace $YOUR_WEBHOOK_URL with your UseWebhook URL, and adjust the local URL to match your webhook endpoint.
Every Shopify event sent to your UseWebhook URL will now be forwarded to your local server.
6. Replay from webhook history
UseWebhook stores a history of all requests, so you can replay any Shopify event at any time. This is useful for:
- Reproducing bugs without creating test orders
- Testing how your handler responds to different event types
- Iterating on your webhook logic without waiting for Shopify
Grab the request ID from your UseWebhook dashboard:

Then replay it:
usewebhook $YOUR_WEBHOOK_URL \
--request-id $REQUEST_ID \
--forward-to http://localhost:3000/webhooks/shopify/
You can also copy the full command from the dashboard using the "Copy as" dropdown.

Tips for testing Shopify webhooks
- Use a development store. Shopify provides free development stores for testing. This keeps your testing separate from production data.
- Verify HMAC signatures. Shopify signs every webhook with HMAC-SHA256 using your app's shared secret. Always verify the
X-Shopify-Hmac-Sha256header to ensure the request is authentic. - Respond quickly. Shopify expects a
200response within 5 seconds. If your handler takes longer, process the webhook asynchronously and return200immediately. - Handle retries. Shopify retries failed webhooks up to 19 times over 48 hours. Use the
X-Shopify-Webhook-Idheader to deduplicate events.
Conclusion
With UseWebhook, you can test Shopify webhooks without deploying to a public server. Capture events in your browser, forward them to localhost, and replay them as many times as you need.
Ready to try it out? Grab your webhook URL.