feat(share): serve a content-agnostic displayV2 layout beside display
footer.caption is absent in every case. The referral caption sits behind backend-share-referral-caption-enabled, and with no Eppo SDK key locally the flag cannot be evaluated, so it fails closed by design. The activation-program stub was never called, confirming the gate short-circuits ahead of it. The caption projection is covered by unit tests only.stacked shape only appears once the event category resolves; that upstream answers 404 against real staging from here, so it is stubbed. Without it the heading is correctly absent altogether and the event name lands in the rows block instead — both branches are exercised, but the resolved-category branch is on stub data.share-identity.resolver.ts ({ profile: … } envelope, icon, privacyState). Real-world privacy and consent combinations beyond public/kycBadgeVisible: true are untested here.GET /share/:shareId/image (PNG) case: this PR does not touch the renderer.| Case | Request | Exp | Act | Verdict | Latency | displayV2 .version | heading .type | body region | overlay region | groups | footer .caption |
|---|---|---|---|---|---|---|---|---|---|---|---|
| New spot position (minimal required fields) | POST /share | 201 | 201 | PASS | 47ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Existing spot, market caps + chart (all optionals) | POST /share | 201 | 201 | PASS | 7ms | 2 | subtitled | chart | identity + hero + stats | 1 | absent |
| New perp, 10x long | POST /share | 201 | 201 | PASS | 5ms | 2 | subtitled | chart | identity + hero + stats | 1 | absent |
| Existing perp, short at a loss (negative tone) | POST /share | 201 | 201 | PASS | 5ms | 2 | subtitled | chart | identity + hero + stats | 1 | absent |
| New prediction (no chart, multi_series heading) | POST /share | 201 | 201 | PASS | 5ms | 2 | stacked | rows + identity + hero + stats | absent | 1 | absent |
| Existing prediction at a loss | POST /share | 201 | 201 | PASS | 4ms | 2 | stacked | rows + identity + hero + stats | absent | 1 | absent |
| Profile share (follow chrome, no hero) | POST /share | 201 | 201 | PASS | 4ms | 2 | marked | identity | absent | 1 | absent |
| Chat share (text headline, inline stats) | POST /share | 201 | 201 | PASS | 4ms | 2 | subtitled | identity + identity + stats | absent | 1 | absent |
| Exactly flat P&L (neutral tone, no glow bias) | POST /share | 201 | 201 | PASS | 6ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Emoji + RTL symbol and name (unicode monogram) | POST /share | 201 | 201 | PASS | 5ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| HTML-ish name (must be served verbatim, not escaped or executed) | POST /share | 201 | 201 | PASS | 4ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Prediction with 4 labelled series (rows block, 4th drops 3rd) | POST /share | 201 | 201 | PASS | 9ms | 2 | stacked | rows + identity + hero + stats | absent | 1 | absent |
| Unknown extra field in payload (stripped on create; only PATCH is strict) corrected | POST /share | 201 | 201 | PASS | 11ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Unknown market enum value | POST /share | 400 | 400 | PASS | 1ms | — | — | — | — | — | — |
| Wrong type: amount as a number, not a decimal string | POST /share | 400 | 400 | PASS | 1ms | — | — | — | — | — | — |
| Name at exactly the 128-char max (boundary, accepted) | POST /share | 201 | 201 | PASS | 4ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Name at 129 chars, one past max (rejected) | POST /share | 400 | 400 | PASS | 1ms | — | — | — | — | — | — |
| entryPriceUsd past the 40-digit decimal max (rejected) | POST /share | 400 | 400 | PASS | 1ms | — | — | — | — | — | — |
| Sub-cent price, high precision (formatting must not render $0.00) | POST /share | 201 | 201 | PASS | 4ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| POST with no x-forwarded-user header | POST /share | 401 | 401 | PASS | 1ms | — | — | — | — | — | — |
| POST with a malformed (non-UUID) user header | POST /share | 401 | 401 | PASS | 1ms | — | — | — | — | — | — |
| GET an unknown shareId | GET /share/ZZZZZZZZZZ | 404 | 404 | PASS | 2ms | — | — | — | — | — | — |
| GET is public — no auth header, and cache headers vary on app version | GET /share/ppQymgLD9O | 200 | 200 | PASS | 4ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| App-version gating (26.27.3 vs 26.28.0) flows through to displayV2 rows | POST /share | 201 | 201 | PASS | 5ms | 2 | stacked | rows + identity + hero + stats | absent | 1 | absent |
| Same request twice — distinct shareIds, identical displayV2 | POST /share | 201 | 201 | PASS | 5ms | 2 | subtitled | identity + hero + stats | absent | 1 | absent |
| Downstream social-chat URL points at a closed port — card still renders | POST /share | 201 | 201 | PASS | 3ms | — | — | — | — | — | — |
| PATCH someone else's record | PATCH /share/1CIgEVgV5B | 404 | 404 | PASS | 2ms | — | — | — | — | — | — |
The six displayV2 columns are read back from GET /share/:shareId — the persisted record — not echoed from the create request. Region columns list the block types in render order, applying the documented default that an absent region means body. — means the case produced no record (a rejected or unauthenticated request). Every case that ran is listed; none were truncated.
Which properties each object actually carried, read back from GET /share/:shareId across the 17 cases that produced a persisted record. ✓ is present, with a hint of the value (array length, object key count, or the scalar); – is absent. Hover a cell for the raw value. Absent is meaningful here — nearly every property is optional by design, and a client must render without it.
display — the existing object, unchanged by this PR| Case | headerTitle | heading | titleVerified | badge | icon | headline | byline | username | avatar | sharerVerified | sparklines | stats | caption | backdrop | date |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| New spot position (minimal required fields) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Existing spot, market caps + chart (all optionals) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ url,caip19,fallbackText | ✓ 4 keys | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | ✓ 1 | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| New perp, 10x long | ✓ Share Position | ✓ type,title,subtitle | – | ✓ text,colorHex | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | ✓ 1 | ✓ 1 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Existing perp, short at a loss (negative tone) | ✓ Share Position | ✓ type,title,subtitle | – | ✓ text,colorHex | ✓ caip19,fallbackText | ✓ 4 keys | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | ✓ 1 | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| New prediction (no chart, multi_series heading) | ✓ Share Position | ✓ type,title,series | – | ✓ text | ✓ fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Existing prediction at a loss | ✓ Share Position | ✓ type,title,series | – | ✓ text | ✓ fallbackText | ✓ 4 keys | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Profile share (follow chrome, no hero) | ✓ Share Profile | ✓ type,title | – | – | ✓ url,fallbackText | ✓ value,tone | – | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | – | – | – | ✓ 2026-08-21T00:51:09.8… |
| Chat share (text headline, inline stats) | ✓ Share Chat | ✓ type,title | – | – | ✓ fallbackText | ✓ value,tone | – | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 1 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Exactly flat P&L (neutral tone, no glow bias) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ 4 keys | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| Emoji + RTL symbol and name (unicode monogram) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.8… |
| HTML-ish name (must be served verbatim, not escaped or executed) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| Prediction with 4 labelled series (rows block, 4th drops 3rd) | ✓ Share Position | ✓ type,title,series | – | ✓ text,colorHex | ✓ fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| Unknown extra field in payload (stripped on create; only PATCH is strict) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| Name at exactly the 128-char max (boundary, accepted) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| Sub-cent price, high precision (formatting must not render $0.00) | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| App-version gating (26.27.3 vs 26.28.0) flows through to displayV2 rows | ✓ Share Position | ✓ type,title,series | – | ✓ text,colorHex | ✓ fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
| Same request twice — distinct shareIds, identical displayV2 | ✓ Share Position | ✓ type,title,subtitle | – | – | ✓ caip19,fallbackText | ✓ value,amountUsd,tone | ✓ value | ✓ ghosty | ✓ url,fallbackText | ✓ true | – | ✓ 2 | – | – | ✓ 2026-08-21T00:51:09.9… |
Declared in schema order from share-display.types.ts. Only headerTitle is required. caption is absent everywhere because the referral flag fails closed locally, and backdrop because no case attached media.
displayV2 — the object this PR adds| Case | version | headerTitle | theme | blocks | groups | footer | backdrop |
|---|---|---|---|---|---|---|---|
| New spot position (minimal required fields) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Existing spot, market caps + chart (all optionals) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| New perp, 10x long | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| Existing perp, short at a loss (negative tone) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| New prediction (no chart, multi_series heading) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| Existing prediction at a loss | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| Profile share (follow chrome, no hero) | ✓ 2 | ✓ Share Profile | ✓ frame,accentHex,glow | ✓ 1 | ✓ 1 | ✓ date,brandLogo | – |
| Chat share (text headline, inline stats) | ✓ 2 | ✓ Share Chat | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Exactly flat P&L (neutral tone, no glow bias) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Emoji + RTL symbol and name (unicode monogram) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| HTML-ish name (must be served verbatim, not escaped or executed) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Prediction with 4 labelled series (rows block, 4th drops 3rd) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| Unknown extra field in payload (stripped on create; only PATCH is strict) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Name at exactly the 128-char max (boundary, accepted) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| Sub-cent price, high precision (formatting must not render $0.00) | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
| App-version gating (26.27.3 vs 26.28.0) flows through to displayV2 rows | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 4 | ✓ 1 | ✓ date,brandLogo | – |
| Same request twice — distinct shareIds, identical displayV2 | ✓ 2 | ✓ Share Position | ✓ frame,accentHex,glow | ✓ 3 | ✓ 1 | ✓ date,brandLogo | – |
Declared in schema order from share-display-v2.types.ts. version, headerTitle and blocks are the only required properties; groups appears only when some block is grouped.
displayV2.blocks[] — the block components and their propertiesBlock type | Cases | Properties carried |
|---|---|---|
| identity | 17 | type title layout size region group image titleVerified |
| hero | 15 | type eyebrow amount region group |
| stats | 16 | type stats orientation region group dividerAbove |
| chart | 3 | type series |
| rows | 4 | type rows |
The property union each block component actually carried across this run — not the schema's full surface, which admits more (a chart may carry markers and thresholds, an identity may carry badges; no current payload snapshots those, so they never appear). region and group are the placement fields shared by every block type; a block omitting region is drawn in the body.
| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | SOL |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00"
}
}
HTTP 201
vary: Origin
{
"shareId": "ppQymgLD9O",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.802Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral"
},
"byline": {
"value": "$1,875.00"
},
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$150.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.802Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$150.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1,875.00",
"dim": true
}
]
},
"amount": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.802Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/ppQymgLD9O"
}GET http://localhost:3000/share/ppQymgLD9O content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "ppQymgLD9O",
"v": 2,
"payload": {
"amount": "12.5",
"caip19": "solana:101/nativeToken:501",
"entryPriceUsd": "150.00",
"kind": "new_position",
"market": "spot"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.802Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral"
},
"byline": {
"value": "$1,875.00"
},
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$150.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.802Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$150.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1,875.00",
"dim": true
}
]
},
"amount": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.802Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | USDC |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "existing_position",
"market": "spot",
"caip19": "solana:101/address:EPjFWdd5",
"name": "USD Coin",
"symbol": "USDC",
"logoUri": "https://cdn.phantom.app/usdc.png",
"amount": "1000",
"entryPriceUsd": "0.0000203418",
"entryMarketCapUsd": "3800000",
"priceSeries": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"performance": {
"currentPriceUsd": "0.0000245",
"currentMarketCapUsd": "4655000",
"pnlUsd": "20.55",
"pnlPct": "20.44"
}
}
}
HTTP 201
vary: Origin
{
"shareId": "4TR0wzBAU7",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/address:EPjFWdd5",
"name": "USD Coin",
"symbol": "USDC",
"logoUri": "https://cdn.phantom.app/usdc.png",
"amount": "1000",
"entryPriceUsd": "0.0000203418",
"entryMarketCapUsd": "3800000",
"priceSeries": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"kind": "existing_position",
"performance": {
"currentPriceUsd": "0.0000245",
"currentMarketCapUsd": "4655000",
"pnlUsd": "20.55",
"pnlPct": "20.44"
}
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.826Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"url": "https://api.phantom.app/image-proxy/?image=https%3A%2F%2Fcdn.phantom.app%2Fusdc.png",
"caip19": "solana:101/address:EPjFWdd5",
"fallbackText": "U"
},
"headline": {
"value": "+$20.55",
"amountUsd": "20.55",
"changePct": "+20.44%",
"tone": "positive"
},
"byline": {
"value": "$0.025"
},
"stats": [
{
"label": "Entry MC",
"value": "$3.80M",
"amountUsd": "3800000"
},
{
"label": "Current MC",
"value": "$4.66M",
"amountUsd": "4655000"
}
],
"sparklines": [
{
"data": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"color": "#45E863"
}
],
"heading": {
"type": "title_subtitle",
"title": "USDC",
"subtitle": "USD Coin"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.826Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "positive",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"url": "https://api.phantom.app/image-proxy/?image=https%3A%2F%2Fcdn.phantom.app%2Fusdc.png",
"caip19": "solana:101/address:EPjFWdd5",
"fallbackText": "U",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "USDC"
}
]
},
"subtitle": {
"runs": [
{
"text": "USD Coin",
"dim": true
}
]
}
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"colorHex": "#45E863",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$0.025",
"dim": true
}
]
},
"amount": {
"value": "+$20.55",
"amountUsd": "20.55",
"changePct": "+20.44%",
"tone": "positive",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry MC",
"value": "$3.80M",
"amountUsd": "3800000"
},
{
"label": "Current MC",
"value": "$4.66M",
"amountUsd": "4655000"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "positive",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.826Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/4TR0wzBAU7"
}GET http://localhost:3000/share/4TR0wzBAU7 content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "4TR0wzBAU7",
"v": 2,
"payload": {
"amount": "1000",
"caip19": "solana:101/address:EPjFWdd5",
"entryMarketCapUsd": "3800000",
"entryPriceUsd": "0.0000203418",
"kind": "existing_position",
"logoUri": "https://cdn.phantom.app/usdc.png",
"market": "spot",
"name": "USD Coin",
"performance": {
"currentMarketCapUsd": "4655000",
"currentPriceUsd": "0.0000245",
"pnlPct": "20.44",
"pnlUsd": "20.55"
},
"priceSeries": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"symbol": "USDC"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.826Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"url": "https://api.phantom.app/image-proxy/?image=https%3A%2F%2Fcdn.phantom.app%2Fusdc.png",
"caip19": "solana:101/address:EPjFWdd5",
"fallbackText": "U"
},
"headline": {
"value": "+$20.55",
"amountUsd": "20.55",
"changePct": "+20.44%",
"tone": "positive"
},
"byline": {
"value": "$0.025"
},
"stats": [
{
"label": "Entry MC",
"value": "$3.80M",
"amountUsd": "3800000"
},
{
"label": "Current MC",
"value": "$4.66M",
"amountUsd": "4655000"
}
],
"sparklines": [
{
"data": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"color": "#45E863"
}
],
"heading": {
"type": "title_subtitle",
"title": "USDC",
"subtitle": "USD Coin"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.826Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "positive",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"url": "https://api.phantom.app/image-proxy/?image=https%3A%2F%2Fcdn.phantom.app%2Fusdc.png",
"caip19": "solana:101/address:EPjFWdd5",
"fallbackText": "U",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "USDC"
}
]
},
"subtitle": {
"runs": [
{
"text": "USD Coin",
"dim": true
}
]
}
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"0.0000203",
"0.0000212",
"0.0000245"
],
"colorHex": "#45E863",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$0.025",
"dim": true
}
]
},
"amount": {
"value": "+$20.55",
"amountUsd": "20.55",
"changePct": "+20.44%",
"tone": "positive",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry MC",
"value": "$3.80M",
"amountUsd": "3800000"
},
{
"label": "Current MC",
"value": "$4.66M",
"amountUsd": "4655000"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "positive",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.826Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | BTC |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "perp",
"caip19": "hypercore:mainnet/perp:BTC",
"name": "Bitcoin",
"symbol": "BTC",
"side": "long",
"leverage": "10",
"size": "0.25",
"entryPriceUsd": "63810.25",
"priceSeries": [
"63000.00",
"63500.10",
"63810.25"
]
}
}
HTTP 201
vary: Origin
{
"shareId": "7eKJMQezPy",
"v": 2,
"payload": {
"market": "perp",
"caip19": "hypercore:mainnet/perp:BTC",
"name": "Bitcoin",
"symbol": "BTC",
"side": "long",
"leverage": "10",
"size": "0.25",
"entryPriceUsd": "63810.25",
"priceSeries": [
"63000.00",
"63500.10",
"63810.25"
],
"kind": "new_position"
},
"deepLinkPath": "v1/perps/btc-usd",
"createdAt": "2026-08-21T00:51:09.836Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "10x Long",
"colorHex": "#45E863"
},
"icon": {
"caip19": "hypercore:mainnet/perp:BTC",
"fallbackText": "B"
},
"headline": {
"value": "$15,952.56",
"amountUsd": "15952.5625",
"tone": "neutral"
},
"byline": {
"value": "$15,952.56"
},
"stats": [
{
"label": "Price",
"value": "$63,810.25",
"amountUsd": "63810.25"
}
],
"sparklines": [
{
"data": [
"63000.00",
"63500.10",
"63810.25"
],
"color": "#45E863"
}
],
"heading": {
"type": "title_subtitle",
"title": "BTC",
"subtitle": "Bitcoin"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.836Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "hypercore:mainnet/perp:BTC",
"fallbackText": "B",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "BTC"
}
]
},
"subtitle": {
"runs": [
{
"text": "Bitcoin",
"dim": true
}
]
},
"chips": [
{
"text": "10x Long",
"colorHex": "#45E863"
}
]
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"63000.00",
"63500.10",
"63810.25"
],
"colorHex": "#45E863",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$15,952.56",
"dim": true
}
]
},
"amount": {
"value": "$15,952.56",
"amountUsd": "15952.5625",
"tone": "neutral",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Price",
"value": "$63,810.25",
"amountUsd": "63810.25"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.836Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/7eKJMQezPy"
}GET http://localhost:3000/share/7eKJMQezPy content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "7eKJMQezPy",
"v": 2,
"payload": {
"caip19": "hypercore:mainnet/perp:BTC",
"entryPriceUsd": "63810.25",
"kind": "new_position",
"leverage": "10",
"market": "perp",
"name": "Bitcoin",
"priceSeries": [
"63000.00",
"63500.10",
"63810.25"
],
"side": "long",
"size": "0.25",
"symbol": "BTC"
},
"deepLinkPath": "v1/perps/btc-usd",
"createdAt": "2026-08-21T00:51:09.836Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "10x Long",
"colorHex": "#45E863"
},
"icon": {
"caip19": "hypercore:mainnet/perp:BTC",
"fallbackText": "B"
},
"headline": {
"value": "$15,952.56",
"amountUsd": "15952.5625",
"tone": "neutral"
},
"byline": {
"value": "$15,952.56"
},
"stats": [
{
"label": "Price",
"value": "$63,810.25",
"amountUsd": "63810.25"
}
],
"sparklines": [
{
"data": [
"63000.00",
"63500.10",
"63810.25"
],
"color": "#45E863"
}
],
"heading": {
"type": "title_subtitle",
"title": "BTC",
"subtitle": "Bitcoin"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.836Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "hypercore:mainnet/perp:BTC",
"fallbackText": "B",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "BTC"
}
]
},
"subtitle": {
"runs": [
{
"text": "Bitcoin",
"dim": true
}
]
},
"chips": [
{
"text": "10x Long",
"colorHex": "#45E863"
}
]
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"63000.00",
"63500.10",
"63810.25"
],
"colorHex": "#45E863",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$15,952.56",
"dim": true
}
]
},
"amount": {
"value": "$15,952.56",
"amountUsd": "15952.5625",
"tone": "neutral",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Price",
"value": "$63,810.25",
"amountUsd": "63810.25"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.836Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | ETH |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "existing_position",
"market": "perp",
"caip19": "hypercore:mainnet/perp:ETH",
"name": "Ethereum",
"symbol": "ETH",
"side": "short",
"leverage": "5",
"size": "3",
"entryPriceUsd": "3200.00",
"priceSeries": [
"3200.00",
"3310.50",
"3402.75"
],
"performance": {
"currentPriceUsd": "3402.75",
"pnlUsd": "-608.25",
"pnlPct": "-6.34"
}
}
}
HTTP 201
vary: Origin
{
"shareId": "uZKjZ9zkH1",
"v": 2,
"payload": {
"market": "perp",
"caip19": "hypercore:mainnet/perp:ETH",
"name": "Ethereum",
"symbol": "ETH",
"side": "short",
"leverage": "5",
"size": "3",
"entryPriceUsd": "3200.00",
"priceSeries": [
"3200.00",
"3310.50",
"3402.75"
],
"kind": "existing_position",
"performance": {
"currentPriceUsd": "3402.75",
"pnlUsd": "-608.25",
"pnlPct": "-6.34"
}
},
"deepLinkPath": "v1/perps/eth-usd",
"createdAt": "2026-08-21T00:51:09.845Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "5x Short",
"colorHex": "#FF0037"
},
"icon": {
"caip19": "hypercore:mainnet/perp:ETH",
"fallbackText": "E"
},
"headline": {
"value": "-$608.25",
"amountUsd": "-608.25",
"changePct": "-6.34%",
"tone": "negative"
},
"byline": {
"value": "$10,208.25"
},
"stats": [
{
"label": "Entry",
"value": "$3,200.00",
"amountUsd": "3200.00"
},
{
"label": "Current",
"value": "$3,402.75",
"amountUsd": "3402.75"
}
],
"sparklines": [
{
"data": [
"3200.00",
"3310.50",
"3402.75"
],
"color": "#FF0037"
}
],
"heading": {
"type": "title_subtitle",
"title": "ETH",
"subtitle": "Ethereum"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.845Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "negative",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "hypercore:mainnet/perp:ETH",
"fallbackText": "E",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ETH"
}
]
},
"subtitle": {
"runs": [
{
"text": "Ethereum",
"dim": true
}
]
},
"chips": [
{
"text": "5x Short",
"colorHex": "#FF0037"
}
]
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"3200.00",
"3310.50",
"3402.75"
],
"colorHex": "#FF0037",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$10,208.25",
"dim": true
}
]
},
"amount": {
"value": "-$608.25",
"amountUsd": "-608.25",
"changePct": "-6.34%",
"tone": "negative",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$3,200.00",
"amountUsd": "3200.00"
},
{
"label": "Current",
"value": "$3,402.75",
"amountUsd": "3402.75"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "negative",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.845Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/uZKjZ9zkH1"
}GET http://localhost:3000/share/uZKjZ9zkH1 content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "uZKjZ9zkH1",
"v": 2,
"payload": {
"caip19": "hypercore:mainnet/perp:ETH",
"entryPriceUsd": "3200.00",
"kind": "existing_position",
"leverage": "5",
"market": "perp",
"name": "Ethereum",
"performance": {
"currentPriceUsd": "3402.75",
"pnlPct": "-6.34",
"pnlUsd": "-608.25"
},
"priceSeries": [
"3200.00",
"3310.50",
"3402.75"
],
"side": "short",
"size": "3",
"symbol": "ETH"
},
"deepLinkPath": "v1/perps/eth-usd",
"createdAt": "2026-08-21T00:51:09.845Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "5x Short",
"colorHex": "#FF0037"
},
"icon": {
"caip19": "hypercore:mainnet/perp:ETH",
"fallbackText": "E"
},
"headline": {
"value": "-$608.25",
"amountUsd": "-608.25",
"changePct": "-6.34%",
"tone": "negative"
},
"byline": {
"value": "$10,208.25"
},
"stats": [
{
"label": "Entry",
"value": "$3,200.00",
"amountUsd": "3200.00"
},
{
"label": "Current",
"value": "$3,402.75",
"amountUsd": "3402.75"
}
],
"sparklines": [
{
"data": [
"3200.00",
"3310.50",
"3402.75"
],
"color": "#FF0037"
}
],
"heading": {
"type": "title_subtitle",
"title": "ETH",
"subtitle": "Ethereum"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.845Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "negative",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "hypercore:mainnet/perp:ETH",
"fallbackText": "E",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ETH"
}
]
},
"subtitle": {
"runs": [
{
"text": "Ethereum",
"dim": true
}
]
},
"chips": [
{
"text": "5x Short",
"colorHex": "#FF0037"
}
]
},
"blocks": [
{
"type": "chart",
"series": [
{
"data": [
"3200.00",
"3310.50",
"3402.75"
],
"colorHex": "#FF0037",
"endpointMarker": true
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "overlay",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$10,208.25",
"dim": true
}
]
},
"amount": {
"value": "-$608.25",
"amountUsd": "-608.25",
"changePct": "-6.34%",
"tone": "negative",
"size": "hero"
},
"region": "overlay",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$3,200.00",
"amountUsd": "3200.00"
},
{
"label": "Current",
"value": "$3,402.75",
"amountUsd": "3402.75"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "overlay",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "negative",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.845Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | stacked |
| PASS | heading, when served, names its subject with a title | Elections |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "prediction",
"ticker": "PRES-2028-DEM",
"outcome": "Yes",
"eventTitle": "Who wins the 2028 election?",
"chanceMultiplier": "2.35",
"valueUsd": "235.00",
"payoutIfRightUsd": "552.25"
}
}
HTTP 201
vary: Origin
{
"shareId": "oUaFdyfyR8",
"v": 2,
"payload": {
"market": "prediction",
"ticker": "PRES-2028-DEM",
"outcome": "Yes",
"eventTitle": "Who wins the 2028 election?",
"chanceMultiplier": "2.35",
"valueUsd": "235.00",
"payoutIfRightUsd": "552.25",
"kind": "new_position"
},
"deepLinkPath": "predictions/event/PRES-2028-DEM",
"createdAt": "2026-08-21T00:51:09.853Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Yes"
},
"icon": {
"fallbackText": "P"
},
"headline": {
"value": "$235.00",
"amountUsd": "235.00",
"tone": "neutral"
},
"byline": {
"value": "$235.00"
},
"stats": [
{
"label": "Payout if right",
"value": "+$552.25",
"amountUsd": "552.25",
"tone": "positive"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"heading": {
"type": "multi_series",
"title": "Elections",
"series": [
{
"text": "Who wins the 2028 election?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.853Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "P",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Elections"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 election?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$235.00",
"dim": true
}
]
},
"amount": {
"value": "$235.00",
"amountUsd": "235.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Payout if right",
"value": "+$552.25",
"amountUsd": "552.25",
"tone": "positive"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.853Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/oUaFdyfyR8"
}GET http://localhost:3000/share/oUaFdyfyR8 content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "oUaFdyfyR8",
"v": 2,
"payload": {
"chanceMultiplier": "2.35",
"eventTitle": "Who wins the 2028 election?",
"kind": "new_position",
"market": "prediction",
"outcome": "Yes",
"payoutIfRightUsd": "552.25",
"ticker": "PRES-2028-DEM",
"valueUsd": "235.00"
},
"deepLinkPath": "predictions/event/PRES-2028-DEM",
"createdAt": "2026-08-21T00:51:09.853Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Yes"
},
"icon": {
"fallbackText": "P"
},
"headline": {
"value": "$235.00",
"amountUsd": "235.00",
"tone": "neutral"
},
"byline": {
"value": "$235.00"
},
"stats": [
{
"label": "Payout if right",
"value": "+$552.25",
"amountUsd": "552.25",
"tone": "positive"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"heading": {
"type": "multi_series",
"title": "Elections",
"series": [
{
"text": "Who wins the 2028 election?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.853Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "P",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Elections"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 election?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$235.00",
"dim": true
}
]
},
"amount": {
"value": "$235.00",
"amountUsd": "235.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Payout if right",
"value": "+$552.25",
"amountUsd": "552.25",
"tone": "positive"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.853Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | stacked |
| PASS | heading, when served, names its subject with a title | Elections |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "existing_position",
"market": "prediction",
"ticker": "PRES-2028-DEM",
"outcome": "Yes",
"eventTitle": "Who wins the 2028 election?",
"chanceMultiplier": "2.35",
"chancePercent": "42.55",
"valueUsd": "235.00",
"performance": {
"pnlUsd": "-40.50",
"pnlPct": "-17.23"
}
}
}
HTTP 201
vary: Origin
{
"shareId": "Rh8Q928qWo",
"v": 2,
"payload": {
"market": "prediction",
"ticker": "PRES-2028-DEM",
"outcome": "Yes",
"eventTitle": "Who wins the 2028 election?",
"chanceMultiplier": "2.35",
"chancePercent": "42.55",
"valueUsd": "235.00",
"kind": "existing_position",
"performance": {
"pnlUsd": "-40.50",
"pnlPct": "-17.23"
}
},
"deepLinkPath": "predictions/event/PRES-2028-DEM",
"createdAt": "2026-08-21T00:51:09.862Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Yes"
},
"icon": {
"fallbackText": "P"
},
"headline": {
"value": "-$40.50",
"amountUsd": "-40.50",
"changePct": "-17.23%",
"tone": "negative"
},
"byline": {
"value": "$235.00"
},
"stats": [
{
"label": "Outcome",
"value": "Yes"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"heading": {
"type": "multi_series",
"title": "Elections",
"series": [
{
"text": "Who wins the 2028 election?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.862Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "negative",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "P",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Elections"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 election?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$235.00",
"dim": true
}
]
},
"amount": {
"value": "-$40.50",
"amountUsd": "-40.50",
"changePct": "-17.23%",
"tone": "negative",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Yes"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "negative",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.862Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/Rh8Q928qWo"
}GET http://localhost:3000/share/Rh8Q928qWo content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "Rh8Q928qWo",
"v": 2,
"payload": {
"chanceMultiplier": "2.35",
"chancePercent": "42.55",
"eventTitle": "Who wins the 2028 election?",
"kind": "existing_position",
"market": "prediction",
"outcome": "Yes",
"performance": {
"pnlPct": "-17.23",
"pnlUsd": "-40.50"
},
"ticker": "PRES-2028-DEM",
"valueUsd": "235.00"
},
"deepLinkPath": "predictions/event/PRES-2028-DEM",
"createdAt": "2026-08-21T00:51:09.862Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Yes"
},
"icon": {
"fallbackText": "P"
},
"headline": {
"value": "-$40.50",
"amountUsd": "-40.50",
"changePct": "-17.23%",
"tone": "negative"
},
"byline": {
"value": "$235.00"
},
"stats": [
{
"label": "Outcome",
"value": "Yes"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"heading": {
"type": "multi_series",
"title": "Elections",
"series": [
{
"text": "Who wins the 2028 election?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.862Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "negative",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "P",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Elections"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 election?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$235.00",
"dim": true
}
]
},
"amount": {
"value": "-$40.50",
"amountUsd": "-40.50",
"changePct": "-17.23%",
"tone": "negative",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Yes"
},
{
"label": "Chance",
"value": "42.55%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "negative",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.862Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Profile |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 1 |
| PASS | heading is one of the three published shapes, or absent | marked |
| PASS | heading, when served, names its subject with a title | @moonshot_mike |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 1 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "profile",
"username": "moonshot_mike"
}
}
HTTP 201
vary: Origin
{
"shareId": "g9PTxGKwg1",
"v": 2,
"payload": {
"kind": "profile",
"username": "moonshot_mike"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.869Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Profile",
"icon": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "M"
},
"headline": {
"value": "@moonshot_mike",
"tone": "neutral"
},
"heading": {
"type": "title_subtitle",
"title": "@moonshot_mike"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.869Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Profile",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "marked",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "M",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "@moonshot_mike"
}
]
},
"trailing": {
"attribution": {
"text": {
"runs": [
{
"text": "Follow on"
}
]
},
"brandLogo": true
}
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.869Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/g9PTxGKwg1"
}GET http://localhost:3000/share/g9PTxGKwg1 content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "g9PTxGKwg1",
"v": 2,
"payload": {
"kind": "profile",
"username": "moonshot_mike"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.869Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Profile",
"icon": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "M"
},
"headline": {
"value": "@moonshot_mike",
"tone": "neutral"
},
"heading": {
"type": "title_subtitle",
"title": "@moonshot_mike"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.869Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Profile",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "marked",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "M",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "@moonshot_mike"
}
]
},
"trailing": {
"attribution": {
"text": {
"runs": [
{
"text": "Follow on"
}
]
},
"brandLogo": true
}
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.869Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Chat |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | Group chat |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "chat",
"chatId": "chat-9001"
}
}
HTTP 201
vary: Origin
{
"shareId": "QdRBdazw7m",
"v": 2,
"payload": {
"kind": "chat",
"chatId": "chat-9001"
},
"deepLinkPath": "v1/chat/chat-9001",
"createdAt": "2026-08-21T00:51:09.875Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Chat",
"icon": {
"fallbackText": "G"
},
"headline": {
"value": "Join the conversation",
"tone": "neutral"
},
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"heading": {
"type": "title_subtitle",
"title": "Group chat"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.875Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Chat",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Group chat"
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "identity",
"title": {
"runs": [
{
"text": "Join the conversation"
}
]
},
"layout": "row",
"size": "lg",
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"orientation": "inline",
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.875Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/QdRBdazw7m"
}GET http://localhost:3000/share/QdRBdazw7m content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "QdRBdazw7m",
"v": 2,
"payload": {
"chatId": "chat-9001",
"kind": "chat"
},
"deepLinkPath": "v1/chat/chat-9001",
"createdAt": "2026-08-21T00:51:09.875Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Chat",
"icon": {
"fallbackText": "G"
},
"headline": {
"value": "Join the conversation",
"tone": "neutral"
},
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"heading": {
"type": "title_subtitle",
"title": "Group chat"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.875Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Chat",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Group chat"
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "identity",
"title": {
"runs": [
{
"text": "Join the conversation"
}
]
},
"layout": "row",
"size": "lg",
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"orientation": "inline",
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.875Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | SOL |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "existing_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "1",
"entryPriceUsd": "100.00",
"performance": {
"currentPriceUsd": "100.00",
"pnlUsd": "0",
"pnlPct": "0"
}
}
}
HTTP 201
vary: Origin
{
"shareId": "2p8ZYQ14lr",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "1",
"entryPriceUsd": "100.00",
"kind": "existing_position",
"performance": {
"currentPriceUsd": "100.00",
"pnlUsd": "0",
"pnlPct": "0"
}
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.883Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$0.00",
"amountUsd": "0",
"changePct": "0%",
"tone": "neutral"
},
"byline": {
"value": "$100.00"
},
"stats": [
{
"label": "Entry",
"value": "$100.00",
"amountUsd": "100.00"
},
{
"label": "Current",
"value": "$100.00",
"amountUsd": "100.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$100.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.883Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$100.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$100.00",
"dim": true
}
]
},
"amount": {
"value": "$0.00",
"amountUsd": "0",
"changePct": "0%",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$100.00",
"amountUsd": "100.00"
},
{
"label": "Current",
"value": "$100.00",
"amountUsd": "100.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.883Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/2p8ZYQ14lr"
}GET http://localhost:3000/share/2p8ZYQ14lr content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "2p8ZYQ14lr",
"v": 2,
"payload": {
"amount": "1",
"caip19": "solana:101/nativeToken:501",
"entryPriceUsd": "100.00",
"kind": "existing_position",
"market": "spot",
"performance": {
"currentPriceUsd": "100.00",
"pnlPct": "0",
"pnlUsd": "0"
}
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.883Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$0.00",
"amountUsd": "0",
"changePct": "0%",
"tone": "neutral"
},
"byline": {
"value": "$100.00"
},
"stats": [
{
"label": "Entry",
"value": "$100.00",
"amountUsd": "100.00"
},
{
"label": "Current",
"value": "$100.00",
"amountUsd": "100.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$100.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.883Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$100.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$100.00",
"dim": true
}
]
},
"amount": {
"value": "$0.00",
"amountUsd": "0",
"changePct": "0%",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$100.00",
"amountUsd": "100.00"
},
{
"label": "Current",
"value": "$100.00",
"amountUsd": "100.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.883Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | 🚀MOON |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Emoji111",
"symbol": "🚀MOON",
"name": "عربية توكن",
"amount": "5",
"entryPriceUsd": "1.23"
}
}
HTTP 201
vary: Origin
{
"shareId": "GjMlAfWHIM",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/address:Emoji111",
"name": "عربية توكن",
"symbol": "🚀MOON",
"amount": "5",
"entryPriceUsd": "1.23",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.892Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Emoji111",
"fallbackText": "🚀"
},
"headline": {
"value": "$6.15",
"amountUsd": "6.15",
"tone": "neutral"
},
"byline": {
"value": "$6.15"
},
"stats": [
{
"label": "Entry",
"value": "$1.23",
"amountUsd": "1.23"
},
{
"label": "Current",
"value": "$1.23",
"amountUsd": "1.23"
}
],
"heading": {
"type": "title_subtitle",
"title": "🚀MOON",
"subtitle": "عربية توكن"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.892Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Emoji111",
"fallbackText": "🚀",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "🚀MOON"
}
]
},
"subtitle": {
"runs": [
{
"text": "عربية توكن",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$6.15",
"dim": true
}
]
},
"amount": {
"value": "$6.15",
"amountUsd": "6.15",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.23",
"amountUsd": "1.23"
},
{
"label": "Current",
"value": "$1.23",
"amountUsd": "1.23"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.892Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/GjMlAfWHIM"
}GET http://localhost:3000/share/GjMlAfWHIM content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "GjMlAfWHIM",
"v": 2,
"payload": {
"amount": "5",
"caip19": "solana:101/address:Emoji111",
"entryPriceUsd": "1.23",
"kind": "new_position",
"market": "spot",
"name": "عربية توكن",
"symbol": "🚀MOON"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.892Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Emoji111",
"fallbackText": "🚀"
},
"headline": {
"value": "$6.15",
"amountUsd": "6.15",
"tone": "neutral"
},
"byline": {
"value": "$6.15"
},
"stats": [
{
"label": "Entry",
"value": "$1.23",
"amountUsd": "1.23"
},
{
"label": "Current",
"value": "$1.23",
"amountUsd": "1.23"
}
],
"heading": {
"type": "title_subtitle",
"title": "🚀MOON",
"subtitle": "عربية توكن"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.892Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Emoji111",
"fallbackText": "🚀",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "🚀MOON"
}
]
},
"subtitle": {
"runs": [
{
"text": "عربية توكن",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$6.15",
"dim": true
}
]
},
"amount": {
"value": "$6.15",
"amountUsd": "6.15",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.23",
"amountUsd": "1.23"
},
{
"label": "Current",
"value": "$1.23",
"amountUsd": "1.23"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.892Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | XSS |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Xss1",
"symbol": "XSS",
"name": "<script>alert(1)</script>",
"amount": "1",
"entryPriceUsd": "1.00"
}
}
HTTP 201
vary: Origin
{
"shareId": "TpBFF5TsQz",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/address:Xss1",
"name": "<script>alert(1)</script>",
"symbol": "XSS",
"amount": "1",
"entryPriceUsd": "1.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.900Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Xss1",
"fallbackText": "X"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "XSS",
"subtitle": "<script>alert(1)</script>"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.900Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Xss1",
"fallbackText": "X",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "XSS"
}
]
},
"subtitle": {
"runs": [
{
"text": "<script>alert(1)</script>",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.900Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/TpBFF5TsQz"
}GET http://localhost:3000/share/TpBFF5TsQz content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "TpBFF5TsQz",
"v": 2,
"payload": {
"amount": "1",
"caip19": "solana:101/address:Xss1",
"entryPriceUsd": "1.00",
"kind": "new_position",
"market": "spot",
"name": "<script>alert(1)</script>",
"symbol": "XSS"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.900Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Xss1",
"fallbackText": "X"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "XSS",
"subtitle": "<script>alert(1)</script>"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.900Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Xss1",
"fallbackText": "X",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "XSS"
}
]
},
"subtitle": {
"runs": [
{
"text": "<script>alert(1)</script>",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.900Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 4 |
| PASS | heading is one of the three published shapes, or absent | stacked |
| PASS | heading, when served, names its subject with a title | Sports |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"outcomeId": "o1",
"priceSeriesSet": [
{
"outcomeId": "o1",
"label": "Verstappen",
"series": [
"0.5",
"0.55"
],
"color": "#4A9EF7"
},
{
"outcomeId": "o2",
"label": "Norris",
"series": [
"0.3",
"0.28"
]
},
{
"outcomeId": "o3",
"label": "Leclerc",
"series": [
"0.1",
"0.09"
]
},
{
"outcomeId": "o4",
"label": "Hamilton",
"series": [
"0.1",
"0.08"
]
}
]
}
}
HTTP 201
vary: Origin
{
"shareId": "IQFG2VUB4T",
"v": 2,
"payload": {
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"outcomeId": "o1",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"priceSeriesSet": [
{
"label": "Verstappen",
"outcomeId": "o1",
"color": "#4A9EF7",
"series": [
"0.5",
"0.55"
]
},
{
"label": "Norris",
"outcomeId": "o2",
"series": [
"0.3",
"0.28"
]
},
{
"label": "Leclerc",
"outcomeId": "o3",
"series": [
"0.1",
"0.09"
]
},
{
"label": "Hamilton",
"outcomeId": "o4",
"series": [
"0.1",
"0.08"
]
}
],
"kind": "new_position"
},
"deepLinkPath": "predictions/event/F1-2028",
"createdAt": "2026-08-21T00:51:09.910Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Verstappen",
"colorHex": "#4A9EF7"
},
"icon": {
"fallbackText": "F"
},
"headline": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral"
},
"byline": {
"value": "$90.00"
},
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"heading": {
"type": "multi_series",
"title": "Sports",
"series": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.910Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "F",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Sports"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$90.00",
"dim": true
}
]
},
"amount": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.910Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/IQFG2VUB4T"
}GET http://localhost:3000/share/IQFG2VUB4T content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "IQFG2VUB4T",
"v": 2,
"payload": {
"chanceMultiplier": "1.8",
"eventTitle": "Who wins the 2028 F1 title?",
"kind": "new_position",
"market": "prediction",
"outcome": "Verstappen",
"outcomeId": "o1",
"priceSeriesSet": [
{
"color": "#4A9EF7",
"label": "Verstappen",
"outcomeId": "o1",
"series": [
"0.5",
"0.55"
]
},
{
"label": "Norris",
"outcomeId": "o2",
"series": [
"0.3",
"0.28"
]
},
{
"label": "Leclerc",
"outcomeId": "o3",
"series": [
"0.1",
"0.09"
]
},
{
"label": "Hamilton",
"outcomeId": "o4",
"series": [
"0.1",
"0.08"
]
}
],
"ticker": "F1-2028",
"valueUsd": "90.00"
},
"deepLinkPath": "predictions/event/F1-2028",
"createdAt": "2026-08-21T00:51:09.910Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Verstappen",
"colorHex": "#4A9EF7"
},
"icon": {
"fallbackText": "F"
},
"headline": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral"
},
"byline": {
"value": "$90.00"
},
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"heading": {
"type": "multi_series",
"title": "Sports",
"series": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.910Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "F",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Sports"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$90.00",
"dim": true
}
]
},
"amount": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.910Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}Assertion corrected: Assertion corrected mid-run: originally expected 400. The create payload schema is a non-strict discriminated union that strips unknown keys — the DTO reserves strict rejection for PATCH. Verified stripped, not persisted.
| PASS | POST status is 201 | 201 |
| PASS | unknown key is stripped from the persisted payload, not echoed | market,caip19,amount,entryPriceUsd,kind |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | SOL |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "1",
"entryPriceUsd": "1.00",
"totallyUnknownField": "x"
}
}
HTTP 201
vary: Origin
{
"shareId": "SJNS1hPs45",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "1",
"entryPriceUsd": "1.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.925Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$1.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.925Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.925Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/SJNS1hPs45"
}GET http://localhost:3000/share/SJNS1hPs45 content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "SJNS1hPs45",
"v": 2,
"payload": {
"amount": "1",
"caip19": "solana:101/nativeToken:501",
"entryPriceUsd": "1.00",
"kind": "new_position",
"market": "spot"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.925Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$1.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.925Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.925Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 400 | 400 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "futures",
"caip19": "solana:101/nativeToken:501",
"amount": "1",
"entryPriceUsd": "1.00"
}
}
HTTP 400
vary: Origin
{
"message": "[\n {\n \"code\": \"invalid_union\",\n \"errors\": [],\n \"note\": \"No matching discriminator\",\n \"discriminator\": \"market\",\n \"options\": [\n \"spot\",\n \"perp\",\n \"prediction\"\n ],\n \"path\": [\n \"payload\",\n \"market\"\n ],\n \"message\": \"Invalid discriminator value. Expected 'spot' | 'perp' | 'prediction'\"\n }\n]",
"statusCode": 400
}| PASS | POST status is 400 | 400 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": 12.5,
"entryPriceUsd": "1.00"
}
}
HTTP 400
vary: Origin
{
"message": "[\n {\n \"expected\": \"string\",\n \"code\": \"invalid_type\",\n \"path\": [\n \"payload\",\n \"amount\"\n ],\n \"message\": \"Invalid input: expected string, received number\"\n }\n]",
"statusCode": 400
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | MAXN |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"amount": "1",
"entryPriceUsd": "1.00",
"symbol": "MAXN",
"name": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
}
}
HTTP 201
vary: Origin
{
"shareId": "953CtqRRDC",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"name": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
"symbol": "MAXN",
"amount": "1",
"entryPriceUsd": "1.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.937Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "M"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "MAXN",
"subtitle": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.937Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "M",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "MAXN"
}
]
},
"subtitle": {
"runs": [
{
"text": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.937Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/953CtqRRDC"
}GET http://localhost:3000/share/953CtqRRDC content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "953CtqRRDC",
"v": 2,
"payload": {
"amount": "1",
"caip19": "solana:101/address:Boundary1",
"entryPriceUsd": "1.00",
"kind": "new_position",
"market": "spot",
"name": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
"symbol": "MAXN"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.937Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "M"
},
"headline": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral"
},
"byline": {
"value": "$1.00"
},
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "MAXN",
"subtitle": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.937Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "M",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "MAXN"
}
]
},
"subtitle": {
"runs": [
{
"text": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1.00",
"dim": true
}
]
},
"amount": {
"value": "$1.00",
"amountUsd": "1",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$1.00",
"amountUsd": "1.00"
},
{
"label": "Current",
"value": "$1.00",
"amountUsd": "1.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.937Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | POST status is 400 | 400 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"amount": "1",
"entryPriceUsd": "1.00",
"symbol": "MAXN",
"name": "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
}
}
HTTP 400
vary: Origin
{
"message": "[\n {\n \"origin\": \"string\",\n \"code\": \"too_big\",\n \"maximum\": 128,\n \"inclusive\": true,\n \"path\": [\n \"payload\",\n \"name\"\n ],\n \"message\": \"Too big: expected string to have <=128 characters\"\n }\n]",
"statusCode": 400
}| PASS | POST status is 400 | 400 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"amount": "1",
"entryPriceUsd": "99999999999999999999999999999999999999999"
}
}
HTTP 400
vary: Origin
{
"message": "[\n {\n \"origin\": \"string\",\n \"code\": \"too_big\",\n \"maximum\": 40,\n \"inclusive\": true,\n \"path\": [\n \"payload\",\n \"entryPriceUsd\"\n ],\n \"message\": \"Too big: expected string to have <=40 characters\"\n }\n]",
"statusCode": 400
}| PASS | POST status is 201 | 201 |
| PASS | create response carries displayV2.version = 2 | 2 |
| PASS | create response still carries display (v1 unchanged) | Share Position |
| PASS | GET returns 200 | 200 |
| PASS | GET displayV2 deep-equals create displayV2 | match |
| PASS | displayV2.blocks is non-empty | 3 |
| PASS | heading is one of the three published shapes, or absent | subtitled |
| PASS | heading, when served, names its subject with a title | TINY |
| PASS | no block competes with the heading for the slot above the body | checked |
| PASS | every block.group indexes a served group | 3 grouped / 1 groups |
| PASS | no block leaks v1 fallbackSymbol | checked |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"amount": "1000000",
"entryPriceUsd": "0.000000032741",
"symbol": "TINY"
}
}
HTTP 201
vary: Origin
{
"shareId": "YoOerjIEhJ",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/address:Boundary1",
"symbol": "TINY",
"amount": "1000000",
"entryPriceUsd": "0.000000032741",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.946Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "T"
},
"headline": {
"value": "$0.033",
"amountUsd": "0.032741",
"tone": "neutral"
},
"byline": {
"value": "$0.033"
},
"stats": [
{
"label": "Entry",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
},
{
"label": "Current",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
}
],
"heading": {
"type": "title_subtitle",
"title": "TINY",
"subtitle": "$0.00000003"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.946Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "T",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "TINY"
}
]
},
"subtitle": {
"runs": [
{
"text": "$0.00000003",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$0.033",
"dim": true
}
]
},
"amount": {
"value": "$0.033",
"amountUsd": "0.032741",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
},
{
"label": "Current",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.946Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/YoOerjIEhJ"
}GET http://localhost:3000/share/YoOerjIEhJ content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "YoOerjIEhJ",
"v": 2,
"payload": {
"amount": "1000000",
"caip19": "solana:101/address:Boundary1",
"entryPriceUsd": "0.000000032741",
"kind": "new_position",
"market": "spot",
"symbol": "TINY"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.946Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "T"
},
"headline": {
"value": "$0.033",
"amountUsd": "0.032741",
"tone": "neutral"
},
"byline": {
"value": "$0.033"
},
"stats": [
{
"label": "Entry",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
},
{
"label": "Current",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
}
],
"heading": {
"type": "title_subtitle",
"title": "TINY",
"subtitle": "$0.00000003"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.946Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/address:Boundary1",
"fallbackText": "T",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "TINY"
}
]
},
"subtitle": {
"runs": [
{
"text": "$0.00000003",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$0.033",
"dim": true
}
]
},
"amount": {
"value": "$0.033",
"amountUsd": "0.032741",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
},
{
"label": "Current",
"value": "$0.00000003",
"amountUsd": "0.000000032741"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.946Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | rejected as unauthorized | 401 |
POST http://localhost:3000/share
content-type: application/json
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00"
}
}
HTTP 401
vary: Origin
{
"message": "Unauthorized",
"statusCode": 401
}| PASS | rejected as unauthorized | 401 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …uuid
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00"
}
}
HTTP 401
vary: Origin
{
"message": "Unauthorized",
"statusCode": 401
}| PASS | returns 404 | 404 |
GET http://localhost:3000/share/ZZZZZZZZZZ content-type: application/json
HTTP 404
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"message": "Share not found",
"error": "Not Found",
"statusCode": 404
}| PASS | 200 without any auth header | 200 |
| PASS | Vary includes x-phantom-version | x-client-locale, accept-language, x-phantom-version |
| PASS | carries displayV2 | 2 |
GET http://localhost:3000/share/ppQymgLD9O content-type: application/json
HTTP 200
cache-control: public, max-age=60
vary: x-client-locale, accept-language, x-phantom-version
{
"shareId": "ppQymgLD9O",
"v": 2,
"payload": {
"amount": "12.5",
"caip19": "solana:101/nativeToken:501",
"entryPriceUsd": "150.00",
"kind": "new_position",
"market": "spot"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.802Z",
"sharer": {
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png",
"username": "ghosty"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral"
},
"byline": {
"value": "$1,875.00"
},
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$150.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.802Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$150.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1,875.00",
"dim": true
}
]
},
"amount": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.802Z",
"brandLogo": true
}
},
"referralCode": "ghosty"
}| PASS | 26.27.3 gets per-outcome rows | 3 |
| PASS | 26.28.0 gets the single text row | 1 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
x-phantom-version: 26.27.3
{
"payload": {
"kind": "new_position",
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"outcomeId": "o1",
"priceSeriesSet": [
{
"outcomeId": "o1",
"label": "Verstappen",
"series": [
"0.5",
"0.55"
],
"color": "#4A9EF7"
},
{
"outcomeId": "o2",
"label": "Norris",
"series": [
"0.3",
"0.28"
]
},
{
"outcomeId": "o3",
"label": "Leclerc",
"series": [
"0.1",
"0.09"
]
},
{
"outcomeId": "o4",
"label": "Hamilton",
"series": [
"0.1",
"0.08"
]
}
]
}
}
HTTP 201
vary: Origin
{
"shareId": "J6NP9aCmbG",
"v": 2,
"payload": {
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"outcomeId": "o1",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"priceSeriesSet": [
{
"label": "Verstappen",
"outcomeId": "o1",
"color": "#4A9EF7",
"series": [
"0.5",
"0.55"
]
},
{
"label": "Norris",
"outcomeId": "o2",
"series": [
"0.3",
"0.28"
]
},
{
"label": "Leclerc",
"outcomeId": "o3",
"series": [
"0.1",
"0.09"
]
},
{
"label": "Hamilton",
"outcomeId": "o4",
"series": [
"0.1",
"0.08"
]
}
],
"kind": "new_position"
},
"deepLinkPath": "predictions/event/F1-2028",
"createdAt": "2026-08-21T00:51:09.962Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Verstappen",
"colorHex": "#4A9EF7"
},
"icon": {
"fallbackText": "F"
},
"headline": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral"
},
"byline": {
"value": "$90.00"
},
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"heading": {
"type": "multi_series",
"title": "Who wins the 2028 F1 title?",
"series": [
{
"text": "Verstappen"
},
{
"text": "Norris"
},
{
"text": "Hamilton"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.962Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "F",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Who wins the 2028 F1 title?"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Verstappen"
}
]
},
"size": "sm"
},
{
"title": {
"runs": [
{
"text": "Norris"
}
]
},
"size": "sm"
},
{
"title": {
"runs": [
{
"text": "Hamilton"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$90.00",
"dim": true
}
]
},
"amount": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.962Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/J6NP9aCmbG"
}POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
x-phantom-version: 26.28.0
{
"payload": {
"kind": "new_position",
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"outcomeId": "o1",
"priceSeriesSet": [
{
"outcomeId": "o1",
"label": "Verstappen",
"series": [
"0.5",
"0.55"
],
"color": "#4A9EF7"
},
{
"outcomeId": "o2",
"label": "Norris",
"series": [
"0.3",
"0.28"
]
},
{
"outcomeId": "o3",
"label": "Leclerc",
"series": [
"0.1",
"0.09"
]
},
{
"outcomeId": "o4",
"label": "Hamilton",
"series": [
"0.1",
"0.08"
]
}
]
}
}
HTTP 201
vary: Origin
{
"shareId": "kRU1r2qNiV",
"v": 2,
"payload": {
"market": "prediction",
"ticker": "F1-2028",
"outcome": "Verstappen",
"outcomeId": "o1",
"eventTitle": "Who wins the 2028 F1 title?",
"chanceMultiplier": "1.8",
"valueUsd": "90.00",
"priceSeriesSet": [
{
"label": "Verstappen",
"outcomeId": "o1",
"color": "#4A9EF7",
"series": [
"0.5",
"0.55"
]
},
{
"label": "Norris",
"outcomeId": "o2",
"series": [
"0.3",
"0.28"
]
},
{
"label": "Leclerc",
"outcomeId": "o3",
"series": [
"0.1",
"0.09"
]
},
{
"label": "Hamilton",
"outcomeId": "o4",
"series": [
"0.1",
"0.08"
]
}
],
"kind": "new_position"
},
"deepLinkPath": "predictions/event/F1-2028",
"createdAt": "2026-08-21T00:51:09.967Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"badge": {
"text": "Verstappen",
"colorHex": "#4A9EF7"
},
"icon": {
"fallbackText": "F"
},
"headline": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral"
},
"byline": {
"value": "$90.00"
},
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"heading": {
"type": "multi_series",
"title": "Sports",
"series": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.967Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "stacked",
"image": {
"fallbackText": "F",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Sports"
}
]
}
},
"blocks": [
{
"type": "rows",
"rows": [
{
"title": {
"runs": [
{
"text": "Who wins the 2028 F1 title?"
}
]
},
"size": "sm"
}
]
},
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$90.00",
"dim": true
}
]
},
"amount": {
"value": "$90.00",
"amountUsd": "90.00",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Outcome",
"value": "Verstappen"
},
{
"label": "Chance",
"value": "55.56%"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.967Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/kRU1r2qNiV"
}| PASS | two distinct shareIds | 1CIgEVgV5B / tEc8xBYgGi |
| PASS | identical displayV2 layout apart from each record's own footer.date | layout identical; footer.date differs by design |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00"
}
}
HTTP 201
vary: Origin
{
"shareId": "1CIgEVgV5B",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.972Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral"
},
"byline": {
"value": "$1,875.00"
},
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$150.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.972Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$150.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1,875.00",
"dim": true
}
]
},
"amount": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.972Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/1CIgEVgV5B"
}POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "new_position",
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00"
}
}
HTTP 201
vary: Origin
{
"shareId": "tEc8xBYgGi",
"v": 2,
"payload": {
"market": "spot",
"caip19": "solana:101/nativeToken:501",
"amount": "12.5",
"entryPriceUsd": "150.00",
"kind": "new_position"
},
"deepLinkPath": "portfolio",
"createdAt": "2026-08-21T00:51:09.984Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Position",
"icon": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S"
},
"headline": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral"
},
"byline": {
"value": "$1,875.00"
},
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"heading": {
"type": "title_subtitle",
"title": "SOL",
"subtitle": "$150.00"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.984Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Position",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"caip19": "solana:101/nativeToken:501",
"fallbackText": "S",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "SOL"
}
]
},
"subtitle": {
"runs": [
{
"text": "$150.00",
"dim": true
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "hero",
"eyebrow": {
"runs": [
{
"text": "$1,875.00",
"dim": true
}
]
},
"amount": {
"value": "$1,875.00",
"amountUsd": "1875",
"tone": "neutral",
"size": "hero"
},
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Entry",
"value": "$150.00",
"amountUsd": "150.00"
},
{
"label": "Current",
"value": "$150.00",
"amountUsd": "150.00"
}
],
"orientation": "stacked",
"dividerAbove": true,
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.984Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/tEc8xBYgGi"
}| PASS | still 201 with a closed downstream | 201 |
| PASS | displayV2 still served | 2 |
POST http://localhost:3000/share
content-type: application/json
x-forwarded-user: …0000
{
"payload": {
"kind": "chat",
"chatId": "chat-9001"
}
}
HTTP 201
vary: Origin
{
"shareId": "6qOtp82ewG",
"v": 2,
"payload": {
"kind": "chat",
"chatId": "chat-9001"
},
"deepLinkPath": "v1/chat/chat-9001",
"createdAt": "2026-08-21T00:51:09.988Z",
"sharer": {
"username": "ghosty",
"avatarUrl": "https://cdn.phantom.app/avatars/ghosty.png"
},
"display": {
"headerTitle": "Share Chat",
"icon": {
"fallbackText": "G"
},
"headline": {
"value": "Join the conversation",
"tone": "neutral"
},
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"heading": {
"type": "title_subtitle",
"title": "Group chat"
},
"username": "ghosty",
"avatar": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G"
},
"sharerVerified": true,
"date": "2026-08-21T00:51:09.988Z",
"dateLabel": "Aug 21, 2026"
},
"displayV2": {
"version": 2,
"headerTitle": "Share Chat",
"theme": {
"frame": "bounded",
"accentHex": "#AB9FF2",
"glow": {
"tone": "neutral",
"anchor": "bottom_trailing"
}
},
"heading": {
"type": "subtitled",
"image": {
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "Group chat"
}
]
}
},
"blocks": [
{
"type": "identity",
"image": {
"url": "https://cdn.phantom.app/avatars/ghosty.png",
"fallbackText": "G",
"shape": "circle"
},
"title": {
"runs": [
{
"text": "ghosty"
}
]
},
"titleVerified": true,
"layout": "row",
"size": "sm",
"region": "body",
"group": 0
},
{
"type": "identity",
"title": {
"runs": [
{
"text": "Join the conversation"
}
]
},
"layout": "row",
"size": "lg",
"region": "body",
"group": 0
},
{
"type": "stats",
"stats": [
{
"label": "Chat",
"value": "chat-9001"
}
],
"orientation": "inline",
"region": "body",
"group": 0
}
],
"groups": [
{
"inset": true,
"glow": {
"tone": "neutral",
"anchor": "center"
}
}
],
"footer": {
"date": "2026-08-21T00:51:09.988Z",
"brandLogo": true
}
},
"referralCode": "ghosty",
"shareUrl": "https://phantom.com/share/6qOtp82ewG"
}| PASS | not found for a non-owner | 404 |
PATCH http://localhost:3000/share/1CIgEVgV5B
content-type: application/json
x-forwarded-user: …0001
{}
HTTP 404
cache-control: no-store
vary: Origin
{
"message": "Share not found",
"error": "Not Found",
"statusCode": 404
}SOCIAL_CHAT_API_URL is required by ShareBackdropResolver but missing from .env.example, so the service cannot boot from a plain copy of the example file — a pre-existing local-dev gap, unrelated to this PR. AWS Secrets Manager is unreachable without credentials; the service logs the failure and continues, so no AWS access was needed.