What is a webhook?
A webhook is an HTTP notification that a platform sends automatically to another application's address when a specific event occurs, such as an order being created or a product changing. Unlike polling an API every so often, the webhook notifies as soon as something happens, although the platform does not ensure that every notification arrives, or arrives only once or in order.
Key takeaways
- A webhook is a notification: the platform calls your application when an event occurs, instead of waiting for it to ask.
- Shopify notifies in near real time, but does not guarantee delivery or order, and recommends periodic reconciliation jobs.
- BigCommerce sends lightweight notifications, with the identifier and little else: the full data is requested from the API.
- If your server does not respond, the platform retries; if the failures continue, the subscription is removed or deactivated.
- To keep a copy of the catalog up to date you need both: the notification to react fast and the periodic sync to lose nothing.
When an app promises it "finds out instantly" what you change in your store, it is almost always talking about webhooks. A webhook is not an API you ask, or a piece of code installed in the theme: it is a notification the platform sends to another application when something happens, be it a new order or a changed price. It matters to you because those notifications are what decides whether your feed, your PIM or your marketing tool have the same price as your product page, and because, sometimes, the notifications do not arrive.
How it works
The application that wants to find out subscribes to a type of event and gives an address. When the event occurs, the platform sends it the data. Shopify explains it with orders: instead of querying the API over and over to see whether there are new orders, the app subscribes to the orders/create topic and Shopify sends it each order when it is created. Its webhooks deliver data in near real time, serve to stay in sync with the store or to trigger another action, and can go to a URL, to Google Pub/Sub or to Amazon EventBridge.[1]Shopify Dev Docs. About webhooks
In BigCommerce, a subscription is created with a POST request to /v3/hooks.[2]BigCommerce Docs. Webhooks For the catalog there are events for product created, updated and deleted, for inventory changes and for metafields on the product or its variants. The store/product/updated event fires when, among others, the price, dimensions, availability, description, name, SKU, visibility or shipping data change.[3]BigCommerce Docs. Webhook events
What arrives in the notification varies a lot from one platform to another. BigCommerce sends notifications that are lightweight on purpose: the one for an order status change carries only its identifier, and to see the order you have to request it from the API.[2]BigCommerce Docs. Webhooks The one for an updated product carries its identifier and the list of properties that changed.[3]BigCommerce Docs. Webhook events
Three operational details decide whether a webhook works in practice:
- The signature. Every Shopify delivery carries the
X-Shopify-Hmac-Sha256header, which serves to check that the notification comes from Shopify, andX-Shopify-Webhook-Id, to recognize repeated deliveries.[1]Shopify Dev Docs. About webhooks - The response. Your server has to answer in under five seconds with a 200-series code for Shopify to count the delivery as good. If not, it retries up to eight times over four hours, and if the failures continue, it removes the subscription.[4]Shopify Dev Docs. Troubleshooting webhooks BigCommerce also expects a 200; it retries at increasingly long intervals and, after the last failure, deactivates the webhook and emails the subscribed app.[2]BigCommerce Docs. Webhooks
- The order. Shopify does not guarantee the order of notifications, either within the same topic or across different topics.[1]Shopify Dev Docs. About webhooks
Event versus periodic sync
The most important sentence in Shopify's documentation is a warning: a webhook does not always arrive, and an app should not depend only on receiving them. Its recommendation is to add reconciliation jobs that query the store every so often, filtering by the update date to request only what changed.[1]Shopify Dev Docs. About webhooks So the question is not webhook or periodic sync, but how they split the work:
| Webhook | Periodic sync | |
|---|---|---|
| When you find out | Shortly after the change | On the next pass |
| What you receive | A notification, sometimes only the identifier | The state of the data at that moment |
| What can be lost | Notifications undelivered, repeated or out of order | What changed and changed again between two passes |
| What it costs | A server that always answers in time | API queries, even when nothing has changed |
With both, the notification gives the speed and the periodic pass fixes what the notification missed. Without the pass, every lost notification is a difference nobody sees, and those differences pile up until they become data drift.
In a store
This is the sample notification BigCommerce publishes for an updated product:[3]BigCommerce Docs. Webhook events
{
"scope": "store/product/updated",
"store_id": "1025646",
"data": {
"type": "product",
"id": 205,
"properties": ["warranty", "is_featured", "custom_fields"],
"context": { "channel_id": 2, "locale": "fr" }
},
"hash": "a833a57fadd56a32dc752fb6ca0841dc9602a495",
"created_at": 1561479233,
"producer": "stores/{store_hash}"
}
It does not carry the new warranty, or the new custom fields: it carries product 205 and the names of what changed. The app that receives it has to request the product from the catalog API to learn the values.[2]BigCommerce Docs. Webhooks
Now a fictional example of what happens when it fails. A tripod store changes a model's price in its PIM, which writes it to BigCommerce. The app that generates the feed for a comparison site is subscribed to store/product/updated, but its server is down that afternoon. BigCommerce retries for hours and, after the last failure, deactivates the subscription and sends an email to the app's address.[2]BigCommerce Docs. Webhooks If nobody reads that email and the app has no periodic pass, the feed stays on the old price, and on every change that comes after it too, because no notification arrives anymore.
What people often confuse
Having webhooks does not mean having a catalog copy that is always up to date. Shopify says webhook delivery does not always happen and that an app should not depend only on webhooks, and it recommends periodic reconciliation.[1]Shopify Dev Docs. About webhooks The other confusion is thinking the notification carries the data: in BigCommerce it carries the identifier and, at most, which properties changed.[2]BigCommerce Docs. Webhooks[3]BigCommerce Docs. Webhook events An app that stores the notification as if it were the product stores little more than a number.
How to check it
- Ask each app connected to your store for the list of events it is subscribed to and what it does with each. If it does not use webhooks, ask how often it queries the store.
- Ask whether the app has a periodic reconciliation pass, and how often it runs. It is what Shopify recommends so you do not depend only on notifications.[1]Shopify Dev Docs. About webhooks
- If the app is yours, check that it verifies the signature of each notification with the
X-Shopify-Hmac-Sha256header and discards repeats byX-Shopify-Webhook-Id.[1]Shopify Dev Docs. About webhooks - Measure how long your server takes to answer: above five seconds, Shopify counts the delivery as failed.[4]Shopify Dev Docs. Troubleshooting webhooks
- In BigCommerce, watch the app's inbox: the deactivation email is the only warning that notifications stopped arriving.[2]BigCommerce Docs. Webhooks
Related concept: catalog API
The catalog API and the webhook are the two directions of the same conversation. With the API, your application asks and the platform answers; with the webhook, the platform notifies without anyone asking. Shopify presents the webhook precisely as the alternative to querying the API over and over.[1]Shopify Dev Docs. About webhooks In BigCommerce they work together by design: the notification says which product changed and the API says how it ended up.[2]BigCommerce Docs. Webhooks If what worries you is who wrote a field last, that is field overwrite, and if you want to be able to go back, content versioning.
To keep going, the publishing by platform reading path orders the rest of the terms.
Synonyms
- English
- webhook, HTTP callback
- Español
- webhook
Sources
Change history
- First English version.
This definition is published under CC BY 4.0. Reuse this definition freely, crediting Clione with a link to this page.
Related terms
Catalog API
What an online store's catalog API is, how it separates reading from writing in Shopify and BigCommerce, and the minimum permissions to give each app.
Content versioning
What content versioning is, how history, draft and published version differ, and how to check that you can roll back on your store.
Metafields
What Shopify metafields are, what parts they have, how they get from the admin to the product page's HTML and how to check your theme publishes them.
Field overwrite
Field overwrite: an app, a PIM or a sync overwriting a product value another system wrote, how it happens and how to catch it.
Data drift
What data drift is in an online store: a correctly published value that later changes on the page, its usual causes and how to catch it in time.
PIM
What a PIM (Product Information Management) is, how it organizes families, channels and completeness, and how to decide which system rules each field.
Make your catalog easy for bots to read
Clione fills every product page with what bots read best: the JSON-LD graph with its structured data, the meta description and the FAQs. You review and press Push; then we check your live store so it all stays published.