Installation
Datahub Webhooks is an enterprise bundle. It requires a Pimcore enterprise subscription.
Prerequisites
The bundle requires Pimcore 2026.1 or later and PHP 8.4 or 8.5.
The bundle declares Datahub, the Studio Backend bundle and the Studio UI bundle as Composer dependencies. Composer pulls them in automatically, and the bundle registers Datahub, the Application Logger bundle, the Static Resolver bundle and the Enterprise Subscription Tools bundle as dependent bundles, so they are loaded without manual bundle ordering.
Loading Datahub this way does not install it. Datahub's own installer creates the plugin_datahub_config permission
and the Datahub permission category that Webhooks depends on, so Datahub must be installed on its own, see step 3
below.
Bundle Installation
- Install the package:
composer require pimcore/data-hub-webhooks --with-all-dependencies
- Enable the bundle in
config/bundles.php:
use Pimcore\Bundle\DataHubWebhooksBundle\PimcoreDataHubWebhooksBundle;
// ...
return [
// ...
PimcoreDataHubWebhooksBundle::class => ['all' => true],
// ...
];
- Install Datahub, if it is not installed yet. Enabling it as a dependent bundle only loads it, it does not create
the
plugin_datahub_configpermission and the Datahub permission category that Webhooks depends on:
bin/console pimcore:bundle:install PimcoreDataHubBundle
- Install the bundle:
bin/console pimcore:bundle:install PimcoreDataHubWebhooksBundle
The installer installs the Application Logger bundle if it is not installed yet, and creates the
plugin_datahub_adapter_webhooks user permission described below.
User Permissions
Access to the Webhooks adapter is checked on three levels:
- Gate permission
plugin_datahub_config("Datahub Configuration"). Required to open the Datahub configuration panel at all. It comes from Datahub and is shared with every adapter. Anadminuser also has access. - Adapter permission
plugin_datahub_adapter_webhooks("Datahub Adapter - Webhooks"). Created by the installer in the Datahub permission category. It controls whether a user may use the Webhooks adapter. Grant it to every user or role that works with webhook configurations. - Per-configuration permissions
read,updateanddelete. Granted per user and role in the Permissions tab of a webhook configuration.
Message Queue
Webhook requests are not sent inside the request that triggered the event. Each event dispatches a message, and a Symfony Messenger worker sends the HTTP requests to the subscribers.
Messages use the pimcore_datahub_webhooks transport, so run a worker for it. Without a worker, no subscriber ever
receives a request.
bin/console messenger:consume pimcore_datahub_webhooks
See the Symfony Messenger documentation for running workers in production.
Delivery is attempted once. The queue entry is removed as soon as its message has been processed, whether the subscribers answered or not, so a subscriber that was down does not receive the request later. Watch the Logs tab for failures.
The Pimcore maintenance job also dispatches pending queue entries, which picks up work left behind when no worker was running at the time of the event.
These optional settings tune the queue processing:
pimcore_data_hub_webhooks:
messenger_queue_processing:
worker_count: 3
worker_item_count: 400
worker_count_lifetime: 3600
| Setting | Default | Description |
|---|---|---|
worker_count | 3 | Maximum number of parallel worker messages for queue processing. |
worker_item_count | 400 | Number of items processed per worker message. |
worker_count_lifetime | 3600 | Lifetime in seconds of the tmp store entry holding the current worker count. After it expires, the value is cleared. |
Extending the Selectable Element Types
The Events & Schema tab offers a fixed list of Document and Asset types. Override the list to add custom types, for example Headless Documents.
pimcore_data_hub_webhooks:
schema:
definitions:
documents: ['Page', 'Snippet', 'Email', 'Folder', 'Hardlink', 'Link', 'Newsletter', 'PrintContainer', 'PrintPage', 'MyCustomType']
assets: ['Image', 'Audio', 'Archive', 'Folder', 'Document', 'Text', 'Unknown', 'Video']
The configuration replaces the default list rather than adding to it. Repeat every type you want to keep.
See Events and Schema for the defaults.
Next Steps
Follow Getting Started to build a first webhook configuration.