Skip to content

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

{
    "ServiceEnabled": false,
    "DeliveryRetryAttempts": 3,
    "DeliveryRetryIntervalSeconds": 60,
}

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.id will typically be assigned by the Event Service to identify the new subscription.
  • The HTTP response status is usually 201 Created, with a Location header 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:

  • ServiceEnabled is true (EventService must be enabled to accept subscriptions).
  • Subscriptions contains the collection URI (usually /redfish/v1/EventService/Subscriptions).
  • DeliveryRetryAttempts and DeliveryRetryIntervalSeconds (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.

Next section