Wallets are Solana keypairs managed by a custody provider. SDP uses them to sign transactions for token deployment, minting, transfers, and other onchain operations. You must initialize a signing provider before creating tokens or executing transactions.

## Supported providers

| Provider | Description |
| --- | --- |
| **Privy** | Embedded wallet infrastructure platform |
| **Fireblocks** | Digital asset infrastructure company |
| **Coinbase CDP** | Embedded wallets for developers |
| **Para** | Wallet and authentication suite |
| **Turnkey** | Non-custodial wallet infrastructure platform |
| **DFNS** | Digital asset wallet infrastructure |
| **Anchorage** | Regulated institutional crypto custody |

<Tabs items={["Dashboard", "API"]}>
<Tab value="Dashboard">

### 1. Navigate to Wallets

Open the sidebar and click **Wallets**. If you haven't linked your organization yet, complete the [organization setup](/docs/guides/setup-organization) first.

### 2. Choose a custody provider

The Wallets page shows all supported providers, each with a **New wallet** button. Pick the provider that fits your setup.

![Wallets page showing custody provider cards](/images/getting-started/wallet-providers.png)

### 3. Create the wallet

Click **New wallet** on your chosen provider. In the modal, enter a label for the wallet and click **Create wallet**.

<img src="/images/getting-started/wallet-create-modal.png" alt="New wallet modal" width="696" style={{ display: "block", maxWidth: "100%" }} />

### 4. View your wallet

After provisioning, the wallet card appears on the Wallets page with its address, wallet ID, and balance.

![Wallets page after wallet creation](/images/getting-started/wallet-created.png)

To create additional wallets, click **Create Wallet** in the top right and repeat the process.

### 5. Provider capabilities

Each provider supports a different set of operations shown as capability chips:

- **Issuance** — can deploy and mint tokens
- **Transfers** — can sign payment transactions
- **Compliance** — can sign freeze/unfreeze instructions

</Tab>
<Tab value="API">

#### 1. Initialize the signing provider

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl -X POST https://api.solana.com/v1/wallets/initialize \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "privy",
    "walletLabel": "Master wallet"
  }'
```
</Tab>
<Tab value="TypeScript">
```typescript
const response = await fetch("https://api.solana.com/v1/wallets/initialize", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_test_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    provider: "privy",
    walletLabel: "Master wallet",
  }),
});
const { data } = await response.json();
// data: { configId, publicKey, walletId }
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/wallets/initialize"))
    .header("Authorization", "Bearer sk_test_...")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("""
        {
          "provider": "privy",
          "walletLabel": "Master wallet"
        }"""))
    .build();
```
</Tab>
</Tabs>

#### 2. Create additional wallets

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl -X POST https://api.solana.com/v1/wallets \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Mint authority wallet",
    "purpose": "mint_authority",
    "setDefault": false
  }'
```
</Tab>
<Tab value="TypeScript">
```typescript
const response = await fetch("https://api.solana.com/v1/wallets", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_test_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    label: "Mint authority wallet",
    purpose: "mint_authority",
    setDefault: false,
  }),
});
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/wallets"))
    .header("Authorization", "Bearer sk_test_...")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("""
        {
          "label": "Mint authority wallet",
          "purpose": "mint_authority",
          "setDefault": false
        }"""))
    .build();
```
</Tab>
</Tabs>

The `purpose` field is optional metadata in the API. The current dashboard create-wallet flow does not expose wallet-purpose selection.

#### 3. List wallets

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl "https://api.solana.com/v1/wallets?view=summary" \
  -H "Authorization: Bearer sk_test_..."
```
</Tab>
<Tab value="TypeScript">
```typescript
const response = await fetch("https://api.solana.com/v1/wallets?view=summary", {
  headers: { "Authorization": "Bearer sk_test_..." },
});
const { data } = await response.json();
// data.wallets includes walletId, publicKey, provider, label, purpose, and status
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/wallets?view=summary"))
    .header("Authorization", "Bearer sk_test_...")
    .GET()
    .build();
```
</Tab>
</Tabs>

Use the returned `walletId` when setting a default wallet or binding wallet-scoped API keys.

#### 4. Set a default wallet

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl -X POST https://api.solana.com/v1/wallets/default-wallet \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "walletId": "wal_xyz789" }'
```
</Tab>
<Tab value="TypeScript">
```typescript
await fetch("https://api.solana.com/v1/wallets/default-wallet", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_test_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ walletId: "wal_xyz789" }),
});
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/wallets/default-wallet"))
    .header("Authorization", "Bearer sk_test_...")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("""
        { "walletId": "wal_xyz789" }"""))
    .build();
```
</Tab>
</Tabs>

</Tab>
</Tabs>