CoinMarketCap flags 791 assets as tokenised. 60% of them have no wrapper with a tracked market.
Six in ten tokenised stocks on CoinMarketCap have no wrapper with a tracked market.
Type a ticker. Every wrapper, its issuer, its chain, its listing state.
The roster from /v5/real-world-assets/quotes/latest — tokens[], the price: null rows kept — joined to each wrapper's status on /public-api/v1/cryptocurrency/map. Then one line: how many of its wrappers have a CMC-tracked market, and whose. The answer below is a committed run; type any ticker to ask live.
MS · Morgan Stanley · stock · rwa_rank 43 · has_tokens: true · asked 2026-09-18 22:43:39 UTC · roster: snapshot 2026-09-18 (the RWA endpoints need a key) · state: live · keyless · 0 credits · chosen by rule: the most prominent tokenised underlying on CoinMarketCap (lowest rwa_rank) whose every wrapper is untracked
wrapper of MS has a CMC-tracked market.
0 active · 1 untracked · 0 unresolved or inactive — issuer: Backed Assets. The RWA map says has_tokens: true; the cryptocurrency map says untracked for every wrapper — listed, no CMC-tracked market.
| wrapper | issuer | chain | token address | price | listing state | state from | listed |
|---|---|---|---|---|---|---|---|
| wMSxWrapped Morgan Stanley Tokenized Stock (xStock) | Backed Assets | X Layer | 0x2874A11805783324C54562eDB1A641C5d1d077a5 | null | untracked | /v1/cryptocurrency/map · live · keyless | 2026-08-11 |
wMSx — raw rows (1 wrapper, three sources)
| source | endpoint | id | symbol | price / status | issuer / rank | platform | date |
|---|---|---|---|---|---|---|---|
| tokens[] | /v5/real-world-assets/quotes/latest | 41513 | wMSx | null | Backed Assets | X Layer | — |
| map row | /public-api/v1/cryptocurrency/map | 41513 | wMSx | status untracked | rank null | X Layer | — |
| info row | /public-api/v2/cryptocurrency/info | 41513 | wMSx | status inactive | — | OKB | 2026-08-11 |
- tokens[] on /v5/real-world-assets/quotes/latest → 1 wrapper attached to MS (rwa_id 35)
- /public-api/v1/cryptocurrency/map → status per crypto_id: 1 untracked · 0 active · 0 unresolved or inactive
- tracked = wrappers with status == active = 0 · attached = 1
- 0 of 1 → every wrapper untracked → MS has no wrapper with a CMC-tracked market
raw JSON of these rows, verbatim from the API
{
"tokens": [
{
"crypto_id": 41513,
"symbol": "wMSx",
"name": "Wrapped Morgan Stanley Tokenized Stock (xStock)",
"issuer_id": "6878977dcbbf471de3366e85",
"issuer_name": "Backed Assets",
"price": null,
"market_cap": null,
"volume_24h": null,
"status": "untracked",
"first_historical_data": null,
"date_added": "2026-08-11T16:24:36.000Z",
"platform": {
"name": "X Layer",
"token_address": "0x2874A11805783324C54562eDB1A641C5d1d077a5"
}
}
],
"map_rows": [
{
"id": 41513,
"name": "Wrapped Morgan Stanley Tokenized Stock (xStock)",
"symbol": "wMSx",
"slug": "wrapped-morgan-stanley-tokenized-stock-xstock",
"rank": null,
"status": "untracked",
"platform": {
"id": 216,
"name": "X Layer",
"symbol": "OKB",
"slug": "okb",
"token_address": "0x2874A11805783324C54562eDB1A641C5d1d077a5"
}
}
],
"info_rows": [
{
"id": 41513,
"symbol": "wMSx",
"platform": {
"id": "3897",
"name": "OKB",
"symbol": "OKB",
"slug": "okb",
"token_address": "0x2874A11805783324C54562eDB1A641C5d1d077a5"
},
"date_added": "2026-08-11T16:24:36.000Z",
"status": "inactive"
}
]
}One row per issuer. Grey is the shelf; green has a market.
The same pair, 772 times in Backed Assets' row. Declared is the registry's num_tokens; attached is what any underlying lists in tokens[]; tracked is status == active on the map; shelf rate is untracked ÷ attached, beside the live market cap of what trades. Open an issuer for its two raw rows.
| issuer | wrappers | shelf | attached | tracked |
|---|---|---|---|---|
Dinari Assets/v5/real-world-assets/issuers/list row {
"name": "Dinari Assets",
"website": "https://dinari.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/5a59aaed_253f_4771_8e52_4ecc50ef127c_medium.jpg",
"issuer_id": "688c6172abae9b5b9fb30359",
"num_tokens": 91
}joined row {
"issuer_id": "688c6172abae9b5b9fb30359",
"issuer_name": "Dinari Assets",
"declared": 91,
"attached": 27,
"tracked": 0,
"untracked": 27,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": 1.0
} | 100% | 27 | 0 | |
Backed Assets/v5/real-world-assets/issuers/list row {
"name": "Backed Assets",
"website": "https://assets.backed.fi/",
"logo": null,
"issuer_id": "6878977dcbbf471de3366e85",
"num_tokens": 1176
}joined row {
"issuer_id": "6878977dcbbf471de3366e85",
"issuer_name": "Backed Assets",
"declared": 1176,
"attached": 772,
"tracked": 140,
"untracked": 632,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 669101579.01,
"shelf_rate": 0.8187
} | 82% | 772 | 140 | |
(no issuer)/v5/real-world-assets/issuers/list row null joined row {
"issuer_id": null,
"issuer_name": "(no issuer)",
"declared": null,
"attached": 5,
"tracked": 3,
"untracked": 1,
"inactive": 0,
"unresolved": 1,
"live_market_cap_usd": 0.0,
"shelf_rate": 0.2
} | 20% | 5 | 3 | |
Robinhood/v5/real-world-assets/issuers/list row {
"name": "Robinhood",
"website": "https://robinhood.com/us/en/",
"logo": null,
"issuer_id": "6a465832fbe3004b1a0ea2dd",
"num_tokens": 107
}joined row {
"issuer_id": "6a465832fbe3004b1a0ea2dd",
"issuer_name": "Robinhood",
"declared": 107,
"attached": 106,
"tracked": 98,
"untracked": 8,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 135432308.21,
"shelf_rate": 0.0755
} | 8% | 106 | 98 | |
Ondo Assets/v5/real-world-assets/issuers/list row {
"name": "Ondo Assets",
"website": "https://ondo.finance/",
"logo": null,
"issuer_id": "688ca4ccabae9b5b9fb3167a",
"num_tokens": 551
}joined row {
"issuer_id": "688ca4ccabae9b5b9fb3167a",
"issuer_name": "Ondo Assets",
"declared": 551,
"attached": 214,
"tracked": 210,
"untracked": 4,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 891329105.52,
"shelf_rate": 0.0187
} | 2% | 214 | 210 | |
NA (Derivatives)/v5/real-world-assets/issuers/list row {
"name": "NA (Derivatives)",
"website": null,
"logo": null,
"issuer_id": "695e11f774b54210f3b95dc3",
"num_tokens": 247
}joined row {
"issuer_id": "695e11f774b54210f3b95dc3",
"issuer_name": "NA (Derivatives)",
"declared": 247,
"attached": 131,
"tracked": 128,
"untracked": 0,
"inactive": 0,
"unresolved": 3,
"live_market_cap_usd": 0.0,
"shelf_rate": 0.0
} | 0% | 131 | 128 | |
bStocks/v5/real-world-assets/issuers/list row {
"name": "bStocks",
"website": null,
"logo": "https://s2.coinmarketcap.com/static/img/issuer/Untitled_design__2_.png",
"issuer_id": "6a2aed5097c45356b1a5f710",
"num_tokens": 77
}joined row {
"issuer_id": "6a2aed5097c45356b1a5f710",
"issuer_name": "bStocks",
"declared": 77,
"attached": 77,
"tracked": 77,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 797027720.84,
"shelf_rate": 0.0
} | 0% | 77 | 77 | |
Reality/v5/real-world-assets/issuers/list row {
"name": "Reality",
"website": null,
"logo": null,
"issuer_id": "6a43600c282e7240b76c8bbb",
"num_tokens": 71
}joined row {
"issuer_id": "6a43600c282e7240b76c8bbb",
"issuer_name": "Reality",
"declared": 71,
"attached": 71,
"tracked": 71,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 131344865.7,
"shelf_rate": 0.0
} | 0% | 71 | 71 | |
Hyperliquid Assets/v5/real-world-assets/issuers/list row {
"name": "Hyperliquid Assets",
"website": "https://app.hyperliquid.xyz/trade",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/hyperliquid.png",
"issuer_id": "699ed38db54c9320b15928e3",
"num_tokens": 12
}joined row {
"issuer_id": "699ed38db54c9320b15928e3",
"issuer_name": "Hyperliquid Assets",
"declared": 12,
"attached": 12,
"tracked": 12,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 1111.44,
"shelf_rate": 0.0
} | 0% | 12 | 12 | |
Backpack/v5/real-world-assets/issuers/list row {
"name": "Backpack",
"website": "https://backpack.exchange",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/M7sS2GzR_400x400.png",
"issuer_id": "6a2d54b697c45356b1a634f4",
"num_tokens": 7
}joined row {
"issuer_id": "6a2d54b697c45356b1a634f4",
"issuer_name": "Backpack",
"declared": 7,
"attached": 5,
"tracked": 5,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 17404738.82,
"shelf_rate": 0.0
} | 0% | 5 | 5 |
smaller issuers (16) — fewer than 5 attached wrappers
Superstate Assets/v5/real-world-assets/issuers/list row {
"name": "Superstate Assets",
"website": "https://superstate.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/Adobe_Express___file.png",
"issuer_id": "68b902a8f972b459c80de6a5",
"num_tokens": 1
}joined row {
"issuer_id": "68b902a8f972b459c80de6a5",
"issuer_name": "Superstate Assets",
"declared": 1,
"attached": 1,
"tracked": 0,
"untracked": 1,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": 1.0
} | 100% | 1 | 0 | |
PreStocks Assets/v5/real-world-assets/issuers/list row {
"name": "PreStocks Assets",
"website": "https://prestocks.com/",
"logo": null,
"issuer_id": "689612983f270c6ff4781b96",
"num_tokens": 22
}joined row {
"issuer_id": "689612983f270c6ff4781b96",
"issuer_name": "PreStocks Assets",
"declared": 22,
"attached": 3,
"tracked": 3,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 15985975.55,
"shelf_rate": 0.0
} | 0% | 3 | 3 | |
Tether Holdings/v5/real-world-assets/issuers/list row {
"name": "Tether Holdings",
"website": "https://tether.to/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/tether.png",
"issuer_id": "68904e9cabae9b5b9fb358ac",
"num_tokens": 2
}joined row {
"issuer_id": "68904e9cabae9b5b9fb358ac",
"issuer_name": "Tether Holdings",
"declared": 2,
"attached": 2,
"tracked": 2,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 2744320735.84,
"shelf_rate": 0.0
} | 0% | 2 | 2 | |
Paxos/v5/real-world-assets/issuers/list row {
"name": "Paxos",
"website": "https://www.paxos.com/",
"logo": null,
"issuer_id": "68904c24abae9b5b9fb35815",
"num_tokens": 1
}joined row {
"issuer_id": "68904c24abae9b5b9fb35815",
"issuer_name": "Paxos",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 1899929026.14,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Comtech Gold/v5/real-world-assets/issuers/list row {
"name": "Comtech Gold",
"website": "https://www.comtechgold.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/comtech.png",
"issuer_id": "68904cceabae9b5b9fb35839",
"num_tokens": 1
}joined row {
"issuer_id": "68904cceabae9b5b9fb35839",
"issuer_name": "Comtech Gold",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 19662614.69,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
VNX/v5/real-world-assets/issuers/list row {
"name": "VNX",
"website": "https://vnx.li/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/vnx.png",
"issuer_id": "68905b43abae9b5b9fb35a95",
"num_tokens": 1
}joined row {
"issuer_id": "68905b43abae9b5b9fb35a95",
"issuer_name": "VNX",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 5847849.12,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Matrixdock/v5/real-world-assets/issuers/list row {
"name": "Matrixdock",
"website": "https://www.matrixdock.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/matrixdock.png",
"issuer_id": "68905a7babae9b5b9fb35a8d",
"num_tokens": 1
}joined row {
"issuer_id": "68905a7babae9b5b9fb35a8d",
"issuer_name": "Matrixdock",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 47874510.53,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Kinesis Assets/v5/real-world-assets/issuers/list row {
"name": "Kinesis Assets",
"website": "https://kinesis.money/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/3LFB_Kit_400x400.png",
"issuer_id": "68e25e8dd4cd001228754c7c",
"num_tokens": 1
}joined row {
"issuer_id": "68e25e8dd4cd001228754c7c",
"issuer_name": "Kinesis Assets",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
XAGx/v5/real-world-assets/issuers/list row {
"name": "XAGx",
"website": "https://xagx.org/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/bwdPlk2V_400x400.png",
"issuer_id": "68e27862d4cd001228754d31",
"num_tokens": 1
}joined row {
"issuer_id": "68e27862d4cd001228754d31",
"issuer_name": "XAGx",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Token/v5/real-world-assets/issuers/list row {
"name": "Token",
"website": "https://www.token.com.tr/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/hoGtBUTO_400x400.png",
"issuer_id": "68e27c8ad4cd001228754d67",
"num_tokens": 1
}joined row {
"issuer_id": "68e27c8ad4cd001228754d67",
"issuer_name": "Token",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Tessera Assets/v5/real-world-assets/issuers/list row {
"name": "Tessera Assets",
"website": "https://www.tessera.pe/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/tessera.png",
"issuer_id": "6a0be4e680ee5978ec4455ce",
"num_tokens": 1
}joined row {
"issuer_id": "6a0be4e680ee5978ec4455ce",
"issuer_name": "Tessera Assets",
"declared": 1,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 663072.48,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Republic/v5/real-world-assets/issuers/list row {
"name": "Republic",
"website": "https://republic.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/for2i2.png",
"issuer_id": "6a436076282e7240b76c8bf9",
"num_tokens": 2
}joined row {
"issuer_id": "6a436076282e7240b76c8bf9",
"issuer_name": "Republic",
"declared": 2,
"attached": 1,
"tracked": 1,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 72085197.07,
"shelf_rate": 0.0
} | 0% | 1 | 1 | |
Bitget Assets/v5/real-world-assets/issuers/list row {
"name": "Bitget Assets",
"website": "https://www.bitget.com/",
"logo": null,
"issuer_id": "68a80be20135f56ec3188cdc",
"num_tokens": 0
}joined row {
"issuer_id": "68a80be20135f56ec3188cdc",
"issuer_name": "Bitget Assets",
"declared": 0,
"attached": 0,
"tracked": 0,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": null
} | — | 0 | 0 | |
Coinbase/v5/real-world-assets/issuers/list row {
"name": "Coinbase",
"website": "https://www.coinbase.com/en-sg/tokenize",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/m_UOfXvz_400x400.png",
"issuer_id": "6a72fe7072996604d45c6733",
"num_tokens": 0
}joined row {
"issuer_id": "6a72fe7072996604d45c6733",
"issuer_name": "Coinbase",
"declared": 0,
"attached": 0,
"tracked": 0,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": null
} | — | 0 | 0 | |
Fidelity Investments Assets/v5/real-world-assets/issuers/list row {
"name": "Fidelity Investments Assets",
"website": "https://www.fidelity.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/32.png",
"issuer_id": "68c117369d7eab1d58ebd51d",
"num_tokens": 1
}joined row {
"issuer_id": "68c117369d7eab1d58ebd51d",
"issuer_name": "Fidelity Investments Assets",
"declared": 1,
"attached": 0,
"tracked": 0,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": null
} | — | 0 | 0 | |
Swarm Assets/v5/real-world-assets/issuers/list row {
"name": "Swarm Assets",
"website": "https://swarm.com/",
"logo": "https://s2.coinmarketcap.com/static/img/issuer/11821.png",
"issuer_id": "688ca641abae9b5b9fb31815",
"num_tokens": 0
}joined row {
"issuer_id": "688ca641abae9b5b9fb31815",
"issuer_name": "Swarm Assets",
"declared": 0,
"attached": 0,
"tracked": 0,
"untracked": 0,
"inactive": 0,
"unresolved": 0,
"live_market_cap_usd": 0.0,
"shelf_rate": null
} | — | 0 | 0 |
Stocks alone: 437 of 689 underlyings (63%) have no wrapper with a CMC-tracked market. 603 of the 673 shelf wrappers sit on X Layer — Arbitrum 27, Solana 18, Ethereum 16, Robinhood Chain 8. A 100 % shelf rate is printed in red because it is the one an allocator most needs to see; it is still a listing state, not a verdict on the issuer.
7,811 underlyings, 1,435 wrappers, one join, 5 credits.
Every underlying in the RWA map, the full wrapper roster of the 791 flagged has_tokens: true — null-price rows included — and each wrapper joined on crypto_id to its row on the cryptocurrency map across active, inactive, untracked. Live 2026-09-18, 54 calls, 40.9 s.
The rule is the conservative one: an underlying counts only when every attached wrapper is untracked; the loose rule ("no active wrapper") gives the same 476 today and is never the rule behind the headline. What trades is young — median 80 d since first_historical_data (p10 24 · p90 380 · n=757) — and the shelf is younger still: median 38 d since date_added (p10 38 · p90 100 · n=673), a listing day, not a market day.
Every number on this page came from a call you can replay.
The census's 54 calls — URL, HTTP status, credit_count, bytes, sha256, UTC — are in live_run.json (opens in a new tab); the ticker answer's are in ms.json (opens in a new tab). The grid below follows the answer: type a ticker and it updates.
every call behind this answer · 2 · call · http · key · credits · ms · sha256 · utc
| call | http | key | credits | ms | sha256 | utc |
|---|---|---|---|---|---|---|
| cmc/map symbol=wMSx | 200 | keyless | 0 to any key | 491 | d7e1ecdef293e6c8 | 2026-09-18T22:43:39Z |
| cmc/info batch 1 (1 ids) | 200 | keyless | 0 to any key | 762 | 1559b2c185ccabe8 | 2026-09-18T22:43:39Z |
every call of the census · 54 · call · http · key · credit_count · bytes · sha256 · utc
| # | call | http | key | credit_count | bytes | sha256 | utc |
|---|---|---|---|---|---|---|---|
| 1 | key/info | 200 | keyed | 0 | 494 | ff8e91d04a06e7c2 | 2026-09-18T22:15:36Z |
| 2 | rwa/map start=1 | 200 | keyed | 0 | 58,873 | ea6b30df3278bd8b | 2026-09-18T22:15:37Z |
| 3 | rwa/map start=251 | 200 | keyed | 0 | 61,602 | e2ac73580932293c | 2026-09-18T22:15:37Z |
| 4 | rwa/map start=501 | 200 | keyed | 0 | 61,084 | 242d2df8a8e18b50 | 2026-09-18T22:15:37Z |
| 5 | rwa/map start=751 | 200 | keyed | 0 | 60,232 | 1d329f32aa931983 | 2026-09-18T22:15:38Z |
| 6 | rwa/map start=1001 | 200 | keyed | 0 | 58,276 | 1370ac72c88890dd | 2026-09-18T22:15:38Z |
| 7 | rwa/map start=1251 | 200 | keyed | 0 | 58,289 | 9a22cb87fbf90778 | 2026-09-18T22:15:38Z |
| 8 | rwa/map start=1501 | 200 | keyed | 0 | 57,770 | bffb4b938bf83083 | 2026-09-18T22:15:39Z |
| 9 | rwa/map start=1751 | 200 | keyed | 0 | 58,167 | 8c1390e65e7eecac | 2026-09-18T22:15:40Z |
| 10 | rwa/map start=2001 | 200 | keyed | 0 | 62,204 | 298db3230caf93db | 2026-09-18T22:15:40Z |
| 11 | rwa/map start=2251 | 200 | keyed | 0 | 63,653 | eff09bf374709181 | 2026-09-18T22:15:40Z |
| 12 | rwa/map start=2501 | 200 | keyed | 0 | 63,718 | d3704bde2e0b40ac | 2026-09-18T22:15:40Z |
| 13 | rwa/map start=2751 | 200 | keyed | 0 | 63,733 | 24a35966b02460d9 | 2026-09-18T22:15:41Z |
| 14 | rwa/map start=3001 | 200 | keyed | 0 | 63,235 | ea63c464f641b4ca | 2026-09-18T22:15:41Z |
| 15 | rwa/map start=3251 | 200 | keyed | 0 | 63,653 | 86861d76fdf0666c | 2026-09-18T22:15:41Z |
| 16 | rwa/map start=3501 | 200 | keyed | 0 | 63,557 | a95f02567a42c322 | 2026-09-18T22:15:42Z |
| 17 | rwa/map start=3751 | 200 | keyed | 0 | 63,519 | 773cd0747a9f061c | 2026-09-18T22:15:42Z |
| 18 | rwa/map start=4001 | 200 | keyed | 0 | 63,431 | 8c03da9abed0dbb9 | 2026-09-18T22:15:42Z |
| 19 | rwa/map start=4251 | 200 | keyed | 0 | 67,730 | 9e4bf4f0452bd75e | 2026-09-18T22:15:42Z |
| 20 | rwa/map start=4501 | 200 | keyed | 0 | 68,039 | fb299071ad38cef4 | 2026-09-18T22:15:43Z |
| 21 | rwa/map start=4751 | 200 | keyed | 0 | 67,215 | cbdf6867e28f4def | 2026-09-18T22:15:43Z |
| 22 | rwa/map start=5001 | 200 | keyed | 0 | 69,907 | a184aad800f87a2e | 2026-09-18T22:15:43Z |
| 23 | rwa/map start=5251 | 200 | keyed | 0 | 73,318 | c7ba35d0dff10f67 | 2026-09-18T22:15:44Z |
| 24 | rwa/map start=5501 | 200 | keyed | 0 | 72,280 | 84d6c5993e9c80ee | 2026-09-18T22:15:44Z |
| 25 | rwa/map start=5751 | 200 | keyed | 0 | 69,339 | 705f96d425cacfb4 | 2026-09-18T22:15:44Z |
| 26 | rwa/map start=6001 | 200 | keyed | 0 | 63,308 | d45f956d1cd6f49e | 2026-09-18T22:15:44Z |
| 27 | rwa/map start=6251 | 200 | keyed | 0 | 69,704 | 9089eeb89ba4b354 | 2026-09-18T22:15:45Z |
| 28 | rwa/map start=6501 | 200 | keyed | 0 | 66,082 | abcef8575f91a4eb | 2026-09-18T22:15:45Z |
| 29 | rwa/map start=6751 | 200 | keyed | 0 | 67,406 | 9278c208953cc36d | 2026-09-18T22:15:45Z |
| 30 | rwa/map start=7001 | 200 | keyed | 0 | 72,207 | 3ba530e9fe787e15 | 2026-09-18T22:15:45Z |
| 31 | rwa/map start=7251 | 200 | keyed | 0 | 73,054 | d1d6b3f6c00dd444 | 2026-09-18T22:15:46Z |
| 32 | rwa/map start=7501 | 200 | keyed | 0 | 72,611 | 673c55e6de73cae2 | 2026-09-18T22:15:46Z |
| 33 | rwa/map start=7751 | 200 | keyed | 0 | 18,150 | 355ab2435b3d4e6c | 2026-09-18T22:15:47Z |
| 34 | rwa/quotes batch 1 (200 ids) | 200 | keyed | 1 | 287,907 | 400d85ed20bf2d20 | 2026-09-18T22:15:47Z |
| 35 | rwa/quotes batch 2 (200 ids) | 200 | keyed | 1 | 185,927 | dd7861e6c00965b5 | 2026-09-18T22:15:48Z |
| 36 | rwa/quotes batch 3 (200 ids) | 200 | keyed | 1 | 170,735 | 21d53742a721d156 | 2026-09-18T22:15:48Z |
| 37 | rwa/quotes batch 4 (191 ids) | 200 | keyed | 1 | 178,865 | f0729c077531d12f | 2026-09-18T22:15:48Z |
| 38 | rwa/issuers/list | 200 | keyed | 1 | 4,321 | a39a35f4301375f5 | 2026-09-18T22:15:49Z |
| 39 | cmc/map start=1 | 200 | keyless | 0 to any key | 882,615 | 88aa8cae65749490 | 2026-09-18T22:15:49Z |
| 40 | cmc/map start=5001 | 200 | keyless | 0 to any key | 1,144,847 | 5c4d0d28ef3eff3c | 2026-09-18T22:16:06Z |
| 41 | cmc/map start=10001 | 200 | keyless | 0 to any key | 1,235,492 | d63e2f26f5a01419 | 2026-09-18T22:16:08Z |
| 42 | cmc/map start=15001 | 200 | keyless | 0 to any key | 1,205,945 | 263ecf818f31a6a7 | 2026-09-18T22:16:10Z |
| 43 | cmc/map start=20001 | 200 | keyless | 0 to any key | 1,214,243 | 8d4875d6aabcbeec | 2026-09-18T22:16:12Z |
| 44 | cmc/map start=25001 | 200 | keyless | 0 to any key | 1,292,231 | 5cc675d253d7e1f7 | 2026-09-18T22:16:13Z |
| 45 | cmc/map start=30001 | 200 | keyless | 0 to any key | 1,369,366 | 3ad7704121b014ca | 2026-09-18T22:16:14Z |
| 46 | cmc/map start=35001 | 200 | keyless | 0 to any key | 1,151,288 | 1d07ff0fc0d6e00f | 2026-09-18T22:16:14Z |
| 47 | cmc/map symbol=VVV | 200 | keyless | 0 to any key | 996 | bca7d761d3025adb | 2026-09-18T22:16:15Z |
| 48 | cmc/info batch 1 (200 ids) | 400 | keyless | 0 to any key | 174 | e541f37029dbf103 | 2026-09-18T22:16:15Z |
| 49 | cmc/info batch 1 (197 ids) | 200 | keyless | 0 to any key | 169,802 | 9b328e074316828d | 2026-09-18T22:16:16Z |
| 50 | cmc/info batch 2 (200 ids) | 200 | keyless | 0 to any key | 157,395 | be2b46ff6606a4bd | 2026-09-18T22:16:16Z |
| 51 | cmc/info batch 3 (200 ids) | 400 | keyless | 0 to any key | 162 | 7dd8467eb3688a95 | 2026-09-18T22:16:16Z |
| 52 | cmc/info batch 3 (199 ids) | 200 | keyless | 0 to any key | 156,467 | 37f18d28ba2263ac | 2026-09-18T22:16:16Z |
| 53 | cmc/info batch 4 (77 ids) | 200 | keyless | 0 to any key | 95,404 | 95031f98a23bb671 | 2026-09-18T22:16:17Z |
| 54 | key/info | 200 | keyed | 0 | 494 | e693f1d0c7dd72bf | 2026-09-18T22:16:17Z |
39 keyed calls = 5 credits, read off /v1/key/info before and after: 12020 → 12025 credits used this month. 15 keyless calls, charged to no key. Re-derive both headline numbers by hand:
jq '[.wrappers[] | select(.status=="untracked")] | length' data/census.json # wrappers on the shelf -> untracked jq '.wrappers | group_by(.rwa_id) | map(select(all(.[]; .status=="untracked"))) | length' data/census.json # underlyings with zero tracked wrapper -> underlyings_zero_tracked
6 endpoints. Two of them are the whole join.
The wrapper roster with its null-price rows exists in one place: tokens[] on /v5/real-world-assets/quotes/latest. The listing state that explains the nulls exists in one place: status on /v1/cryptocurrency/map. Delete CoinMarketCap and both ledgers vanish — no single endpoint says a wrapper has no market; only the join does.
| endpoint | used for | key | calls behind this page |
|---|---|---|---|
/v5/real-world-assets/map | the universe — every underlying, has_tokens, rwa_rank, asset_type | keyed · 0 credits | 32 |
/v5/real-world-assets/quotes/latest | tokens[] — the wrapper roster including the price: null rows the RWA pages hide; issuer_id and crypto_id per wrapper | keyed · 1 credit / 250 assets | 4 |
/v5/real-world-assets/issuers/list | the issuer registry with its declared num_tokens | keyed · 1 credit | 1 |
/public-api/v1/cryptocurrency/map | listing state per wrapper across active, inactive, untracked; platform and address — the join's other half | none | 10 |
/public-api/v2/cryptocurrency/info | date_added — the day a shelf wrapper was listed; state for the dotted symbols the map filter rejects | none | 7 |
/v1/key/info | the credit ledger before and after a census, so the receipt's credit count is CoinMarketCap's, not ours | keyed · 0 credits | 2 |
/v5/real-world-assets/market-pairs/list | not used — documented as Basic, answered 403 error 1006 on the Startup plan; tried, recorded in FEEDBACK.md §3, not built on | plan-gated | 0 — refused |
The map's symbol= filter rejects symbols CoinMarketCap itself assigns — NVDA.D, AI.FRx — with HTTP 400 for the whole call, and the map has no id= filter to fall back to. Those rows take their live state from /v2/cryptocurrency/info?id=, whose vocabulary is coarser; each row names both sources.
10 tickers keyless in a tight loop: 9 answered in about half a second, the other got 429 error 1011 after ~20 calls in 15 s, no Retry-After. A shared egress IP is refused outright (error 1022). The proxy repeats a refused call keyed and labels the row; the CLI backs off and exits 75.
tokens[] carries ids the map and the info endpoint both deny exist (39318 SILVER, 39002 HOOD, 39839 QQQ, 42326 APLD — null symbols). Counting them as shelf would inflate the headline; they sit in their own bucket and are counted nowhere, and the property test holds that rule over 500 generated ledgers.
12 dated, evidenced findings for the CoinMarketCap team — and what is worth protecting — in FEEDBACK.md (opens in a new tab). Every endpoint the client calls is named above; tests/test_render_site.py holds this page to every one of them, and the one that was tried and refused is listed rather than hidden.
No key. No install. About half a second.
The judged capability is a stdlib-only module against the keyless surface: python3 -m shelfware MS prints every wrapper, its issuer, chain and listing state, then the receipt line. The transcript is the command's own output, rendered from the receipt that run wrote — docs/proof/ms.json, 2026-09-18 22:43:39 UTC. Your timings will differ.
$ git clone https://github.com/edycutjong/shelfware.git && cd shelfware $ python3 -m shelfware MS shelfware MS — does it have a wrapper that trades, and whose? MS Morgan Stanley · stock · rwa_rank 43 · has_tokens: true roster: snapshot 2026-09-18T22:16:17Z (the RWA endpoints need a key; export CMC_API_KEY to go live) ▒ wMSx Wrapped Morgan Stanley Tokenized Stock (xStock) issuer Backed Assets 6878977dcbbf471de3366e85 chain X Layer 0x2874A11805783324C54562eDB1A641C5d1d077a5 price null · market_cap null · volume_24h null status UNTRACKED ← /public-api/v1/cryptocurrency/map, live, keyless, 0 credits "listed, no CMC-tracked market" — CMC: registered cryptocurrency projects that are listed but do not yet meet methodology requirements to have tracked markets listed 2026-08-11 (date_added) · 38 days on the shelf 0 of 1 wrapper(s) with a CMC-tracked market receipt: cmc/map symbol=wMSx → HTTP 200 · keyless · 0 credits to any key · 491 ms · sha256 d7e1ecdef293e6c8 | cmc/info batch 1 (1 ids) → HTTP 200 · keyless · 0 credits to any key · 762 ms · sha256 1559b2c185ccabe8
2 daily snapshots so far, taken by scripts/snapshot.py; the delta between the two latest days is a real zero, printed as one. Also in the repository: 121 tests (104 offline, 11 for the proxy functions, 6 live), a property test over 500 generated ledgers with 0 violations of the counting rules, and a join that recounts the 1,435 committed wrappers in 1.94 ms (p95 2.22 ms, n=200). The whole keyless question, MS to receipt: p50 552 ms, p95 603 ms (n=9, bench.json (opens in a new tab)).
Honest limits.
Is this page live?
The census and the MS answer are committed runs — 2026-09-18 22:16:17 UTC and 2026-09-18 22:43:39 UTC — and say so on every number. The ticker box is live through two proxy functions: the roster leg keyed on the site's key (or the committed snapshot, labelled), the state leg keyless. The proxy shares one IP against a per-IP anonymous limit, so a 429 is shown as a 429 with the command to run instead; the CLI is the primary live path, and every reader has their own quota there.
What does "untracked" mean?
It is CoinMarketCap's listing state, quoted from its map documentation: "registered cryptocurrency projects that are listed but do not yet meet methodology requirements to have tracked markets". On this page it reads listed, no CMC-tracked market. It does not mean never traded: Dinari dShares trade on Dinari's own venue, and some wrappers may sit in pools CMC does not index. The number is about CoinMarketCap's coverage of what CoinMarketCap calls tokenised — which is why it can be re-derived. The spike that settled the wording: spike.json (opens in a new tab).
Why MS?
A rule, not a pick: the most prominent tokenised underlying on CoinMarketCap (lowest rwa_rank) whose every wrapper is untracked — MS, rank 43, the only all-shelf underlying inside CMC's top 50. Next in line: APH (80), GILD (83), WELL (94), UNP (95). If tomorrow's census promotes its wrapper to active, the rule moves on and the delta panel shows the flip — a shelf wrapper coming alive is the strongest proof the census is live.
Which rows are not counted?
4 wrapper ids resolve on no public CMC surface (39318 SILVER, 39002 HOOD, 39839 QQQ, 42326 APLD); they are shown in their own bucket and excluded from every count. 38 wrappers carry a dotted symbol the map filter rejects; their live state comes from /v2/cryptocurrency/info and the map's finer word from the committed snapshot, and each row says which. num_tokens on the issuer registry is undocumented, so it is shown as "declared" and never substituted for attached (Backed declares 1176, 772 are attached).
How old is the series?
A daily series, not a history: 2026-09-18, 2026-09-19. Untracked map rows carry no dates of their own, so the only time axis is the snapshot series this repository records; date_added from the info endpoint is a listing day, not a market day. The roster leg needs a key (the RWA family answers keyless calls with 403 error 1005); without one it is a dated snapshot, labelled on the row, and the state leg is live regardless.
What is not built?
No price charts, no wrapper-versus-underlying spread, no portfolio, no alerts, no watchlists, no model, no chain, no wallet, no LLM. The product counts the shelf and answers a ticker beside its raw rows; that verb is the whole scope, and the rule that produces the number is printed, never widened.