Get position totals
Gets live position totals across every customer wallet in your project, grouped by strategy and token.
GET/
Wallet addresses are left out unless you pass includeOwnerAddresses=true; add includePositions=true to also receive each wallet's positions, which saves one read per wallet. A total that depends on an unavailable live value is left out, never reported as zero or partial.
Requires an API key with the earn.read action.
Query parameters
-
includeOwnerAddresses·string· one oftrue,false -
includePositions·string· one oftrue,false
Headers
-
x-project-id·string· min length 1 · exampleprj_exampleRequired for dashboard sessions. API keys use their assigned project.
Responses
-
200Position totals-
data·object· required-
summary·object· required-
walletCount·integer· required · min 0 -
positionCount·integer· required · min 0 -
unavailablePositionCount·integer· required · min 0 -
totalsByStrategy·object[]· required-
provider·string· required · examplekamino -
providerReference·string· required · example7uib8xGAwkaPz4ZGCA6t8sSEid5Yp9ty13PHUweTypx -
label·string· required · exampleAllez USDC -
ownerAddresses·string[]· each min length 32 · each max length 44 · each pattern^[1-9A-HJ-NP-Za-km-z]{32,44}$· each example9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWMThe customer wallets behind this total. Absent unless the request passes
includeOwnerAddresses=true. The list is personal data about your customers, so opt in only where you show per-customer detail. -
positions·object[]Complete live positions contributing to this strategy total. Present only when the request passes
includePositions=truetogether withincludeOwnerAddresses=true; use this single drill-down instead of one live request per owner.-
id·string· required · exampleearn_position_2f8b6b04-7147-487e-b760-b1caa4fbcb8b -
ownerAddress·string· required · example9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWMThe customer's wallet address.
-
provider·string· required · examplekamino -
providerReference·string· required · example7uib8xGAwkaPz4ZGCA6t8sSEid5Yp9ty13PHUweTypxThe strategy's onchain address.
-
label·string· required · exampleAllez USDC -
tokenMint·string· required · example4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU -
shareMint·string· required · examplehXm2xSRF5PLKGMrTvAWqKhR76MuJX5dAabeSChkjqu2 -
createdAt·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
closedAt·string | null· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
shares·string· max length 128 · pattern^\d+(\.\d+)?$· example25.42Live share balance. Absent when the live read is unavailable; never zero-filled.
-
withdrawableShares·string· max length 128 · pattern^\d+(\.\d+)?$· example25.42Shares you can withdraw right now. Absent when the live read is unavailable.
-
unlockTimestamp·string | null· pattern^\d+$· example1789722000Unix time, in seconds, when locked shares become withdrawable. Null or absent when no lock applies. To tell an unavailable read apart, check
shares. -
tokenValue·string· max length 128 · pattern^\d+(\.\d+)?$· example25.42Live value of the position in the deposit token (
tokenMint), as the provider reports it: shares times the rate for rate-based strategies, or a withdrawal quote for the whole position for quote-based providers such as Veda and Ondo. A quote already includes spread and price impact, so it does not scale to other share amounts. It is a deposit-token amount, not a share count or a USD conversion; every Earn deposit token is a USD stablecoin, so at par it reads as dollars. Absent when the live read is unavailable. -
parIntermediate·objectThe operator redemption's intermediate token the wallet holds outside any open request, such as Hastra wYLDS after a canceled operator redemption. It belongs to this position and is not included in
tokenValue. Present only while non-zero.-
mint·string· required · example8fr7WGTVFszfyNWRMXj6fRjZZAnDwmXwEpCrtzmUkdih -
amount·string· required · max length 128 · pattern^\d+(\.\d+)?$· example25.42Live decimal value returned by the vault provider; never a float.
-
withdrawableAmount·string· required · max length 128 · pattern^\d+(\.\d+)?$· example25.42Zero while the provider has frozen the token account.
-
tokenValue·string· required · max length 128 · pattern^\d+(\.\d+)?$· example25.42Value in the position's deposit token (
tokenMint).
-
-
-
walletCount·integer· required · min 0 -
positionCount·integer· required · min 0 -
totalsByToken·object[]· required-
tokenMint·string· required · example4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU -
walletCount·integer· required · min 0 -
positionCount·integer· required · min 0 -
unavailablePositionCount·integer· required · min 0 -
tokenValue·string· max length 128 · pattern^\d+(\.\d+)?$· example25.42Exact live total in the deposit token (
tokenMint): the sum of the positions'tokenValueplus anyparIntermediate.tokenValue, a dollar figure at par. Absent when any contributing position is unavailable, so partial money is never presented as complete.
-
-
-
totalsByToken·object[]· required-
tokenMint·string· required · example4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU -
walletCount·integer· required · min 0 -
positionCount·integer· required · min 0 -
unavailablePositionCount·integer· required · min 0 -
tokenValue·string· max length 128 · pattern^\d+(\.\d+)?$· example25.42Exact live total in the deposit token (
tokenMint): the sum of the positions'tokenValueplus anyparIntermediate.tokenValue, a dollar figure at par. Absent when any contributing position is unavailable, so partial money is never presented as complete.
-
-
-
-
meta·object· requiredResponse metadata.
-
requestId·string· required · min length 1 · examplereq_exampleRequest identifier for tracing.
-
timestamp·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
-
-
400Bad Request-
error·object· requiredStandard error payload.
-
code·string· requiredMachine-readable error code.
-
message·string· requiredHuman-readable error message.
-
details·objectOptional error details for debugging.
*·any
-
-
meta·object-
requestId·string· min length 1 · examplereq_exampleRequest identifier for tracing.
-
-
-
401UnauthorizedSame fields as
400. -
403Forbidden. Requires theearn.readaction: an API key must hold it (a module'smanageorexecutealso covers itsread), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS anderror.details.actionnames the action. Any other 403 names its own reason.Same fields as
400. -
429Too Many RequestsSame fields as
400. -
500Internal Server ErrorSame fields as
400. -
503Service UnavailableSame fields as
400.