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.

Fields in data
The envelope around data (publisher, label, expiresAt…) is the same on every type: see the envelope.
| Field | Type | Notes | |
|---|---|---|---|
variant | "v1" | optional | Design variant to render (defaults to v1). |
symbol | string | required | 1–16 chars |
name | string | required | 1–120 chars |
glyph | string | optional | 1–4 chars |
value | number | required | |
change | number | required | |
changePct | number | required | |
open | number | optional | |
dayHigh | number | optional | |
dayLow | number | optional | |
currencySymbol | string | optional | 1–8 chars |
currency | string | optional | 2–8 chars |
spark | array of number | required | 2–256 items |
axis | array of string | optional | 2–12 items · each 1–16 chars |
windowLabel | string | optional | 1–40 chars |
windowShort | string | optional | 1–20 chars |
Craft
- Send 12–60
sparkpoints. Two points draw a straight line and make the card look broken; the treatment was drawn for a dense series. sparkmust end atvalue— the sparkline and the printed price read as one thing, so a mismatch is obvious.changeandchangePctare signed numbers, not strings:-0.32and-0.75.- Fill in
open,dayHigh,dayLowwhenever you have them — they render as the OHLC grid, which is most of what makes this card feel finished. - Set
currencyfor 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
expiresAton the envelope (a few hours for intraday) so yesterday's price clears itself.
Avoid
- Don't use
pricefor something that isn't a market price — a signup count with a sparkline is achart. - Don't pre-format
valueas a string. This is the one card where the numbers really are numbers; the client formats them. - Don't pad
sparkwith 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
]
}
}