Docs / Developer API
Coins paired with a stock
A coin can be paired with a tokenized stock instead of ZEC: its curve trades against the stock. The API reads these coins and says where each stock's issuer controls stand. Traders still pay and are paid in SOL or ZEC; the chain holds a stock coin's own amounts in the stock's raw base units.
The stocks
| Key | Stock | Decimals | Mint |
|---|---|---|---|
| nvdax | NVDAx, tokenized Nvidia, issued by Backed (xStocks) | 8 | Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh |
| spyx | SPYx, tokenized S&P 500 ETF, issued by Backed (xStocks) | 8 | XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W |
| spcx | SPCX, tokenized SpaceX, issued by Backpack Securities | 6 | SPCXxcqXj6e5dJDVNovHN8744zkbhM2bYudU45BimGb |
| aaplx | AAPLx, tokenized Apple, issued by Backed (xStocks) | 8 | XsbEhLAtcf6HdfpFZ5xEMdqW8nfAvcsP5bdudRLJzJp |
| baba | BABA, tokenized Alibaba, issued by Backpack Securities | 6 | BABANGA4JE7Kkam4nTrALAwAVgsNJUuFJnnkF7S16BZp |
| brkbx | BRK.Bx, tokenized Berkshire Hathaway, issued by Backed (xStocks) | 8 | Xs6B6zawENwAbWVi7w92rjazLuAr5Az59qgWKcNb45x |
| crclx | CRCLx, tokenized Circle, issued by Backed (xStocks) | 8 | XsueG8BtpquVJX9LVLLEGuViXUungE6WmK5YZ3p3bd1 |
| dram | DRAM, the tokenized Roundhill Memory ETF, issued by Backpack Securities | 6 | DRAMjSWR7HRfJKjRkvQWYL2bcaejaVhuxEcjf4pAY4Cw |
| gmex | GMEx, tokenized GameStop, issued by Backed (xStocks) | 8 | Xsf9mBktVB9BSU5kf4nHxPq5hCBJ2j2ui3ecFGxPRGc |
| ibm | IBM, tokenized IBM, issued by Backpack Securities | 6 | BMKdM4yUxX12moFqVk195k7coMbaybd4RUKCUdm7D1Sk |
| mcdx | MCDx, tokenized McDonald's, issued by Backed (xStocks) | 8 | XsqE9cRRpzxcGKDXj1BJ7Xmg4GRhZoyY1KpmGSxAWT2 |
| mu | MU, tokenized Micron, issued by Backpack Securities | 6 | MUxEsUKSMACyw5fZf68wxf5FLnZVhtU9CwH8uNNGay1 |
| nke | NKE, tokenized Nike, issued by Backpack Securities | 6 | NKEda5nHhNGgjrE9nDdMvaEmkmJ96qqxzBVZEcKmjSg |
| qqqx | QQQx, the tokenized Nasdaq 100, issued by Backed (xStocks) | 8 | Xs8S1uUs1zvS2p7iwtsG3b6fkhpvmwz4GYU3gWAmWHZ |
| skhy | SKHY, tokenized SK Hynix, issued by Backpack Securities | 6 | SKHYhSjuRWHgikq8eRKbtBbpABgJSkd7ytQV14i9EQ3 |
| sndk | SNDK, tokenized Sandisk, issued by Backpack Securities | 6 | SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH |
| tslax | TSLAx, tokenized Tesla, issued by Backed (xStocks) | 8 | XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB |
| bot | BOT, tokenized RoboStrategy, issued by Backpack Securities | 6 | BoTx8y9ynfdxf5ZjWtCoBVkff52qKA82ysaLU8ZM6d8T |
| dell | DELL, tokenized Dell, issued by Backpack Securities | 6 | DELL2aRKQz7DMq5DrKLtkn47ZCnbxXPZXrSGbkmd13wy |
| gldx | GLDx, the tokenized gold ETF, issued by Backed (xStocks) | 8 | Xsv9hRk1z5ystj9MhnA7Lq4vjSsLwzL2nxrwmwtD3re |
| googlx | GOOGLx, tokenized Alphabet, issued by Backed (xStocks) | 8 | XsCPL9dNWBMvFtTmwcCA5v3xWPSMEBCszbQdiLLq6aN |
| hims | HIMS, tokenized Hims & Hers, issued by Backpack Securities | 6 | HiMSSzzwkZkrXJ4PGVJRdtfLaANeAztjjcgk5Dxe7Lwx |
| hoodx | HOODx, tokenized Robinhood, issued by Backed (xStocks) | 8 | XsvNBAYkrDRNhA7wPHQfX3ZUXZyZLdnCQDfHZ56bzpg |
| mrvl | MRVL, tokenized Marvell, issued by Backpack Securities | 6 | MRVLSjkR2ceUBukujaD3xCyHP1H3B2SzpsNTZF546jo |
| msftx | MSFTx, tokenized Microsoft, issued by Backed (xStocks) | 8 | XspzcW1PRtgf6Wj92HCiZdjzKCyFekVD8P5Ueh3dRMX |
| ttwo | TTWO, tokenized Take-Two, issued by Backpack Securities | 6 | TTWofwAge91oFhZs7kpQdyrVRkmevgM88xijGvQFbKo |
| amznx | AMZNx, tokenized Amazon, issued by Backed (xStocks) | 8 | Xs3eBt7uRfJX8QUs4suhyU8p2M6DoUDrJyWBa8LLZsg |
| dkng | DKNG, tokenized DraftKings, issued by Backpack Securities | 6 | DKNGQFNGQmoBdXSRGKJ8tTu7uPDasw5JDcfMmWniNfow |
| kox | KOx, tokenized Coca-Cola, issued by Backed (xStocks) | 8 | XsaBXg8dU5cPM6ehmVctMkVqoiRG2ZjMo1cyBJ3AykQ |
| nflx | NFLX, tokenized Netflix, issued by Backpack Securities | 6 | NFLX7qV57zuVxCoHy3s1jiGZyALraLNwttbxdvmYJLJ |
| pfe | PFE, tokenized Pfizer, issued by Backpack Securities | 6 | PFER6ENqP8r8NF3CqVt4mFowxsin3V5MLidBNQFCC3x |
| pltrx | PLTRx, tokenized Palantir, issued by Backed (xStocks) | 8 | XsoBhf2ufR8fTyNSjqfU71DYGaE6Z3SUGAidpzriAA4 |
| qubt | QUBT, tokenized Quantum Computing, issued by Backpack Securities | 6 | QUBTAD8C9bMU9LvmMNgKPhrmBGbHvxpu6vfWQtThxxw |
| rddt | RDDT, tokenized Reddit, issued by Backpack Securities | 6 | RDDTGbhHwVXfyCvQMXzzowKjf5qrYBZAnehoXW83ooh |
| metax | METAx, tokenized Meta, issued by Backed (xStocks) | 8 | Xsa62P5mvPszXL1krVUnU5ar38bBSVcWAB6fmPCo5Zu |
| race | RACE, tokenized Ferrari, issued by Backpack Securities | 6 | RACEyWiM2ztEZcJx2AHXU2eWjhxU57x3vXn92b39dLD |
| coinx | COINx, tokenized Coinbase, issued by Backed (xStocks) | 8 | Xs7ZdzSHLU9ftNJsii5fCeJhoRWSC32SQGzGQtePxNu |
| copx | COPX, the tokenized copper miners ETF, issued by Backpack Securities | 6 | CzLTZppPdZtTjyq3WGpHLstoc3GLhu7zH5Zg6xUa6Gv5 |
| intc | INTC, tokenized Intel, issued by Backpack Securities | 6 | iNTCy1qTsUEZQe3DSocLz1ZXXai34Gdw8THQh5rxFaF |
| mstrx | MSTRx, tokenized MicroStrategy, issued by Backed (xStocks) | 8 | XsP7xzNPvEHS1m6qfanPUGjNmdnmsLKEoNAnHjdxxyZ |
| nbis | NBIS, tokenized Nebius, issued by Backpack Securities | 6 | NBiSF3UaVUFtRzHwAfxyHsBCAZWGEKnMpewAE4oh7BG |
| amd | AMD, tokenized AMD, issued by Backpack Securities | 6 | AMD8XwJXgQ9WV45Wyj9yFLejxzf2J6VM1PJY8bJEjeES |
| lly | LLY, tokenized Eli Lilly, issued by Backpack Securities | 6 | LLYuwZ33keFihgwoxXsBawy31AiRFLFSva32TYq5TvD |
| djt | DJT, tokenized Trump Media & Technology, issued by Backpack Securities | 6 | DJTu7vi8norVzdVAffgvb39VP7wjKeTsgaMBJrzfxvoF |
Each is a Token-2022 mint. The key is what tells pairs apart: pair.key on a coin, key in the issuer status and on a trade's stock, and the stock filter. A stock listed here is not always open for new money: open says which are now (Open or closed).
Issuer status
GET /v1/stocks/issuers
Each pinned stock's issuer controls, read on chain and compared with the ones Sapling reviewed: its authorities, whether it is paused, its default account state, its transfer hook, its share multiplier, and the issuer's own keys behind them. A read request (the reads tier), cached for 15 seconds. A 404 while stock pairs are off.
{
"data": [
{
"key": "nvdax",
"symbol": "NVDAx",
"mint": "Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
"issuer": "Backed (xStocks)",
"status": "unchanged",
"open": true,
"closed": null,
"paused": null,
"changes": [],
"notices": [
{
"what": "scaled UI multiplier step",
"pinned": "1",
"now": "1.004 from 2026-11-03 14:30 UTC"
}
],
"slot": 455760788
},
{
"key": "spyx",
"symbol": "SPYx",
"mint": "XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W",
"issuer": "Backed (xStocks)",
"status": "changed",
"open": false,
"closed": {
"reason": "issuer-changed"
},
"paused": "Backed (xStocks) changed SPYx's issuer controls. New SPYx pairs and buys are paused until it is reviewed. Selling stays open.",
"changes": [
{
"what": "paused",
"pinned": "false",
"now": "true"
}
],
"notices": [],
"slot": 455760788
},
{
"key": "spcx",
"symbol": "SPCX",
"mint": "SPCXxcqXj6e5dJDVNovHN8744zkbhM2bYudU45BimGb",
"issuer": "Backpack Securities",
"status": "unchanged",
"open": false,
"closed": {
"reason": "stock-switch-off"
},
"paused": null,
"changes": [],
"notices": [],
"slot": 455760788
}
],
"readable": true
}status:"unchanged"or"changed".openandclosed: whether new money can go into the stock now, and if not why (Open or closed).paused: the line Sapling shows while the stock is paused, ornullwhile it is unchanged.changes: what differs from the review, each aswhat,pinned(what the review holds) andnow(what the chain holds). Empty while unchanged.notices: what moved without pausing anything, in the same shape.slot: the slot the chain was read at.readable:falsewhen the chain could not be read;datais then empty. Treat every stock as paused until it reads again, as sapling.cash does.
Open, paused, notice
| State | How it reads |
|---|---|
| Open | open: true, closed: null, status: "unchanged", paused: null, no changes. |
| Not open yet | open: false while status is "unchanged", closed.reason "stock-switch-off" (or "stocks-off"): listed, closed to new money. Its coins are read and sold as any. |
| Paused | open: false, closed.reason "issuer-changed", status: "changed", paused holds the line, changes lists what changed. |
| Notice | An entry in notices while status stays "unchanged": an open stock stays open. |
What a change can name
- A role:
mint authority,freeze authority,permanent delegate,transfer hook authority,transfer hook program,pause authority,scaled UI multiplier authority,metadata pointer authority,metadata update authority,confidential transfer authority,group member pointer authority,mint close authority,transfer fee config authority,withheld withdraw authority. - The mint's state:
paused,default account state,scaled UI multiplier(a move outside the normal step),the mint(it no longer reads as the reviewed Token-2022 mint). - One of the issuer's own keys behind a role: a wallet that is no longer a plain wallet, a multisig's threshold, time lock, config authority or members, a program's upgrade authority or a redeploy. Its
whatnames the address.
What a notice can name
scaled UI multiplier step: a normal step of the share multiplier (as for a dividend): one increase of at most 2%, taking effect within 2 days. Anything else is a change.pinnedis the multiplier in force,nowreads"<next> from YYYY-MM-DD HH:MM UTC".confidential transfer auto approve: the flag turned"on"or"off".
Coin answers
A coin paired with a stock carries pair on every coin answer: GET /v1/coins, /v1/coins/search, /v1/coins/{mint}, /v1/graduations, and a Zcash account's holdings on GET /v1/accounts/{W} (read only there: the account's orders do not trade it; its valueZec is null while the coin has no ZEC value). Its kind is "stock"; its key is the stock's.
"pair": {
"key": "nvdax",
"kind": "stock",
"symbol": "NVDAx",
"name": "tokenized Nvidia",
"issuer": "Backed (xStocks)",
"quoteMint": "Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
"decimals": 8,
"tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
"open": true,
"closed": null,
"controls": {
"freeze": true,
"permanentDelegate": true,
"pause": true,
"scaledUi": true,
"hook": true
},
"disclosure": [
"NVDAx is issued by Backed.",
"Its issuer can pause it, freeze an account that holds it, and move or burn it from any account.",
"If that happens, this coin cannot be bought or sold until it stops, and any NVDAx in its liquidity can be taken by the issuer.",
"Sapling turns its own NVDAx fees into ZEC every few minutes."
],
"multiplier": "1",
"raw": {
"priceE9": "…",
"marketCap": "…",
"volume24h": "…"
},
"display": {
"price": "…",
"marketCap": "…",
"volume24h": "…"
},
"zec": {
"available": true,
"source": "reference",
"zatPerWholeRawE12": "…"
}
}Only the coins paired with a stock
GET /v1/coins?quote=stocks lists only coins paired with a stock, and ?stock=<key> (?stock=nvdax) only those paired with that stock, alone or with quote=stocks; a stock not open yet is taken too. quote is zec, sapling or stocks; stock is one of the keys above, exactly as written. Anything else answers 400 invalid_param, as a wrong sort or stage does. GET /v1/trades takes the same two.
Units
pair.raw: the stock's raw base units, as the chain holds them, the multiplier not applied.priceE9is per whole token × 1e9./v1/coins/{mint}addsvolumeTotalandcreatorFees.pair.display: the same amounts × the multiplier in force ÷ 10^decimals, rounded down, for showing only.nullwhen the mint could not be read (multiplieris thennulltoo).- Every field named
…Zecis the raw amount valued at the stock's ZEC value now.pair.zecsays how:zatPerWholeRawE12(zat per whole raw unit × 10^12) from the vault's own rate memory ("reference") or, when that cannot be read, the last conversion the vault made ("realised"). - When neither exists,
pair.zec.availableisfalseand the coin's ZEC-named fields arenull. Nothing is guessed. - Sorting by market cap or volume values a stock coin in ZEC the same way, at 0 while it has no ZEC value.
openandclosed: as in the issuer status, for the coin's stock (Open or closed).disclosureis the stock's plain disclosure, one sentence per line, exactly as sapling.cash shows it.
Trades and candles
On GET /v1/coins/{mint}/trades and GET /v1/trades, a stock coin's trade keeps zec, creatorFeeZec and priceZecE9, valued at the stock's ZEC value now (null while there is none), and adds stock: the stock's key and what the chain moved, raw and for display.
"stock": {
"key": "nvdax",
"symbol": "NVDAx",
"decimals": 8,
"raw": {
"amount": "…",
"creatorFee": "…",
"priceE9": "…"
},
"display": {
"amount": "…",
"creatorFee": "…",
"price": "…"
}
}On GET /v1/coins/{mint}/candles a stock coin's o, h, l, c and volumeZec are valued the same way, and each candle adds raw: o, h, l, c and volume in the stock's raw base units.
Open or closed
Every stock pair block and every issuer status row carries open: true while new money (a planting, a buy) can go into the stock now. When it is false, closed.reason says why; closed is null while open. Whatever the reason, a holder can always leave: the coin's reads (the coin, its trades, candles and holders) answer as ever, and selling stays open.
| closed.reason | What it means for a holder |
|---|---|
| "stocks-off" | Stock pairs are closed on Sapling for now. No new pairs or buys in any stock; selling is open. |
| "stock-switch-off" | This stock is listed but not open yet, or closed on its own. No new pairs or buys in it; selling is open. |
| "issuer-changed" | Its issuer's controls differ from Sapling's review, or cannot be read right now. Paused until reviewed (or read again); selling is open, though the issuer's own pause can stop the stock itself. |
| "review" | Held back until its own review is done again. No new pairs or buys; selling is open. |
Answers that carry open are cached for at most 15 seconds and never served stale.
Not in the API yet
GET /v1/coins/{mint}/quoteand/v1/coins/{mint}/feesanswer404 not_foundfor a stock coin, and its holder-reward runs are not listed.- A Sapling Wallet buy order of a stock coin (
POST /v1/zcash/quote,/v1/zcash/orders) answers404 coin_unknown. - The plant, trade and swap builds have no stock route, and
GET /v1/paramsnames no stock.
Plant and trade stock coins on sapling.cash.
SDK
The SDK reads stock coins only, as the API does: coins.list and trades take quote and stock (a StockKey, the 44 keys above), stocks.issuers() reads GET /v1/stocks/issuers, Coin.pair is a StockCoinPair with open and closed, and STOCK_PINS holds each stock's mint, decimals and issuer keys; it quotes, builds and verifies no stock coin trade.