Wallet Details

Retrieve wallet addresses, metadata, signing share statuses, and backup information to verify wallets are fully configured and ready for use.

Get Client Details (Client-Scoped)

From a WalletsClient instance, fetch the current client's full state — wallets, addresses, and share-pair statuses:

const details = await client.getClientDetails();

Get Client (Custodian-Scoped)

From the custodian API, fetch any client by ID:

const details = await wallets.custodian.getClient({
  path: { clientId: "cli_..." },
});

Both return the same ClientDetails shape.

Reading Wallet Addresses

Addresses are stored in metadata.namespaces. The namespace key is the CAIP-2 namespace prefix (not the full chain ID):

const details = await client.getClientDetails();
const namespaces = details.metadata?.namespaces ?? {};

// EVM address — same for Ethereum, Polygon, Arbitrum, Base, Optimism, Avalanche, Celo, Monad
const evmAddress  = namespaces["eip155"]?.address;

// Solana address
const solAddress  = namespaces["solana"]?.address;

// Stellar address
const xlmAddress  = namespaces["stellar"]?.address;

// Tron address
const tronAddress = namespaces["tron"]?.address;

// Bitcoin address (P2WPKH)
const btcAddress  = namespaces["bip122"]?.address;

Reading Share-Pair Statuses

Use share-pair statuses to verify a wallet is properly set up before allowing transactions:

const details = await client.getClientDetails();

for (const wallet of details.wallets ?? []) {
  console.log(`Wallet ${wallet.id} (${wallet.curve}):`);

  for (const sp of wallet.signingSharePairs ?? []) {
    // "STORED_CLIENT" = share is stored client-side (ready)
    // "STORED_DATABASE" = share was generated but not yet confirmed
    // "completed" = both shares present and status reconciled
    console.log(`  signing pair ${sp.id}: ${sp.status}`);
  }

  for (const bp of wallet.backupSharePairs ?? []) {
    // "STORED_CLIENT_BACKUP_SHARE" = encrypted backup stored
    // "STORED_CLIENT_BACKUP_SHARE_KEY" = backup stored with passkey/key method
    // "completed" = backup complete
    console.log(`  backup pair  ${bp.id}: ${bp.status} (${bp.backupMethod})`);
  }
}

Checking Wallet Readiness

A wallet is ready to sign when all its signing share pairs have status "STORED_CLIENT" or "completed":

function isWalletReady(details: ClientDetails): boolean {
  return (details.wallets ?? []).every(wallet =>
    (wallet.signingSharePairs ?? []).every(
      sp => sp.status === "STORED_CLIENT" || sp.status === "completed"
    )
  );
}