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 |
rail | enum | direct — the account's USDC and the vault are on the same chain |
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, source} — immediate exit path where supported. Read from the contract per request; see below |
:::note Instant redeem is read from the contract, not declared
Instant-redeem availability and its fee are an operator switch on the vault contract — they change without a release. This endpoint reads that switch for you on every request (short-cached), so you do not need to query the chain yourself. The source field tells you what you got:
source | meaning |
|---|---|
"chain" | available and feeBps are the contract's current values |
"catalog-unverified" | the chain could not be read; these are the catalog's declared values and may be stale |
Never quote an instant redemption on "catalog-unverified" — it means we could not confirm the switch, which is not the same as confirming it is on. Treat it like available: false until a later request returns "chain".
Even on "chain", the switch can flip between your read and the user's signature, so keep the queued-redemption fallback for a rejected instant build.
:::
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},
"cancelable":true,"cancelFeeBps":200}]},
{"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}}]}]}
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 | instantRedeem is read live from the contract and carries source ("chain" | "catalog-unverified") — see the note above |
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.