Skip to main content
SuperVaults are ERC-7540 vaults on Base. Integrations need vault data and transaction calldata. Both are available without running any onchain infrastructure.
Minimum to integrate deposits:
  1. GET /supervaults?chain_id=8453 → filter to availability: "available" and is_supervault_v_2: true
  2. Confirm the user holds assets[0].address with sufficient balance
  3. POST /hooks/suggest/non-smart-account with type: "DEPOSIT", source token, vault address, vault_type: "SUPERVAULT"
  4. Broadcast executions[] in order — index 0 is approve, index 1 is deposit
To redeem: POST type: "REDEEM" → broadcast → poll maxWithdraw(account) onchain → when > 0, POST type: "REDEEM_CLAIM" → broadcast.

Prerequisites


Vault Discovery

List vaults

Response fields Example

Single vault

id format: {chain_id}_{vault_address}. Same response shape as the list.

Historical APY and TVL

ids: comma-separated vault IDs. granularity: hour or day.

User positions

Returns all vault positions for a wallet: share balance, USD value, vault metadata.

Deposit

Non-smart-account response
Index 0 (0x095ea7b3) is ERC20.approve. Index 1 (0x6e553f65) is ERC4626.deposit. Both carry type: "DEPOSIT" — use array position, not type, to determine order.
Token decimals. Express amount in the token’s smallest unit:Use amount_fiat instead of amount if you only know the USD value.
Request parameters
The bundler validates on-chain balance before building. Check the user’s balance first (GET /balances/{address}) to avoid an unnecessary API round-trip.

Redemption

SuperVaults use ERC-7540 async redemptions. Request -> keeper fulfills (~1 hour) -> claim.
State machine

Rewards

SuperVault rewards are distributed via Merkl. Rewards accrue automatically while users hold vault shares — no staking required.

Check if a vault has rewards

has_rewards: true on the vault response means an active Merkl campaign exists. stats_basic.reward_rate is the current reward APR.

Check claimable rewards for a user

Example response

Claim rewards

Reward claiming requires a smart account (ERC-4337). It is not available on the non-smart-account endpoint.
  • outputs[].amount = provider_claim_amount from the claimable response
  • targets[].extra_data = rewards[].extra_data (Merkl proof)
  • targets[].tags: ["merkl"] is required
  • Max 7 reward tokens per claim call

Error Reference

All errors return {"code": <http_status>, "message": "<reason>"}. Bundler errors are deterministic. An identical retry returns the same error — fix the request first.

Vault Addresses (Base, chain ID 8453)

All addresses verified from GET /supervaults?chain_id=8453.

Key Concepts

Price per share (PPS). stats_basic.pps is the share-to-asset exchange rate. PPS only increases. User asset value: shares * pps. Total APY. apy_snapshot_week + reward_rate — both fields are in percentage points (e.g. 3.77 = 3.77%). For SuperStocks vaults, reward_rate is the primary yield source today; apy_snapshot_week grows as vault strategies deploy. Filter out -1000000 sentinel values (means no data) before summing. Which deposit endpoint. /hooks/suggest/non-smart-account for EOA, Safe, Fireblocks, and custodians — returns raw EVM transactions. /hooks/suggest -> /executor/build -> /executor/execute for ERC-4337 smart accounts. The CLAIM action type (reward claiming) requires the smart account path. Slippage. Basis points. 50 = 0.5% for bStock vaults. 10 = 0.1% for stablecoin vaults.