SiftingIO Live Stream

WebSocket streaming API for live market data, described by an AsyncAPI 3.0 contract. Also offers a documented FIX API.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/siftingio-live-stream"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

AsyncAPI Specification

siftingio-asyncapi.yaml Raw ↑
asyncapi: 3.0.0
info:
  title: SiftingIO Live Stream
  version: "1.0.0"
  description: |
    WebSocket API for live market data. Connect to
    `wss://stream.sifting.io/ws/v1?key=sft_...` — the API key is passed as the
    `key` query parameter (the only WebSocket auth method).

    After connecting, send `subscribe` operations for the products and symbols
    you want; the server streams `tick` and `tvl` frames and replies to control
    operations with `ack` / `pong` / `error` frames. All frames are JSON text.
  license:
    name: MIT
  contact:
    name: SiftingIO
    url: https://sifting.io/docs

servers:
  production:
    host: stream.sifting.io
    pathname: /ws/v1
    protocol: wss
    description: Production live stream. Append `?key=sft_...` to authenticate.

channels:
  stream:
    address: /ws/v1
    title: Live stream
    description: Single bidirectional channel carrying control ops and data frames.
    messages:
      auth:
        $ref: "#/components/messages/Auth"
      subscribe:
        $ref: "#/components/messages/Subscribe"
      unsubscribe:
        $ref: "#/components/messages/Unsubscribe"
      ping:
        $ref: "#/components/messages/Ping"
      ack:
        $ref: "#/components/messages/Ack"
      pong:
        $ref: "#/components/messages/Pong"
      tick:
        $ref: "#/components/messages/Tick"
      tvl:
        $ref: "#/components/messages/TVL"
      error:
        $ref: "#/components/messages/ErrorFrame"

operations:
  subscribe:
    action: send
    channel:
      $ref: "#/channels/stream"
    title: Subscribe to symbols
    messages:
      - $ref: "#/channels/stream/messages/subscribe"
  unsubscribe:
    action: send
    channel:
      $ref: "#/channels/stream"
    title: Unsubscribe from symbols
    messages:
      - $ref: "#/channels/stream/messages/unsubscribe"
  authenticate:
    action: send
    channel:
      $ref: "#/channels/stream"
    title: Authenticate (alternative to the key query param)
    messages:
      - $ref: "#/channels/stream/messages/auth"
  ping:
    action: send
    channel:
      $ref: "#/channels/stream"
    title: Application-level ping
    messages:
      - $ref: "#/channels/stream/messages/ping"
  receiveFrames:
    action: receive
    channel:
      $ref: "#/channels/stream"
    title: Server frames
    messages:
      - $ref: "#/channels/stream/messages/ack"
      - $ref: "#/channels/stream/messages/pong"
      - $ref: "#/channels/stream/messages/tick"
      - $ref: "#/channels/stream/messages/tvl"
      - $ref: "#/channels/stream/messages/error"

components:
  messages:
    Auth:
      name: auth
      title: Auth
      payload:
        $ref: "#/components/schemas/AuthOp"
    Subscribe:
      name: subscribe
      title: Subscribe
      payload:
        $ref: "#/components/schemas/SubscribeOp"
    Unsubscribe:
      name: unsubscribe
      title: Unsubscribe
      payload:
        $ref: "#/components/schemas/SubscribeOp"
    Ping:
      name: ping
      title: Ping
      payload:
        $ref: "#/components/schemas/PingOp"
    Ack:
      name: ack
      title: Ack
      payload:
        $ref: "#/components/schemas/AckFrame"
    Pong:
      name: pong
      title: Pong
      payload:
        $ref: "#/components/schemas/PongFrame"
    Tick:
      name: tick
      title: Tick
      summary: Price update.
      payload:
        $ref: "#/components/schemas/TickFrame"
    TVL:
      name: tvl
      title: TVL update
      payload:
        $ref: "#/components/schemas/TVLFrame"
    ErrorFrame:
      name: error
      title: Error
      payload:
        $ref: "#/components/schemas/ErrorFrame"

  schemas:
    Product:
      type: string
      enum: [cex, dex, fx, us, tvl]
      description: Subscribable product channel.

    AuthOp:
      type: object
      required: [op, key]
      properties:
        op: { const: auth }
        key: { type: string }

    SubscribeOp:
      type: object
      required: [op, product, symbols]
      properties:
        op: { type: string, enum: [subscribe, unsubscribe] }
        product: { $ref: "#/components/schemas/Product" }
        symbols:
          type: array
          items: { type: string }

    PingOp:
      type: object
      required: [op]
      properties:
        op: { const: ping }

    AckFrame:
      type: object
      required: [f]
      properties:
        f: { const: ack }
      additionalProperties: true

    PongFrame:
      type: object
      required: [f]
      properties:
        f: { const: pong }

    TickFrame:
      type: object
      required: [f, s, t]
      properties:
        f: { const: tick }
        s: { type: string, description: Symbol. }
        p: { type: string, description: Trade price. }
        P: { type: string, description: Trade size. }
        b: { type: string, description: Bid price. }
        B: { type: string, description: Bid size. }
        a: { type: string, description: Ask price. }
        A: { type: string, description: Ask size. }
        t:
          {
            type: integer,
            format: int64,
            description: "Unix epoch milliseconds.",
          }
        class: { type: string, description: Asset class tag. }

    TVLFrame:
      type: object
      required: [f, s, t]
      properties:
        f: { const: tvl }
        s: { type: string }
        usd: { type: string }
        r0: { type: string }
        r1: { type: string }
        n: { type: integer }
        t: { type: integer, format: int64 }

    ErrorFrame:
      type: object
      required: [f, code]
      properties:
        f: { const: error }
        code: { type: string }
        message: { type: string }
        limit: { type: integer }