Wallet-as-a-ServiceUsageOverview

Wallet Usage

UTXOS Wallet as a Service provides hosted wallets for Bitcoin, Cardano, and Spark (Bitcoin L2). Users authenticate through your app without installing browser extensions or managing private keys.

💡

TLDR: Enable a multi-chain wallet with three lines of code.

import { Web3Wallet } from "@utxos/sdk";
 
const wallet = await Web3Wallet.enable({
  projectId: process.env.NEXT_PUBLIC_UTXOS_PROJECT_ID,
  networkId: 0, // 0 = testnet, 1 = mainnet
});

Supported Chains

ChainNetwork IDsKey FeaturesData Provider
Bitcoin0 (testnet), 1 (mainnet)UTXO management, PSBT signing, transfersMaestro
Cardano0 (preprod), 1 (mainnet)Native assets, smart contracts, stakingBlockfrost
Spark0 (regtest), 1 (mainnet)Bitcoin L2, fast transfers, low feesSparkscan

Chain Guides

Prerequisites

Create an Account

Sign up at utxos.dev/signin using a supported authentication provider.

Login illustration

Create a Project

From your dashboard, click Create New Project and enter your project name. Use http://localhost:3000 as the origin during development.

Create project

Copy Your Project ID

Navigate to project settings and copy your Project ID.

Copy project ID

Configure Environment

Add your project ID to your environment file.

# .env
NEXT_PUBLIC_UTXOS_PROJECT_ID=your_project_id
NEXT_PUBLIC_NETWORK_ID=0  # 0 = testnet, 1 = mainnet

Quick Start

Install the SDK and initialize your wallet.

npm install @utxos/sdk
import { Web3Wallet } from "@utxos/sdk";
 
async function initWallet() {
  const wallet = await Web3Wallet.enable({
    projectId: process.env.NEXT_PUBLIC_UTXOS_PROJECT_ID,
    networkId: parseInt(process.env.NEXT_PUBLIC_NETWORK_ID) || 0,
  });
 
  // Access chain-specific wallets
  const bitcoin = wallet.bitcoin;
  const cardano = wallet.cardano;
  const spark = wallet.spark;
 
  return wallet;
}

Multi-Chain Example

Access all supported chains through a single wallet instance.

import { Web3Wallet } from "@utxos/sdk";
 
async function multiChainDemo() {
  const wallet = await Web3Wallet.enable({
    projectId: process.env.NEXT_PUBLIC_UTXOS_PROJECT_ID,
    networkId: 0,
  });
 
  // Get addresses from each chain
  const addresses = {
    bitcoin: (await wallet.bitcoin.getAddresses())[0]?.address,
    cardano: await wallet.cardano.getChangeAddress(),
    spark: wallet.spark.getAddress().address,
  };
 
  console.log("Addresses:", addresses);
 
  // Get balances from each chain
  const balances = {
    bitcoin: await wallet.bitcoin.getBalance(),
    cardano: await wallet.cardano.getBalance(),
    spark: await wallet.spark.getBalance(),
  };
 
  console.log("Bitcoin:", balances.bitcoin.total, "sats");
  console.log("Spark:", balances.spark.balance.toString(), "sats");
 
  return { addresses, balances };
}

Data Providers

Each chain requires a data provider for on-chain queries. UTXOS does not expose node APIs directly.

ChainRecommended ProviderSetup Guide
BitcoinMaestroBitcoin Setup
CardanoBlockfrostCardano Setup
SparkSparkscanSpark Setup
⚠️

Keep provider API keys server-side. Use API route proxies to prevent exposing credentials to clients.

Next Steps