Skip to main content
Looking for the full documentation? Visit the Upshift SDK docs for the complete SDK reference.
Upshift vaults let a Para-powered wallet earn yield on stablecoins. This guide covers the full lifecycle with the Upshift SDK (@upshiftfinance/sdk): discovering vaults, depositing, tracking positions, and redeeming. Users keep their vault shares in their own Para wallet.

What You’ll Learn

  • How to create a Para-backed viem wallet client and pass it to the Upshift SDK
  • How to deposit a stablecoin into an Upshift vault
  • How to show a user’s position and request a redemption
Version scope: The examples target @upshiftfinance/sdk@0.5.0 with @getpara/web-sdk and @getpara/viem-v2-integration 3.25.0.

Why Combine Para and Upshift

Example Use Cases

  1. Savings in a wallet or fintech app: Give users a default “savings” balance backed by a tokenized money market fund.
  2. Consumer yield product: Offer an opt-in, higher-yield option next to a cash balance.
  3. Business treasury: Let a company wallet put idle operating balances to work.
  4. Backend reporting: Read Upshift vault data and positions from your server to power dashboards and notifications.

What You Need

  • A Para API key and a Para authentication flow that gives the user an EVM wallet
  • An EVM RPC URL for each chain you use, for example from Alchemy or Infura
  • The Upshift SDK, @upshiftfinance/sdk
  • For browser apps: your domain on the Upshift API allowlist (see the warning in Step 1)
You do not need an Upshift API key for the calls in this guide.

How Upshift Vaults Work

Each vault is a smart contract with one or more deposit assets (for example USDC or USDT), a strategy run by a professional curator, and a receipt token that represents the depositor’s share. Upshift’s contracts are audited, and the reports are public: Audits & Risk. Upshift runs vaults across a range of risk levels: Returns are variable and come from the underlying strategy.

Deposit lifecycle

Redemption lifecycle

Every deposit, approval, and redemption request is a regular EVM transaction that the user’s Para wallet signs. The Upshift SDK signs through the viem wallet client you give it, so no browser extension is involved.

Supported Networks

Upshift vaults run on more than a dozen EVM chains, including Ethereum, Base, BNB Chain, Avalanche, Monad, Flare, HyperEVM, and Plasma, plus Solana and Stellar. This guide covers EVM vaults. Every vault the SDK returns includes its chainId.
Create the Para wallet client with the vault’s chain, and add that chain’s RPC URL to the SDK providers. The examples below use Ethereum mainnet (chainId: 1).

Step-by-Step Integration

Step 1: Install Dependencies

viem is a peer dependency of @upshiftfinance/sdk.
Browser apps: The SDK calls the Upshift API (api.augustdigital.io) from the user’s browser, and the API only accepts allowlisted origins. Contact Upshift with your domain before you go live. Calls made from a server do not need this.

Step 2: Initialize Para and the Upshift SDK

The code below creates the clients, but it does not implement Para login. Complete your app’s Para authentication flow first. createParaViemAccount uses the user’s EVM wallet, so it throws if the user is not logged in or has no EVM wallet yet.
appName is required. Use a stable slug for your app: 3 to 64 characters, using only letters, digits, ., _, and -. Upshift uses it to identify your integration and to reach you about breaking changes.
If your React app already uses @getpara/react-sdk and ParaProvider, reuse that authenticated Para instance instead of creating a second client. You can also get the wallet client from useParaViemClient and pass it to sdk.evm.setSigner.

Step 3: Discover Vaults

Upshift gives you a short list of launch vaults for your integration. The launch vaults for Para are: Fetch each one by address:
Each vault includes its deposit assets, TVL, APY history, and strategy metadata. Useful fields for your UI:
sdk.getVaults({ chainIds: [1] }) returns every vault on the chain, including vaults that are not meant for your users. It also reads each vault onchain, so it can take tens of seconds. For a launch, use the addresses Upshift gives you and call getVault.

Step 4: Deposit

  1. Pick the deposit asset from vault.depositAssets.
  2. Check the remaining deposit cap with maxDeposit, and preview the shares with previewDeposit.
  3. Approve the deposit asset with approve. The SDK sets the correct spender for the vault.
  4. Call vaultDeposit. Shares are minted to the user’s Para wallet in the same transaction.
approval.kind is "sent" when an approval transaction was sent, and "sufficient" when the existing allowance already covers the amount. The user’s Para wallet needs ETH for gas on each transaction.
Always pass asset to previewDeposit. Multi-asset vaults need it, and single-asset vaults ignore it.

Step 5: Show Positions

walletBalance is the user’s share balance. redeemable is the amount they can claim now. Each position also lists its pendingRedemptions and availableRedemptions.

Step 6: Redeem

  1. Call vaultRequestRedeem with the amount of shares to redeem. Set isInstantRedeem: true only if the user chooses instant redemption and the vault supports it.
  2. Upshift processes claimable redemptions daily, so the user does not need to send a claim transaction. Timing depends on each vault’s strategy, and vault.lagDuration gives the lag in seconds.
  3. Call getVaultAvailableRedemptions to show pending and completed redemptions.
Instant redemption is available only when vault.instant_redeem_config is set and its isPaused is false. A spread applies, shown in instant_redeem_config.redeemableAssets[].spreadBps.
If a vault cannot fund a redemption date yet, that redemption stays pending until the vault is funded.

Step 7: Handle Errors

Every SDK method throws typed errors that extend UpshiftSDKError:
For example, a Para wallet without enough ETH for gas fails with an UpshiftValidationError whose code is ACCOUNT_NOT_FUNDED.
A timeout on a write call such as vaultDeposit doesn’t mean the transaction failed. The Para wallet may already have signed and broadcast it. Before resending, check the user’s position with getVaultPositions or look up the transaction, so the user doesn’t deposit twice.

Upshift SDK Docs

Full SDK reference and quick start

Upshift Starter App

Example app, live at starter.upshift.finance

Para viem Setup

Configure viem with Para wallets

Audits and Risk

Upshift audit reports and risk disclosures