0. Prerequisites
This guide assumes the setup guide is complete and a Privy client instance namedclient is available.
1. Creating a wallet
First, create a wallet. The wallet’sid is used in future calls to sign messages and send
transactions.
- Ethereum
- Solana
Errors raised by the SDK inherit from
PrivyAPIError. Catch APIStatusError for non-success API
responses or a more specific subclass such as RateLimitError, BadRequestError, or
NotFoundError. Catch APIConnectionError for network-level failures.User wallets
Create a non-custodial user wallet by first creating a user, then provisioning a wallet for that user.- Ethereum
- Solana
When creating a user wallet, specify the user ID as the
owner of the wallet. Obtain a user ID
by first creating a user.Alternatively, create a user and wallet at the same
time by passing wallets to
client.users.create.2. Signing a message
Next, sign a plaintext message with the wallet using a chain-specific helper. Specify the wallet ID (not its address) from creation.- Ethereum
- Solana
3. Sending transactions
The wallet must have funds to send a transaction. Use a testnet
faucet to test transacting on a testnet (for example, Base
Sepolia), or send funds to the wallet on the network of your choice.
id from wallet creation and the caip2 chain ID for the target network.
- Ethereum
- Solana
4. Creating a user
To create a user independently of the user-wallet flow above, callcreate on the users service and
pass the linked accounts to associate with the user.
Next steps
Authorization keys
Add an extra layer of security by signing requests with authorization keys.
Policies
Restrict what wallets can do with configurable policies.
Idempotency keys
Prevent duplicate transactions with idempotency key support.
Quorum approvals
Require multiple parties to approve before sending a transaction.

