Initialize wallet signing
Sets up Managed custody for the project's named provider by creating its active signing configuration and first wallet.
POST/Run in dashboard
Production projects use BYOK only: there this returns 403 with details.reason custody_mode_not_allowed, and wallets are created in a Custody Connection with POST /v1/wallets and connectionId.
Requires an API key with the wallets.configure action.
Headers
-
x-project-id·string· min length 1 · exampleprj_exampleRequired for dashboard sessions. API keys use their assigned project.
-
Idempotency-Key·stringUse a unique 1–255 printable ASCII key per operation. Reuse it with the same request on retries. An in-flight attempt returns
409; a changed request returns422. Retry and recovery rules.
Request body
application/json · required
Initialize wallet signing provider for the project resolved from the request context.
One of:
-
provider: "local"
-
provider·string· required · alwayslocal -
walletLabel·string· max length 100
-
-
provider: "fireblocks"
-
provider·string· required · alwaysfireblocks -
walletLabel·string· max length 100
-
-
provider: "privy"
-
provider·string· required · alwaysprivy -
requestDelayMs·integer· min 0 · max 3000 -
walletLabel·string· max length 100
-
-
provider: "coinbase_cdp"
-
provider·string· required · alwayscoinbase_cdp -
network·string· one ofsolana,solana-devnet -
accountPolicy·string· pattern^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ -
walletLabel·string· max length 100
-
-
provider: "para"
-
provider·string· required · alwayspara -
requestDelayMs·integer· min 0 · max 3000 -
walletLabel·string· max length 100
-
-
provider: "turnkey"
-
provider·string· required · alwaysturnkey -
requestDelayMs·integer· min 0 · max 3000 -
walletLabel·string· max length 100
-
-
provider: "dfns"
-
provider·string· required · alwaysdfns -
network·string· one ofSolana,SolanaDevnet -
walletLabel·string· max length 100
-
-
provider: "ibm_haven"
-
provider·string· required · alwaysibm_haven -
network·string· one ofSolana,SolanaDevnet -
walletLabel·string· max length 100
-
-
provider: "anchorage"
-
provider·string· required · alwaysanchorage -
walletLabel·string· max length 100 -
network·string· one ofsolana,solana-devnet
-
-
provider: "utila"
-
provider·string· required · alwaysutila -
walletLabel·string· max length 100
-
Responses
-
201Wallet signing initialized-
configId·string· required · examplecfg_exampleCreated wallet signing config ID.
-
publicKey·string· required · min length 32 · max length 44 · exampleSo11111111111111111111111111111111111111112Public key of the provisioned root wallet.
-
walletId·string· required · min length 1 · exampleprivy_wallet_123Provider wallet ID of the provisioned root wallet.
-
-
400Bad Request-
error·object· requiredStandard error payload.
-
code·string· requiredMachine-readable error code.
-
message·string· requiredHuman-readable error message.
-
details·objectOptional error details for debugging.
*·any
-
-
meta·object-
requestId·string· min length 1 · examplereq_exampleRequest identifier for tracing.
-
-
-
401UnauthorizedSame fields as
400. -
403Forbidden. Requires thewallets.configureaction: an API key must hold it (a module'smanageorexecutealso covers itsread), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS anderror.details.actionnames the action. Any other 403 names its own reason. Forbidden: the caller lacks the route's action or the API key is wallet-scoped, or custody setup was refused. A refusal's details.reason names the failed check: custody_mode_not_allowed when a Production project names Managed custody (Production is BYOK only), custody_provider_not_in_release_channel, or provider_not_entitled.Same fields as
400. -
404Not FoundSame fields as
400. -
409ConflictSame fields as
400. -
422Unprocessable EntitySame fields as
400. -
500Internal Server ErrorSame fields as
400. -
503PROVIDER_NOT_CONFIGURED: the deployment holds no credentials for the provider in the project's environment (details.reason provider_not_configured).Same fields as
400.
Example request
curl -X POST 'https://api.solana.com/v1/wallets/initialize' \
-H "Authorization: Bearer $SDP_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"provider": "local"
}'Example responses
{
"configId": "cfg_example",
"publicKey": "So11111111111111111111111111111111111111112",
"walletId": "privy_wallet_123"
}Error responses use the standard error shape.