Notifications
Please mind, this feature is for activated organizations only.
Receive event notifications with webhooks
VGS now uses webhooks when an event happens in your organization. Available webhook events today are particularly useful for tracking events like when someone changes or updates a live route, or tracking proxy upstream error occurrences.
Begin using webhooks with VGS integration in just three steps:
Create a webhook endpoint on your server
Add an endpoint in the VGS Dashboard
Complete your integration by adding events
Set up instructions
To set up a webhook, go to the Administration section in the left side navigation > Organization Settings > Notifications dashboard page, click Add Notifications on the right to reveal a form to add an endpoint for receiving events.


You can enter any valid and existing URL as the destination for events. After you have added an endpoint, you’ll be able to add/select individual events.

Pick events from the dropdown list, and they will immediately appear in the Events List. Once an event is added to the list, you can set up resources (vaults, users) associated with it. If none is selected, notifications will be triggered for all of them.

List of available notifications events
route.created
VAULT
EVERY_SINGLE
route_id
route_name
environment
route.updated
VAULT
EVERY_SINGLE
route_id
route_name
environment
route.delete
VAULT
EVERY_SINGLE
route_id
route_name
environment
vault.created
ORGANIZATION
EVERY_SINGLE
vault_id
vault_name
environment
au_card.updated
EVERY_SINGLE
card_id
old_account_number
old_expiration_date
new_expiration_date
occurred_at
au_card.expired
EVERY_SINGLE
card_id
old_account_number
old_expiration_date
new_expiration_date
occurred_at
au_card.closed
EVERY_SINGLE
card_id
old_account_number
occurred_at
au_card.non_participating
EVERY_SINGLE
card_id
occurred_at
au_card.contact_cardholder_advice
EVERY_SINGLE
card_id
old_account_number
old_expiration_date
occurred_at
au_card.unknown
EVERY_SINGLE
card_id
occurred_at
au_card.enrolled
EVERY_SINGLE
card_id
occurred_at
au_card.opt_out
EVERY_SINGLE
card_id
occurred_at
user.permissions_updated
USER
EVERY_SINGLE
user_email
org_id
list<permission>
user.permissions_deleted
USER
EVERY_SINGLE
user_email
org_id
list<permission>
user.logged_in
USER
EVERY_SINGLE
user_ip
user_email
user.password_updated
USER
EVERY_SINGLE
user_ip
user_email
user.mfa_created
USER
EVERY_SINGLE
user_ip
user_email
user.mfa_deleted
USER
EVERY_SINGLE
user_ip
user_email
proxy.upstream_error
VAULT
EXP_REPEAT
upstream_host
upstream_error
environment
alias.reveal_failed
VAULT
EXP_REPEAT
environment
storage
Manage Webhooks
Existing webhook endpoints can be updated or deleted in the Dashboard’s Notifications section. You also have the option of disabling a webhook endpoint temporarily. VGS does not retry any notifications that are generated while the endpoint has been disabled. For every webhook integration, a unique secret is generated, it is used to verify requests on the client-side.
Webhooks delivery
There are 5 attempts to deliver a webhook; if all of them get non-200 responses, the notification is skipped. Some frequent events like proxy.upstream_error
or record.reveal_failed
are being grouped to prevent over-spamming. In this case, only 1st, 10th, 100th, 1000th, etc, are being sent for 5-minute time windows. The occurrence
field in a webhook payload contains a number of those grouped events.
Webhooks signature
Each webhook request contains a unique signature within the HTTP header vgs-signature
to verify the request’s VGS origin.
Example:
vgs-signature:t=1623691785,v0=9370aa8513da0a14d21478f11f039708f7e664bfffebb939f574e57818ce08de
t
- UTC timestamp, it must be within a typical 60s delivery time window
v0
- request signature itself
The signature is a sha256 hash of a raw request body. Python verification example below:
import hashlib
import hmac
import logging
import time\n\n
TIMSTAMP_DIFF_TOLERANCE = 60\n\n
def check_signature(secret: str, signature: str, body: bytes) -> bool:
chunks = dict(p.split("=") for p in signature.split(","))
if abs(int(chunks["t"]) - time.time()) > TIMSTAMP_DIFF_TOLERANCE:
logging.warning("Timestamp mismatch")
return False\n
msg = chunks["t"].encode() + b"." + body
mac = hmac.new(secret.encode("utf-8"), msg=msg, digestmod=hashlib.sha256)
if mac.hexdigest() != chunks["v0"]:
logging.warning("Signature mismatch")
return False\n
return True
IP List
The following is a list of IPs that VGS notifications will be arriving from:
44.228.126.217
50.112.21.217
52.24.126.164
54.148.139.208
2600:1f24:64:8000::/52
54.164.207.221
54.90.7.123
2600:1f28:37:4000::/52
Webhook Integration Limits
Currently, we support only the webhook delivery method, and there is a general limit of 20 integrations per organization. This number can be increased by sending a request to the VGS support team.
Last updated