Data

Wallet Data by Address

Wallet data is public by address with an API key. Each /api/v1/wallet/{address}/... route is primary; the /api/v1/me/... and older paths are aliases for the signed-in wallet with the same body. Histories are cursor paged (blockNumber:logIndex), sorted lists offset paged.

Rendered from /openapi.json. Amounts are raw decimal strings in the units of the asset named beside them; USD values are USD × 1e18, null when unknown, with a usdSource. Quotes are hints: the contract is the final check.

GET
/api/v1/wallet/{address}/transactions
Wallet transactions. A wallet's AMM legs across all tokens and mains, newest first in chain order, attributed to the wallet behind the trade (a hub-loan exit is listed under the borrower); the hop leg of a routed trade is left out unless `legs=all`. Protocol legs are never listed. `nextCursor` is opaque. `amountUSDC` is deprecated (use amountQuote + quoteAsset + quoteDecimals) and so is `price` (raw pair units; use priceE18). Sends X-Deprecated-Fields: amountUSDC, price; each row carries usdSource. Legs on invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *stringWallet address
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
typestring (buy | sell | leverage_buy | leverage_sell)
legsstring (all)Also return the hop leg of routed trades.
legRolestring (trade | route_hop | cross_leg | leverage_open | leverage_exit | loan_exit | liquidation | convert)Only legs of this role (replaces the default, which leaves out route_hop).
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
FieldTypeDescription
dataobject[]
paginationPagination
data[].idinteger
data[].contractAddressstringThe token whose pool this leg is on.
data[].typestring (buy | sell | leverage_buy | leverage_sell)
data[].amountTokenstring
data[].amountUSDCstringDeprecated: removed at the Robinhood cutover. Use amountQuote + quoteAsset + quoteDecimals; valueUsdE18 for USD.
data[].amountQuoteRawAmountRaw quote-asset units (the asset named by quoteAsset).
data[].quoteAssetstring | nullThe unit of amountQuote: the main for a factory token, the pair asset for a main.
data[].quoteDecimalsinteger | null
data[].userstring
data[].pricestringDeprecated (removed at the Robinhood cutover): the same price as priceE18 in raw pair-asset units per whole token (scaled by 10^pairDecimals). Use priceE18.
data[].priceE18string | nullWhole pair-asset units per whole token x 1e18: the price before the trade on buy, sell and leverage_buy rows and after it on leverage_sell rows. null when the token's main is not configured. A display hint; build prices from candles.
data[].mainstring | nullThe token's main (lower-case address).
data[].pairAssetstring | nullThe main's pair asset (lower-case address).
data[].pairDecimalsinteger | nullDecimals of the pair asset.
data[].pairSymbolstring | null
data[].valueUsdE18UsdE18 | nullUSD x 1e18 at the time of the trade. On a trade or cross_leg leg: the trade's USD before fees, the same figure GET /api/v1/trades shows for that trade (valueUsdOutE18 for the buy-side leg of a cross swap) and the one the 24 h volume sums. On any other leg (leverage open or exit, loan exit, liquidation, convert, route hop, protocol): the leg's own value, as legValueUsdE18.
data[].legValueUsdE18UsdE18 | nullUSD x 1e18 of this leg itself: what the pool saw (a buy after SWAP's fee, a sell before it). Equals valueUsdE18 on every leg that is not a trade or cross_leg leg.
data[].legRolestring (trade | route_hop | cross_leg | leverage_open | leverage_exit | loan_exit | liquidation | protocol | convert)What the leg is: the traded token's leg, a routed hop through the main, a cross-pair leg, a leverage open or exit, a hub-loan exit, a liquidation sale, a protocol leg, a conversion.
data[].tradeLogIndexinteger | nullLog index of the swap event that closes the leg's group (legs of one user trade share it within a txHash).
data[].isPresalebooleanA presale (bonding) buy.
data[].userIsProtocolbooleanThe leg's user is a protocol contract (only with include=protocol).
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timestampstring
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].userArgstring | nullThe user argument of the leg (for a hub-loan exit, the hub).
200 Transaction history400 Invalid parameter or cursor401 Missing or invalid credentials: { error, code } (unauthorized | invalid_key).429 Rate limit exceeded: { error, code: "rate_limited" }. X-RateLimit-* headers on every answer.503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/portfolio
Wallet portfolio in USD. Spot holdings of BASIS tokens (each priced through its own main and that main's pair-asset USD source), one balance per pair asset, each main's vault stake net of its loan (a position, not a token balance), open hub and leverage loans net of debt; listed apart and not in the totals: unvested tokens (`vesting`), prediction shares valued at the stored odds (`predictions`) and open Up/Down stakes (`updown`). One chain read: a balanceOf multicall over the tokens and pair assets. Prices are the latest synced trade (Sync rows); vault positions, loans, vesting, market positions and odds and Up/Down bets come from the database. Each holding carries its cost basis and realized P&L from the spot ledger of GET /api/v1/wallet/{address}/pnl: bought tokens only, after fees (costBasis lists every token in that ledger). Every *UsdE18 field is USD × 1e18 as a decimal string, null when unknown: a token with no price has no value, never $1; an unknown line is left out of totalUsdE18 and counted in unpriced. totalUSD covers spot only; totalUsdE18 is all lines. 503 { error, feature: "trading" } on a network with no deployment. holdings[].balance is whole tokens as an exact decimal string (was a float); balanceWei is the raw amount with `decimals`. Removed on 2026-10-09 (chain reads, see the SDK): what can be claimed now (vesting claimable / effectiveTotal, prediction redeem payouts, Up/Down claimable payouts, holder rewards, vault rewards: the whole `claimables` block) and vaults[].earned / collateralWei. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *stringWallet address
FieldTypeDescription
addressstring
deployedbooleanAlways true here: the not-deployed case is the 503.
pairBalancesobject[]
holdingsobject[]
vaultsobject[]Each main's stored vault position (VaultPosition) net of its loan; pending rewards are not counted.
loansobject[]
vestingobject[]Unvested tokens (for example an auto-vested presale buy), from the stored schedules: remaining = totalAmount − claimedAmount, valued at the token's stored price. Not in any total. A liquidated, unsettled vesting loan leaves the stored total too high until repayLoanOnVesting runs (VESTING.effectiveTotalAmount on chain). What is claimable now: VESTING.getClaimableAmount(id).
holdingsCountinteger
totalUsdE18stringUSD × 1e18 of every priced line (spot, pair balances, vaults and loans net of debt). Vesting is not included.
unpricedintegerLines with a balance and no USD price.
usdbnumberDeprecated: removed at the Robinhood cutover. Use the *UsdE18 fields.
tokenValueUSDnumberDeprecated: removed at the Robinhood cutover. Use the *UsdE18 fields.
totalUSDnumberDeprecated: removed at the Robinhood cutover. Use the *UsdE18 fields.
notestring
predictionsobject[]Prediction shares from the PredictionPosition fold (most recent 50 markets), valued at the stored odds: a share is worth probabilityE18 / 1e18 market tokens at the margin, at the market token's stored USD price. A resolved market has no odds value (valueTokens and valueUsdE18 null; its payout is TRANCHE_READER.quoteRedeemUSDB on chain). A market the fold has not reached yet is not listed. Not in any total.
updownobject[]Open Up/Down stakes: bets on rounds the index has not settled (most recent 50 rounds), from the database. Settled rounds are not listed: the rounds to claim are GET /api/v1/wallet/{address}/updown claimableBets, the payout UPDOWN.quoteClaimPayout on chain. Not in any total.
costBasisobjectCost basis and realized P&L of every token in the wallet's spot P&L ledger (the one GET /api/v1/wallet/{address}/pnl uses, closed positions included): average cost, block-time USD, after fees (a buy's cost includes its fee, a sell's proceeds are net of it). Bought tokens only: received tokens are never counted, a sell realizes only its bought part (pro rata over the tokens in the wallet; locked vesting, hub collateral and vault stakes are left out), tokens given away take their cost out unrealized, and the released collateral of a closed leverage counts as bought. A token the ledger cannot follow through a liquidation (a hub, vault or vesting loan) has null figures.
200 Portfolio400 Invalid address401 Missing or invalid credentials: { error, code } (unauthorized | invalid_key).429 Rate limit exceeded: { error, code: "rate_limited" }. X-RateLimit-* headers on every answer.502 A chain read failed (code rpc_failed); with rate-limit headers503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/loans
Loans (me). Alias of /api/v1/wallet/{address}/loans for the authenticated wallet. Loans of a wallet, offset paged.
Auth: Session or API Key
ParamTypeDescription
sourcestring (hub | vault | leverage | vesting)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
hubstringA malformed address answers 400.
tokenstringThe collateral token. One leverage position and one hub loan per wallet per token: with active=true this is the open position of that token. A malformed address answers 400.
activestring (true | false)
statusstring (active | expired | liquidated | repaid | claimable)
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].sourcestring (hub | vault | leverage | vesting)
data[].mainstring
data[].ecosystemstring= main (legacy name).
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].pairSymbolstring | null
data[].loanIdintegerLoan id.
data[].hubIdinteger | null
data[].hubstring | null
data[].hubBorrowerstring | null
data[].coreOwnerstring
data[].isLeverageboolean
data[].vestingIdinteger | null
data[].tokenstringThe collateral token.
data[].collateralAmountRawAmountCollateral-token units (18 decimals).
data[].borrowedAmountRawAmountHistory, raw pair units (`pairAsset`): received when opened (plus adds and increases); never reduced. The debt is fullAmount.
data[].fullAmountRawAmountThe debt. Raw pair units (`pairAsset`).
data[].leverageBuyAmountRawAmount | nullRaw pair units (`pairAsset`).
data[].cashedOutRawAmount | nullRaw pair units (`pairAsset`), gross: received from partial sells of a leverage position. null for a non-leverage loan.
data[].levCashInRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the position's lifetime own cash put in: the open and every add (initialBuy), every repay, partial or full (repayWith counts the pair amount the main took), and extension fees paid in cash.
data[].levCashOutRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the cash paid to the wallet over the position's life: every sale net of the exit fee, and the extra borrowed that a refinancing extension pays out.
data[].levCollateralOutRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the collateral sent back to the wallet (released by repays, the liquidation leftover claimed), each valued at the stored spot price at its block. null when that price is not stored. Lifetime P&L = levCashOut + levCollateralOut + the net of a full close now (after the 3% exit fee) − levCashIn.
data[].liquidatedAmountRawAmount | nullCollateral-token units (18 decimals).
data[].claimableRawAmount | nullCollateral-token units (18 decimals).
data[].claimedRawAmount | nullCollateral-token units (18 decimals).
data[].liquidationClaimRawAmount | nullclaimable − claimed. Collateral-token units (18 decimals).
data[].daysCountinteger | null
data[].liquidationTimeintegerUnix seconds.
data[].expiresAtstring | null
data[].creationTimeintegerUnix seconds.
data[].txHashstring
data[].createdAtstring
data[].updatedAtstring
data[].activeboolean
data[].isLiquidatedboolean
data[].expiredbooleanActive and past liquidationTime.
data[].statusstring (active | expired | liquidated | repaid | claimable)
data[].secondsToLiquidationinteger | null
data[].collateralValueRawAmount | nullPair units, live.
data[].collateralUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].collateralUsdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].debtUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].debtUsdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].claimobject | nullA ready call to claim what a liquidation left; null when nothing is left. A vault loan's liquidation settles itself (no claim).
data[].seizableAfterinteger | nullUnix seconds: the end of the 365-day claim window (liquidation time + 365 days); after it the leftover may no longer be claimable, and the claim then reverts "Nothing to claim". null when nothing is left to claim or the liquidation is not synced.
data[].repayQuoteCall | nullAn open leverage position or hub loan: a ready repay call with amount 2^256-1 (repay all: exactly the debt is taken and the collateral comes back). Put a smaller amount in args[1] for a partial repay (below `fullAmount` the debt drops and the position stays open; 0 reverts "Zero amount"). Approve the pair asset to `to` for at least min(amount, fullAmount). Leverage: main.repayLoan(loanId, amount, true); hub: hub.repayLoan(hubId, amount). null otherwise (vault and vesting loans repay in full through their own contract).
data[].closedAtinteger | nullUnix seconds the loan closed (the contract's timeOfClosure); null while open.
data[].closeReasonstring (repaid | liquidated | sold) | nullWhy the loan closed; null while open.
200 Loans400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/loans/events
Loan events (me). Alias of /api/v1/wallet/{address}/loans/events for the authenticated wallet. Loan events of a wallet, cursor paged, newest first.
Auth: Session or API Key
ParamTypeDescription
sourcestring (hub | vault | leverage | vesting)
actionstring (created | repaid | extended | increased | liquidated | partial_sell | liquidation_claimed | refinance_surplus | liquidation_settled | added | repaid_partial | seized)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
hubstringA loan hub address. A malformed address answers 400.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].sourcestring
data[].actionstring (created | repaid | extended | increased | liquidated | partial_sell | liquidation_claimed | refinance_surplus | liquidation_settled | added | repaid_partial | seized)One of: created, repaid, extended, increased, liquidated, partial_sell, liquidation_claimed, refinance_surplus, liquidation_settled, added, repaid_partial, seized.
data[].loanIdinteger | nullLoan id; null until known.
data[].hubIdinteger | null
data[].mainstring | nullThe loan's main (lower-case address).
data[].hubstring | nullThe loan hub contract for a hub loan; null otherwise.
data[].pairAssetstring | nullThe main's pair asset (lower-case address).
data[].pairDecimalsinteger | null
data[].pairSymbolstring | null
data[].txHashstring
data[].blockNumberinteger
data[].logIndexinteger
data[].usdE18UsdE18 | nullUSD x 1e18 of the row's amount at the block time, stamped at sync (0 RPC): created = borrowed, added = borrowedAdded, increased = the extra borrowed, repaid / repaid_partial = repaid, partial_sell = received (leverage: gross − fee), liquidated = the debt, refinance_surplus = mainPairReceived, liquidation_claimed = the collateral tokens claimed at the token's price. null on extended, seized and liquidation_settled, on a row written after its wallet resolved, and when the price was unknown.
data[].usdSourceUsdSource | nullSource of usdE18 (the main's USD source); null when usdE18 is null.
data[].datastringJSON string. Pair-asset amounts inside it (`borrowed`, `borrowedAmount`, `amountAdded`, `mainPairReceived`, `borrowedPair`, `gross`, `fee`) are raw units of `pairAsset`. `collateralAmount`, `tokenAmount`, `stasisPledged` are token units (18 decimals).
data[].timestampstring
data[].detailsobject | null`data` parsed; null when it does not parse.
200 Loan events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/vault/events
Vault events (me). Alias of /api/v1/wallet/{address}/vault/events for the authenticated wallet. Vault events of a wallet, cursor paged.
Auth: Session or API Key
ParamTypeDescription
actionstring (stake | unstake | claim | compound | liquidation_loss)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
vaultstringA vault address. A malformed address answers 400.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].vaultstringThe vault address (one vault serves every main; `main` names the pool)
data[].mainstringThe vault's main token
data[].actionstring (stake | unstake | claim | compound | liquidation_loss)
data[].amountstringRaw main-token units (18 decimals)
data[].amountOutstring | nullRaw pair units on unstake (pair asset received); raw main units on liquidation_loss (rewards lost)
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timestampstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].amountOutUnitstring (pair | main) | nullpair on unstake, main on liquidation_loss.
200 Vault events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/vault/position
Vault position (me). Alias of /api/v1/wallet/{address}/vault for the authenticated wallet. A wallet's vault stake, pledge and loan, one row per main (one vault serves every main; ?main= filters). Database only, no chain read. Removed on 2026-10-09 (read them on chain): earned (STAKING.earned), freeToUnstake and the deprecated free (STAKING.freeToUnstake), stakeUsdE18 / valueUsdE18 (current price).
Auth: Session or API Key
ParamTypeDescription
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
FieldTypeDescription
walletstring
dataobject[]
data[].mainstring
data[].vaultstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].stakedRawAmountMain units.
data[].principalRawAmount | nullMain units: what the wallet put in, net of withdrawals. The chain does not keep it: the database is the only source.
data[].pledgedRawAmountMain units locked as loan collateral.
data[].hasActiveLoanboolean
data[].hubIdinteger | null
data[].hubstring | null
data[].loanobject | nullThe vault loan from the stored Loan record (the loan fold); null without an open vault loan or before the fold has it.
200 Vault position400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/vesting/events
Vesting events (me). Alias of /api/v1/wallet/{address}/vesting/events for the authenticated wallet. Vesting events, cursor paged. `vestingContract` defaults to every contract (the deployment's only when `vestingId` is given).
Auth: Session or API Key
ParamTypeDescription
vestingContractstringA malformed address answers 400.
vestingIdinteger
actionstring (created | updated | claimed | extended | beneficiary_changed | renounced | creator_transferred | loan_taken | loan_repaid | loan_liquidated)
rolestring (actor | beneficiary | creator | any)Default any.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].chainIdinteger
data[].vestingContractstring
data[].walletstringThe actor of the event
data[].actionstring (created | updated | claimed | extended | beneficiary_changed | renounced | creator_transferred | loan_taken | loan_repaid | loan_liquidated)
data[].vestingIdintegerUnique per vesting contract and chain
data[].creatorstring | null
data[].beneficiarystring | null
data[].mainstring | null
data[].tokenstring | nullCollateral token address
data[].amountstring | nulltotalAmount on created, the claimable amount on claimed
data[].usdE18UsdE18 | nullUSD x 1e18 of `amount` at the block time, stamped at sync: created (tokens locked) and claimed (tokens paid out); null on every other action or when the token had no price then.
data[].usdSourceUsdSource | nullSource of usdE18 (the vesting's main); null when usdE18 is null.
data[].datastring | nullJSON of extra fields (the typed fields below are parsed from it)
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timestampstring
data[].additionalDaysinteger
data[].hubstring
data[].loanIdinteger
data[].borrowedstringRaw pair units of the vesting's main
data[].recoveredstringVested-token units
data[].newTotalAmountstringVested-token units
data[].oldBeneficiarystring
data[].newBeneficiarystring
data[].oldCreatorstring
data[].newCreatorstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].walletPendingbooleanwallet = 0x0: not resolved yet.
200 Vesting events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/me/stats
Wallet summary (me). Alias of /api/v1/wallet/{address}/summary for the authenticated wallet. Counts and totals of a wallet.
Auth: Session or API Key
FieldTypeDescription
walletstring
tradesinteger
volumeUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
volumeUsdCoveredinteger
volumeNinteger
volumeUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows volumeUsdE18 sums (per pair asset); [] when none is priced.
feesPaidUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
feesPaidUsdCoveredinteger
feesPaidNinteger
feesPaidUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows feesPaidUsdE18 sums (per pair asset); [] when none is priced.
referralEarnedUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
referralEarnedUsdCoveredinteger
referralEarnedNinteger
referralEarnedUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows referralEarnedUsdE18 sums (per pair asset); [] when none is priced.
tokensCreatedintegerFrom the chain registry.
marketsCreatedintegerFrom the chain registry.
firstSeenobject | null
agentobject | null
totalTradesinteger
buysinteger
sellsinteger
crossSwapsinteger
leverageOpensinteger
loanSellsinteger
totalPredictionsinteger
bookFillsinteger
upDownBetsinteger
totalLoansinteger
activeLoansinteger
marketWinsinteger
daysActiveinteger
200 Wallet summary401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/me/projects
Wallet projects (me). Alias of /api/v1/wallet/{address}/projects for the authenticated wallet. Tokens and markets a wallet created; each list offset paged. markets[].endTime is unix seconds (null until indexed). Database only, no chain read: totalSupply is the sum of the indexed balances (as on GET /api/v1/tokens/{address}), frozen and presaleComplete are folded on the token's registry row. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: Session or API Key
ParamTypeDescription
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
tokensobject[]
marketsobject[]
tokensPaginationPagination
marketsPaginationPagination
200 Wallet projects400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/me/referrals
My referrals. The same `onchain` block as GET /api/v1/wallet/{address}/referrals, plus the top-level referral fields (who referred you, and the wallets you referred at level 1 and 2, from the on-chain graph; joinedAt = the ReferrerSet block time). Points were removed at the relaunch, so no tier, rank or points fields are returned. Redirected referral payouts are kept apart from the earnings: when the referrer cannot receive the pair asset, TAXES sends the payout to the protocol instead (PayoutRedirected); it is not earned and never in `earnings`. `onchain.redirected` (per pair asset, raw + USD at the event), `onchain.redirectedTotal`, and `onchain.redirects` (the newest 100 records of the window; `redirectsTruncated`; every record is also a `referral_redirected` row of GET /api/v1/wallet/{address}/activity?types=referral). Privacy: wallet addresses remain available, but attached username/avatar fields are null. Named social browsing uses username profiles, without raw wallets.
Auth: Session or API Key
ParamTypeDescription
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
depthinteger
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
onchainobject | nullNull when the TAXES contract is not deployed.
referrerobject | nullWho referred you in the legacy referral, or null.
directCountinteger
indirectCountinteger
referralsobject[]
200 Referrals400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/me/fees
Fees paid (me). Alias of /api/v1/wallet/{address}/fees for the authenticated wallet. Fees the wallet paid, per pair asset and category.
Auth: Session or API Key
ParamTypeDescription
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
byCategorystring (true | false)true: one row per asset and fee category. Any other value than true / false answers 400.
FieldTypeDescription
walletstring
fromstringStart of the window applied
tostringEnd of the window applied
dataobject[]
totalobjecttotalUsdE18 is null unless every row is priced.
relayUnresolvedobject[]
nativeCoinCategoriesstring[]token_creation, vesting_creation: native-coin fees.
data[].pairAssetstring | nullNull while the unit is not known yet. The zero address is the native coin.
data[].symbolstring | null
data[].decimalsinteger | null
data[].nativeCoinboolean
data[].categorystringPresent only with byCategory=true. Older loan_extension rows of a leverage position read leverage_extension.
data[].feesRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].baseFeesRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].retainedRawAmountExcludes creator payouts and creator shares redirected to the CEO.
data[].feesUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].usdCoveredinteger
data[].ninteger
200 Fees paid400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/me/earnings
Creator earnings (me). Alias of /api/v1/wallet/{address}/earnings for the authenticated wallet. Creator payouts and holder rewards of a wallet. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: Session or API Key
ParamTypeDescription
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
FieldTypeDescription
walletstring
fromstringStart of the window applied
tostringEnd of the window applied
dataobject[]
totalobjecttotalUsdE18 is null unless every row is priced.
byTokenobject[]
redirectedobject[]Creator shares sent to the CEO: earned by nobody.
holderRewardsobject[]
holderRewardsTotalobjecttotalUsdE18 is null unless every row is priced.
data[].pairAssetstring | nullNull while the unit is not known yet.
data[].symbolstring | null
data[].decimalsinteger | null
data[].amountRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].amountUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].usdCoveredinteger
data[].ninteger
200 Creator earnings400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/markets
A wallet's market positions, any wallet (MK-8). Every market the wallet created, bet, traded, listed or redeemed in, latest activity first (created-only markets last). `shares` per outcome come from the PredictionPosition fold of the stored rows (seed, bets, book fills, redeems; `sharesSource` index), or live (READER.getAllUserShares, `sharesSource` live) for a market the fold has not reached yet; they include sharesInOrders. `resolved` is the folded Market column. `cost` / `costUsdE18` are every buy (bets, book buys, the creator's seed split seed / n, dust to outcome 0); `costBasis` / `costBasisUsdE18` are the fold's average cost of the shares still held; `costComplete` is false when a buy's pair value was unknown, so costBasis leaves that buy out (the field and meaning of GET /api/v1/markets/{address}/holders). The creator's seed carries its USD at the seed block (Market.seedUsdE18), split into costUsdE18 the same way. Database only, except shares of a market the fold has not reached yet. What a resolved market still pays out is a chain read (removed on 2026-10-09): TRANCHE_READER.quoteRedeemUSDB(host, market, user) + REDEMPTION_READER.quoteRedemption(market, tokenPayout), then HOST.redeem(market, fractionBps, slices, minOut). Paged in the database, latest activity first (a market the wallet only created, with no dated activity, sorts last). The indexed `status` is derived from the folded resolution and the resolver's time windows: ?status= filters the wallet's whole history (the stored part in the database, the open markets' phases computed for every candidate), so paging and `pagination.total` are exact. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: Session or API Key
ParamTypeDescription
address *string
statusstring (active | awaiting_proposal | proposed | proposed_closed | voting | veto_window | disputed | vetoed | awaiting_finalize | resolved | invalidated | unknown)Only markets in this indexed status. An unknown value answers 400 with `allowed`.
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
dataobject[]
paginationPagination
data[].marketTokenstring
data[].hoststring
data[].hostKindstring | null
data[].mainstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].pairSymbolstring | null
data[].namestring | null
data[].symbolstring | null
data[].statusstring (active | awaiting_proposal | proposed | proposed_closed | voting | veto_window | disputed | vetoed | awaiting_finalize | resolved | invalidated | unknown)
data[].statusSourcestring (indexed)
data[].resolvedboolean | null
data[].lastActivityAtstring | null
data[].outcomesobject[]
data[].seedobject | null
data[].soldPairRawAmount | nullBook sales, raw pair, net of fees.
data[].redeemedRawAmountRaw pair asset.
data[].sharesSourcestring (index | live) | null
200 OK400 Bad parameter401 Missing or invalid API key429 Rate limited503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/fees
Fees paid. Fees the wallet paid, per pair asset and category. Alias: /api/v1/me/fees (the authenticated wallet).
Auth: API Key
ParamTypeDescription
address *string
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
byCategorystring (true | false)true: one row per asset and fee category. Any other value than true / false answers 400.
FieldTypeDescription
walletstring
fromstringStart of the window applied
tostringEnd of the window applied
dataobject[]
totalobjecttotalUsdE18 is null unless every row is priced.
relayUnresolvedobject[]
nativeCoinCategoriesstring[]token_creation, vesting_creation: native-coin fees.
data[].pairAssetstring | nullNull while the unit is not known yet. The zero address is the native coin.
data[].symbolstring | null
data[].decimalsinteger | null
data[].nativeCoinboolean
data[].categorystringPresent only with byCategory=true. Older loan_extension rows of a leverage position read leverage_extension.
data[].feesRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].baseFeesRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].retainedRawAmountExcludes creator payouts and creator shares redirected to the CEO.
data[].feesUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].usdCoveredinteger
data[].ninteger
200 Fees paid400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/referrals
Referrals. On-chain referral tree and earnings of a wallet. The `points` counts (hasReferrer, directCount, indirectCount) are read from the same on-chain graph. Redirected referral payouts are kept apart from the earnings: when the referrer cannot receive the pair asset, TAXES sends the payout to the protocol instead (PayoutRedirected); it is not earned and never in `earnings`. `onchain.redirected` (per pair asset, raw + USD at the event), `onchain.redirectedTotal`, and `onchain.redirects` (the newest 100 records of the window; `redirectsTruncated`; every record is also a `referral_redirected` row of GET /api/v1/wallet/{address}/activity?types=referral).
Auth: API Key
ParamTypeDescription
address *string
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
depthinteger
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
onchainobject | nullNull when the TAXES contract is not deployed.
pointsobject
200 Referrals400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/earnings
Creator earnings. Creator payouts and holder rewards of a wallet. Alias: /api/v1/me/earnings (the authenticated wallet). Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *string
fromstringWindow start (default: the beginning). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
tostringWindow end (default: now). Unix seconds (a value above 1e12 is read as unix milliseconds, for older callers; an ISO 8601 date is accepted too).
FieldTypeDescription
walletstring
fromstringStart of the window applied
tostringEnd of the window applied
dataobject[]
totalobjecttotalUsdE18 is null unless every row is priced.
byTokenobject[]
redirectedobject[]Creator shares sent to the CEO: earned by nobody.
holderRewardsobject[]
holderRewardsTotalobjecttotalUsdE18 is null unless every row is priced.
data[].pairAssetstring | nullNull while the unit is not known yet.
data[].symbolstring | null
data[].decimalsinteger | null
data[].amountRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].amountUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].usdCoveredinteger
data[].ninteger
200 Creator earnings400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/loans
Loans. Loans of a wallet, offset paged. Alias: /api/v1/loans (the authenticated wallet).
Auth: API Key
ParamTypeDescription
address *string
sourcestring (hub | vault | leverage | vesting)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
hubstringA malformed address answers 400.
tokenstringThe collateral token. One leverage position and one hub loan per wallet per token: with active=true this is the open position of that token. A malformed address answers 400.
activestring (true | false)
statusstring (active | expired | liquidated | repaid | claimable)
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].sourcestring (hub | vault | leverage | vesting)
data[].mainstring
data[].ecosystemstring= main (legacy name).
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].pairSymbolstring | null
data[].loanIdintegerLoan id.
data[].hubIdinteger | null
data[].hubstring | null
data[].hubBorrowerstring | null
data[].coreOwnerstring
data[].isLeverageboolean
data[].vestingIdinteger | null
data[].tokenstringThe collateral token.
data[].collateralAmountRawAmountCollateral-token units (18 decimals).
data[].borrowedAmountRawAmountHistory, raw pair units (`pairAsset`): received when opened (plus adds and increases); never reduced. The debt is fullAmount.
data[].fullAmountRawAmountThe debt. Raw pair units (`pairAsset`).
data[].leverageBuyAmountRawAmount | nullRaw pair units (`pairAsset`).
data[].cashedOutRawAmount | nullRaw pair units (`pairAsset`), gross: received from partial sells of a leverage position. null for a non-leverage loan.
data[].levCashInRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the position's lifetime own cash put in: the open and every add (initialBuy), every repay, partial or full (repayWith counts the pair amount the main took), and extension fees paid in cash.
data[].levCashOutRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the cash paid to the wallet over the position's life: every sale net of the exit fee, and the extra borrowed that a refinancing extension pays out.
data[].levCollateralOutRawAmount | nullLeverage only (null for a hub, vault or vesting loan). Raw pair units (`pairAsset`): the collateral sent back to the wallet (released by repays, the liquidation leftover claimed), each valued at the stored spot price at its block. null when that price is not stored. Lifetime P&L = levCashOut + levCollateralOut + the net of a full close now (after the 3% exit fee) − levCashIn.
data[].liquidatedAmountRawAmount | nullCollateral-token units (18 decimals).
data[].claimableRawAmount | nullCollateral-token units (18 decimals).
data[].claimedRawAmount | nullCollateral-token units (18 decimals).
data[].liquidationClaimRawAmount | nullclaimable − claimed. Collateral-token units (18 decimals).
data[].daysCountinteger | null
data[].liquidationTimeintegerUnix seconds.
data[].expiresAtstring | null
data[].creationTimeintegerUnix seconds.
data[].txHashstring
data[].createdAtstring
data[].updatedAtstring
data[].activeboolean
data[].isLiquidatedboolean
data[].expiredbooleanActive and past liquidationTime.
data[].statusstring (active | expired | liquidated | repaid | claimable)
data[].secondsToLiquidationinteger | null
data[].collateralValueRawAmount | nullPair units, live.
data[].collateralUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].collateralUsdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].debtUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].debtUsdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].claimobject | nullA ready call to claim what a liquidation left; null when nothing is left. A vault loan's liquidation settles itself (no claim).
data[].seizableAfterinteger | nullUnix s: closedAt + 365 days for a liquidated loan with an unclaimed leftover; null otherwise.
data[].repayQuoteCall | nullAn open leverage position or hub loan: a ready repay call with amount 2^256-1 (repay all: exactly the debt is taken and the collateral comes back). Put a smaller amount in args[1] for a partial repay (below `fullAmount` the debt drops and the position stays open; 0 reverts "Zero amount"). Approve the pair asset to `to` for at least min(amount, fullAmount). Leverage: main.repayLoan(loanId, amount, true); hub: hub.repayLoan(hubId, amount). null otherwise (vault and vesting loans repay in full through their own contract).
data[].closedAtinteger | nullUnix seconds the loan closed (the contract's timeOfClosure); null while open.
data[].closeReasonstring (repaid | liquidated | sold) | nullWhy the loan closed; null while open.
200 Loans400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/loans/events
Loan events. Loan events of a wallet, cursor paged, newest first. Alias: /api/v1/loans/events (the authenticated wallet).
Auth: API Key
ParamTypeDescription
address *string
sourcestring (hub | vault | leverage | vesting)
actionstring (created | repaid | extended | increased | liquidated | partial_sell | liquidation_claimed | refinance_surplus | liquidation_settled | added | repaid_partial | seized)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
hubstringA loan hub address. A malformed address answers 400.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].sourcestring
data[].actionstring (created | repaid | extended | increased | liquidated | partial_sell | liquidation_claimed | refinance_surplus | liquidation_settled | added | repaid_partial | seized)One of: created, repaid, extended, increased, liquidated, partial_sell, liquidation_claimed, refinance_surplus, liquidation_settled, added, repaid_partial, seized.
data[].loanIdinteger | nullLoan id; null until known.
data[].hubIdinteger | null
data[].mainstring | nullThe loan's main (lower-case address).
data[].hubstring | nullThe loan hub contract for a hub loan; null otherwise.
data[].pairAssetstring | nullThe main's pair asset (lower-case address).
data[].pairDecimalsinteger | null
data[].pairSymbolstring | null
data[].txHashstring
data[].blockNumberinteger
data[].logIndexinteger
data[].usdE18UsdE18 | nullUSD x 1e18 of the row's amount at the block time, stamped at sync (0 RPC): created = borrowed, added = borrowedAdded, increased = the extra borrowed, repaid / repaid_partial = repaid, partial_sell = received (leverage: gross − fee), liquidated = the debt, refinance_surplus = mainPairReceived, liquidation_claimed = the collateral tokens claimed at the token's price. null on extended, seized and liquidation_settled, on a row written after its wallet resolved, and when the price was unknown.
data[].usdSourceUsdSource | nullSource of usdE18 (the main's USD source); null when usdE18 is null.
data[].datastringJSON string. Pair-asset amounts inside it (`borrowed`, `borrowedAmount`, `amountAdded`, `mainPairReceived`, `borrowedPair`, `gross`, `fee`) are raw units of `pairAsset`. `collateralAmount`, `tokenAmount`, `stasisPledged` are token units (18 decimals).
data[].timestampstring
data[].detailsobject | null`data` parsed; null when it does not parse.
200 Loan events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/vaults
Vaults. One row per live main. Since the next deploy ONE vault serves every main (every row names the same `vault`); each main has its own pool: stake, pledges, rewards, yield and APR are per main. minStake and pools(main) are one multicall, shared for 15 s.
Auth: API Key
ParamTypeDescription
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
FieldTypeDescription
dataobject[]
data[].mainstring
data[].vaultstring
data[].pairAssetstring
data[].pairDecimalsinteger
data[].pairSymbolstring
data[].minStakeRawAmount | nullLive, vault-wide (the same for every main), cached 15 s; null when the read fails.
data[].totalStakedRawAmount | nullMain, live from pools(main), cached 15 s; null when the read fails.
data[].totalPledgedRawAmount | nullMain, live from pools(main), cached 15 s; null when the read fails.
data[].yield7dRawAmountMain.
data[].yield30dRawAmountMain.
data[].yield7dPairRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yield30dPairRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yield7dUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].yield30dUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].yield30dUsdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].injections7dinteger
data[].injections30dinteger
data[].aprBpsinteger | null
data[].aprBasisstring (current_total_staked)
data[].lastLiquidationobject | null
data[].rewardsHeldRawAmount | nullMain, live from pools(main), cached 15 s: rewards accrued and not yet claimed or compounded; null when the read fails.
200 Vaults400 Invalid parameter401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/vault
Vault position. A wallet's vault stake, pledge and loan, one row per main (one vault serves every main; ?main= filters). Database only, no chain read. Alias: /api/v1/vault/position (the authenticated wallet). Removed on 2026-10-09 (read them on chain): earned (STAKING.earned), freeToUnstake and the deprecated free (STAKING.freeToUnstake), stakeUsdE18 / valueUsdE18 (current price).
Auth: API Key
ParamTypeDescription
address *string
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
FieldTypeDescription
walletstring
dataobject[]
data[].mainstring
data[].vaultstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].stakedRawAmountMain units.
data[].principalRawAmount | nullMain units: what the wallet put in, net of withdrawals. The chain does not keep it: the database is the only source.
data[].pledgedRawAmountMain units locked as loan collateral.
data[].hasActiveLoanboolean
data[].hubIdinteger | null
data[].hubstring | null
data[].loanobject | nullThe vault loan from the stored Loan record (the loan fold); null without an open vault loan or before the fold has it.
200 Vault position400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/vault/events
Vault events. Vault events of a wallet, cursor paged. Alias: /api/v1/vault/events (the authenticated wallet).
Auth: API Key
ParamTypeDescription
address *string
actionstring (stake | unstake | claim | compound | liquidation_loss)
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
vaultstringA vault address. A malformed address answers 400.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].walletstring
data[].vaultstringThe vault address (one vault serves every main; `main` names the pool)
data[].mainstringThe vault's main token
data[].actionstring (stake | unstake | claim | compound | liquidation_loss)
data[].amountstringRaw main-token units (18 decimals)
data[].amountOutstring | nullRaw pair units on unstake (pair asset received); raw main units on liquidation_loss (rewards lost)
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timestampstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].amountOutUnitstring (pair | main) | nullpair on unstake, main on liquidation_loss.
200 Vault events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/vesting/events
Vesting events. Vesting events, cursor paged. `vestingContract` defaults to every contract (the deployment's only when `vestingId` is given). Alias: /api/v1/vesting/events (the authenticated wallet).
Auth: API Key
ParamTypeDescription
address *string
vestingContractstringA malformed address answers 400.
vestingIdinteger
actionstring (created | updated | claimed | extended | beneficiary_changed | renounced | creator_transferred | loan_taken | loan_repaid | loan_liquidated)
rolestring (actor | beneficiary | creator | any)Default any.
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].chainIdinteger
data[].vestingContractstring
data[].walletstringThe actor of the event
data[].actionstring (created | updated | claimed | extended | beneficiary_changed | renounced | creator_transferred | loan_taken | loan_repaid | loan_liquidated)
data[].vestingIdintegerUnique per vesting contract and chain
data[].creatorstring | null
data[].beneficiarystring | null
data[].mainstring | null
data[].tokenstring | nullCollateral token address
data[].amountstring | nulltotalAmount on created, the claimable amount on claimed
data[].usdE18UsdE18 | nullUSD x 1e18 of `amount` at the block time, stamped at sync: created (tokens locked) and claimed (tokens paid out); null on every other action or when the token had no price then.
data[].usdSourceUsdSource | nullSource of usdE18 (the vesting's main); null when usdE18 is null.
data[].datastring | nullJSON of extra fields (the typed fields below are parsed from it)
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timestampstring
data[].additionalDaysinteger
data[].hubstring
data[].loanIdinteger
data[].borrowedstringRaw pair units of the vesting's main
data[].recoveredstringVested-token units
data[].newTotalAmountstringVested-token units
data[].oldBeneficiarystring
data[].newBeneficiarystring
data[].oldCreatorstring
data[].newCreatorstring
data[].pairAssetstring | null
data[].pairDecimalsinteger | null
data[].walletPendingbooleanwallet = 0x0: not resolved yet.
200 Vesting events400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.
GET
/api/v1/wallet/{address}/activity
Wallet activity. Every kind of activity of a wallet in one cursor-paged feed, newest first: ONE keyset query over every table, so a page is exact and an older row is never dropped (it is on a later page). A book fill is listed once (type `book_fill`; MarketBookFill carries buyer and seller); MarketEvent `order_filled` rows are not returned as type `market`. `fee` = fees the wallet paid (FeePaid; the payer, or the wallet behind a relay payer), `referral` = its referrer link (referrer_set), referral payouts it received (referral_paid) and referral payouts it could not receive, sent to the protocol instead (referral_redirected, not earned), `creator_payout` = creator fees it received, `reward_claim` = holder rewards it claimed, `transfer` = wallet-to-wallet token transfers (action `sent` | `received`; the other side is neither the zero address nor a BASIS contract), `create` = tokens and markets the wallet created (action `token_created` | `market_created`; a market names its seed in `amounts` and its USD). Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *string
typesstringComma list of trade, swap, prediction, book_fill, loan, vault, vesting, market, referral, updown, fee, creator_payout, reward_claim, transfer, create (default: all).
cursorCursor`blockNumber:logIndex` from `pagination.nextCursor`.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
dataobject[]
paginationPagination
data[].typestring (trade | swap | prediction | book_fill | loan | vault | vesting | market | referral | updown | fee | creator_payout | reward_claim | transfer | create | liquidation)
data[].actionstringWhat happened, per type (e.g. referral: referrer_set, referral_paid, referral_redirected; creator_payout: creator_paid; create: token_created, market_created).
data[].tablestring
data[].txHashstring
data[].blockNumberinteger
data[].logIndexinteger
data[].timestring
data[].userstring | null
data[].tokenstring | null
data[].mainstring | null
data[].amountsobject[]
data[].valueUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].detailsobject | nullTable-specific fields (keys vary by type and action; addresses lower case, amounts raw decimal strings). trade {legRole, price, userArg}; swap {valueUsdOutE18, mainOut}; prediction {host, outcomeId}; book_fill {host, orderId, outcomeId, buyer, seller}; loan {source, loanId, hubId, hub, pairAsset, pairDecimals, pairSymbol, …the LoanEvent data keys}; vault {vault}; vesting {vestingContract, vestingId, creator, beneficiary, …the VestingEvent data keys}; market {host, outcomeId, round, ranking, walletIsActor, …}; referral: referral_paid {trader, level}, referral_redirected {sentTo: "platform", feeLogIndex} (a referral payout the wallet could not receive, sent to the protocol instead: not earned), referrer_set {referrer}; updown bet {contract, asset, tf, roundId, side}; updown claim {contract, asset, tf, roundId, won, stake, tokens, remaining}; fee {source, sourceRole, payerResolved, trade}; liquidation {source, loanId, hubId, isLeverage}; creator_payout {feeLogIndex}; transfer {from, to}; create {kind}; null for reward_claim. A create row of a market carries its seed in amounts (role seed, in its main's pair asset) and the seed's USD at the seed block in valueUsdE18.
200 Activity400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/tx/{hash}
Transaction. What the index holds for one transaction. Rows are ActivityRow (plus types fee, liquidation). A book fill is listed once (type `book_fill`; MarketBookFill carries buyer and seller); MarketEvent `order_filled` rows are not returned as type `market`. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
hash *string
FieldTypeDescription
txHashstring
statusstring (synced | partial | reverted | ignored | dropped | not_synced)
blockNumberinteger | null
timestring | nullBlock time (ISO 8601); null when not_synced.
fromstring | nullTransaction sender. Null for keeper liquidation transactions (sent to the liquidator or holding a Liquidation row): the keeper address is not published.
tostring | null
basisLogsinteger | null
confirmedboolean | nullTrue once the index has seen the tx at least the confirmation depth deep (15 blocks on BSC, about 10 s on Robinhood) in the same block (at its sync, or at the recheck after a later POST /api/v1/sync). A partial tx can be confirmed: it is about the block, not the projection. null when not_synced.
lastSyncedAtstring | nullWhen the index last wrote or rechecked the tx (ISO 8601). It also moves when a recheck leaves the tx unconfirmed, so it is not only the time of the last projection. null when not_synced.
rowsobject[]
200 Transaction400 Invalid transaction hash (invalid_hash)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/summary
Wallet summary. Counts and totals of a wallet. Alias: /api/v1/me/stats (the authenticated wallet). `marketsCreated` leaves out invite-only markets the caller may not see (GET /api/v1/markets explains the rule); the wallet's own view counts them all.
Auth: API Key
ParamTypeDescription
address *string
FieldTypeDescription
walletstring
tradesinteger
volumeUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
volumeUsdCoveredinteger
volumeNinteger
volumeUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows volumeUsdE18 sums (per pair asset); [] when none is priced.
feesPaidUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
feesPaidUsdCoveredinteger
feesPaidNinteger
feesPaidUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows feesPaidUsdE18 sums (per pair asset); [] when none is priced.
referralEarnedUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
referralEarnedUsdCoveredinteger
referralEarnedNinteger
referralEarnedUsdSourcesstring (fixed | feed | hop | offchain)[]USD sources of the priced rows referralEarnedUsdE18 sums (per pair asset); [] when none is priced.
tokensCreatedintegerFrom the chain registry.
marketsCreatedintegerFrom the chain registry. Invite-only markets the caller may not see are left out.
firstSeenobject | null
agentobject | null
totalTradesinteger
buysinteger
sellsinteger
crossSwapsinteger
leverageOpensinteger
loanSellsinteger
totalPredictionsinteger
bookFillsinteger
upDownBetsinteger
totalLoansinteger
activeLoansinteger
marketWinsinteger
daysActiveinteger
200 Wallet summary400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/projects
Wallet projects. Tokens and markets a wallet created; each list offset paged. Alias: /api/v1/me/projects (the authenticated wallet). markets[].endTime is unix seconds (null until indexed). Database only, no chain read: totalSupply is the sum of the indexed balances (as on GET /api/v1/tokens/{address}), frozen and presaleComplete are folded on the token's registry row. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *string
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
tokensobject[]
marketsobject[]
tokensPaginationPagination
marketsPaginationPagination
200 Wallet projects400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/roles
Wallet roles. Whitelists and private-market roles of a wallet. `whitelists`: the frozen-token whitelists that hold it now (the folded whitelist), newest first. `privateMarkets`: its voter and buyer roles, from the newest MarketVoterSet / PrivateBuyerSet per (market, role) over its whole history, active roles only, latest change first. Each list holds at most 1000 rows: `whitelistsTotal` / `privateMarketsTotal` count every row and `whitelistsTruncated` / `privateMarketsTruncated` say a list was cut. Invite-only markets the caller may not see are left out, totals included (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *string
FieldTypeDescription
walletstring
whitelistsobject[]
whitelistsTotalintegerEvery current whitelist of the wallet (the list holds at most 1000, newest first).
whitelistsTruncatedbooleantrue when `whitelists` was cut at 1000.
privateMarketsobject[]
privateMarketsTotalintegerEvery active private-market role row of the wallet (the list holds at most 1000).
privateMarketsTruncatedbooleantrue when `privateMarkets` was cut at 1000.
200 Roles400 Invalid parameter (codes: invalid_address, invalid_main, invalid_hub, invalid_window, invalid_depth, ...)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/followers
Wallet followers. The wallets that follow this one on BASIS (the profile social graph), newest follow first, offset paged with a total. Read only: follow and unfollow happen in the dapp. The counts are on GET /api/v1/profile/{wallet}. Privacy: wallet addresses remain available, but attached username/avatar fields are null. Named social browsing uses username profiles, without raw wallets.
Auth: API Key
ParamTypeDescription
address *string
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
dataobject[]
paginationPagination
data[].walletstring
data[].usernamestring | nullProfile username (UserProfile); null when none.
data[].avatarUrlstring | nullProfile avatar; null when none.
data[].followedAtinteger | nullUnix seconds of the follow.
200 Followers400 Invalid address (invalid_address) or page / offset / limit (bad_param)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/following
Wallets followed. The wallets this one follows on BASIS (the profile social graph), newest follow first, offset paged with a total. Read only: follow and unfollow happen in the dapp. The counts are on GET /api/v1/profile/{wallet}. Privacy: wallet addresses remain available, but attached username/avatar fields are null. Named social browsing uses username profiles, without raw wallets.
Auth: API Key
ParamTypeDescription
address *string
pageinteger1-based page. A strict integer; page × limit past 1,000,000 answers 400.
offsetintegerAlternative to page: rows to skip (rounded down to a page start). A strict integer, at most 1,000,000.
limitintegerA strict integer ("2.5" or "12abc" answer 400); values above 100 are clamped to 100.
FieldTypeDescription
walletstring
dataobject[]
paginationPagination
data[].walletstring
data[].usernamestring | nullProfile username (UserProfile); null when none.
data[].avatarUrlstring | nullProfile avatar; null when none.
data[].followedAtinteger | nullUnix seconds of the follow.
200 Following400 Invalid address (invalid_address) or page / offset / limit (bad_param)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/wallet/{address}/pnl
Wallet P&L. P&L of a wallet after fees from the profile P&L engine (cached 60 s), counting BOUGHT tokens only: the sum of three parts, each also served on its own. spot: the indexed BASIS spot trades (ASwap trades and their pool legs, a main bought directly with another token); a swap's cost is what the wallet paid and its proceeds what it received, in USD at the time, so the fees it paid are inside; open positions at the latest stored price x the bought quantity still held (no sell fee, no price impact, no chain read). Bought tokens only: tokens received (a vesting someone made for the wallet, a plain transfer in, a vault reward: anything that is not a trade) are kept apart and never counted; a sale is split pro rata between the bought and the received tokens in the wallet (locked vesting and hub collateral are left out) and only the bought part counts (its cost and its share of the proceeds); tokens given away (a transfer out, a vesting made for someone else, tokens spent on a bet) take their share of the cost out without realizing anything. Received or given tokens never make a wallet incomplete. predictions: per market, bets, book buys and the creator's seed are costs, book sales and redeems are proceeds (USD at the time); open shares at the stored odds x the market token's stored price; once a winner-take-all market is resolved its losing shares close at 0; the shares a wallet still holds on a resolved (or invalidated) market are valued at what a redeem pays it now (chain read: TrancheReader.quoteRedeemUSDB), else at the payout per share the market's redeems show, else at the last odds (counted in estimated). updown: per round, the stake (USD at bet time) against payouts and refunds (USD at the claim); a lost stake is realized at the settlement; open bets and unclaimed wins are held at cost. week / month = rolling 7 / 30 days, marked to market at the window start: a position held then starts the window at its value then; the P&L is what was realized in the window plus the change in value (tokens given away in the window take their start value out, no loss). feesUsdE18 counts the fees of every item, withheld ones included. Unknown cost or USD is withheld, never counted as 0 or as profit: an item whose history or price is missing is left out of the totals and counted in missingItems; totalUsdE18 is then null and the priced* fields sum the counted items. It excludes loans, leverage and vault yield: none of them is in any total or part. For a leverage position's result use GET /api/v1/wallet/{address}/loans: levCashIn, levCashOut and levCollateralOut (its lifetime cash flows; P&L = levCashOut + levCollateralOut + the net of a full close now - levCashIn). The same engine ranks GET /api/v1/stats/leaderboard?metric=pnl. Invite-only markets the caller may not see are left out (GET /api/v1/markets explains the rule); a wallet's own rows always show to that wallet.
Auth: API Key
ParamTypeDescription
address *string
periodstring (week | month | all)
FieldTypeDescription
walletstring
periodstring (week | month | all)
asOfintegerUnix seconds of the answer (the engine caches 60 s).
totalUsdE18UsdE18 | nullP&L after fees = spot + predictions + updown, realized + unrealized, USD x 1e18 (may be negative); null when an item is withheld (complete false).
realizedUsdE18UsdE18 | nullRealized P&L in the period; null when an item is withheld.
unrealizedUsdE18UsdE18 | nullChange in unrealized P&L over the period (all: open positions at their value less their cost); null when an item is withheld.
pricedSubtotalUsdE18UsdE18 | nullrealized + unrealized over the counted items only (withheld items left out); never null.
pricedRealizedUsdE18UsdE18 | nullRealized P&L over the counted items; never null.
pricedUnrealizedUsdE18UsdE18 | nullUnrealized change over the counted items; never null.
feesUsdE18UsdE18 | nullFees paid in the period on what is counted, USD x 1e18. Already inside the P&L (a cost paid or proceeds received net of fees), shown apart; null when a fee's USD is unknown.
completebooleanNo item withheld (missingItems is 0).
tradesintegerTrades in the period: spot buys and sells, prediction bets and book fills, Up/Down bets.
itemsintegerItems: tokens (spot), markets (predictions), rounds (Up/Down).
missingItemsintegerItems withheld: unknown cost or USD (missingHistory) or no price (missingPrices).
missingHistoryintegerItems whose cost or USD is unknown: a trade with no USD, a liquidation of the collateral; a bet, redeem or claim with no USD; a market sale larger than the known position. Tokens received or given away (transfers, vestings, vault rewards, tokens spent on a bet) never count here: they are left out of the P&L (bought tokens only).
missingPricesintegerItems with no stored price at the period's start or end.
estimatedintegerCounted items valued at an estimate: a resolved market's unredeemed shares at the last odds (when no redeem shows the payout per share), an Up/Down win or refund not claimed yet (at cost).
tokensintegerSpot: tokens the wallet traded (as before; items counts every part).
missingTokensintegerSpot: tokens withheld (as before; missingItems counts every part).
spotobjectSpot trades after fees. Also carries tokens and missingTokens (= items, missingItems).
predictionsobjectPrediction markets (public and private): items are markets.
updownobjectUp/Down: items are rounds; unrealized is always 0 (open bets at cost).
usdSourcesstring (fixed | feed | hop | offchain)[]The USD sources of the counted tokens' mains.
positionsobject[]The spot part per token, after fees, largest priced P&L first.
marketsobject[]The predictions part per market, largest priced P&L first.
200 P&L400 Invalid address (invalid_address) or period (bad_param, with `allowed`)401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/vaults/history
Vault history. The vault's stake flows and yield over time for one main, from the stored events (Staked, Unstaked, RewardsCompounded, RewardsClaimed, LiquidationProcessed, YieldInjected, YieldToOwner); no chain read. A bucket is listed only when something happened in it; totalStaked / totalYieldMainAdded are running totals over all stored history at the end of the bucket.
Auth: API Key
ParamTypeDescription
mainstringA main key (e.g. stasis-usdb) or a main address. An unknown value answers 400 invalid_main.
intervalstring (1h | 4h | 1d)
fromintegerUnix seconds (milliseconds accepted). Default: 90 intervals before `to`.
tointegerUnix seconds (milliseconds accepted). Default: now. At most 1000 buckets end at `to`.
FieldTypeDescription
mainstring
pairAssetstring | null
pairDecimalsinteger | null
pairSymbolstring | null
intervalstring
frominteger
tointeger
countinteger
dataobject[]
data[].timeintegerBucket start, unix s (UTC).
data[].stakedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].unstakedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].compoundedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].claimedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].liquidationLossRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yieldPairRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yieldMainAddedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yieldToOwnerPairRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].yieldUsdE18UsdE18 | nullUSD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource.
data[].totalStakedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
data[].totalYieldMainAddedRawAmountRaw on-chain integer as a decimal string, in the units of the asset named beside it (pairDecimals, 18 for BASIS tokens).
200 Buckets400 Invalid parameter401 Missing or invalid API key429 Rate limit exceeded503 Not deployed on this network: { error, code: "not_deployed", feature }.