Broker API HubMenu

Saxo _heartbeat

message_heartbeatSaxo OpenAPI streaming connectionWebSocketControl messages

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.

Independent and unofficialdeveloper.saxochecked

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.

NameTypeDescription
ReferenceIdNot statedAlways _heartbeat. Like every control message, it starts with an underscore.
HeartbeatsNot statedA list with one entry for each subscription the heartbeat is for.
Heartbeats[].OriginatingReferenceIdNot statedThe reference id of the subscription.
Heartbeats[].ReasonNot statedNoNewData 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

LimitValueScopeSource
Headline limit120/min per session, per service groupsessiondeveloper.saxochecked