Skip to main content
This quickstart walks through the minimum OMS Wallet SDK flow: install an SDK, create the client, authenticate with email OTP, and send a first transaction from the non-custodial wallet.
TypeScript is for web, Node, and JavaScript apps. React Native is for iOS and Android apps using React Native, including Expo development builds and bare apps. Swift and Kotlin are native app SDKs.

1. Get a publishable key

Contact us to have your publishable key manually provisioned before getting started. SDK constructors pass this value as publishableKey, which selects the matching OMS Wallet environment for client SDK calls.

2. Install an SDK

pnpm add @0xsequence/typescript-sdk viem

3. Create the client

Create the client once when your app starts, then reuse it for wallet operations.
import { OMSClient } from '@0xsequence/typescript-sdk'

const oms = new OMSClient({
  publishableKey: 'YOUR_PUBLISHABLE_KEY',
})

4. Authenticate with email

Email authentication is a two-step OTP flow. Start auth, show your OTP input, then complete auth with the user-entered code.
await oms.wallet.startEmailAuth({ email: 'user@example.com' })

const { walletAddress } = await oms.wallet.completeEmailAuth({ code: '123456' })

console.log('Wallet address:', walletAddress)

5. Send a first transaction

Send a native token transaction on Polygon Amoy. Values are raw base-unit values.
import { Networks } from '@0xsequence/typescript-sdk'
import { parseEther, type Address } from 'viem'

const recipient = '0x1111111111111111111111111111111111111111' as Address

const tx = await oms.wallet.sendTransaction({
  network: Networks.amoy,
  to: recipient,
  value: parseEther('0'),
})

console.log('Transaction:', tx.txnHash ?? tx.txnId)

Next steps

SDK Overview

Compare available SDKs and find the detailed reference for each one.

Send USDC

Send an ERC-20 transfer from a non-custodial wallet.

SDK Authentication

Choose your SDK, then open its Authentication page for wallet selection and wallet creation.

Balances & History

Choose your SDK, then open its Balances & History page for indexer reads.