Webhooks
NOTE Webhooks is a Sentinel EMS add-on feature available with an active webhooks subscription plan.
>About Authentication Profiles
|
What Is a Webhook?
Webhooks enable Sentinel EMS to notify client applications (or services) about a change or an update to a Sentinel EMS entity. Sentinel EMS uses webhooks to send event notifications to the client applications enabling the application to take an action in response to the event, for example:
>Synchronizing data between two applications
>Triggering automated workflows
>Allowing third-party integrations
In Sentinel EMS, webhooks support OAuth and Basic authentication to send HTTP requests to the client applications.
Prerequisites for Creating a Webhook
Only Sentinel EMS administrators can create webhooks. An authentication profile (Basic or OAuth) is required by webhooks to authenticate to the client applications. You can also define an authentication profile when creating a webhook.
What Is an Event?
An event is created whenever an operation is performed on a Sentinel EMS entity, such as namespace or product. A webhook creates a subscription to the required event. For example, if you subscribe to the Feature Added event, you will receive the detailed information (JSON payload) every time a feature is added in Sentinel EMS.
You can create webhook subscriptions for the following events, where "Contact" refers to the User entity, and "User" refers to the Vendor User entity.
Event Data
A webhook subscribes to a Sentinel EMS event. When the subscribed event occurs in Sentinel EMS, the webhook delivers its data in JSON format to the configured URL in an HTTP POST request.
The following are a few samples showing examples of the event data that webhooks deliver to the client application URL.
Example for the "Add Namespace" Event:
{
"eventName": "Namespace Added",
"entityName": "Namespace",
"webhookId": "08c61b38-8523-4eb1-9b01-b12a2e6a583c",
"webhookName": "NSADD",
"activityName": "Add Namespace",
"requestId": "9876f57e-58d7-460d-bc39-06d6ee65be1b",
"eventId": "5c9d6072-b5bf-4640-8aae-422a52847994",
"url": "https://emstm02.highend.engg-services.com/ems/api/v5/namespaces",
"entityId": "e60db72f-a446-43cb-9a25-0d8c36fe7b3b",
"currentState": "{\"namespace\":{\"id\":\"e60db72f-a446-43cb-9a25-0d8c36fe7b3b\",\"createdBy\":\"admin\",\"creationDate\":\"2025-07-23 10:01\",\"lastModifiedBy\":\"\",\"lastModifiedDate\":\"\",\"name\":\"EDUCTATIONAL\",\"description\":\"\",\"state\":\"DRAFT\",\"refId1\":\"\",\"refId2\":\"\"}}",
"httpMethod": "POST",
"performedBy": "admin",
"actualUser": "admin",
"tenantId": "97553b1b-f8e5-4fb0-8e21-59f19d4a6640",
"creationDateTime": "2025-07-23 10:01",
"operation": "Create",
"opDatetime": "2025-07-23 10:01:33.437"
}
Example for the "Update Namespace" Event:
{
"eventName": "Namespace Updated",
"entityName": "Namespace",
"webhookId": "9788bfb9-14d3-494c-b583-f27280b3e367",
"webhookName": "NSUPD",
"activityName": "Replace Namespace",
"requestId": "8edffd14-7f60-4f7a-9390-4cb645f5f4d7",
"eventId": "aee827d7-d1e6-4ae8-ab9b-db5791ab3bda",
"url": "https://emstm02.highend.engg-services.com/ems/api/v5/namespaces/e60db72f-a446-43cb-9a25-0d8c36fe7b3b",
"entityId": "e60db72f-a446-43cb-9a25-0d8c36fe7b3b",
"previousState": "{\"namespace\":{\"id\":\"e60db72f-a446-43cb-9a25-0d8c36fe7b3b\",\"createdBy\":\"admin\",\"creationDate\":\"2025-07-23 10:01\",\"lastModifiedBy\":\"\",\"lastModifiedDate\":\"\",\"name\":\"EDUCTATIONAL\",\"description\":\"\",\"state\":\"DRAFT\",\"refId1\":\"\",\"refId2\":\"\"}}",
"currentState": "{\"namespace\":{\"id\":\"e60db72f-a446-43cb-9a25-0d8c36fe7b3b\",\"createdBy\":\"admin\",\"creationDate\":\"2025-07-23 10:01\",\"lastModifiedBy\":\"admin\",\"lastModifiedDate\":\"2025-07-23 10:02\",\"name\":\"EDUCTATIONAL\",\"description\":\"educational
items\",\"state\":\"DRAFT\",\"refId1\":\"\",\"refId2\":\"\"}}",
"httpMethod": "PUT",
"performedBy": "admin",
"actualUser": "admin",
"tenantId": "97553b1b-f8e5-4fb0-8e21-59f19d4a6640",
"creationDateTime": "2025-07-23 10:02",
"operation": "Update",
"opDatetime": "2025-07-23 10:02:30.409"
}
Example for the "Product Key Quantity Exhausted" Event:
{ "eventName": "Product Key Quantity Exhausted", "entityName": "Entitlement", "webhookId": "320d390f-0360-4149-b69d-bcadcf2ce8b3", "webhookName": "PKIDQTYEXHT", "activityName": "Add Activation", "requestId": "d8f9df9d-4d86-4d92-a71c-e6b396834eb7", "eventId": "e0d78fdb-6b3e-427a-92d1-51b666ddc9ab", "url": "http://emstm02.highend.engg-services.com/ems/api/v5/activations/bulkActivate", "entityId": "9d03e346-82eb-4059-b95e-1b1e205ca07b", "httpMethod": "POST", "performedBy": "admin", "actualUser": "admin", "tenantId": "97553b1b-f8e5-4fb0-8e21-59f19d4a6640", "creationDateTime": "2025-07-23 10:04", "operation": "Update", "opDatetime": "2025-07-23 10:04:14.760" }
The parameters included in the event data are:
>eventName: Name of the subscribed event.
>entityName: Name of the Sentinel EMS entity for which the event occurred.
>webhookId: Unique identifier of the webhook.
>webhookName: Name of the webhook.
>activityName: Name of the activity that causes the event. For example, "Add Feature" and "Bulk Feature Upload" activities result in the "Feature Added" event.
>requestId: Unique identifier of the HTTP request sent to Sentinel EMS and from Sentinel EMS to client applications.
>eventId: Identifier of the subscribed event in Sentinel EMS.
>url: URL of the Sentinel EMS endpoint that is called for the event to happen.
>entityId: Identifier of the Sentinel EMS entity for which the event occurred.
>httpMethod: HTTP method of the operation performed that resulted in this webhook event.
>currentState: State (JSON) of the entity after the event occurred. It is blank for "Delete" events.
>previousState: State (JSON) of the entity before the event occurred.
>operation: Name of the operation. For example, create, update, delete.
>opDatetime: Time at which the event occurred in milliseconds.
NOTE
>The current state and previous state are included in the event data only if Include Data is set to Yes in a webhook.
>The Entitlement Expired event contains full entitlement payload only in the current state.
>The payload of the Product Key Quantity Exhausted event does not contain all the product keys for an entitlement. It contains selective entitlement fields for entitlement, customer, contact (representing the user entity), channel partner, product keys, and custom attributes, without any feature details.
>When an individual product key expires, then the Product Key Expired event is sent. When an entitlement expires, all the product keys in the entitlement also expire, however, only the Entitlement Expired event is sent.
>To configure the time zone in which the Entitlement Expired and Product Key Expired events occur, set the Time Zone for Expiration Events admin console property.
Built-in Retries for Webhooks
Webhooks may fail to deliver event data for various reasons, such as authorization failure or an unreachable server. Sentinel EMS automatically attempts to deliver the event data to the client URL up to four times. This retry mechanism is non-configurable, with retries occurring at predefined intervals.
While these retries are still in progress, the associated events are marked as in progress. During this time, the event data cannot be retrieved through the API or any manual process. The retry process can take up to one hour to complete. After all four retry attempts are finished, if the webhook delivery still fails, the event is marked as failed.
You can view details of both successful and failed events using the Search Events API endpoint.
If required, you can use the Retry Events API endpoint to reprocess events based on filters you define. This allows you to trigger up to four additional delivery attempts for every matching event, regardless of its current delivery status.
Webhook Status
By default, a webhook is enabled. You can disable a webhook if you want it to stop sending the event data to the client application.
Creating a Webhook
To create a webhook:
1.From the navigation pane, select Configuration > Webhooks to view the Webhooks page.
2. Click Add Webhook. The Add Webhook page opens.
3.Fill in the webhook attributes (described in the next section) and click Save.
Webhook Attributes
The following table explains the attributes that are used to create a webhook:
Attribute | Description | Required/Optional | Valid Values |
---|---|---|---|
Event |
Name of the event subscribed by the webhook. |
Required |
>A list of predefined events |
Name |
Unique name of the webhook.
|
Required |
>Maximum: 100 characters >Alphanumeric >Special characters |
Endpoint URL |
The URL of the client application to which the webhook posts the event data in the form of JSON. |
Required |
>Maximum: 2000 characters >Alphanumeric |
Authentication Profile |
Name of the authentication profile associated with the webhook. Enter a space to view the list of available authentication profiles. Select an authentication profile from the displayed list or click the |
Required | A new or an existing authentication profile |
Description | A friendly description to identify the webhook. | Optional |
>Maximum: 500 characters >Alphanumeric |
Include Data | Specifies whether to include previous and current states of the entity (for which the event happened) in the event data sent to the endpoint URL. | Optional |
Yes OR No Default: Yes |
Enable Webhook | Determines whether the webhook can post event data to the endpoint URL. | Optional |
Yes OR No Default: Yes |
Actions for Webhooks
The following table lists the actions available for webhooks:
Action | Description | |
---|---|---|
|
Edit |
Updates an existing webhook. For details on editing webhooks, see Editing an Entity. |
|
Disable | Prevents the webhook from sending event data to the client application. |
|
Delete |
Deletes a webhook. |