> ## 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

| Property    | Type           | Description                                     |
| ----------- | -------------- | ----------------------------------------------- |
| `address`   | `String`       | The blockchain address of the wallet            |
| `chain`     | `Chain`        | The specific blockchain this wallet lives on    |
| `chainType` | `ChainType`    | -                                               |
| `config`    | `WalletConfig` | The wallet configuration including admin signer |
| `owner`     | `Owner?`       | The owner of the wallet, if available           |
| `type`      | `WalletType`   | The type of wallet (smart wallet or MPC wallet) |

## Functions

| Function             | Description                                                                                                                                                          |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `addSigner`          | Registers a new delegated signer on this wallet via the recovery/approval flow. Does not change the active signer.                                                   |
| `approve`            | Signs a transaction that is in AWAITING\_APPROVAL status.                                                                                                            |
| `balances`           | Gets the wallet balances.                                                                                                                                            |
| `fund`               | Funds the wallet with test tokens (staging only).                                                                                                                    |
| `getSigner`          | Returns the current signer for this wallet.                                                                                                                          |
| `getTransaction`     | Retrieves a transaction by its ID.                                                                                                                                   |
| `listTransfers`      | Lists transfers for this wallet.                                                                                                                                     |
| `needsRecovery`      | Returns true when a device signer was configured for this wallet but no matching hardware key exists on the current device.                                          |
| `nfts`               | Lists NFTs held by this wallet. Supported on EVM and Solana chains.                                                                                                  |
| `recover`            | Generates a new hardware key on this device and registers it on the wallet using the admin/recovery signer approval flow.                                            |
| `removeSigner`       | Removes a delegated signer from this wallet. Supported types: DelegatedSigner.Email, DelegatedSigner.Phone, DelegatedSigner.ExternalWallet, DelegatedSigner.Locator. |
| `send`               | Sends tokens to a recipient address.                                                                                                                                 |
| `sendTransaction`    | Submits a raw transaction and polls until it reaches a terminal state.                                                                                               |
| `signerIsRegistered` | Returns true if the given locator is registered as a delegated signer on this wallet.                                                                                |
| `signers`            | Fetches the live list of signers registered on this wallet.                                                                                                          |
| `useSigner`          | Sets the active signer for subsequent send and approve operations.                                                                                                   |
| `withSigner`         | Creates a new Wallet instance that uses the specified signer for transactions.                                                                                       |

### 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.

### listTransfers

```kotlin theme={null}
suspend fun listTransfers(tokens: List<String> = emptyList()): Result<TransferList, TransferError>
```

Lists transfers for this wallet.

### 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.

### nfts

```kotlin theme={null}
suspend fun nfts(page: Int = 1, perPage: Int = 20): Result<List<NFT>, WalletError>
```

Lists NFTs held by this wallet. Supported on EVM and Solana chains.

### 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.

### sendTransaction

```kotlin theme={null}
suspend fun sendTransaction(params: RawTransactionParams, signer: SignerSelection = SignerSelection.Admin): Result<Transaction, TransactionError>
```

Submits a raw transaction and polls until it reaches a terminal state.

### signerIsRegistered

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

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

### signers

```kotlin theme={null}
suspend fun signers(): Result<List<DelegatedSignerData>, WalletError>
```

Fetches the live list of signers registered 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}
open fun withSigner(newSigner: Signer): Wallet
```

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