Skip to main content
Deposit into looped LST strategies (e.g. lsodaWEETH) and exit via the solver. A deposit or withdraw is an intent-based swap under the hood; this is the vault-shaped HTTP surface.
Every route on this page is live on production (https://api.sodax.com). The SDK leverage yield module remains the recommended path for product integrations — it handles the intent, relay and settlement lifecycle for you — but the HTTP surface is fully available if you need it directly.

Base URL

Canary: https://canary-api.sodax.com/v1/leverage-yield. Same conventions as Swaps: decimal strings, unauthenticated reads, rate-limited writes on submit-tx.

Endpoint catalog

Vault registry

Vault reads

Query params typically include vault address/name and owner where relevant (see OpenAPI / SDK mapping for exact names).

Quote · deadline

Vault share tokens (lsoda*) are solver-tradeable. The vault-share side of a quote is always on the Sonic hub.

Deposit / withdraw intents

Shared intent lifecycle (mirrors Swaps)

POST /submit-tx accepts the same core fields as swaps plus an operation discriminator: (Plain swaps use "swap" on the shared queue; leverage endpoints set deposit/withdraw.) GET /submit-tx/status echoes the queued row’s discriminator as data.operation — leverage_deposit / leverage_withdraw here, swap for a plain swap — so one poller can tell the three apart. Status lifecycle is the same as Swaps submit-tx:

Mental model

  • Shares are ERC-4626-style on the hub; cross-network entry uses the same intent rails as swaps.
  • Spoke deposit approval goes through the swap-domain allowance/approve endpoints above (not hub-vault approve).
  • Hub-side vault allowance helpers exist on the SDK (sodax.leverageYield.approve / isAllowanceValid) for direct hub flows.

Partner fees

Same shapes as swaps: fixed amount or percentage (basis points). For TypeScript product integrations, use the SDK so you can set your own fee in both directions. On raw HTTP, only deposit requests currently accept partnerFee. The backend rejects unknown body fields, so a partnerFee on a withdraw request fails the request instead of being ignored. Vault fees use the leverage-yield fee path (leverageYield.partnerFee / per-intent override), not swaps.partnerFee.

Example: list vaults

Example descriptor fields (shape can grow; treat as illustrative):

Effective APR

For product UI that needs the levered yield figure, prefer:
  • GET /apr/effective on this API, or
  • SDK getEffectiveApr / the Effective APR page
Do not invent multipliers client-side unless you reimplement the same formula. Every bigint-derived field is a decimal string. APR fields ending in Ray are RAY (1e27 = 100%). targetLtvBps and the /position ltv are basis points (10000 = 100%). healthFactor and leverageMultiplierWad are WAD (1e18). leverageMultiplierWad is the borrowed multiple, targetLTV / (1 − targetLTV), so the exposure a depositor holds is 1 + that value.

Relation to Swaps API

If you already integrated Swaps submit-tx, reuse the same polling, cancel-to-recover, and failure-field handling here.

See also