Set Up Wallets
Initialize a custody provider and create wallets for signing transactions.
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 |
1. Navigate to Wallets
Open the sidebar and click Wallets. If you haven't linked your organization yet, complete the organization setup 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.

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

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

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
1. Initialize the signing provider
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"
}'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 }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();2. Create additional wallets
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
}'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,
}),
});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();The purpose field is optional metadata in the API. The current dashboard create-wallet flow does not expose wallet-purpose selection.
3. List wallets
curl "https://api.solana.com/v1/wallets?view=summary" \
-H "Authorization: Bearer sk_test_..."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 statusHttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.solana.com/v1/wallets?view=summary"))
.header("Authorization", "Bearer sk_test_...")
.GET()
.build();Use the returned walletId when setting a default wallet or binding wallet-scoped API keys.
4. Set a default wallet
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" }'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" }),
});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();