Refinitiv Eikon · AsyncAPI Specification

LSEG (Refinitiv) Real-Time WebSocket API

Version 1.6

Standards-based WebSocket API providing real-time streaming market data using JSON message formats following the Open Message Model (OMM). Connects to Refinitiv Real-Time Distribution Systems (RTDS) and Real-Time Optimized (RTO) cloud services for consuming, contributing, and posting real-time content. Source repository: https://github.com/Refinitiv/websocket-api (Apache 2.0 licensed). Protocol specification: WebsocketAPI_ProtocolSpecification.pdf in that repository. Authentication varies by deployment: - Real-Time Distribution Systems (on-premise): username / ApplicationId / Position passed in the Login Domain Key. - Real-Time Optimized (cloud): OAuth2 (Client Credentials or LDP password grant) bearer token passed as the AuthenticationToken element on the Login Domain.

View Spec View on GitHub AnalyticsFinancial DataFinancial NewsMarket DataReal-Time DataTradingAsyncAPIWebhooksEvents

Channels

/WebSocket
publish sendOmmMessage
Messages sent to the server.
Single WebSocket channel that multiplexes all OMM domain message streams (Login, Source Directory, Dictionary, MarketPrice, MarketByOrder, MarketByPrice, SymbolList, Yield Curve, etc.) using stream IDs.

Messages

LoginRequest
Login Request
Initial Login Domain request authenticating the session.
LoginRefresh
Login Refresh
Server response to a Login request indicating session state.
ItemRequest
Item Request
Request to open or reissue a streaming or snapshot item.
Refresh
Refresh
Full image of an item, sent on initial open or when re-syncing.
Update
Update
Incremental update to a streaming item.
Status
Status
Stream or data state change for an item (including stream close).
Close
Close
Client-initiated close of a stream by its ID.
Ping
Ping
Liveness ping sent by the server.
Pong
Pong
Liveness pong sent by the client in response to a Ping.
Post
Post
Off-stream or on-stream post used for contribution and inserts.
AckIn
Ack
Acknowledgement of a Post message, including any NAK code.
GenericMsgIn
Generic Message (inbound)
Domain-defined message exchanged outside the request/refresh model.
GenericMsgOut
Generic Message (outbound)
Domain-defined message sent by the client.

Servers

wss
rtds {host}:{port}/WebSocket
Refinitiv Real-Time Distribution System (on-premise ADS/RTDS server). The host and port are deployment-specific; default WebSocket port is 15000.
wss
rto api.refinitiv.com:443/WebSocket
Refinitiv Real-Time Optimized cloud endpoint. Requires a service discovery step against the LSEG Data Platform to obtain a regional streaming endpoint and an OAuth2 access token before the WebSocket Login is sent.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
info:
  title: LSEG (Refinitiv) Real-Time WebSocket API
  version: '1.6'
  description: |
    Standards-based WebSocket API providing real-time streaming market data using
    JSON message formats following the Open Message Model (OMM). Connects to
    Refinitiv Real-Time Distribution Systems (RTDS) and Real-Time Optimized (RTO)
    cloud services for consuming, contributing, and posting real-time content.

    Source repository: https://github.com/Refinitiv/websocket-api (Apache 2.0
    licensed). Protocol specification: WebsocketAPI_ProtocolSpecification.pdf in
    that repository.

    Authentication varies by deployment:
      - Real-Time Distribution Systems (on-premise): username / ApplicationId /
        Position passed in the Login Domain Key.
      - Real-Time Optimized (cloud): OAuth2 (Client Credentials or LDP password
        grant) bearer token passed as the AuthenticationToken element on the
        Login Domain.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  contact:
    name: LSEG Developer Community
    url: https://community.developers.refinitiv.com/
defaultContentType: application/json
servers:
  rtds:
    url: '{host}:{port}/WebSocket'
    protocol: wss
    description: |
      Refinitiv Real-Time Distribution System (on-premise ADS/RTDS server). The
      host and port are deployment-specific; default WebSocket port is 15000.
    variables:
      host:
        description: Hostname or IP of the customer ADS / RTDS server.
        default: ads
      port:
        description: WebSocket listener port configured on the ADS.
        default: '15000'
  rto:
    url: 'api.refinitiv.com:443/WebSocket'
    protocol: wss
    description: |
      Refinitiv Real-Time Optimized cloud endpoint. Requires a service discovery
      step against the LSEG Data Platform to obtain a regional streaming endpoint
      and an OAuth2 access token before the WebSocket Login is sent.
channels:
  /WebSocket:
    description: |
      Single WebSocket channel that multiplexes all OMM domain message streams
      (Login, Source Directory, Dictionary, MarketPrice, MarketByOrder,
      MarketByPrice, SymbolList, Yield Curve, etc.) using stream IDs.
    bindings:
      ws:
        bindingVersion: '0.1.0'
    subscribe:
      operationId: receiveOmmMessage
      summary: Messages received from the server.
      message:
        oneOf:
          - $ref: '#/components/messages/LoginRefresh'
          - $ref: '#/components/messages/Refresh'
          - $ref: '#/components/messages/Update'
          - $ref: '#/components/messages/Status'
          - $ref: '#/components/messages/Ping'
          - $ref: '#/components/messages/GenericMsgIn'
          - $ref: '#/components/messages/AckIn'
    publish:
      operationId: sendOmmMessage
      summary: Messages sent to the server.
      message:
        oneOf:
          - $ref: '#/components/messages/LoginRequest'
          - $ref: '#/components/messages/ItemRequest'
          - $ref: '#/components/messages/Close'
          - $ref: '#/components/messages/Pong'
          - $ref: '#/components/messages/Post'
          - $ref: '#/components/messages/GenericMsgOut'
components:
  messages:
    LoginRequest:
      name: LoginRequest
      title: Login Request
      summary: Initial Login Domain request authenticating the session.
      payload:
        $ref: '#/components/schemas/LoginRequestPayload'
    LoginRefresh:
      name: LoginRefresh
      title: Login Refresh
      summary: Server response to a Login request indicating session state.
      payload:
        $ref: '#/components/schemas/LoginRefreshPayload'
    ItemRequest:
      name: ItemRequest
      title: Item Request
      summary: Request to open or reissue a streaming or snapshot item.
      payload:
        $ref: '#/components/schemas/ItemRequestPayload'
    Refresh:
      name: Refresh
      title: Refresh
      summary: Full image of an item, sent on initial open or when re-syncing.
      payload:
        $ref: '#/components/schemas/RefreshPayload'
    Update:
      name: Update
      title: Update
      summary: Incremental update to a streaming item.
      payload:
        $ref: '#/components/schemas/UpdatePayload'
    Status:
      name: Status
      title: Status
      summary: Stream or data state change for an item (including stream close).
      payload:
        $ref: '#/components/schemas/StatusPayload'
    Close:
      name: Close
      title: Close
      summary: Client-initiated close of a stream by its ID.
      payload:
        $ref: '#/components/schemas/ClosePayload'
    Ping:
      name: Ping
      title: Ping
      summary: Liveness ping sent by the server.
      payload:
        $ref: '#/components/schemas/PingPayload'
    Pong:
      name: Pong
      title: Pong
      summary: Liveness pong sent by the client in response to a Ping.
      payload:
        $ref: '#/components/schemas/PongPayload'
    Post:
      name: Post
      title: Post
      summary: Off-stream or on-stream post used for contribution and inserts.
      payload:
        $ref: '#/components/schemas/PostPayload'
    AckIn:
      name: Ack
      title: Ack
      summary: Acknowledgement of a Post message, including any NAK code.
      payload:
        $ref: '#/components/schemas/AckPayload'
    GenericMsgIn:
      name: GenericMsgIn
      title: Generic Message (inbound)
      summary: Domain-defined message exchanged outside the request/refresh model.
      payload:
        $ref: '#/components/schemas/GenericMsgPayload'
    GenericMsgOut:
      name: GenericMsgOut
      title: Generic Message (outbound)
      summary: Domain-defined message sent by the client.
      payload:
        $ref: '#/components/schemas/GenericMsgPayload'
  schemas:
    Key:
      type: object
      description: OMM message Key identifying the item being requested.
      properties:
        Name:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Item name (RIC) or batch list of item names.
        NameType:
          type: integer
          description: Numeric name type (e.g. RIC = 1).
        Service:
          oneOf:
            - type: string
            - type: integer
          description: Service name or numeric service ID providing the item.
        Filter:
          type: integer
        Identifier:
          type: integer
        Elements:
          type: object
          additionalProperties: true
          description: OMM ElementList payload carried inside the Key.
    State:
      type: object
      description: Stream and data state on Refresh / Status / Close messages.
      properties:
        Stream:
          type: string
          enum: [Open, NonStreaming, Closed, ClosedRecover, ClosedRedirected]
        Data:
          type: string
          enum: [Ok, Suspect, NoChange]
        Code:
          type: string
          description: OMM state code such as None, NotFound, NotEntitled, Timeout.
        Text:
          type: string
    LoginRequestPayload:
      type: object
      required: [ID, Domain, Key]
      properties:
        ID:
          type: integer
          description: Stream ID. Login uses 1 by convention.
          default: 1
        Domain:
          type: string
          enum: [Login]
        Key:
          allOf:
            - $ref: '#/components/schemas/Key'
            - type: object
              properties:
                NameType:
                  type: integer
                  description: 1 = user name, 2 = AuthnToken (OAuth bearer).
                Elements:
                  type: object
                  properties:
                    ApplicationId:
                      type: string
                    Position:
                      type: string
                    AuthenticationToken:
                      type: string
                      description: OAuth2 access token for Real-Time Optimized.
                    AuthenticationExtended:
                      type: string
                    Password:
                      type: string
                    Role:
                      type: integer
                    AllowSuspectData:
                      type: integer
                    ProvidePermissionProfile:
                      type: integer
                    ProvidePermissionExpressions:
                      type: integer
                    SingleOpen:
                      type: integer
                    SupportProviderDictionaryDownload:
                      type: integer
      example:
        ID: 1
        Domain: Login
        Key:
          Name: user
          Elements:
            ApplicationId: '256'
            Position: 127.0.0.1
    LoginRefreshPayload:
      type: object
      required: [ID, Type, Domain]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Refresh]
        Domain:
          type: string
          enum: [Login]
        Key:
          $ref: '#/components/schemas/Key'
        State:
          $ref: '#/components/schemas/State'
        Solicited:
          type: boolean
        Elements:
          type: object
          additionalProperties: true
    ItemRequestPayload:
      type: object
      required: [ID, Key]
      properties:
        ID:
          type: integer
          description: Stream ID assigned by the client.
        Domain:
          type: string
          enum: [MarketPrice, MarketByOrder, MarketByPrice, SymbolList, YieldCurve, Source, Dictionary]
          description: Optional, defaults to MarketPrice.
        Key:
          $ref: '#/components/schemas/Key'
        Streaming:
          type: boolean
          default: true
        View:
          type: array
          items:
            oneOf:
              - type: string
              - type: integer
          description: List of field names or FIDs to limit the response.
        Refresh:
          type: boolean
        Qos:
          type: object
          additionalProperties: true
        Priority:
          type: object
          properties:
            Class:
              type: integer
            Count:
              type: integer
      example:
        ID: 2
        Key:
          Name: TRI.N
          Service: ELEKTRON_DD
        Streaming: true
    RefreshPayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Refresh]
        Domain:
          type: string
        Key:
          $ref: '#/components/schemas/Key'
        State:
          $ref: '#/components/schemas/State'
        Solicited:
          type: boolean
        Complete:
          type: boolean
        SeqNumber:
          type: integer
        Fields:
          type: object
          additionalProperties: true
          description: OMM FieldList payload keyed by field name.
        PermData:
          type: string
        Qos:
          type: object
          additionalProperties: true
    UpdatePayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Update]
        Domain:
          type: string
        UpdateType:
          type: string
          description: e.g. Quote, Trade, Unspecified, ClosingRun.
        Key:
          $ref: '#/components/schemas/Key'
        SeqNumber:
          type: integer
        Fields:
          type: object
          additionalProperties: true
        DoNotCache:
          type: boolean
        DoNotConflate:
          type: boolean
        DoNotRipple:
          type: boolean
    StatusPayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Status]
        Domain:
          type: string
        Key:
          $ref: '#/components/schemas/Key'
        State:
          $ref: '#/components/schemas/State'
    ClosePayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          oneOf:
            - type: integer
            - type: array
              items:
                type: integer
        Type:
          type: string
          enum: [Close]
        Domain:
          type: string
    PingPayload:
      type: object
      required: [Type]
      properties:
        Type:
          type: string
          enum: [Ping]
    PongPayload:
      type: object
      required: [Type]
      properties:
        Type:
          type: string
          enum: [Pong]
      example:
        Type: Pong
    PostPayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Post]
        Domain:
          type: string
        Key:
          $ref: '#/components/schemas/Key'
        PostID:
          type: integer
        PostUserInfo:
          type: object
          properties:
            Address:
              type: string
            UserID:
              type: integer
        Ack:
          type: boolean
        Message:
          type: object
          additionalProperties: true
          description: Nested OMM message being posted (e.g. Refresh or Update).
    AckPayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Ack]
        Domain:
          type: string
        AckID:
          type: integer
        NakCode:
          type: string
        Text:
          type: string
    GenericMsgPayload:
      type: object
      required: [ID, Type]
      properties:
        ID:
          type: integer
        Type:
          type: string
          enum: [Generic]
        Domain:
          type: string
        Key:
          $ref: '#/components/schemas/Key'
        SeqNumber:
          type: integer
        SecondarySeqNumber:
          type: integer
        Elements:
          type: object
          additionalProperties: true
        Map:
          type: object
          additionalProperties: true