Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.getpara.com/llms.txt

Use this file to discover all available pages before exploring further.

Combine Para’s wallet infrastructure with Amplify to enable stablecoin yield deposits and withdrawals, all from a Para-powered wallet. This walkthrough covers two integration paths: the Amplify SDK for a higher-level API, and direct smart contract calls for environments where the SDK isn’t available.

Why Combine Para and Paxos Amplify

Para WalletsPaxos Amplify
Instant onboarding, MPC-secure, white-labelStablecoin yield across multiple strategies
Embedded + external wallet supportMulti-chain support, unified deposit API
Email/social login — no seed phrase or browser extensionAudited smart contracts

Example Use Cases

  1. Fintech App Integration — Embed stablecoin deposit and yield flows directly in your fintech application with Para’s white-label wallet onboarding.
  2. Stablecoin Yield Product — Build a consumer-facing earn product where users deposit stablecoins into Amplify vaults through a Para-powered wallet — no browser extension required.
  3. Treasury Management — Automate treasury yield strategies from Para wallets with programmable deposit and withdrawal rules.
  4. Multi-Language Backend — Call Amplify contracts directly from Python, Go, Swift, or any language with an Ethereum JSON-RPC library — no JavaScript SDK required.

What You Need

  • Para SDK for creating and managing wallets
  • EVM-compatible chain such as Ethereum Mainnet
  • Amplify API Credentials (pxl_your_api_key) from support@paxoslabs.com
  • Amplify SDK (SDK path only) — @paxoslabs/amplify-sdk

Step-by-Step Integration

Step 1: Install Dependencies

npm install @getpara/viem-v2-integration @getpara/react-sdk @paxoslabs/amplify-sdk viem

Step 2: Initialize Para and Amplify

Complete authentication before signing any transactions.
import { createParaViemClient, createParaAccount } from "@getpara/viem-v2-integration";
import { ParaWeb } from "@getpara/react-sdk";
import { http, createPublicClient } from "viem";
import { mainnet } from "viem/chains";
import { initAmplifySDK } from "@paxoslabs/amplify-sdk";

// Initialize Para
const para = new ParaWeb("YOUR_PARA_API_KEY");

// Initialize Amplify SDK
await initAmplifySDK("pxl_your_api_key", {
  rpcUrls: { [mainnet.id]: "https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY" },
});

Step 3: Create Para Account and Clients

const account = await createParaAccount(para);

const walletClient = createParaViemClient(para, {
  account,
  chain: mainnet,
  transport: http("https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"),
});

const publicClient = createPublicClient({
  chain: mainnet,
  transport: http("https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"),
});

Step 4: Discover a Vault and Deposit

The SDK auto-detects the optimal authorization method (gasless permit, standard approval, or existing allowance) and handles each path for you.
import {
  getVaultsByConfig,
  prepareDepositAuthorization,
  prepareDeposit,
  isPermitAuth,
  isApprovalAuth,
  isAlreadyApprovedAuth,
  YieldType,
} from "@paxoslabs/amplify-sdk";

// Find a vault by yield strategy, chain, and asset
const [vault] = await getVaultsByConfig({
  yieldType: YieldType.CORE, // "CORE", "TREASURY", or "FRONTIER"
  chainId: mainnet.id,
  depositAssetAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
});

const params = {
  vaultName: vault.name,
  depositAsset: vault.vault.baseTokenAddress,
  depositAmount: "1000", // 1000 USDC
  to: account.address,
  chainId: mainnet.id,
};

// Auto-detect optimal authorization method
const auth = await prepareDepositAuthorization(params);

if (isPermitAuth(auth)) {
  // Para signs the EIP-712 permit off-chain (gasless)
  const signature = await walletClient.signTypedData({
    account,
    ...auth.permitData,
  });

  const prepared = await prepareDeposit({
    ...params,
    signature,
    deadline: auth.permitData.message.deadline,
  });

  const hash = await walletClient.writeContract({ ...prepared.txData, account });
  await publicClient.waitForTransactionReceipt({ hash });
} else if (isApprovalAuth(auth)) {
  // Standard ERC-20 approve followed by deposit
  const approvalHash = await walletClient.writeContract({ ...auth.txData, account });
  await publicClient.waitForTransactionReceipt({ hash: approvalHash });

  const prepared = await prepareDeposit(params);
  const depositHash = await walletClient.writeContract({ ...prepared.txData, account });
  await publicClient.waitForTransactionReceipt({ hash: depositHash });
} else if (isAlreadyApprovedAuth(auth)) {
  // Sufficient allowance — deposit directly
  const prepared = await prepareDeposit(params);
  const hash = await walletClient.writeContract({ ...prepared.txData, account });
  await publicClient.waitForTransactionReceipt({ hash });
}

Step 5: Withdraw from a Vault

import {
  prepareWithdrawalAuthorization,
  prepareWithdrawal,
  isWithdrawApprovalAuth,
} from "@paxoslabs/amplify-sdk";

const withdrawParams = {
  vaultName: vault.name,
  wantAsset: vault.vault.baseTokenAddress,
  withdrawAmount: "500", // 500 Shares
  userAddress: account.address,
  chainId: mainnet.id,
};

const withdrawAuth = await prepareWithdrawalAuthorization(withdrawParams);

if (isWithdrawApprovalAuth(withdrawAuth)) {
  const approvalHash = await walletClient.writeContract({ ...withdrawAuth.txData, account });
  await publicClient.waitForTransactionReceipt({ hash: approvalHash });
}

const withdrawTxData = await prepareWithdrawal(withdrawParams);
const withdrawHash = await walletClient.writeContract({ ...withdrawTxData, account });
await publicClient.waitForTransactionReceipt({ hash: withdrawHash });

Paxos Amplify

Stablecoin yield protocol documentation and API reference

Para Viem Integration

Set up Para wallets with Viem for EVM transaction signing

EIP-712 Typed Data Signing

Sign structured data using the EIP-712 standard with Para wallets