A webhook is a mechanism for conveying to some external system a change that took place in NetBox. For example, you may want to notify a monitoring system whenever the status of a device is updated in NetBox. This can be done by creating a webhook for the device model in NetBox and identifying the webhook receiver. When NetBox detects a change to a device, an HTTP request containing the details of the change and who made it be sent to the specified receiver. Webhooks are managed under Logging > Webhooks.
!!! warning
Webhooks support the inclusion of user-submitted code to generate URL, custom headers and payloads, which may pose security risks under certain conditions. Only grant permission to create or modify webhooks to trusted users.
GET, POST, PUT, PATCH, and DELETE.Content-Type header. (Defaults to application/json)Name: Value. Jinja2 templating is supported for this field (see below).application/json, this will be formatted as a JSON object.)X-Hook-Signature header to the request, consisting of a HMAC (SHA-512) hex digest of the request body using the secret as the key.Jinja2 templating is supported for the URL, additional_headers and body_template fields. This enables the user to convey object data in the request headers as well as to craft a customized request body. Request content can be crafted to enable the direct interaction with external systems by ensuring the outgoing message is in a format the receiver expects and understands.
For example, you might create a NetBox webhook to trigger a Slack message any time an IP address is created. You can accomplish this using the following configuration:
POSTapplication/json{"text": "IP address {{ data['address'] }} was created by {{ username }}!"}The following data is available as context for Jinja2 templates:
event - The type of event which triggered the webhook: created, updated, or deleted.model - The NetBox model which triggered the change.timestamp - The time at which the event occurred (in ISO 8601 format).username - The name of the user account associated with the change.request_id - The unique request ID. This may be used to correlate multiple changes associated with a single request.data - A detailed representation of the object in its current state. This is typically equivalent to the model's representation in NetBox's REST API.snapshots - Minimal "snapshots" of the object state both before and after the change was made; provided ass a dictionary with keys named prechange and postchange. These are not as extensive as the fully serialized representation, but contain enough information to convey what has changed.If no body template is specified, the request body will be populated with a JSON object containing the context data. For example, a newly created site might appear as follows:
{
"event": "created",
"timestamp": "2021-03-09 17:55:33.968016+00:00",
"model": "site",
"username": "jstretch",
"request_id": "fdbca812-3142-4783-b364-2e2bd5c16c6a",
"data": {
"id": 19,
"name": "Site 1",
"slug": "site-1",
"status":
"value": "active",
"label": "Active",
"id": 1
},
"region": null,
...
},
"snapshots": {
"prechange": null,
"postchange": {
"created": "2021-03-09",
"last_updated": "2021-03-09T17:55:33.851Z",
"name": "Site 1",
"slug": "site-1",
"status": "active",
...
}
}
}