List positions
Lists one customer wallet's live positions, one page at a time.
GET/
ownerAddress is required. A wallet with no positions in your project (never deposited, fully withdrawn, or held under another organization) returns an empty positions list, not 404. Live fields are left out, never set to zero, when the provider read is unavailable.
Requires an API key with the earn.read action.
Query parameters
-
ownerAddress·string· required · min length 32 · max length 44 · pattern^[1-9A-HJ-NP-Za-km-z]{32,44}$· example9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWMThe customer's wallet address: an external wallet, so SDP holds no key for it. It signs, owns the shares, and pays the network fee unless the build names a
feePayer. It must decode to a 32-byte public key; a base58 string that matches the pattern but does not decode returns 400. -
limit·integer· min 1 · max 100 · default20Page size, from 1 to 100. Defaults to 20.
-
before·string· min length 1The previous page's
nextCursor. Omit it for the first page.
Headers
-
x-project-id·string· min length 1 · exampleprj_exampleRequired for dashboard sessions. API keys use their assigned project.
Responses
-
200One page of positions-
data·object· required-
ownerAddress·string· required · example9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWMThe customer's wallet address.
-
positions·object[]· required-
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).
-
-
-
hasMore·boolean· required -
nextCursor·string | null· required
-
-
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.