Skip to content
NoetherDocs

Vaults

Trader Vault marketplace rows with computed aggregates, single-vault detail with full NAV, and the trade, deposit, withdraw and fee-claim feeds.

Reference for the Trader Vault endpoints: the marketplace list, single-vault detail, and per-vault history feeds (trades, deposits, withdraws, fee claims). All six endpoints are public; no API key is required. For what Trader Vaults are and how to use them from the app, see Trader Vaults.

Base URL: https://noether-api.proudmeadow-533cf0d8.germanywestcentral.azurecontainerapps.io. The list and history feeds are served from indexer projections, not live chain reads, so data can lag the chain; check indexer.ledgerAgeSeconds on GET /v1/health to see how fresh the read side is. Money fields are strings of 7-decimal fixed-point USDC integers ("10000000" is 1 USDC); *Bps fields are plain basis points. Two timestamp units appear in vault payloads: createdAt and ts are unix seconds, updatedAt is milliseconds since epoch.

GET /v1/vaults

Lists all Trader Vaults, newest first, with computed aggregates. The aggregates (depositorCount, openPositions, tradeCount, drawdownBps, apyBps, apyKind, closedTradePnl) are computed per vault and cached for 10 seconds.

Query parameters

ParameterTypeRequiredDescription
leaderstring (56 chars)noFilter to vaults led by this Stellar address
limitinteger, 1 to 200noRows to return. Default 50

Example

curl -s "https://noether-api.proudmeadow-533cf0d8.germanywestcentral.azurecontainerapps.io/v1/vaults?limit=1"
{
  "vaults": [
    {
      "id": 0,
      "leader": "GCAAZWLEY65OHIDYXS6LVHVW7VHGFNFJ3UYBXSRLIRQMCD5NLCZTL3HZ",
      "name": "bigbig",
      "createdAt": 1787341737,
      "totalUsdc": "11000000000",
      "circulatingShares": "11000000000",
      "hwmNav": "10000000",
      "realizedPnl": "0",
      "leaderShares": "1000000000",
      "profitShareBps": 1000,
      "paused": false,
      "updatedAt": 1787779347156,
      "depositorCount": 2,
      "openPositions": 0,
      "tradeCount": 0,
      "drawdownBps": 0,
      "apyBps": 0,
      "apyKind": "annualized",
      "closedTradePnl": "0"
    }
  ]
}

Vault object fields

FieldTypeDescription
idintegerVault id (used in the path of the other five endpoints)
leaderstringLeader's Stellar address
namestringVault name
createdAtintegerCreation time, unix seconds
totalUsdcstringVault cash in USDC (7-decimal integer)
circulatingSharesstringVault shares outstanding (7-decimal integer)
hwmNavstringHigh-water NAV per share, 7-decimal scaled ("10000000" is 1.0)
realizedPnlstringLeader profit-share payouts to date (USDC, 7-decimal)
leaderSharesstringShares held by the leader (7-decimal integer)
profitShareBpsintegerLeader profit share in basis points (1000 is 10%)
pausedbooleanWhether the vault is paused
updatedAtintegerLast projection update, milliseconds since epoch
depositorCountintegerDistinct depositors
openPositionsintegerCurrently open leader positions
tradeCountintegerLifetime leader trades (counts position opens)
drawdownBpsintegerCurrent drawdown from the high-water mark: (hwm - nav) / hwm * 10000, floored at 0, where nav is totalUsdc / circulatingShares
apyBpsintegerSigned yield in basis points from closedTradePnl over totalUsdc: annualized when the vault is at least seven days old, otherwise the raw since-inception return (see apyKind). A losing vault reports a negative value
apyKindstringannualized, or inception when the vault is younger than seven days and apyBps is not an annual rate
closedTradePnlstringLifetime PnL from closed leader trades (USDC, 7-decimal, signed)

GET /v1/vaults/{id}

Returns a single vault by id, in the same enriched shape as a list row plus navFull.

Path parameters

ParameterTypeRequiredDescription
idinteger, 0 or moreyesVault id

Example

curl -s "https://noether-api.proudmeadow-533cf0d8.germanywestcentral.azurecontainerapps.io/v1/vaults/0"
{
  "id": 0,
  "leader": "GCAAZWLEY65OHIDYXS6LVHVW7VHGFNFJ3UYBXSRLIRQMCD5NLCZTL3HZ",
  "name": "bigbig",
  "createdAt": 1787341737,
  "totalUsdc": "11000000000",
  "circulatingShares": "11000000000",
  "hwmNav": "10000000",
  "realizedPnl": "0",
  "leaderShares": "1000000000",
  "navFull": "11000000000",
  "profitShareBps": 1000,
  "paused": false,
  "updatedAt": 1787779347156,
  "depositorCount": 2,
  "openPositions": 0,
  "tradeCount": 0,
  "drawdownBps": 0,
  "apyBps": 0,
  "apyKind": "annualized",
  "closedTradePnl": "0"
}

navFull is the vault's full net asset value read from the chain (cash plus the marked value of open positions and orders), a 7-decimal USDC string; it is null when the read is unavailable. Unknown ids return 404:

{"error":"vault_not_found","id":999}

GET /v1/vaults/{id}/trades

The vault leader's open and close trade history, newest first. Each row records a leader_open or leader_close event emitted by the vault factory contract.

Parameters

ParameterInTypeRequiredDescription
idpathinteger, 0 or moreyesVault id
limitqueryinteger, 1 to 200noRows to return. Default 50
before_tsqueryinteger, 0 or morenoReturn rows strictly older than this unix-seconds timestamp (cursor pagination)

Example

curl -s "https://noether-api.proudmeadow-533cf0d8.germanywestcentral.azurecontainerapps.io/v1/vaults/0/trades?limit=1"

The vault in the sample has no leader trades yet, so the live response is {"trades": []}. Each row, when present, has this shape (from the gateway's response schema):

FieldTypeDescription
idintegerRow id
vaultIdintegerVault id
positionIdstringMarket-contract position id the leader traded
actionstringopen or close
leaderstringLeader's address
collateralstringCollateral committed (USDC, 7-decimal)
pnlstring or nullRealized PnL on close rows (USDC, 7-decimal, signed); null on open rows
tsintegerTrade time, unix seconds
ledger, txHashinteger, stringOn-chain reference for the event

GET /v1/vaults/{id}/deposits, /withdraws, /fee-claims

Three history feeds with identical parameters, newest first:

  • GET /v1/vaults/{id}/deposits: depositor inflows. Response key deposits.
  • GET /v1/vaults/{id}/withdraws: depositor outflows. Response key withdraws.
  • GET /v1/vaults/{id}/fee-claims: leader profit-share claims. Response key feeClaims.

Parameters

ParameterInTypeRequiredDescription
idpathinteger, 0 or moreyesVault id
limitqueryinteger, 1 to 200noRows to return. Default 50
before_tsqueryinteger, 0 or morenoReturn rows strictly older than this unix-seconds timestamp

Example

curl -s "https://noether-api.proudmeadow-533cf0d8.germanywestcentral.azurecontainerapps.io/v1/vaults/0/deposits?limit=1"
{
  "deposits": [
    {
      "id": 41,
      "vaultId": 0,
      "principal": "GANULBMBIHLAUTNLHKJXQHV7OLEAWRRSDEZOPLSXRGBJXCCF7V2OGQ7J",
      "amount": "10000000000",
      "ledger": 4351178,
      "ts": 1787779333,
      "txHash": "73bb4fec1ea56c01f3cd7b0e3b9b054e51d08c8e4bede358235ff66ffbd79774",
      "shares": "10000000000"
    }
  ]
}

All three feeds share this row shape:

FieldTypeDescription
idintegerRow id
vaultIdintegerVault id
principalstringThe depositor's address (deposits, withdraws) or the leader's address (fee claims)
amountstringUSDC amount (7-decimal integer). On withdraws this is the USDC paid out
sharesstringVault shares minted or burned (7-decimal integer). Present on deposits and withdraws only; absent on fee claims
tsintegerEvent time, unix seconds
ledger, txHashinteger, stringOn-chain reference for the event

Notes

  • Vaults trade as contract addresses. A Trader Vault holds positions under its own C... contract address, so vault activity also appears in GET /v1/positions/open and on the leaderboard with a contract address in the trader field.
  • Rate limits. Without an API key you share the public tier of 60 requests per minute per IP. See the REST overview for tiers and headers.
  • Pagination. before_ts is a strict less-than cursor in unix seconds: take the ts of the oldest row you have and pass it as before_ts to fetch the next page. There are no page tokens or total counts.

Next steps

On this page