16. Event Service
16.1 Overview
This document describes the Redfish Event Service implementation, which allows clients (subscribers) to receive push-style notifications from ERMI module.
Key points:
-
Supports only Redfish events delivered via HTTP(S) POST.
-
Only three event types are supported:
-
ResourceUpdated — resource properties or configuration changed
-
StatusChange — resource state changed
-
Alert — warning or error conditions
-
-
All other event types (e.g., ResourceAdded, ResourceRemoved, MetricReport) are not supported; they may be ignored or logged.
-
Subscribers register by creating a Subscription via the EventService endpoints.
16.2 API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /redfish/v1/EventService |
Retrieve EventService configuration. |
| PATCH | /redfish/v1/EventService |
Modify EventService settings. |
| GET | /redfish/v1/EventService/Subscriptions |
List all subscriptions. |
| POST | /redfish/v1/EventService/Subscriptions |
Create a new subscription. |
| GET | /redfish/v1/EventService/Subscriptions/{id} |
View details of a specific subscription. |
| DELETE | /redfish/v1/EventService/Subscriptions/{id} |
Delete a subscription. |
| PATCH | /redfish/v1/EventService/Subscriptions/{id} |
Modify the specified subscription settings. |
| POST | /redfish/v1/EventService/Actions/EventService.SubmitTestEvent |
Trigger a test event. |
Get EventService Resource
Retrieve the EventService resource and its current configuration.
URI: /redfish/v1/EventService
Method: GET
Response:
HTTP Status Code: 200 OK
The response body as below:
{
"@odata.id": "/redfish/v1/EventService",
"@odata.type": "#EventService.v1_10_1.EventService",
"Id": "EventService",
"Name": "Event Service",
"ServiceEnabled": true,
"DeliveryRetryAttempts": 3,
"DeliveryRetryIntervalSeconds": 60,
"Subscriptions": {
"@odata.id": "/redfish/v1/EventService/Subscriptions"
},
"Actions": {
"#EventService.SubmitTestEvent": {
"target": "/redfish/v1/EventService/Actions/EventService.SubmitTestEvent"
}
},
"EventTypesForSubscription": [
"StatusChange",
"ResourceUpdated",
"Alert"
]
}
Response Properties:
| Property | Type | Description |
|---|---|---|
| ServiceEnabled | boolean | Indicates whether event delivery from this service is enabled. |
| DeliveryRetryAttempts | integer | Maximum number of retry attempts if event delivery to a subscriber fails. |
| DeliveryRetryIntervalSeconds | integer | Time interval (in seconds) between delivery retry attempts. |
Modify the EventService Resource
Modify writable properties of the EventService.
URI: /redfish/v1/EventService
Method: PATCH
Request Example Body
Response:
HTTP Status Code: 204 No Content
If the operation is successful, a status code 204 No Content will be returned.
HTTP Status Code: 400 Bad Request
If the paramter of the request body is invalid, a status code 400 Bad Request will be returned.
Get EventService Subscription Collection
Retrieve a list of current subscriptions.
URI: /redfish/v1/EventService/Subscriptions
Method: GET
Response:
HTTP Status Code: 200 OK
The response body as below:
{
"@odata.id":"/redfish/v1/EventService/Subscriptions",
"@odata.type":"#EventDestinationCollection.EventDestinationCollection",
"Name":"Event Subscriptions Collection",
"Members": [
{ "@odata.id": "/redfish/v1/EventService/Subscriptions/1" },
{ "@odata.id": "/redfish/v1/EventService/Subscriptions/2" }
],
"Members@odata.count": 2
}
Create a New Subscription
Create a new subscription. Subscribers provide the destination URL, event types, and context.
This Event Server supports up to a maximum of three (3) active subscriptions.
If the limit is reached, additional subscription requests will be rejected.
URI: /redfish/v1/EventService/Subscriptions
Method: POST
Request Example Body
{
"Destination": "https://events.example.com/receiver",
"EventFormatType": "Event",
"Protocol": "Redfish",
"SubscriptionType": "RedfishEvent",
"Context":"ERMI-SN-Alert",
"Description": "test",
"Name": "EventSubscription1",
"EventTypes": ["StatusChange", "ResourceUpdated", "Alert"],
"DeliveryRetryAttempts":3,
"DeliveryRetryIntervalSeconds":60,
"HttpHeaders":[{"Name": "Authorization", "Value": "Bearer mytoken123"}]
}
Request Properties:
| Property | Required | Type | Description |
|---|---|---|---|
| Destination | Yes | string | The callback URL where the Event Server will POST events. Must be an HTTPS/HTTP endpoint. |
| EventFormatType | Yes | string | Indicates the format of delivered events. Only Redfish Event format is supported now. |
| Protocol | Yes | string | Defines the protocol used for event delivery. Only Redfish (HTTP(S) POST) is supported now. |
| SubscriptionType | Yes | string | Indicates this is a standard Redfish event subscription now. |
| Context | Optional | string | Used by the subscriber to identify or correlate events (echoed back in each event). |
| Description | Optional | string | A human-readable description for the subscription. |
| Name | Optional | string | The display name for the subscription. |
| EventTypes | Optional | array of string | Filters the event types that should be delivered. If omitted, all supported event types may be sent. Supported event types are 'ResourceUpdated', 'StatusChange' and, 'Alert' currently. |
| DeliveryRetryAttempts | Optional | integer | Maximum number of times delivery is retried on failure. |
| DeliveryRetryIntervalSeconds | Optional | integer | Interval (in seconds) between retry attempts. |
| HttpHeaders | Optional | array of objects | Additional HTTP headers to include when sending events. Useful for authentication tokens. |
Response:
HTTP Status Code: 201 Created
- The response body will echo only the parameters that were provided in the request.
- Optional parameters not specified in the request will not appear in the response.
- A unique Id and
@odata.idwill typically be assigned by the Event Service to identify the new subscription. - The HTTP response status is usually
201 Created, with aLocationheader pointing to the new subscription URI (e.g., /redfish/v1/EventService/Subscriptions/{id}).
The example response body as below:
{
"Id": "1",
"@odata.id":"/redfish/v1/EventService/Subscriptions/1",
"Destination": "https://events.example.com/receiver",
"EventFormatType": "Event",
"Protocol": "Redfish",
"SubscriptionType": "RedfishEvent",
"Context":"ERMI-SN-Alert",
"Description": "test",
"Name": "EventSubscription1",
"EventTypes": ["StatusChange", "ResourceUpdated", "Alert"],
"DeliveryRetryAttempts":3,
"DeliveryRetryIntervalSeconds":60,
"HttpHeaders":[{"Name": "Authorization", "Value": "Bearer mytoken123"}]
}
HTTP Status Code: 400 Bad request
If the paramter of the request body is invalid, a status code 400 Bad Request will be returned.
HTTP Status Code: 403 Forbidden
The subscription limit has been reached, the service will respond with HTTP status code 403 Forbidden.
Get a Specified Subscription
Retrieve details for a specific subscription.
URI: /redfish/v1/EventService/Subscriptions/{id}
Method: GET
Response:
HTTP Status Code: 200 OK
The response body as below:
{
"Id": "1",
"@odata.id":"/redfish/v1/EventService/Subscriptions/1",
"Destination": "https://events.example.com/receiver",
"EventFormatType": "Event",
"Protocol": "Redfish",
"SubscriptionType": "RedfishEvent",
"Context":"ERMI-SN-Alert",
}
HTTP Status Code: 403 Forbidden
The specified subscription information could not be found, the service will respond with HTTP status code 403 Forbidden.
Modify the Specified Subscription
Modify the specific subscription settings.
URI: /redfish/v1/EventService/Subscriptions/{id}
Method: PATCH
Request Example Body
{
"Destination": "https://events.example.com/receiver",
"EventFormatType": "Event",
"Protocol": "Redfish",
"SubscriptionType": "RedfishEvent",
"Context":"ERMI-SN-Alert",
"Description": "test",
"Name": "EventSubscription1",
"EventTypes": ["StatusChange", "ResourceUpdated", "Alert"],
"DeliveryRetryAttempts":3,
"DeliveryRetryIntervalSeconds":60,
"HttpHeaders":[{"Name": "Authorization", "Value": "Bearer mytoken123"}]
}
Response:
HTTP Status Code: 204 No Content
If the operation is successful, a status code 204 No Content will be returned.
HTTP Status Code: 400 Bad request
If the paramter of the request body is invalid, a status code 400 Bad Request will be returned.
HTTP Status Code: 403 Forbidden
The specified subscription information could not be found, the service will respond with HTTP status code 403 Forbidden.
Delete the Specified Subscription
Delete a subscription.
URI: /redfish/v1/EventService/Subscriptions/{id}
Method: DELETE
Response:
HTTP Status Code: 204 No Content
If the operation is successful, a status code 204 No Content will be returned.
Sent a Test Event
Sent a test event to the event server.
URI: /redfish/v1/EventService/Actions/EventService.SubmitTestEvent
Method: POST
Request Behavior
The request body must be in valid JSON format.
If the request is sent without a body, a default test event will be generated and delivered. The default test event as following:
{
"@odata.type": "#Event.v1_7_0.Event",
"Id": "1",
"Name": "Event Array",
"Events": [
{
"EventType": "Alert",
"EventId": "12345",
"Severity": "OK",
"Message": "This is a test event from ERMI",
"MessageId": "Base.1.0.ResourceUpdated",
"MessageArgs": [
],
"OriginOfCondition": {
"@odata.id": "/redfish/v1/Systems/1"
},
"Context": "",
"EventTimestamp": "2025-09-16T07:30:00Z"
}
]
}
If a JSON body is provided, the Event Service will send the event content exactly as specified in the request.
The structure of the provided body must conform to the standard Redfish Event schema.
The custom event JSON body example as following:
{
"EventType": "Alert",
"MessageId": "Base.1.0.ResourceUpdated",
"Severity": "Critical",
"Context": "TestEvent",
"OriginOfCondition": "/redfish/v1/Systems/1"
}
Response:
HTTP Status Code: 204 No Content
If the operation is successful, a status code 204 No Content will be returned.
16.3 Step-by-Step: Create a Subscription
Step 1 — Verify EventService availability
Confirm the target ERMI module exposes an EventService and that event delivery is enabled. Send an HTTP GET /redfish/v1/EventService request and check the following settings in the response:
ServiceEnabledistrue(EventService must be enabled to accept subscriptions).Subscriptionscontains the collection URI (usually/redfish/v1/EventService/Subscriptions).DeliveryRetryAttemptsandDeliveryRetryIntervalSeconds(optional defaults you may want to align with).
Note
If the service is disabled, enable it first (via PATCH /redfish/v1/EventService), subject to permissions.
Step 2 — Create the subscription
Prepare the subscription payload with required and optional fields consistent with the server policy. The client then sends an HTTP POST request to the Subscriptions collection endpoint, such as /redfish/v1/EventService/Subscriptions.
The request body must specify the mandatory properties: Destination, EventFormatType, Protocol, and SubscriptionType. Optional fields such as Context, Name, EventTypes (supports only ResourceUpdated, StatusChange, Alert), DeliveryRetryAttempts, DeliveryRetryIntervalSeconds, and HttpHeaders may also be included to further customize the subscription.
If the subscription is accepted, the server responds with a 201 Created status and returns the created subscription resource. The response only includes the parameters that were provided in the request; unsupported or omitted optional properties are not returned. The server assigns a unique subscription ID, which can later be used to retrieve, modify, or delete the subscription.
Note
This EventService accepts at most three (3) active subscriptions. If you already have three active subscriptions, you must delete one or update an existing subscription instead of creating a new one.
Step 3 — Confirm the subscription resource
The client can send an HTTP GET /redfish/v1/EventService/Subscriptions/{id} request to confirm that Destination, Protocol, EventTypes, Context, and EventFormatType reflect what was requested.
If modification is needed, use PATCH /redfish/v1/EventService/Subscriptions/{id} to update allowed properties.
Step 4 — Validate event delivery (test)
The client can use the EventService action to trigger a test event via POST /redfish/v1/EventService/Actions/EventService.SubmitTestEvent.
- If no body is provided, the service sends a default test event.
- If a valid JSON body is provided, the service sends the provided event content. The body must be valid JSON conforming to the Redfish Event schema.