Pane types / price

price

A tradeable asset's current price with its intraday shape — stocks, crypto, FX, commodities.

A live price quote with a sparkline and OHLC summary.

A rendered price pane (price-v1)
price-v1

Fields in data

The envelope around data (publisher, label, expiresAt…) is the same on every type: see the envelope.

FieldTypeNotes
variant"v1"optionalDesign variant to render (defaults to v1).
symbolstringrequired1–16 chars
namestringrequired1–120 chars
glyphstringoptional1–4 chars
valuenumberrequired
changenumberrequired
changePctnumberrequired
opennumberoptional
dayHighnumberoptional
dayLownumberoptional
currencySymbolstringoptional1–8 chars
currencystringoptional2–8 chars
sparkarray of numberrequired2–256 items
axisarray of stringoptional2–12 items · each 1–16 chars
windowLabelstringoptional1–40 chars
windowShortstringoptional1–20 chars

Craft

  • Send 12–60 spark points. Two points draw a straight line and make the card look broken; the treatment was drawn for a dense series.
  • spark must end at value — the sparkline and the printed price read as one thing, so a mismatch is obvious.
  • change and changePct are signed numbers, not strings: -0.32 and -0.75.
  • Fill in open, dayHigh, dayLow whenever you have them — they render as the OHLC grid, which is most of what makes this card feel finished.
  • Set currency for non-USD assets so the card reads "$42.18 · AUD" instead of implying dollars-unqualified.
  • For crypto, set glyph ("Ξ", "₿") — it replaces the ticker badge with the asset's own mark.
  • Quotes go stale: set expiresAt on the envelope (a few hours for intraday) so yesterday's price clears itself.

Avoid

  • Don't use price for something that isn't a market price — a signup count with a sparkline is a chart.
  • Don't pre-format value as a string. This is the one card where the numbers really are numbers; the client formats them.
  • Don't pad spark with a flat repeated value — omit history you don't have and let the leaner card render.

Examples

Complete payloads for POST /api/v1/feed/items or the MCP publish_pane tool.

An equity the user watches, mid-session

{
  "type": "price",
  "publisher": "Yahoo Finance",
  "publisherInit": "YF",
  "publisherColor": "#7B68EE",
  "label": "Stock you watch",
  "data": {
    "symbol": "NVDA",
    "name": "NVIDIA Corp.",
    "currency": "USD",
    "currencySymbol": "$",
    "value": 887.21,
    "change": 21.04,
    "changePct": 2.43,
    "open": 866.17,
    "dayHigh": 891.04,
    "dayLow": 862.3,
    "spark": [
      866.17,
      871.4,
      868.2,
      875.6,
      882.1,
      886.4,
      880.9,
      877.3,
      884.6,
      889.2,
      887.21
    ],
    "axis": [
      "09:30",
      "12:00",
      "16:00"
    ],
    "windowLabel": "Since open",
    "windowShort": "today"
  }
}

Crypto, where the asset has its own mark and trades around the clock

{
  "type": "price",
  "publisher": "Coinbase",
  "publisherInit": "CB",
  "publisherColor": "#0052FF",
  "label": "Holdings",
  "data": {
    "symbol": "ETH",
    "name": "Ethereum",
    "glyph": "Ξ",
    "currency": "USD",
    "currencySymbol": "$",
    "value": 3580,
    "change": 45,
    "changePct": 1.27,
    "open": 3520,
    "dayHigh": 3612,
    "dayLow": 3498,
    "spark": [
      3520,
      3538,
      3555,
      3541,
      3566,
      3589,
      3612,
      3574,
      3560,
      3571,
      3580
    ],
    "axis": [
      "00:00",
      "08:00",
      "16:00"
    ],
    "windowLabel": "Since open",
    "windowShort": "today"
  }
}

A non-USD listing where only the basics are known

{
  "type": "price",
  "publisher": "ASX Watch",
  "publisherInit": "AX",
  "publisherColor": "#00594F",
  "label": "Portfolio",
  "data": {
    "symbol": "BHP",
    "name": "BHP Group",
    "currency": "AUD",
    "currencySymbol": "$",
    "value": 42.18,
    "change": -0.32,
    "changePct": -0.75,
    "spark": [
      42.5,
      42.62,
      42.55,
      42.44,
      42.38,
      42.31,
      42.24,
      42.2,
      42.15,
      42.22,
      42.26,
      42.19,
      42.14,
      42.18
    ]
  }
}