Saxo _heartbeat
Sent when a subscription has had no data for a while, to show the connection is still alive. One message can bundle a heartbeat for each of several subscriptions, each with a reason.
Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.
This is a message of the Saxo OpenAPI streaming connection, not an HTTP endpoint. It has no method and no path: it travels over an open WebSocket connection.
The page tells a client to keep track of when it last received a message or a heartbeat, and to reconnect with the last message id seen where they stop. Where the reason is SubscriptionPermanentlyDisabled it says to remove the subscriptions named.
The message
- Name
- _heartbeat
- Direction
- Event, sent by the server
- Carried by
- WebSocket. Saxo's page says the connection is a plain WebSocket carrying data in binary frames. Subscriptions are not made on it: each is created with an HTTP POST that names the same context id, and those calls are recorded on this site as endpoints.
- Simulation, as the page's example prints it
- https://sim-streaming.saxobank.com/sim/oapi/streaming/ws/connect
Fields
The vendor's page does not say which of these fields are required or always present.
| Name | Type | Description |
|---|---|---|
| ReferenceId | Not stated | Always _heartbeat. Like every control message, it starts with an underscore. |
| Heartbeats | Not stated | A list with one entry for each subscription the heartbeat is for. |
| Heartbeats[].OriginatingReferenceId | Not stated | The reference id of the subscription. |
| Heartbeats[].Reason | Not stated | NoNewData where there is simply nothing new. SubscriptionTemporarilyDisabled where a recoverable server error is holding data back. SubscriptionPermanentlyDisabled where no data will come, most likely through a misconfiguration. |
Sample
Written by this site from the fields recorded on this page. It has not been run against a terminal, a server or an account, and the values in it are placeholders. No credential is typed into it: where a field holds one, the placeholder says where it comes from. Nothing is entered on this site.
[
{
"ReferenceId": "_heartbeat",
"Heartbeats": [
{
"OriginatingReferenceId": "IP44964",
"Reason": "NoNewData"
}
]
}
]Limits that apply at Saxo OpenAPI
| Limit | Value | Scope | Source |
|---|---|---|---|
| Headline limit | 120/min per session, per service group | session | developer.saxochecked |