Datahose - Read Events

Creates and reads a real time feed of messages & events. The datahose API provides messages and events from all conversations in the pod, even the ones the service user is not part of. The types of events surfaced can be found in the Real Time Events list.

Add-on: The Datahose API is an add-on to the Symphony Services, and is subject to additional charges. Prior to using Datahose in your Symphony environment(s), you will need to enter into a specific contract. Please reach out to [email protected] to discuss the offering, its pricing or for any further information.

Creates and Reads a real time feed of messages and events of your pod (Datahose)

post

Available on Agent 22.5.1 and above.

This API provides a real time feed of all the messages and events in the pod, even from conversations where the calling service account is not a member. The types of events surfaced can be found in the Real Time Events list. In case you retrieving SOCIALMESSAGE events, the credentials of the ceservice account must be properly configured in the Agent.

The types of events returned can be found in the Real Time Events list (see definition on top of the file).

The ackId sent as parameter must be empty for the first call. In the response an ackId will be sent back and it can be used for the next call: in this way you acknowledge that you have received the events that came with that ackId.

If you have several instances of the same bot, they must share the same feed so that events are spread across all bot instances. To do so, you must: share the same service account provide the same "tag" and same "filters" values.

The Datahose API is an add-on to the Symphony Services, and is subject to additional charges. Prior to using Datahose in your Symphony environment(s), you will need to enter into a specific contract.

Header parameters
sessionTokenstringRequired

Session authentication token.

keyManagerTokenstringOptional

Key Manager authentication token.

Body
typestringRequired

The type of feed. Only allowed value is "datahose".

tagstring · min: 1 · max: 80Required

A unique identifier to ensure uniqueness of the datafeed.

eventTypesstring[]Optional

At least one value is required. Values must be valid Real-Time Events, i.e. one of:

  • MESSAGESENT
  • MESSAGESUPPRESSED
  • SYMPHONYELEMENTSACTION
  • SHAREDPOST
  • INSTANTMESSAGECREATED
  • ROOMCREATED
  • ROOMUPDATED
  • ROOMDEACTIVATED
  • ROOMREACTIVATED
  • USERREQUESTEDTOJOINROOM
  • USERJOINEDROOM
  • USERLEFTROOM
  • ROOMMEMBERPROMOTEDTOOWNER
  • ROOMMEMBERDEMOTEDFROMOWNER
  • CONNECTIONREQUESTED
  • CONNECTIONACCEPTED
scopesstring[]Optional

Allows to filter events by scope Scopes supported:

  • INTERNAL: Only events related to chats that are Internal are received. Shared Wall posts are included
  • EXTERNAL: Only events related to chats that are External are received. Connection Requested/Accepted events are included
  • FEDERATED: Only events related to chats that are Federated are received. Events that are not related to streams (Shared Wall Post, Connection Requested/Accepted) are not included. If more than one scope is set, then events included in the union of scopes will be received. If not set, then all events will be received.
ackIdstringOptional

Must be omitted or set as an empty string for the first call. In successive calls, it must be set to the last read ackId. It acknowledges that the current batch of messages have been successfully received by the client.

updatePresencebooleanOptional

Whether to update the presence status of the account to AVAILABLE when calling the endpoint. Default value is true.

Default: true
Responses
200

Datafeed successfully read.

application/json
post
POST /agent/v5/events/read HTTP/1.1
Host: youragentURL.symphony.com
sessionToken: text
Content-Type: application/json
Accept: */*
Content-Length: 94

{
  "type": "datahose",
  "tag": "mybotusername",
  "eventTypes": [
    "MESSAGE_SENT"
  ],
  "updatePresence": false
}
{
  "events": [
    {
      "id": "text",
      "messageId": "text",
      "timestamp": 1,
      "type": "text",
      "diagnostic": "text",
      "initiator": {
        "user": {
          "userId": 1,
          "firstName": "text",
          "lastName": "text",
          "displayName": "text",
          "email": "text",
          "username": "text"
        }
      },
      "payload": {
        "messageSent": {
          "message": {
            "messageId": "text",
            "parentMessageId": "text",
            "timestamp": 1,
            "message": "text",
            "sharedMessage": "[Circular Reference]",
            "data": "text",
            "attachments": [
              {
                "id": "text",
                "name": "text",
                "size": 1,
                "images": [
                  {
                    "id": "text",
                    "dimension": "text"
                  }
                ]
              }
            ],
            "user": {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            },
            "stream": {
              "streamId": "text",
              "streamType": "text",
              "roomName": "text",
              "members": [
                {
                  "userId": 1,
                  "firstName": "text",
                  "lastName": "text",
                  "displayName": "text",
                  "email": "text",
                  "username": "text"
                }
              ],
              "external": true,
              "crossPod": true,
              "recipientTenantIds": [
                1
              ]
            },
            "externalRecipients": true,
            "diagnostic": "text",
            "userAgent": "text",
            "originalFormat": "text",
            "disclaimer": "text",
            "sid": "fa691cd3-484a-4109-aeb2-57c05b78c95b",
            "replacing": "text",
            "replacedBy": "text",
            "initialTimestamp": 1,
            "initialMessageId": "text",
            "silent": true
          }
        },
        "sharedPost": {
          "message": {
            "messageId": "text",
            "parentMessageId": "text",
            "timestamp": 1,
            "message": "text",
            "sharedMessage": "[Circular Reference]",
            "data": "text",
            "attachments": [
              {
                "id": "text",
                "name": "text",
                "size": 1,
                "images": [
                  {
                    "id": "text",
                    "dimension": "text"
                  }
                ]
              }
            ],
            "user": {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            },
            "stream": {
              "streamId": "text",
              "streamType": "text",
              "roomName": "text",
              "members": [
                {
                  "userId": 1,
                  "firstName": "text",
                  "lastName": "text",
                  "displayName": "text",
                  "email": "text",
                  "username": "text"
                }
              ],
              "external": true,
              "crossPod": true,
              "recipientTenantIds": [
                1
              ]
            },
            "externalRecipients": true,
            "diagnostic": "text",
            "userAgent": "text",
            "originalFormat": "text",
            "disclaimer": "text",
            "sid": "fa691cd3-484a-4109-aeb2-57c05b78c95b",
            "replacing": "text",
            "replacedBy": "text",
            "initialTimestamp": 1,
            "initialMessageId": "text",
            "silent": true
          },
          "sharedMessage": {
            "messageId": "text",
            "parentMessageId": "text",
            "timestamp": 1,
            "message": "text",
            "sharedMessage": "[Circular Reference]",
            "data": "text",
            "attachments": [
              {
                "id": "text",
                "name": "text",
                "size": 1,
                "images": [
                  {
                    "id": "text",
                    "dimension": "text"
                  }
                ]
              }
            ],
            "user": {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            },
            "stream": {
              "streamId": "text",
              "streamType": "text",
              "roomName": "text",
              "members": [
                {
                  "userId": 1,
                  "firstName": "text",
                  "lastName": "text",
                  "displayName": "text",
                  "email": "text",
                  "username": "text"
                }
              ],
              "external": true,
              "crossPod": true,
              "recipientTenantIds": [
                1
              ]
            },
            "externalRecipients": true,
            "diagnostic": "text",
            "userAgent": "text",
            "originalFormat": "text",
            "disclaimer": "text",
            "sid": "fa691cd3-484a-4109-aeb2-57c05b78c95b",
            "replacing": "text",
            "replacedBy": "text",
            "initialTimestamp": 1,
            "initialMessageId": "text",
            "silent": true
          }
        },
        "instantMessageCreated": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          }
        },
        "roomCreated": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "roomProperties": {
            "name": "text",
            "description": "text",
            "creatorUser": {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            },
            "createdDate": 1,
            "external": true,
            "crossPod": true,
            "public": true,
            "copyProtected": true,
            "readOnly": true,
            "discoverable": true,
            "membersCanInvite": true,
            "keywords": [
              {
                "key": "text",
                "value": "text"
              }
            ],
            "canViewHistory": true
          }
        },
        "roomUpdated": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "newRoomProperties": {
            "name": "text",
            "description": "text",
            "creatorUser": {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            },
            "createdDate": 1,
            "external": true,
            "crossPod": true,
            "public": true,
            "copyProtected": true,
            "readOnly": true,
            "discoverable": true,
            "membersCanInvite": true,
            "keywords": [
              {
                "key": "text",
                "value": "text"
              }
            ],
            "canViewHistory": true
          }
        },
        "roomDeactivated": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          }
        },
        "roomReactivated": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          }
        },
        "userJoinedRoom": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "affectedUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "userLeftRoom": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "affectedUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "roomMemberPromotedToOwner": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "affectedUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "roomMemberDemotedFromOwner": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "affectedUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "connectionRequested": {
          "toUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "connectionAccepted": {
          "fromUser": {
            "userId": 1,
            "firstName": "text",
            "lastName": "text",
            "displayName": "text",
            "email": "text",
            "username": "text"
          }
        },
        "messageSuppressed": {
          "messageId": "text",
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          }
        },
        "symphonyElementsAction": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "formMessageId": "text",
          "formId": "text",
          "formValues": {}
        },
        "userRequestedToJoinRoom": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "affectedUsers": [
            {
              "userId": 1,
              "firstName": "text",
              "lastName": "text",
              "displayName": "text",
              "email": "text",
              "username": "text"
            }
          ]
        },
        "genericSystemEvent": {
          "stream": {
            "streamId": "text",
            "streamType": "text",
            "roomName": "text",
            "members": [
              {
                "userId": 1,
                "firstName": "text",
                "lastName": "text",
                "displayName": "text",
                "email": "text",
                "username": "text"
              }
            ],
            "external": true,
            "crossPod": true,
            "recipientTenantIds": [
              1
            ]
          },
          "eventTimestamp": 1,
          "sourceSystem": "text",
          "eventSubtype": "text",
          "parameters": {
            "ANY_ADDITIONAL_PROPERTY": "anything"
          }
        }
      }
    }
  ],
  "ackId": "text"
}

Datahose flavors

Starting in August 2025, the datahose API has been improved with the ability to only capture messages sent and received by a set of users, instead of always capturing all messages. This user filter capability requires additional configuration steps, but allows finer grain access to sensitive information, improving the data confidentiality. It also enables further filtering capabilities, such as the new scope parameter.

Datahose

Requirements

  • Agent v22.6 (release date: June 2022) is required.

Entitlements

The service account needs to have both the Can read from datahose feeds and Can create datahose feeds entitlements enabled to call this endpoint.

Please contact your Technical Account Manager or Symphony representative to get your chat Bot entitled.

Configuration

The credentials of the Content Export service need to be setup in the Agent configuration for datahose to work.

The description of the configuration fields for the Content Export service is available in the Agent configuration guide (look for agent.privatekey.ceservice and agent.certificate.ceservice).

To check that the Content Export is correctly setup, you can test the Agent health check extended endpoint (/agent /v3/health/extended).

The value of users.ceservice.status should be "UP", see example of the Health check response below.

Health check response
{
    "services": {
        "datafeed": {
            "status": "UP",
            "version": "2.11.2"
        },
        "key_manager": {
            "status": "UP",
            "version": "20.16.3"
        },
        "pod": {
            "status": "UP",
            "version": "20.16.74-216-100b3be"
        }
    },
    "status": "UP",
    "users": {
        "agentservice": {
            "authType": "RSA",
            "status": "UP"
        },
        "ceservice": {
            "authType": "RSA",
           
 "status": "UP"
Status of ceservice should be UP

        }
    },
    "version": "23.11.1-716"
}

Datahose with user filter

Requirements

  • Agent v25.8 (release date: August 2025) is required.

Configuration

Configuring the user filter also requires all the configuration steps of the normal datahose, listed above under Datahose.

The user filter is managed by linking an app to the datahose service account, and then by entitling the monitored users to that app. As a result, the Admin can dynamically add or remove a user from the monitored list by adding or removing an app entitlement.

The configuration requires three steps:

  1. Configure the Service Account

    1. Log into the Admin Portal and search the service account provisioned for the user of datahose.

    2. Select the service account, then in the User Information tab, add the role App Service Account, then select Save.

  2. Configure App in the Admin Portal

    1. In the Admin Portal, select App Management from the left panel.

    2. Select Add Custom App from the top right of the screen.

    3. Add a name, publisher, description and appid.

    4. Domain: Not used, but a valid url is required. For example you can use https://symphony.com.

    5. Permissions: Select Get User Events. A new field App Service Account should appear.

    6. In the new App Service Account field, press Select. A new modal will display that lists the Service Accounts eligible, and should include your datahose service account.

    7. Select the service account you provisioned earlier and save.

    8. From the left panel, select App Settings. Locate your new app, and change its Global Status to Enabled. Visibility should be Hidden, and Installation must be Manual.

    9. Select Save.

  3. Entitle Users to the new filtering app

    1. In the Admin Portal, search the end users which conversations should be monitored through the datahose feed.

    2. For each end user, open its profile, then in the Applications tab, change the Installation property of your new app to Installed. Alternatively, entitling a user to an app can be automated using the App Management APIs, through the Bulk Manage feature, or using the Directory Bridge. Please refer to our Admin Guide for more information.

✅Now, when your Bot will start a datahose feed, only the events of the users that are entitled to your app will be received.

Using ackId

The endpoint returns the Real Time Events happening in the pod, either since the time the datahose feed was created or since the previous feed was read by the bot. The ackId has an essential role in retrieving the right events for the bot.

The ackId must be null or empty for the first call. Then, for subsequent requests, the ackId from the previous payload should be reused to confirm the reading of previous events already retrieved by the bot. Please note that you can very easily access this API via our BDKs in Java and Python.

If a batch of messages is not confirmed by sending the ackId, the messages that are there will be returned in the subsequent readings and may blend into the newer messages.

Fair use policy

Datahose API is subject to a fair use policy of 5 active feeds.

If your integration or workflow requires more than 5 feeds active at the same time, please contact Symphony.

Last updated

Was this helpful?