Skip to main content
Soft quote depth is a synthetic, indicative market-depth view (bids and asks) derived from the soft-quote price ladder for each asset. It lets clients track quotable size at multiple price levels without polling the REST Request a Soft Attestation Quote endpoint per price for hundreds of assets. Depth is recomputed and pushed as the underlying ladder changes.
To generate a typed client for this endpoint, see Protobuf Schema & Code Generation.

Authentication

All requests must include your API key in the x-api-key metadata header.

Request

Endpoint: grpc.gm.ondo.finance:443 RPC: ondo.gm.backend.v1.BackendService/StreamSoftQuoteDepth
symbols
string[]
Asset symbols to subscribe to. If empty, you will receive updates for all assets.

Response

A server stream of messages. Each message batches one or more SoftQuoteDepth entries (one per symbol that updated since the last send) into a single updates array. Each entry holds the marginal depth ladder for a single asset: asks represent the buy (mint) side ordered best (lowest) price first, and bids represent the sell (redeem) side ordered best (highest) price first. Each level’s quantity is the incremental token size available at the level’s marginal price. Prices and quantities are decimal strings in human units. When error is set, bids and asks are empty.
updates
SoftQuoteDepth[]
Array of soft-quote depth updates.

Streaming behavior

  • Snapshot on subscribe. On connect, you receive the current depth for each subscribed symbol (when a fresh book is available), followed by live updates as the underlying ladder changes.
  • Batching. Updates are flushed at most once every ~250 ms per stream. Within a window, only the latest book per symbol is kept, so a newer update supersedes an earlier one buffered in the same window.

Errors

Asset-level problems (for example, a paused asset or a closed market) are reported inline: the affected SoftQuoteDepth entry carries a human-readable error with empty bids and asks, and the stream stays open (see the GOOGLon entry in the example). Request-level problems terminate the stream with a gRPC status:
  • InvalidArgument — a malformed symbol (must be at least 3 characters and end with on).
  • NotFound — an unknown asset symbol.
  • Unauthenticated — a missing or invalid x-api-key.
  • ResourceExhausted — per-account stream rate limits exceeded.
grpcurl \
  -H "x-api-key: <YOUR_API_KEY>" \
  -d '{"symbols": ["AAPLon", "GOOGLon"]}' \
  grpc.gm.ondo.finance:443 \
  ondo.gm.backend.v1.BackendService/StreamSoftQuoteDepth
{
  "updates": [
    {
      "symbol": "AAPLon",
      "ticker": "AAPL",
      "sessionType": "regular",
      "timestamp": "1773350214476688119",
      "bids": [
        { "price": "256.700000000000000000", "quantity": "100.000000000000000000" },
        { "price": "256.500000000000000000", "quantity": "250.000000000000000000" }
      ],
      "asks": [
        { "price": "256.900000000000000000", "quantity": "100.000000000000000000" },
        { "price": "257.100000000000000000", "quantity": "250.000000000000000000" }
      ]
    },
    {
      "symbol": "GOOGLon",
      "ticker": "GOOGL",
      "sessionType": "regular",
      "error": "market closed",
      "timestamp": "1773350214478735649",
      "bids": [],
      "asks": []
    }
  ]
}