Webhooks
This feature is only available in the Plus subscription plan. You can upgrade your plan from the Settings dialog in the ACF dashboard
A webhook is a single message of an event type sent by ACF to an HTTPS endpoint of your choosing. A webhook contains a JSON payload in the body with details related to the event.
Available event types are:
- product.update
- variant.update
- collection.update
- page.update
- blog.update
- article.update
- shop.update
- product_type.update
- vendor.update
- location.update
- global.update
As you can see, these event types closely matches the available scopes in ACF (with the exception of customers and orders, which are planned for a later release) and are fired whenever the custom fields for the scope is changed, either via the ACF editor or via an ACF import.
The JSON payload structure for the above event types is:
{
shop: "awesomewebshop.myshopify.com",
id: 123456789012,
metafields: [
{ id: {metafield_id},
namespace: {namespace},
key: {key},
value: {value}
},
{ id: {metafield_id},
namespace: {namespace},
key: {key},
value: {value}
},
...
]
}
The payload
id
refers to the id of the object in question, so for product.update it is the product id, for page.update the page id etc. Note: for the event types product_type.update and vendor.update, the id will be a string, denoting the alphanumeric product type and vendor respectively
The
metafields
array is the up-to-date set of metafields for the id. The type of value
depends on the type of the metafield - for repeatable fields, the value will always be an array. ACF also provides event types related to activities:
- import.started
- import.completed
- import.failed
- import.stopped
- export.started
- export.completed
- export.failed
- export.stopped
The JSON payload structure for the above event types is:
{
id: "unique-activity-id",
shop: "awesomewebshop.myshopify.com"
type: "import" | "export",
scope: "product" | "page" etc,
status: "started" | "completed" | "failed" | "stopped",
items: 9999,
errors: 0,
file: "https://cdn.accentuate.cloud/path/to/file"
}
From the Settings dialog (available from the ACF dashboard), click the "Webhooks" tab and enable the webhooks:

Click the
Control panel
button to open a new dialog to add the HTTPS endpoint(s) to handle the webhooks.
When setting up the endpoints for your webhook subscription, you can select to only receive selected event types per endpoint or have a single endpoint receive all events regardless of the event type.
After receiving a webhook using an HTTPS endpoint, it's important to respond to the request with a
200 OK
as quickly as possible.A common pattern is to store the payload in a message queue for later processing by a background worker. This reduces the chance of the request timing out, and the webhook delivery counting as a failure.
This is normally not something you need to consider when using an automation platform that handles the technical stuff for you.
ACF attempts to deliver each webhook message based on a retry schedule with exponential backoff. Each message is attempted based on this schedule:
- Immediately
- 5 seconds
- 5 minutes
- 30 minutes
- 2 hours
- 5 hours
- 10 hours
- 20 hours
After the above attempts the message will be marked as failed. If an endpoint is removed or disabled, delivery attempts to the endpoint will be disabled as well.
If for some reason, your endpoints are unavailable for an extended period of time (more than 20 hours) or the automatic delivery schedule doesn't fit your needs, you can resend your webhooks manually via the Control panel's Logs tab.
Last modified 1yr ago