TL;DR
CallGET /v1/earnings to obtain a complete financial statement for any reporting period. Select account and vault, then choose your start and end dates.
For each period in data[], read the following fields in each assets[] entry:
- Total Balance:
totalValue = positionValue + redemptionReceivable - Shares vs Value:
sharesrepresents the vault LP share token balance (shareTokenunit), whilepositionValuerepresents those shares valued in underlying assets (shares × PPS,assetunit). - Pending Redemption Units:
redemptionReceivableis denominated in underlying asset units (asset), NOT share tokens. Upon redemption, shares are burned/locked and the exact asset claim is deposited into the CooldownVault, so it sums directly withpositionValue. - Cost Basis: Tracks historical acquisition cost of active shares using pro-rata moving average cost.
- Unrealized PnL Change: A period flow (
closing - opening), whereasopening.unrealizedPnlandclosing.unrealizedPnlare boundary balance sheet stocks. - Rate conventions: Present
return.periodRateandreturn.aprfirst.return.apyis computed for every period with a defined return; below 7 days it is a hypothetical annual extrapolation, so preferreturn.aprandreturn.periodRatefor short windows. - Preserve nulls: Check
quality.statusandquality.reasons. Missing historical evidence leaves dependent fields asnull. Preserve thesenulls rather than converting them to zero.
API Request & Response Field Reference
Key request parameters and response fields for the unified financial endpointsGET /v1/balances and GET /v1/earnings. For the interactive OpenAPI specification and live testing, see the Scalar API reference.
Unit System
All numerical quantities in SuperEarn adhere to rigorous unit definitions:GET /v1/balances (Point-in-Time Balance Snapshot)
Queries asset valuation and balance composition at a specific confirmed block (for balance sheet reporting).
Request Parameters
Response Fields (data[].assets[])
GET /v1/earnings (Period PnL and Returns)
Queries balance sheet changes, capital flows, realized/unrealized PnL, and period returns across any interval (for income statement reporting).
Request Parameters
Response Fields (data[].assets[])
The 4 core audit invariants
The SuperEarn accounting model operates on 4 core audit invariants. Partner finance teams and external auditors can use these identities to independently verify and reconcile balances, flows, and cost basis.- Call
GET /v1/earningswithinterval=alland astartat or before the account’s first activity, so thatopening.totalValueis 0. TakestartfromopenedAtonGET /v1/accounts/{account}/positions(any earlier instant also works) and setendto the reporting boundary. The row’sinflows,outflowsandpnlare then the lifetime totals. inflowsandoutflowsare netted per transaction, recognize withdrawals when the redemption claim is paid, and in wallet scope include share transfers valued at the vault share value at the transfer operation. They are not total cash deposited or withdrawn. For a custody migration, the migrated shares enter the receiver’sinflowsat value: e.g. an inflow of 21,509,075.692925 = carried cost 21,503,019.316660 + embedded gain 6,056.376265, where the gain is reported innetTransferredUnrealizedPnl.nullinflows,outflowsorpnlmean the check is not evaluable for that row (seequality.reasons), not that it failed.- Do not mix these figures with
totalEarningsfrom/v1/accounts/{account}/positions; the two figures are computed differently and do not reconcile. - The lifetime read can take 10 seconds or more uncached; run it as its own request.
Scope
- Resolve the chain-qualified
vault.idthrough/v1/vaults; retain inactive holdings. - Each asset has its own
{chainId, address, decimals}. Combine amounts only within that identity. - A wallet scope follows its on-chain address. Beneficial-owner consolidation requires verified address ownership, effective dates and transfer links in a separate partner ledger. A transfer alone establishes no common-owner mapping.
- Omitting
accountaggregates holder investment performance. Operator revenue requires a separate accounting scope; strategy gain/loss comes from harvest reports.
One request: a KST daily report
For a September 8 KST close, select the wallet and Vault, September 8–9, a daily interval andAsia/Seoul. Use the earnings reference for the exact request.
Reconcile each asset row
closing.totalValue = opening.totalValue + inflows - outflows + pnl- With complete cost/PnL evidence:
pnl = realizedPnl + unrealizedPnlChange - netTransferredUnrealizedPnl - The example closes at September 9 00:00 KST; the next day opening uses the same boundary.
opening.block/closing.blockidentify the confirmed states strictly before those times.
Change the reporting period
- KST daily/monthly reports follow the selected local calendar. IANA zones track DST; fixed offsets keep a constant clock rule.
- For daily/monthly holdings, read every row
openingandclosing; useinterval=hourfor hourly boundaries. A time-weighted average holding needs a separate calculation policy. - Query any full period with
intervalomitted. Matching adjacent TWRs link geometrically:1 + full-period rate = Product(1 + row rate). Require the same scope, valuation, policy and complete evidence; preserve precision and query the whole period for its annual equivalents. - Read every page before closing a report. Preserve the query, response and evidence with the export.
- Exact input combinations, field definitions and error conditions: earnings · balances.
Valuation and return availability
quality for the specific evidence gap. An unavailable rate stays null through annualization; see period return for capital and linking rules.
Claim receivers: The index lacks complete historical receiver lineage, so a canonical range check screens for relevant changes. Wallet periods affected by RedeemReceiverUpdated, including changes out and back, return receiver_change_unsupported: dependent money and rates are null while independently verified boundary holdings, active cost and unrealized balances remain available. receiver_change_collection_pending is retryable; retries reuse stored progress. Reassignment between included receivers remains internal to whole-holder scope.
Boundary value
Snapshots for a requested boundary timestampT are taken at the latest canonical confirmed block strictly before T.
At that block, total balance is the sum of active positions and pending redemptions:
- Free funds:
Free Funds = Reported Total Assets - Effective Locked Profit - Underlying token allocation:
Underlying Amount = floor(Held Shares * Free Funds / Total Supply) - Asset conversion: For wrapper vaults (e.g. EarnUSDT converting through seCDV to USDT), the underlying amount is converted via the underlying vault exact
convertToAssetsat the same block, retaining integer floors before dividing by asset decimals (10^6). - Redemption receivables: Nominal value of uncollected redemption claims.
- Multiply raw shares by free funds, divide by supply once, then convert the resulting underlying amount. The rounded
pricePerSharequote is a diagnostic; multiplying a large holding by that quote loses precision. - EarnUSDT converts through seCDV to USDT at the same block. Each contract conversion retains its integer floor.
- A valid empty vault has zero supply and zero held shares, yielding zero held value. Inconsistent share/supply state is unavailable.
- Free funds exclude effective locked profit; reported assets follow strategy reports. Estimated NAV can include supported strategy estimates before a report. Read the accrual coverage and adjustment rules before financial-statement use.
- Whole-vault valuation converts total supply once; per-wallet floors can produce a different sum.
- Periods are
[t_0, t_1): an event att_0is included; an event att_1enters the next period. - Adjacent periods share the same boundary snapshot. Hourly collection provides reusable boundaries; custom boundaries use verified archive reads.
- Unsupported conversion, unfinalized boundaries or missing evidence return an explicit error.
- Aggregate root assets once. Exclude nested claims already represented in the root valuation.
- Cooldown token conversion remains 1:1, and awaiting liquidity leaves unpaid claims at their nominal contract amounts. Strategy debt and shortfall are reconciled separately in the protocol book. Cooldown principal and settlement.
Cost and recognition
At a boundary, active share valuation separates into acquisition cost and unrealized gain/loss:- Position value (
positionValue): Active shares under the selected valuation basis. - Cost basis (
costBasis): Verified remaining acquisition cost for active shares under the wallet convention (excludes nominal claims). - Unrealized PnL (
unrealizedPnl): Valuation gain or loss relative to cost basis at the boundary.
- For a genuine share transfer, the allocated cost carries over to the receiving wallet.
- For a verified redemption or disposal, the difference between consideration received and allocated cost recognizes as
realizedPnl. - Custody migration (wallet-to-wallet transfer): Moving shares from an old custody wallet to a new custody wallet follows the same generic rule (
wallet-transfer-pro-rata-v1) as any receipt-verified share transfer between any two wallets. SuperEarn keeps no address or entity registry and makes no beneficial-owner assertion. A full-balance transfer moves all remaining cost; a partial transfer movesfloor(cost × shares sent / shares held)and the remainder stays with the sender. A pure transfer is not a disposal, so realized PnL is 0. See FAQ Q3.
PnL decomposition and reconciliation
Total PnL decomposes across realized earnings, valuation changes on remaining holdings, and net embedded gains/losses transferred in or out:- Unrealized PnL Change (
unrealizedPnlChange):Ending Unrealized PnL - Beginning Unrealized PnL - Net Transferred Unrealized PnL (
netTransferredUnrealizedPnl): Net embedded gain/loss entering the scope via share transfers: - Reconciliation residual (
residual): Verified books confirm thatTotal PnL - (Realized PnL + Unrealized PnL Change - Net Transferred Unrealized PnL) = 0. Nonzero residuals suppress return calculations.
Share transfer example
Cost 50 and value 60 move from one wallet to another. Prices stay unchanged and amounts divide exactly. Each row describes that wallet separate period; the receiver redeems in a later period.Example
One wallet, same claim receiver, opening value 110 and cost 100; subsequent prices stay unchanged: | Event | Position value | Cost basis | Unrealized PnL | Redemption receivable | Period effect | | --- | ---: | ---: | ---: | ---: | ---: | --- | | Opening | 110 | 100 | 10 | 0 | Managed balance 110 | | Burn -> fixed claim | 0 | 0 | 0 | 110 | Realized +10; unrealized change -10; PnL 0 | | Unpaid after cooldown | 0 | 0 | 0 | 110 | Claim retains nominal value | | Payment 110 | 0 | 0 | 0 | 0 | Outflow 110; additional PnL 0 | | Accepted-loss settlement: payment 109 | 0 | 0 | 0 | 0 | Request closed; outflow 109; payment loss 1 |Earnings
Period earnings reconcile opening and closing balances with external cash flows under the standard accounting identity:Period return
return.method=time_weighted calculates True Time-Weighted Return (TWR) by breaking the reporting period at each external cash flow:
- Holding sub-periods: Across intervals without external flows, growth is:
- Operation boundaries: At each external flow operation, portfolio values are measured immediately before and after the flow to isolate external capital additions and withdrawals from investment performance.
- Period TWR: All sub-period growth factors link geometrically:
Annualized rates
LetElapsed Seconds be the actual elapsed seconds in the period and Year Seconds = 365 * 86,400 = 31,536,000:
- Linear APR (
return.apr): Standard official annualized rate across all time horizons (1 hour, 1 day, 1 month). - Compound APY (
return.apy): Computed for every period with a defined return, including windows shorter than 7 days. It isnullonly when the period return is unavailable or the annualized result cannot be represented. Below 7 days it is a hypothetical annual equivalent that amplifies harvest and lock-release timing, so a non-nullreturn.apyis not necessarily display-safe. Preferreturn.aprandreturn.periodRatefor short windows, and apply your own display threshold (e.g. hideapywhenend - start < 7 days) if you need one.
PPS APY
/v1/apy targets a trailing seven-day PPS window. Request start/end filter UTC daily observation anchors (at) in [start, end); each row start/end gives the actual trailing measurement window, which can begin before the request range.
Opening PPSandClosing PPSare the observed share prices at the start and end of the trailing measurement window (start/endin the API response).Elapsed Secondsis the actual duration between observations, withYear Seconds = 31,536,000.
Contract interest
Institution/interest uses checkpointed principal and fixed-rate ACT/365 accrual:
T is calculated from the last checkpoint before T:
- Active Accrual Seconds: Elapsed seconds from
max(last checkpoint, start time)tomin(T, maturity). Maturity of 0 means uncapped. - Credited Interest: Change in cumulative interest already credited to the claim ledger (
credited). - Principal & Rate: Checkpointed principal in raw token atoms and annual rate in basis points (100 bps = 1%).
Partner accounting FAQ
Q1: Large withdrawal & $27.5M offset mechanism — Why did unrealized PnL drop while net profit stayed positive?
Q1: Large withdrawal & $27.5M offset mechanism — Why did unrealized PnL drop while net profit stayed positive?
unrealizedPnlChange dropped by -$27.5M, raising concern about an apparent loss.Accounting Reality:
When shares are redeemed, accumulated paper gains are converted into cash. Under the pro-rata moving average cost model:- The unrealized gain bucket decreases by **-27.5M`).
- Simultaneously, the realized gain bucket increases by **+27.5M`).
- The PL identity confirms:
Q2: Redemption receivables — What is their accounting status and why is yield 0% during cooldown?
Q2: Redemption receivables — What is their accounting status and why is yield 0% during cooldown?
redemptionReceivable in the CooldownVault.Accounting Reality:- 100% Principal Protection: The nominal redemption consideration is locked and guaranteed by the protocol. Cross-chain routing and strategy unravelling are internal protocol operations.
- Non-earning Asset: Because the underlying shares were burned at the confirmed block PPS, this capital no longer participates in vault growth. It earns 0% interest during the cooldown waiting period.
- Balance Sheet Classification: On the partner balance sheet,
redemptionReceivableis classified as a short-term financial receivable awaiting settlement, distinct from active earning investments (positionValue).
Q3: Custody migration & multi-wallet transfers — How is cost basis preserved?
Q3: Custody migration & multi-wallet transfers — How is cost basis preserved?
- Generic transfer rule: Every receipt-verified share transfer between any two wallets carries the sender’s pro-rata acquisition cost to the receiver (policy
wallet-transfer-pro-rata-v1). No registration or onboarding step exists: SuperEarn keeps no address or entity registry, and the rule makes no beneficial-owner assertion. A transfer to an unrelated wallet receives the same treatment. - Cost Carryover: A full-balance transfer moves all remaining cost. A partial transfer moves
floor(cost × shares sent / shares held), and the remainder stays with the sender. - Zero Realized PnL: A pure transfer is not a disposal, so
realizedPnlis 0 on both sides. - Both sides in
/v1/earnings: The sender reports the transfer value inoutflowsand a negativenetTransferredUnrealizedPnl(value less carried cost). The receiver reports the same value ininflows, acostBasisincrease equal to the carried cost, and a positivenetTransferredUnrealizedPnlof the same magnitude. Wallet-levelinflows/outflowstherefore include migrations and are not deposit or withdrawal volume. - Worked example: A full-balance migration valued at 21,509,075.692925 carried cost 21,503,019.316660 and embedded gain 6,056.376265. The sender shows
outflows = 21,509,075.692925,costBasis21,503,019.316660 → 0,realizedPnl = 0andnetTransferredUnrealizedPnl = -6,056.376265; the receiver showsnetTransferredUnrealizedPnl = +6,056.376265. - Reason codes: When evidence is missing, the carried cost or the PnL split is
nullandquality.reasonslists the cause:transfer_cost_basis_unverified: the sender’s acquisition cost for the transferred shares is not verified.transfer_evidence_unavailable: the transfer receipt could not be verified.transfer_valuation_unavailable: the value of the transfer at its operation is unavailable.receiver_change_unsupported: a pending redemption’s claim receiver changed in the period; see Claim receivers.redemption_intermediary_cost_unavailable: a Router (redemption transit contract) held pre-existing shares, so transit cost cannot be isolated.
- Before migrating: Claim or settle pending redemptions first. Reassigning a pending redemption’s receiver during a migration returns
receiver_change_unsupportedfor the affected wallet periods. - Activity feed:
GET /v1/accounts/{account}/activityshows a migration only as aSENDorRECEIVEposition row with its share amount;principal,value,earningsandrealizedGainarenull, so read the monetary effect from/v1/earnings.
Q4: Vault lockedProfit buffer & legacy harvestReport — Why is locked profit excluded from official balance/PnL, and how can it be queried?
Q4: Vault lockedProfit buffer & legacy harvestReport — Why is locked profit excluded from official balance/PnL, and how can it be queried?
accountedBy=harvestReport mode existed that included unreleased locked profit in earnings. Why is this excluded from v1 canonical earnings, and how do we query it?Accounting Reality:- In the SuperVault architecture, when a strategy reports earnings via a
harvesttransaction, the profit is placed into alockedProfitbuffer that unlocks linearly over 7 days to protect against sandwich attacks and flash loans. - Why it is excluded from official balance and PnL:
- No legal entitlement at report time (IFRS asset recognition): If a holder redeems shares immediately after harvest, the smart contract settles strictly at PPS (
freeFunds), paying zero locked profit. Recognizing an unredeemable amount as balance/income violates IFRS control and realizability standards. - Share dilution: New deposits over the 7 days acquire shares at current PPS and participate in the remaining unlock, diluting the original holders.
- Ledger integrity: Treating locked profit as balance creates an artificial disposal loss when an investor exits at true contract PPS.
- No legal entitlement at report time (IFRS asset recognition): If a holder redeems shares immediately after harvest, the smart contract settles strictly at PPS (
- How to query this information in v1:
- Audit reconciliation: Add
include=reconciliationto/v1/earningsto receivereportedAssets,lockedProfit, androundingadjustments alongside canonical PPS numbers. - Strategy harvest events: Query
GET /v1/harveststo see verified keeper reports, net gain, assessed fees, and gross report-block wallet allocations. - Real-time venue accruals: Set
valuation=estimated_navon/v1/earningsto inspect live economic yield directly from underlying protocol adapters before root harvest.
- Audit reconciliation: Add
Q5: Linear APR vs compound APY — Why is linear APR the standard for short observation windows?
Q5: Linear APR vs compound APY — Why is linear APR the standard for short observation windows?
return.apr over return.apy on periods under 7 days?Accounting Reality:- Compounding a 1-day or 1-hour return over 365 days involves raising
(1 + R)to the power of 365 or 8,760. Even minor block-timing jitter or discrete harvest events can cause APY to wildly explode (e.g. spike to 300% or drop negative). - Therefore, linear APR (
return.apr) is the official, distortion-free standard across all intervals. The API still computesreturn.apyfor every period with a defined return and does not set it tonullbelow 7 days, so treat a short-windowapyas a hypothetical extrapolation: presentreturn.periodRateandreturn.apr, and showapyonly as a supplementary figure.
Q6: Audit Check Matrix — How can external auditors verify reports in Excel?
Q6: Audit Check Matrix — How can external auditors verify reports in Excel?
Report evidence
- Scalar defines balance fields, earnings fields and precision and APY fields.
- Apply separately supported impairment and reporting adjustments; see valuation and harvest reporting.
- Existing QA/legacy exports retain route-specific formulas and verified coverage; see legacy comparison.