Webhooks (contributor)
Outbound HTTP callbacks — not REST routes.
Overview
- Register listeners with
Extension#webhooksin your engine. - Delivery:
WebhookJob→WebhookRegistration#send_webhook(HMAC headers).
Checklist — new event
- Add event string to
events_for_<scope>inCore::Configuration(orWebhookEventCatalog.register). - Ensure permission appears under
available_permissionsfor that scope. ext.webhooks(/pattern/, …)in engine — default proposals pipeline or custom handler.- Serialize payload in job/handler (JSON:API-shaped
data). WebhookEventCatalog.register(…)for OpenAPI table + docs.- Locale label in
decidim_rest_full_<gem>.en.ymlunderapi_clientpermissions.
Examples
Proposals (regex on Decidim notifications):
ext.webhooks(/decidim\.events\./, /decidim\.proposals\./)
Meetings (custom handler): see decidim-restfull-meetings UpcomingMeetingWebhookHandler.
Payload & security
Envelope: type, data. Headers: X-Webhook-Signature, X-Webhook-Timestamp (HMAC-SHA256 over timestamp + "." + body).
See also
- Integrator webhooks
- OpenAPI Webhooks tag