> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crossmint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Wallet

> Kotlin Class

**Class**

```kotlin theme={null}
class Wallet
```

## Properties

### address

```kotlin theme={null}
val address: String
```

The blockchain address of the wallet

### chainType

```kotlin theme={null}
val chainType: ChainType
```

The blockchain type (EVM, Solana, etc.)

### config

```kotlin theme={null}
val config: WalletConfig
```

The wallet configuration including admin signer

### owner

```kotlin theme={null}
val owner: Owner?
```

The owner of the wallet, if available

### type

```kotlin theme={null}
val type: WalletType
```

The type of wallet (smart wallet or MPC wallet)

## Functions

### addSigner

```kotlin theme={null}
suspend fun addSigner(signer: DelegatedSigner): Result<Unit, WalletError>
```

Registers a new delegated signer on this wallet via the recovery/approval flow. Does not change the active signer.

### approve

```kotlin theme={null}
suspend fun approve(transactionId: String, signer: SignerSelection = SignerSelection.Admin): Result<Transaction, TransactionError>
```

Signs a transaction that is in AWAITING\_APPROVAL status.

### balances

```kotlin theme={null}
suspend fun balances(tokens: List<String> = emptyList()): Result<Balances, BalanceError>
```

Gets the wallet balances.

### fund

```kotlin theme={null}
suspend fun fund(token: String, amount: Int, chain: String): Result<Unit, BalanceError>
```

Funds the wallet with test tokens (staging only).

### getSigner

```kotlin theme={null}
fun getSigner(): Signer?
```

Returns the current signer for this wallet.

### getTransaction

```kotlin theme={null}
suspend fun getTransaction(transactionId: String): Result<Transaction, TransactionError>
```

Retrieves a transaction by its ID.

### needsRecovery

```kotlin theme={null}
suspend fun needsRecovery(): Boolean
```

Returns true when a device signer was configured for this wallet but no matching hardware key exists on the current device.

### recover

```kotlin theme={null}
suspend fun recover(): Result<Unit, WalletError>
```

Generates a new hardware key on this device and registers it on the wallet using the admin/recovery signer approval flow.

### removeSigner

```kotlin theme={null}
suspend fun removeSigner(signer: DelegatedSigner): Result<Unit, WalletError>
```

Removes a delegated signer from this wallet. Supported types: DelegatedSigner.Email, DelegatedSigner.Phone, DelegatedSigner.ExternalWallet, DelegatedSigner.Locator.

### send

```kotlin theme={null}
suspend fun send(recipient: String, tokenLocator: String, amount: Double, idempotencyKey: String? = null, signer: SignerSelection = SignerSelection.Admin): Result<Transaction, TransactionError>
```

Sends tokens to a recipient address.

### signerIsRegistered

```kotlin theme={null}
fun signerIsRegistered(locator: String): Boolean
```

Returns true if the given locator is registered as a delegated signer on this wallet.

### useSigner

```kotlin theme={null}
suspend fun useSigner(signer: DelegatedSigner): Result<Unit, WalletError>
```

Sets the active signer for subsequent send and approve operations.

### withSigner

```kotlin theme={null}
fun withSigner(newSigner: Signer): Wallet
```

Creates a new Wallet instance that uses the specified signer for transactions.
