vaultsDocumentation

API

Implemented

The read-only HTTP surface: routes, shapes, and what each unavailable state means.

A read-only HTTP surface. It holds no key and can move nothing.

#Routes

RouteReturns
GET /health/liveProcess liveness
GET /health/readyReadiness, including chain reachability
GET /v1/statusNetwork, chain health, identity provider mode, data mode, launch gate
GET /v1/healthProtocol health checks for a monitor. 503 once a check is failing
GET /v1/marketThe whole marketplace snapshot: vaults, badges, activity, aggregate stats
GET /v1/vaultsEvery deployed vault's summary
GET /v1/vaults/:addressOne vault: summary, positions with valuations, source identity
GET /v1/vaults/:address/divergencePer-asset snapshot, live balance, unmirrored delta, state
GET /v1/receiptsRecent sync receipts, executions and skips alike
GET /v1/sources/:addressSource identity and observed chain activity
GET /v1/portfolio/:addressVault shares held by an address

#Unavailable is a value

Every figure that can be unknown is nullable, and carries the reason separately. Nothing is zero-filled.

json
{
  "totalAssets": null,
  "navUnavailableReason": "Position 0xA51c… cannot be priced (PriceStale)."
}

Aggregate TVL follows the same rule with one extra condition: it is summed only when every vault is priceable. A partial sum presented as a total would understate the protocol while looking authoritative, so instead the response says how many vaults could not be priced.

#bigint at the boundary

Chain values are bigint in the SDK and decimal strings in JSON. They are never converted to number: a uint256 does not fit, and silently losing precision on a balance is worse than a slightly awkward type.

#Identity is advisory, and says so

Source identity is fetched best-effort and never blocks a response. Every payload carrying identity marks it explicitly:

json
{
  "identity": { "handle": "…", "displayName": "…", "avatarUrl": null },
  "identityIsAdvisory": true,
  "identityProvider": "fomoscan",
  "identityMode": "mock"
}

identityMode is live, mock or disabled. When it is not live, the whole surface is labelled development data.

#Data mode

/v1/status reports dataMode as live or development-fixtures. In this build it is development-fixtures: identities come from recorded fixtures, while vault balances, positions, trades, pause flags and state are read from chain and are real.

#Skip reasons

Skip reasons are projected to their verbatim contract enum name, never paraphrased at the boundary. A client that wants friendlier wording can gloss them; a client that wants to match onchain data needs the real name.