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[]:
| Field | Type | Notes |
|---|---|---|
id, symbol, name | string | Asset identity (rcusdp, xaua) |
type | open enum | Underlying 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. |
nativeChain | enum | sui |
status | enum | active · paused (no new deposits; redeem/claim unaffected) · retired (history & redeem only) |
currency | string | Quote currency (USDC) |
price | string | NAV per share/unit in currency |
apy | string | null | Yield assets only |
unit | string? | Physical unit (gram for xaua) |
vaults[] | object[] | Investable instances — see below |
vaults[] fields:
| Field | Type | Notes |
|---|---|---|
vaultId | string | e.g. rcusdp-sui — use in all tx/* and vault endpoints |
chain | enum | sui · solana |
rail | enum | direct (same-chain) · gateway (cross-chain via TBook gateway — legacy Solana rail only) |
status | enum | as asset status |
minDeposit | string | in currency |
settlement | object | see below |
cancelable | bool | whether pending deposits can be cancelled before settlement (false on xaua-sui) |
cancelFeeBps | number? | cancel fee, if any — 200 (2%) on rcusdp-sui, verified on-chain |
feeBps | object? | {subscribe, redeem} asset-level fees, if any |
requiresWhitelist | bool? | XAUa: wallet must be whitelisted before transacting |
settlement object — customer-facing timing only (internal batching mechanics are not exposed):
| Field | Meaning |
|---|---|
deposit / redeem | Time to settle, e.g. "T+1", "T+3" (business days) |
cutoffUtc | Requests 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:
| Field | Type | Notes |
|---|---|---|
vaultId, assetId, symbol | string | Identity |
chain, rail, status | enum | As in the catalog |
currency | string | Quote currency (USDC) |
sharePrice | string | Current NAV per share (live where a NAV source is wired; reference price otherwise) |
apy | string | null | |
minDeposit | string | |
settlement | object | Includes indicative instantRedeem values — the authoritative switch lives on-chain (operator-tunable) |
cancelable | bool | |
requiresWhitelist | bool | |
paused | bool | true when status is paused |
asOf | timestamp |
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.