> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.getunleash.io/integrate/webhook/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getunleash.io/_mcp/server. # Webhook > Set up Unleash webhooks to send feature flag, project, environment, and change events to external tools with headers and retries. v3.11 The Webhook Integration introduces a generic way to post messages from Unleash to third party services. Unleash allows you to define a webhook which listens for changes in Unleash and posts them to third party services. The webhook will perform a single retry if the HTTP POST call fails (either a 50x or network error). Duplicate events may happen, and you should never assume events always comes in order. ## Configuration #### Events You can choose to trigger updates for the following events (we might add more event types in the future): * feature-created * feature-metadata-updated * feature-project-change * feature-archived * feature-revived * feature-strategy-update * feature-strategy-add * feature-strategy-remove * feature-stale-on * feature-stale-off * feature-completed * feature-environment-enabled * feature-environment-disabled * feature-variants-updated * feature-tagged * feature-untagged * change-request-created * change-request-discarded * change-added * change-discarded * change-request-approved * change-request-approval-added * change-request-cancelled * change-request-sent-to-review * change-request-applied * change-request-scheduled * change-request-scheduled-application-success * change-request-scheduled-application-failure * change-request-schedule-suspended * feature-potentially-stale-on * feature-updated (deprecated in v4.3) #### Parameters Unleash Webhook integration takes the following parameters. **Webhook URL** This is the only required property. If you are using a Slack Application you must also make sure your application is allowed to post the channel you want to post to. **Content-Type** Used to set the content-type header used when unleash performs an HTTP POST to the defined endpoint. **Body template** Used to override the body template used by Unleash when performing the HTTP POST. You may format your message using a [Mustache template](https://mustache.github.io). You will have the Unleash event format available in the rendering context: ### Response (200) ```json { "version": 1, "events": [ { "id": 1, "createdAt": "2023-07-05T12:56:00.000Z", "type": "feature-created", "createdBy": "johndoe", "createdByUserId": 1337, "environment": "development", "project": "default", "featureName": "my.first.feature", "data": { "createdAt": "2022-05-31T13:32:20.547Z", "description": "Flag description", "impressionData": true, "lastSeenAt": null, "name": "new-feature", "project": "my-project", "stale": false, "type": "release", "variants": [] }, "preData": { "createdAt": "2022-05-31T13:32:20.547Z", "description": "Flag description", "impressionData": true, "lastSeenAt": null, "name": "new-feature", "project": "my-project", "stale": false, "type": "release", "variants": [] }, "tags": [ { "value": "a-tag-value", "type": "simple", "color": "#FFFFFF" } ], "label": "string", "summary": "string", "ip": "192.168.1.1", "groupType": "change-request", "groupId": "01HQVX5K8P9EXAMPLE123456" } ], "totalEvents": 842 } ``` Example: ```mustache { "event": "{{event.type}}", "createdBy": "{{event.createdBy}}", "featureToggle": "{{event.data.name}}", "timestamp": "{{event.data.createdAt}}" } ``` If you don't specify anything Unleash will use the Unleash event format: ### Response (200) ```json { "version": 1, "events": [ { "id": 1, "createdAt": "2023-07-05T12:56:00.000Z", "type": "feature-created", "createdBy": "johndoe", "createdByUserId": 1337, "environment": "development", "project": "default", "featureName": "my.first.feature", "data": { "createdAt": "2022-05-31T13:32:20.547Z", "description": "Flag description", "impressionData": true, "lastSeenAt": null, "name": "new-feature", "project": "my-project", "stale": false, "type": "release", "variants": [] }, "preData": { "createdAt": "2022-05-31T13:32:20.547Z", "description": "Flag description", "impressionData": true, "lastSeenAt": null, "name": "new-feature", "project": "my-project", "stale": false, "type": "release", "variants": [] }, "tags": [ { "value": "a-tag-value", "type": "simple", "color": "#FFFFFF" } ], "label": "string", "summary": "string", "ip": "192.168.1.1", "groupType": "change-request", "groupId": "01HQVX5K8P9EXAMPLE123456" } ], "totalEvents": 842 } ``` #### Custom SSL certificates If your webhook endpoint uses a custom SSL certificate, you will need to start Unleash with the `NODE_EXTRA_CA_CERTS` environment variable set. It needs to point to your custom certificate file in pem format. For more information, see the [official Node.js documentation on setting extra certificate files](https://nodejs.org/api/cli.html#node_extra_ca_certsfile). > Set up Unleash webhooks to send feature flag, project, environment, and change events to external tools with headers and retries.