Subscribing and Consuming Events

Follow these steps to subscribe to and consume business events using the OHIP Streaming API. This workflow ensures that your application can effectively receive and process real-time data from OPERA Cloud.

When to Apply this Use Case

Use workflow when you need to:

  • Receive real-time notifications of business events occurring within OPERA Cloud.
  • Maintain data synchronization between OPERA Cloud and external systems without the overhead of continuous polling.
  • Enhance operational efficiency by processing events as they occur.

Sequence Diagram

Below is a sequence diagram illustrating the key steps involved in subscribing to and consuming events from the OHIP Streaming API. For more details about error scenarios, reference the Overview Diagram of Streaming API.

Figure 4-3 Overview of Streaming API

This image shows the key steps involved in subscribing to and consuming events from the OHIP Streaming API.

Detailed Steps

  1. As soon as events occur they are sent to the stream.
  2. Establish a WebSocket Connection.

    A WebSocket is a way to keep a live channel open between your app and the server, so you can receive updates almost instantly.

    Use the hashed key (see Hashing the Application Key) to build your connection URL. For example: wss://OHIP_Gateway_URL/subscriptions?key=Hashed_Application_Key

    Your client should support the "graphql-transport-ws" subprotocol, so send the header:

    Sec-WebSocket-Protocol: graphql-transport-ws

  3. Send connection_init message.

    Within 5 seconds of connecting, send the connection_init message to initiate the connection.

    Sample message:

    {
        "type": "connection_init",
        "payload": {
            "Authorization": "Bearer <Access_Token>",
            "x-app-key": "<Application_Key>"
        }
    }
    
  4. Receive the connection_ack message.

    Upon successful initialization, the server responds with a connection_ack message, indicating readiness to accept subscription requests.

    Sample response:

    {
        "type": "connection_ack"
    }
    
  5. Send the subscribe message.

    Send a subscribe message to specify the events you wish to receive. Include the chainCode and other relevant parameters in the payload.

    Use the GraphQL schema to decide which fields to include in the request. Including the primaryKey is advised, since this is the internal OPERA ID of the resource to which the event occurred and can optionally be used to GET the resource via inbound API call. See the Examples of the Subscribe Call for ready-to-use templates.

    Ensure the ID is a unique value used throughout the life of this stream (that is, until you send the complete message).

    Sample request:

    {
        "id": "<id>",
        "type": "subscribe",
        "payload": {
            "variables": {
                "input": {
                    "chainCode": "<Chain_Code>"
                }
            },
            "extensions": {},
            "operationName": null,
            "query": "subscription { newEvent(input: { chainCode: \"<Chain_Code>\" }) { metadata { offset uniqueEventId } moduleName eventName primaryKey detail { oldValue newValue elementName } } }"
        }
    }

    Optionally, you can choose to receive only the changed attributes in the detail array of the events you receive. To achieve this, use the below sample request:

    {
        "id": "<id>",
        "type": "subscribe",
        "payload": {
            "variables": {
                "input": {
                    "chainCode": "<Chain_Code>"
                }
            },
            "extensions": {},
            "operationName": null,
            "query": "subscription { newEvent(input: { chainCode: \"<Chain_Code>\" delta: true }) { metadata { offset uniqueEventId } moduleName eventName primaryKey detail { oldValue newValue elementName } } }"
        }
    }
  6. Receive events.

    The server will emit events as they occur. Each event is sent as a next message containing the event data.

    Security and Privacy: Treat event payloads as sensitive and mask personal data in logs.

    Note:

    The Streaming API does not use an application‑level ACK and does not provide a server‑managed DLQ. Treat "successful processing + persisted offset" (and uniqueEventId) as your acknowledgment and route "poison" messages to your own DLQ. In Performance Considerations, see "Design the Intake Path for Ordered Processing"; in Scaling Recommendations, see "Implement Backpressure Handling."

    Sample Event

    {
        "id": "<id>",
        "type": "next",
        "payload": {
            "data": {
                "newEvent": {
                    "metadata": {
                        "offset": "97863",
                        "uniqueEventId": "5c00f504-3844-4a23-91af-feb150b06568"
                    },
                    "moduleName": "PROFILE",
                    "eventName": "NEW PROFILE",
                    "primaryKey": "1234567",
                    "detail": [
                        {
                            "oldValue": "",
                            "newValue": "Joe",
                            "elementName": "FIRST NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "Bloggs",
                            "elementName": "NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "VIP STATUS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "TITLE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMMISSION CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMPANY NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMPANY TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "IATA NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "IATA TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "D",
                            "elementName": "NAME TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "English",
                            "elementName": "LANGUAGE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "SALES MANAGER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMMISSION CURRENCY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "NORMAL",
                            "elementName": "STATUS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "1234567",
                            "elementName": "NAME ID"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "XNAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "XFIRST NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "XTITLE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "XSALUTATION"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MIDDLE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PASSPORT NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID COUNTRY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "NATIONALITY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID PLACE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID EXPIRATION DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CENTRAL AR NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "INCOGNITO NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "INCOGNITO FIRST"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BIRTH DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "BIRTH DATE CHANGED YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BUSINESS TITLE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 01"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 02"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 03"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 04"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 05"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 06"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 07"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 08"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 09"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 10"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 11"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 12"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 13"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 14"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 15"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 16"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 17"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 18"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 19"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 20"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 21"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 22"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 23"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 24"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 25"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 26"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 27"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 28"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 29"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 30"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 31"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 32"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 33"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 34"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 35"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 36"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 37"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 38"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 39"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF CHAR 40"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 01"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 02"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 03"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 04"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 05"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 06"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 07"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 08"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 09"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 10"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 11"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 12"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 13"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 14"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 15"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 16"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 17"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 18"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 19"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF DATE 20"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 01"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 02"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 03"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 04"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 05"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 06"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 07"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 08"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 09"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 10"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 11"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 12"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 13"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 14"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 15"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 16"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 17"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 18"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 19"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 20"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 21"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 22"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 23"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 24"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 25"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 26"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 27"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 28"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 29"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 30"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 31"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 32"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 33"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 34"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 35"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 36"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 37"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 38"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 39"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "UDF NUMBER 40"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "MAILING LIST YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "GUEST PRIVACY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "EMAIL YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "TAX NUMBER1"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "TAX NUMBER2"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BIRTH COUNTRY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BIRTH PLACE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT RATING"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "MARKET RESEARCH YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "THIRD PARTY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "AUTO ENROLL MEMBERSHIP YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "GENDER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ID NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPLAB",
                            "elementName": "CHAIN CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "PHONE YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "SMS YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MARKET RESEARCH OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "THIRD PARTY OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "AUTO ENROLL MEMBERSHIP OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MAILING LIST OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "GUEST PRIVACY OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "EMAIL OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PHONE OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "SMS OPT IN FLG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ANONYMIZATION STATUS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ANONYMIZATION DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "NAME2"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "NAME3"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "LEGAL COMPANY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PROFESSION"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "CONTACT YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPSB02",
                            "elementName": "RESORT REGISTERED"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPSB02",
                            "elementName": "RESORT LOGGED"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "A/R NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS CHANNEL"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS CHANNEL CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS INACTIVE DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS RATE CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS RESORTS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCESS UPDATE DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCOUNT SOURCE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACCOUNT TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ACTION CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS LANGUAGE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS PRIMARY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS1"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS2"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS3"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADDRESS4"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADJUSTMENT AMOUNT"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADJUSTMENT CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ADJUSTMENT TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BARCODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "BL MSG"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CASH BL IND"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CITY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMMENTS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COMPETITION CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "COUNTRY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT CARD EXPIRATION DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT CARD NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT CARD NUMBER 4 DIGITS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT CARD TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "CREDIT CARD VAULT ID"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "DATABASE ID"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "DEPARTMENT NOTE SHORT"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "EMAIL"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "EMAIL LANGUAGE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "FAX NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "INDUSTRY CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "INFLUENCE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "KEYWORD"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "KEYWORD TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MARKETS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP DEVICE CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP DEVICE DISABLE DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP ENROLLED AT"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP ENROLLMENT SOURCE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP EXPIRATION DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP LEVEL"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "MEMBERSHIP TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "NOTIFICATION"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PAGER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PCC CHANNEL"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PCC CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PCC INACTIVE DATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PHONE NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PHONE PRIMARY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PHONE TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "POSTAL CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PREFERENCE GROUP"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PREFERENCE TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PREFERENCE TYPE DESCRIPTION"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "PRIORITY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "RATE CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "ROOMS POTENTIAL"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "SCOPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "SCOPE CITY"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "STATE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "VIRTUAL NUMBER"
                        },
                        {
                            "oldValue": "",
                            "newValue": "",
                            "elementName": "WEBPAGE"
                        }
                    ]
                }
            }
        }
    }
    If you specified the delta parameter, a sample event would be as follows:
    {
        "id": "<id>",
        "type": "next",
        "payload": {
            "data": {
                "newEvent": {
                    "metadata": {
                        "offset": "97863",
                        "uniqueEventId": "5c00f504-3844-4a23-91af-feb150b06568"
                    },
                    "moduleName": "PROFILE",
                    "eventName": "NEW PROFILE",
                    "primaryKey": "1234567",
                    "detail": [
                        {
                            "oldValue": "",
                            "newValue": "John",
                            "elementName": "FIRST NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "Doe",
                            "elementName": "NAME"
                        },
                        {
                            "oldValue": "",
                            "newValue": "D",
                            "elementName": "NAME TYPE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "English",
                            "elementName": "LANGUAGE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "NORMAL",
                            "elementName": "STATUS"
                        },
                        {
                            "oldValue": "",
                            "newValue": "1234567",
                            "elementName": "NAME ID"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "MAILING LIST YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "GUEST PRIVACY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "EMAIL YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "MARKET RESEARCH YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "THIRD PARTY YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "AUTO ENROLL MEMBERSHIP YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPLAB",
                            "elementName": "CHAIN CODE"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "PHONE YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "SMS YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "N",
                            "elementName": "CONTACT YN"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPSB02",
                            "elementName": "RESORT REGISTERED"
                        },
                        {
                            "oldValue": "",
                            "newValue": "OHIPSB02",
                            "elementName": "RESORT LOGGED"
                        }
                    ]
                }
            }
        }
    }
    Keep a record of the offset value; it is a string, not a number.
  7. Heartbeats and Keepalive.

    Keep the connection alive and establish the line speed; it is essential to send the ping message every 15 seconds.

    Sample message:
    {"type":"ping"}
    The server will also send the client ping messages to which the client must respond with the pong message.
    Sample message:
    {"type":"pong"}

    Note:

    The server will close the connection if it does not receive a pong within 180 seconds. In Performance Considerations, see "Maintain a Healthy Connection and Token Lifecycle."

    Note:

    During Backpressure Mode bursts, the server can defer replying to client pings with pong until the burst completes. Treat continued next messages as proof of life.
  8. Process Event.

    Upon receiving an event, process the data as required by your application. This may involve updating records, triggering workflows, or other business logic.

    Since the volume of events can be large, writing to a cache before updating a database is advised.

  9. Send complete message.

    When you intend to stop receiving events, send a complete message to terminate the subscription. Ensure you use the same ID as in the subscribe message.

    Sample message:
    {
        "id": "<id>",
        "type": "complete"
    }
  10. After sending the complete message, wait until the last events are received and then wait until OHIP closes the WebSocket connection. Do not close the connection from the client side.

    Ensure there is a minimum of 10000 ms (10 seconds) between sending the "Complete" message to close a WebSocket connection and sending the next "Subscribe" message to reopen a WebSocket connection.