Mobula · AsyncAPI Specification

Mobula Realtime Feed (WebSocket)

Version 1.0.0

AsyncAPI 2.6 description of Mobula's real-time WebSocket feed at `wss://api.mobula.io`. Unlike the SSE-only providers, Mobula publishes a genuine bidirectional WebSocket surface. A client opens a WebSocket connection, sends a JSON subscribe message naming a `type` (`market` or `wallet`) and the assets or wallet to track, and the server pushes JSON payloads as data changes - roughly every 5 seconds with no caching. Up to 100 assets may be tracked on a single market subscription. The `market` stream pushes live price, volume, market cap, and price-change metrics per asset. The `wallet` stream pushes portfolio balance updates for a tracked wallet address. Realtime WSS feeds are available on Mobula's Growth and Enterprise plans. Request/response shapes here follow Mobula's WebSocket market-data documentation (https://docs.mobula.io/indexing-stream/stream/websocket/wss-market-data); consult the docs for the authoritative, always-current message contract.

View Spec View on GitHub CryptoWeb3Market DataBlockchainWalletReal TimeAsyncAPIWebhooksEvents

Channels

market
publish subscribeMarket
Subscribe to live market data for one or more assets.
Live market data stream. The client sends a subscribe message with `type: "market"` and a `payload` naming up to 100 assets (by name, symbol, or contract address). The server then pushes a market update whenever the tracked assets change, approximately every 5 seconds.
wallet
publish subscribeWallet
Subscribe to live portfolio updates for a wallet.
Live wallet portfolio stream. The client sends a subscribe message with `type: "wallet"` and a `payload` naming a wallet address (and optional blockchains). The server pushes portfolio balance updates as holdings change.

Messages

MarketSubscribe
Market subscribe request
Client subscribe message opening a live market stream.
MarketUpdate
Market update
Server push of live market metrics for a subscribed asset.
WalletSubscribe
Wallet subscribe request
Client subscribe message opening a live portfolio stream.
WalletUpdate
Wallet update
Server push of a wallet's live portfolio balance.

Servers

wss
mobula api.mobula.io
Mobula real-time WebSocket base. Clients connect to `wss://api.mobula.io`, send a JSON subscribe message, and receive JSON market or wallet payloads. The free API key is supplied inside the subscribe message `authorization` field.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
id: 'urn:io:mobula:websocket:market-portfolio'
info:
  title: Mobula Realtime Feed (WebSocket)
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of Mobula's real-time WebSocket feed at
    `wss://api.mobula.io`.

    Unlike the SSE-only providers, Mobula publishes a genuine bidirectional
    WebSocket surface. A client opens a WebSocket connection, sends a JSON
    subscribe message naming a `type` (`market` or `wallet`) and the assets or
    wallet to track, and the server pushes JSON payloads as data changes -
    roughly every 5 seconds with no caching. Up to 100 assets may be tracked on
    a single market subscription.

    The `market` stream pushes live price, volume, market cap, and price-change
    metrics per asset. The `wallet` stream pushes portfolio balance updates for
    a tracked wallet address. Realtime WSS feeds are available on Mobula's Growth
    and Enterprise plans.

    Request/response shapes here follow Mobula's WebSocket market-data
    documentation
    (https://docs.mobula.io/indexing-stream/stream/websocket/wss-market-data);
    consult the docs for the authoritative, always-current message contract.
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
    url: https://apievangelist.com
  license:
    name: API documentation - Mobula Terms of Service
    url: https://mobula.io/terms
  x-transport-notes:
    transport: WebSocket
    protocol: wss
    direction: bidirectional
    url: wss://api.mobula.io
    subscribeMessage: 'JSON { type, authorization, payload }'
    updateCadence: 'approximately every 5 seconds, no caching'
    plans: 'Growth and Enterprise'
    source: https://docs.mobula.io/indexing-stream/stream/websocket/wss-market-data
defaultContentType: application/json
servers:
  mobula:
    url: api.mobula.io
    protocol: wss
    description: |
      Mobula real-time WebSocket base. Clients connect to `wss://api.mobula.io`,
      send a JSON subscribe message, and receive JSON market or wallet payloads.
      The free API key is supplied inside the subscribe message `authorization`
      field.
    security:
      - apiKey: []
channels:
  market:
    description: |
      Live market data stream. The client sends a subscribe message with
      `type: "market"` and a `payload` naming up to 100 assets (by name, symbol,
      or contract address). The server then pushes a market update whenever the
      tracked assets change, approximately every 5 seconds.
    subscribe:
      operationId: receiveMarketUpdates
      summary: Receive live market updates for subscribed assets.
      description: |
        After a `market` subscribe message is sent, the server pushes
        `MarketUpdate` messages carrying live price, volume, market cap, and
        price-change metrics for each subscribed asset.
      message:
        $ref: '#/components/messages/MarketUpdate'
    publish:
      operationId: subscribeMarket
      summary: Subscribe to live market data for one or more assets.
      description: |
        Client-to-server subscribe message opening a market stream for up to
        100 assets.
      message:
        $ref: '#/components/messages/MarketSubscribe'
  wallet:
    description: |
      Live wallet portfolio stream. The client sends a subscribe message with
      `type: "wallet"` and a `payload` naming a wallet address (and optional
      blockchains). The server pushes portfolio balance updates as holdings
      change.
    subscribe:
      operationId: receiveWalletUpdates
      summary: Receive live wallet portfolio updates.
      description: |
        After a `wallet` subscribe message is sent, the server pushes
        `WalletUpdate` messages carrying the wallet's total balance and
        per-asset holdings as they change.
      message:
        $ref: '#/components/messages/WalletUpdate'
    publish:
      operationId: subscribeWallet
      summary: Subscribe to live portfolio updates for a wallet.
      description: |
        Client-to-server subscribe message opening a wallet portfolio stream.
      message:
        $ref: '#/components/messages/WalletSubscribe'
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: user
      description: |
        Free Mobula API key. Supplied inside the JSON subscribe message
        `authorization` field rather than an HTTP header, since the transport
        is WebSocket.
  messages:
    MarketSubscribe:
      name: MarketSubscribe
      title: Market subscribe request
      summary: Client subscribe message opening a live market stream.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/MarketSubscribePayload'
      examples:
        - name: subscribeMarket
          summary: Track BTC and ETH live
          payload:
            type: market
            authorization: '<MOBULA_API_KEY>'
            payload:
              assets:
                - name: Bitcoin
                - name: Ethereum
              interval: 5
    MarketUpdate:
      name: MarketUpdate
      title: Market update
      summary: Server push of live market metrics for a subscribed asset.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/MarketUpdatePayload'
      examples:
        - name: btcTick
          summary: A live BTC market tick
          payload:
            id: 100002099
            name: Bitcoin
            symbol: BTC
            price: 67450.12
            price_change_24h: 1.83
            market_cap: 1330000000000
            volume: 24500000000
            liquidity: 980000000
            timestamp: 1782950400000
    WalletSubscribe:
      name: WalletSubscribe
      title: Wallet subscribe request
      summary: Client subscribe message opening a live portfolio stream.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WalletSubscribePayload'
      examples:
        - name: subscribeWallet
          summary: Track a wallet's portfolio live
          payload:
            type: wallet
            authorization: '<MOBULA_API_KEY>'
            payload:
              wallet: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
              blockchains:
                - ethereum
                - polygon
    WalletUpdate:
      name: WalletUpdate
      title: Wallet update
      summary: Server push of a wallet's live portfolio balance.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WalletUpdatePayload'
      examples:
        - name: walletTick
          summary: A live portfolio update
          payload:
            wallet: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
            total_wallet_balance: 152340.55
            assets:
              - symbol: ETH
                token_balance: 42.5
                estimated_balance: 138000.0
                allocation: 90.6
            timestamp: 1782950400000
  schemas:
    MarketSubscribePayload:
      type: object
      required:
        - type
        - authorization
        - payload
      properties:
        type:
          type: string
          enum:
            - market
          description: Stream type. `market` opens a live market data stream.
        authorization:
          type: string
          description: The free Mobula API key.
        subscriptionId:
          type: string
          description: Optional client-supplied id for this subscription; auto-generated if omitted.
        subscriptionTracking:
          type: boolean
          description: When true, subscription details are echoed in response logs for debugging.
        payload:
          type: object
          properties:
            assets:
              type: array
              description: Up to 100 assets to track (by name, symbol, or contract address).
              items:
                type: object
                properties:
                  name:
                    type: string
                  symbol:
                    type: string
                  address:
                    type: string
                  blockchain:
                    type: string
            interval:
              type: integer
              description: Preferred update interval in seconds.
    MarketUpdatePayload:
      type: object
      description: Live market metrics for one subscribed asset.
      properties:
        id:
          type: integer
        name:
          type: string
        symbol:
          type: string
        price:
          type: number
        price_change_1h:
          type: number
        price_change_24h:
          type: number
        market_cap:
          type: number
        market_cap_diluted:
          type: number
        volume:
          type: number
        liquidity:
          type: number
        timestamp:
          type: integer
          format: int64
          description: Update time (Unix ms).
    WalletSubscribePayload:
      type: object
      required:
        - type
        - authorization
        - payload
      properties:
        type:
          type: string
          enum:
            - wallet
          description: Stream type. `wallet` opens a live portfolio stream.
        authorization:
          type: string
          description: The free Mobula API key.
        subscriptionId:
          type: string
        subscriptionTracking:
          type: boolean
        payload:
          type: object
          required:
            - wallet
          properties:
            wallet:
              type: string
              description: Wallet address to track.
            blockchains:
              type: array
              items:
                type: string
              description: Optional blockchains to scope the portfolio to.
    WalletUpdatePayload:
      type: object
      description: Live portfolio snapshot for a tracked wallet.
      properties:
        wallet:
          type: string
        total_wallet_balance:
          type: number
          description: Total portfolio value in USD.
        total_realized_pnl:
          type: number
        total_unrealized_pnl:
          type: number
        assets:
          type: array
          items:
            type: object
            properties:
              symbol:
                type: string
              name:
                type: string
              price:
                type: number
              token_balance:
                type: number
              estimated_balance:
                type: number
              allocation:
                type: number
        timestamp:
          type: integer
          format: int64