Strategy keys
| Key | Asset | Route | Status |
|---|---|---|---|
sol-native-stake | SOL | Native delegation to Hubra’s validator | live |
sol-liquid-stake | SOL | Mint raSOL via Sanctum | live |
sol-leveraged-stake | SOL | Auto-managed leveraged raSOL (raSOL Max) | live, listing only |
usdc-earn | USDC | Voltr USDC vault | live |
GET /api/v1/strategies. Each has a detailed view at GET /api/v1/strategies/{key}.
sol-leveraged-stake is listing-only: the registry entry and live APY are real, but actions.stake / actions.unstake are null — the rasol-max deposit / burn builders aren’t wired into /api/v1/stake or /api/v1/unstake yet. Route users to the human surface at hubra.app/c/leverage for deposits and burns until those endpoints land.
sol-native-stake
Direct delegation to Hubra’s Solana validator. The agent’s wallet creates a stake account, delegates voting rights to Hubra’s vote account, and retains both stake authority and withdraw authority.
| Asset in | SOL |
| Asset out | None (you keep the stake account) |
| Validator vote account | 7K8DVxtNJGnMtUY1CQJT5jcs8sFGSZTDiG7kowvFpECh |
| Stake actions | delegate |
| Unstake actions | deactivate, instant |
Stake mechanics
POST /api/v1/stake returns a partially-signed transaction. The server generates a fresh stake-account keypair and pre-signs that signature slot. The agent only signs as the wallet. The new stake-account pubkey is returned in the response under stakeAccount — save it, you need it for future deactivate / withdraw / instant unstake.
Unstake mechanics
kind: "deactivate"triggersStakeProgram.deactivate. After the deactivation epoch (~2 to 3 days), callPOST /api/v1/withdrawto close the stake account and pull SOL back.kind: "instant"routes the active stake account through Sanctum’sdepositStakefor immediate SOL.
stakeAccount pubkey returned by the original /stake call.
sol-liquid-stake
Mint raSOL by depositing SOL into Sanctum. raSOL is a non-rebasing receipt token for SOL staked with Hubra’s validator.
| Asset in | SOL |
| Asset out | raSOL (HUBsveNpjo5pWqNkH57QzxjQASdTVXcSK7bVKTSZtcSX) |
| Stake actions | mint |
| Unstake actions | instant, slow |
Stake mechanics
POST /api/v1/stake returns an unsigned Sanctum-routed transaction. The response carries route: "sanctum", sanctumKind: "token", and a sanctum_order object. Forward all three (plus hubra_token) to /broadcast if you want Sanctum’s MEV-protected broadcaster.
Unstake mechanics
kind: "instant"swaps raSOL → SOL via Sanctum’s pooled LST liquidity.kind: "slow"runsSanctum withdrawStaketo convert raSOL into a native stake account, then standard epoch deactivation.
sol-leveraged-stake
Hubra’s auto-managed leveraged raSOL strategy (raSOL Max). Deposit raSOL, receive a raSOL Max LP receipt whose redemption rate drifts up each epoch as the leveraged position earns amplified staking yield. The strategy levers up when conditions are favorable and unwinds when borrow costs rise; you don’t manage anything.
| Asset in | raSOL (HUBsveNpjo5pWqNkH57QzxjQASdTVXcSK7bVKTSZtcSX) |
| Asset out | raSOL Max LP (CJEYakpjmKBvvUzAn3HJSs9vtijnv472T8YJEV3WzToF) |
| Underlying SOL mint | So11111111111111111111111111111111111111112 |
| Stake actions | unset — listing only |
| Unstake actions | unset — listing only |
Live data
GET /api/v1/strategies/sol-leveraged-stake returns the live block:
live.apy— latest captured leveraged APY in percent, from the daily-cronloadRasolMaxApySnapshotsource the leverage page also reads.live.exchangeRate— NAV-per-LP (1 raSOL Max → N raSOL), the redemption rate at the latest captured epoch.
GET /api/v1/apy/history?strategy=sol-leveraged-stake returns the per-epoch bar-chart series (~12 points). Since the upstream is a single snapshot stream, the same series is returned under each range key.
Programmatic stake / unstake
Not agent-callable yet.actions.stake and actions.unstake are both null in the registry response. Calls to /api/v1/stake or /api/v1/unstake with strategy: "sol-leveraged-stake" return 400 invalid_request (“doesn’t support staking”). Route users to hubra.app/c/leverage to deposit raSOL → raSOL Max or burn raSOL Max → raSOL through the human surface.
To prepare a raSOL balance for the human-surface deposit, an agent can still use sol-liquid-stake (mint SOL → raSOL), then hand off.
usdc-earn
Deposit USDC into the Voltr-routed Hubra Earn vault.
| Asset in | USDC |
| Asset out | raUSDC (53fZaJGDMHcfku8pzZak5obVFUUjVxwqRTF63M3SQiSS) |
| Vault | 3maCuTJVPteZ2dFA8dADxz2EbpJHfoAG5txYhXDs6gNQ |
| Stake actions | deposit |
| Unstake actions | instant |
Stake mechanics
POST /api/v1/stake returns an unsigned Voltr deposit transaction. Broadcast via route: "rpc". There is no sanctum_order to forward.
Unstake mechanics
kind: "instant"runs a Voltr direct withdraw. No cooldown, no fee.- Pass
isWithdrawAll: trueto drain the position fully without specifying an amount.
Live data
Every strategy entry includes alive block with the latest APY and (where applicable) the receipt-rate-to-asset exchange rate.
apy is a percentage (6.4 = 6.4%). exchangeRate is the current asset-per-receipt rate; null where it does not apply (native staking does not have a receipt token).
For time-series APY, see GET /api/v1/apy/history.
Coming soon strategies
The strategy registry can flag a key ascoming_soon (announced but not live). When that flag is set:
GET /api/v1/strategiesreturns the entry withstatus: "coming_soon".GET /api/v1/strategies/{key}returns503 service_unavailablewith aRetry-Afterhint.- Stake / unstake / quote calls against the key return
503until launch.
coming_soon strategies live in the registry today. sol-leveraged-stake is live but listing-only — the registry entry is real but the stake / unstake builders aren’t wired through the agent endpoints yet (see the section above).
What’s next
GET /strategies
List all strategies.
GET /strategies/:key
Per-strategy detail.
POST /stake
Build an unsigned stake tx.
POST /unstake
Build an unsigned unstake tx.