Skip to main content

Assets & Vaults

Read endpoints for the catalog and live vault state. The catalog is filtered to assets enabled for your organization — a newly launched asset simply does not appear until it is enabled for you. There are no marketing states in the API.


GET /v1/assets

The full catalog, grouped by asset.

Response — data[]:

FieldTypeNotes
id, symbol, namestringAsset identity (rcusdp, xaua)
typeopen enumUnderlying asset class: cash_yield (tokenized T-bills / money market), commodity (physical commodity token), plus reserved values (private_credit, fixed_income, real_estate, equity). Tolerate unknown values — new classes are added without notice.
nativeChainenumsui
statusenumactive · paused (no new deposits; redeem/claim unaffected) · retired (history & redeem only)
currencystringQuote currency (USDC)
pricestringNAV per share/unit in currency
apystring | nullYield assets only
unitstring?Physical unit (gram for xaua)
vaults[]object[]Investable instances — see below

vaults[] fields:

FieldTypeNotes
vaultIdstringe.g. rcusdp-sui — use in all tx/* and vault endpoints
chainenumsui · solana
railenumdirect (same-chain) · gateway (cross-chain via TBook gateway — legacy Solana rail only)
statusenumas asset status
minDepositstringin currency
settlementobjectsee below
cancelableboolwhether pending deposits can be cancelled before settlement (false on xaua-sui)
cancelFeeBpsnumber?cancel fee, if any — 200 (2%) on rcusdp-sui, verified on-chain
feeBpsobject?{subscribe, redeem} asset-level fees, if any
requiresWhitelistbool?XAUa: wallet must be whitelisted before transacting

settlement object — customer-facing timing only (internal batching mechanics are not exposed):

FieldMeaning
deposit / redeemTime to settle, e.g. "T+1", "T+3" (business days)
cutoffUtcRequests before this time enter the current settlement cycle; after it, the next one
instantRedeem?{available, feeBps} — immediate exit path where supported

:::note Instant-redeem values are operator-tunable Instant-redeem availability and its fee are operator-controlled on-chain and can change without a catalog release, so the catalog values here are indicative. Do not quote them as binding to a user: attempt the instant build and handle rejection (fall back to a queued redemption), or verify the on-chain vault state directly via @tbookdev/vault-sdk-sui's getVaultState. :::

Example:

{"data":[
{"id":"rcusdp","symbol":"rcUSDP","name":"TBook USD Yield Vault","type":"cash_yield",
"nativeChain":"sui","status":"active","currency":"USDC","price":"1.02754344","apy":"8.32",
"vaults":[
{"vaultId":"rcusdp-sui","chain":"sui","rail":"direct","status":"active","minDeposit":"1",
"settlement":{"deposit":"T+1","redeem":"T+1","instantRedeem":{"available":true,"feeBps":700}},
"cancelable":true,"cancelFeeBps":200},
{"vaultId":"rcusdp-sol","chain":"solana","rail":"gateway","status":"paused","minDeposit":"1",
"settlement":{"deposit":"T+1~3","redeem":"T+1~3"},"cancelable":true,"cancelFeeBps":10}]},
{"id":"xaua","symbol":"XAUa","name":"Alpha Gold Token","type":"commodity",
"nativeChain":"sui","status":"active","currency":"USDC","price":"107.51","unit":"gram",
"vaults":[
{"vaultId":"xaua-sui","chain":"sui","rail":"direct","status":"active","minDeposit":"10",
"settlement":{"deposit":"T+3","redeem":"T+3","cutoffUtc":"10:00"},"cancelable":false,
"requiresWhitelist":true,"feeBps":{"subscribe":10,"redeem":20}}]}]}

:::info Legacy Solana rail (frozen) rcusdp-sol is paused: deposit and redeem builds return 409 vault_paused, while claim and cancel-deposit stay open so existing balances can exit. Legacy Solana read endpoints (GET /v1/vaults/:vaultId/users/:pubkey and …/history) remain available for that rail. :::


GET /v1/vaults

Flat vault list (same entitlement filter). Query: assetId=, chain=, status=.


GET /v1/vaults/:vaultId

One vault's catalog entry plus live pricing:

FieldTypeNotes
vaultId, assetId, symbolstringIdentity
chain, rail, statusenumAs in the catalog
currencystringQuote currency (USDC)
sharePricestringCurrent NAV per share (live where a NAV source is wired; reference price otherwise)
apystring | null
minDepositstring
settlementobjectIncludes indicative instantRedeem values — the authoritative switch lives on-chain (operator-tunable)
cancelablebool
requiresWhitelistbool
pausedbooltrue when status is paused
asOftimestamp

Errors: not_found.


GET /v1/vaults/:vaultId/price

{ "vaultId": "rcusdp-sui", "price": "1.02754344", "apy": "8.32", "currency": "USDC", "asOf": "2026-06-15T08:00:00Z" }

Cached up to 60 seconds. Poll freely (read rate limits apply), or subscribe to vault.price.updated webhooks instead.