Financial Modeling Prep Real-Time WebSocket API

Real-time streaming market data over WebSocket for stocks, crypto, and forex. Clients connect, send a login event carrying their API key, then subscribe to tickers to receive top-of-book quote and last-trade messages as they occur.

AsyncAPI Specification

financialmodelingprep-asyncapi.yml Raw ↑
asyncapi: '2.6.0'
id: 'urn:com:financialmodelingprep:websockets'
info:
  title: Financial Modeling Prep Real-Time WebSocket API
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of Financial Modeling Prep's real-time market data
    WebSocket surface, documented at
    https://site.financialmodelingprep.com/datasets/websocket and
    https://site.financialmodelingprep.com/developer/docs/websocket-api.

    FMP publishes genuine WebSocket endpoints (wss://) that stream real-time
    quotes and trades for stocks, crypto, and forex. A client opens a WebSocket
    connection, sends a `login` event carrying its API key, then sends
    `subscribe` events naming one or more tickers. The server then pushes
    quote and trade messages for those tickers as they occur. This is a
    bidirectional WebSocket transport, not HTTP Server-Sent Events.

    Each asset class has its own endpoint host:
      - Stocks:  wss://websockets.financialmodelingprep.com
      - Crypto:  wss://crypto.financialmodelingprep.com
      - Forex:   wss://forex.financialmodelingprep.com
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
    url: https://apievangelist.com
  license:
    name: API documentation - Financial Modeling Prep Terms of Service
    url: https://site.financialmodelingprep.com/terms-of-service
  x-transport-notes:
    transport: WebSocket
    protocol: wss
    direction: bidirectional
    auth: 'login event carrying { "event": "login", "data": { "apiKey": "<API_KEY>" } }'
    isWebSocket: true
    source: https://site.financialmodelingprep.com/datasets/websocket
defaultContentType: application/json
servers:
  stocks:
    url: websockets.financialmodelingprep.com
    protocol: wss
    description: Real-time stock quote and trade stream.
  crypto:
    url: crypto.financialmodelingprep.com
    protocol: wss
    description: Real-time crypto quote and trade stream.
  forex:
    url: forex.financialmodelingprep.com
    protocol: wss
    description: Real-time forex quote and trade stream.
channels:
  /:
    description: |
      The single WebSocket channel for a given asset-class host. After the
      connection is established the client publishes `login` and `subscribe`
      (and optionally `unsubscribe`) control events, and the server publishes
      a continuous stream of quote / trade messages for the subscribed tickers.
    publish:
      operationId: sendClientEvent
      summary: Client-sent control events (login, subscribe, unsubscribe).
      description: |
        Events the client sends up the socket. A `login` event must be sent
        first to authenticate the connection with the account's API key. After
        a successful login, `subscribe` events register interest in one or more
        tickers; `unsubscribe` events remove them.
      message:
        oneOf:
          - $ref: '#/components/messages/LoginEvent'
          - $ref: '#/components/messages/SubscribeEvent'
          - $ref: '#/components/messages/UnsubscribeEvent'
    subscribe:
      operationId: receiveMarketMessage
      summary: Server-pushed real-time market data messages.
      description: |
        Messages the server pushes to the client for subscribed tickers. Each
        message carries a `s` (ticker symbol), a `t` (timestamp), and a type
        indicator: `T` for a last-trade message, `Q` for a top-of-book quote
        update, and `B` for a trade-break message.
      message:
        $ref: '#/components/messages/MarketMessage'
components:
  messages:
    LoginEvent:
      name: LoginEvent
      title: Login event
      summary: Authenticates the WebSocket connection with the account API key.
      contentType: application/json
      payload:
        type: object
        required:
          - event
          - data
        properties:
          event:
            type: string
            enum:
              - login
          data:
            type: object
            required:
              - apiKey
            properties:
              apiKey:
                type: string
                description: The account's FMP API key.
      examples:
        - name: login
          payload:
            event: login
            data:
              apiKey: YOUR_API_KEY
    SubscribeEvent:
      name: SubscribeEvent
      title: Subscribe event
      summary: Subscribes the connection to one or more tickers.
      contentType: application/json
      payload:
        type: object
        required:
          - event
          - data
        properties:
          event:
            type: string
            enum:
              - subscribe
          data:
            type: object
            required:
              - ticker
            properties:
              ticker:
                type: array
                items:
                  type: string
                description: Lowercase ticker symbols, e.g. ["aapl","msft"] or ["btcusd"] or ["eurusd"].
      examples:
        - name: subscribeStocks
          payload:
            event: subscribe
            data:
              ticker:
                - aapl
                - msft
    UnsubscribeEvent:
      name: UnsubscribeEvent
      title: Unsubscribe event
      summary: Unsubscribes the connection from one or more tickers.
      contentType: application/json
      payload:
        type: object
        required:
          - event
          - data
        properties:
          event:
            type: string
            enum:
              - unsubscribe
          data:
            type: object
            required:
              - ticker
            properties:
              ticker:
                type: array
                items:
                  type: string
      examples:
        - name: unsubscribeStocks
          payload:
            event: unsubscribe
            data:
              ticker:
                - aapl
    MarketMessage:
      name: MarketMessage
      title: Real-time market data message
      summary: A trade, quote, or trade-break message for a subscribed ticker.
      contentType: application/json
      description: |
        Field `type` (carried as `type`) is one of `T` (last trade), `Q`
        (top-of-book quote), or `B` (trade break). `s` is the ticker, `t` is
        the event timestamp. Price and size fields (`ap`, `as`, `bp`, `bs`,
        `lp`, `ls`) are present according to message type.
      payload:
        type: object
        properties:
          s:
            type: string
            description: Ticker symbol the message relates to.
          t:
            type: integer
            description: Event timestamp.
          type:
            type: string
            enum:
              - T
              - Q
              - B
            description: Message type - T last trade, Q top-of-book quote, B trade break.
          ap:
            type: number
            description: Ask price (quote messages).
          as:
            type: number
            description: Ask size (quote messages).
          bp:
            type: number
            description: Bid price (quote messages).
          bs:
            type: number
            description: Bid size (quote messages).
          lp:
            type: number
            description: Last trade price (trade messages).
          ls:
            type: number
            description: Last trade size (trade messages).
      examples:
        - name: quoteUpdate
          payload:
            s: aapl
            t: 1748524800000
            type: Q
            ap: 195.12
            as: 100
            bp: 195.1
            bs: 200