0. Prerequisites
API credentials are required for this guide. If you have not already gone through the API setup guide, go through those steps now.
1. Create a wallet
Let’s create a simple Ethereum wallet:
curl --request POST \
--url https://api.privy.io/v1/wallets \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--data '{
"chain_type": "ethereum"
}'
The response will include the wallet ID and public address:
{
"id": "jf4mev19seymsqulciv8on0c",
"address": "0x7Ef5363308127128969618240eDcB9F8f61e90F6",
"chain_type": "ethereum",
"policy_ids": [],
"created_at": 1741362961254
}
2. Sign a message
Now let’s sign a message with our new wallet:
curl --request POST \
--url https://api.privy.io/v1/wallets/{wallet_id}/rpc \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--data '{
"method": "personal_sign",
"params": {
"message": "Hello from Privy!",
"encoding": "utf-8"
}
}'
The response will contain the signed message:
{
"method": "personal_sign",
"data": {
"signature": "0x292d67e9c5178447f1c5344b3122997dfba8f00e43102d0b746301e9b4afbbf67d952bf870878d92b8eb066da205840458c0a5fb3f53253dbe1adf9c143678311c",
"encoding": "hex"
}
}
3. Send a transaction
Finally, let’s send a transaction on Ethereum’s testnet, Sepolia:
curl --request POST \
--url https://api.privy.io/v1/wallets/{wallet_id}/rpc \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--data '{
"method": "eth_sendTransaction",
"caip2": "eip155:11155111",
"chain_type": "ethereum",
"params": {
"transaction": {
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"value": 1000000000000000
}
}
}'
You will need to fund your wallet with Sepolia ETH for this step. Use a Sepolia
faucet and send it to the
public address.
The response will contain the transaction hash and a Privy transaction ID:
{
"method": "eth_sendTransaction",
"data": {
"hash": "0x7c91ba85d67ef92cc15f3e9c8d8c5788e982cf83fabe9bfcc66a747aa0bd3701",
"caip2": "eip155:11155111",
"transaction_id": "d2obiyxnblv7jzp73b8scqa8"
}
}
Next steps
Now that you’ve created a wallet and made your first transaction, you can explore:
- Creating policies to control wallet spending and contract interaction
- Setting up webhooks for real-time transaction notifications
- Using idempotency keys to prevent duplicate transactions
- Setting up quorum authorizations for sensitive wallets