Create wallets in batch
curl --request POST \
--url https://api.privy.io/v1/wallets/batch \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--data '
{
"wallets": [
{
"chain_type": "ethereum"
},
{
"chain_type": "solana"
}
]
}
'HttpResponse<String> response = Unirest.post("https://api.privy.io/v1/wallets/batch")
.header("privy-app-id", "<privy-app-id>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"wallets\": [\n {\n \"chain_type\": \"ethereum\"\n },\n {\n \"chain_type\": \"solana\"\n }\n ]\n}")
.asString();const options = {
method: 'POST',
headers: {
'privy-app-id': '<privy-app-id>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({wallets: [{chain_type: 'ethereum'}, {chain_type: 'solana'}]})
};
fetch('https://api.privy.io/v1/wallets/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.privy.io/v1/wallets/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallets' => [
[
'chain_type' => 'ethereum'
],
[
'chain_type' => 'solana'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"privy-app-id: <privy-app-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.privy.io/v1/wallets/batch"
payload := strings.NewReader("{\n \"wallets\": [\n {\n \"chain_type\": \"ethereum\"\n },\n {\n \"chain_type\": \"solana\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("privy-app-id", "<privy-app-id>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"index": 0,
"success": true,
"wallet": {
"id": "id2tptkqrxd39qo9j423etij",
"address": "0xF1DBff66C993EE895C8cb176c30b07A559d76496",
"display_name": "Treasury",
"external_id": "my-order-123",
"chain_type": "ethereum",
"policy_ids": [],
"additional_signers": [],
"owner_id": "rkiz0ivz254drv1xw982v3jq",
"entity": null,
"created_at": 1741834854578,
"exported_at": null,
"imported_at": null,
"archived_at": null
}
},
{
"index": 1,
"success": false,
"error": "Policy not found",
"code": "not_found"
}
]
}Wallets
Create wallets in batch
Creates multiple wallets in a single request.
POST
/
v1
/
wallets
/
batch
Create wallets in batch
curl --request POST \
--url https://api.privy.io/v1/wallets/batch \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--data '
{
"wallets": [
{
"chain_type": "ethereum"
},
{
"chain_type": "solana"
}
]
}
'HttpResponse<String> response = Unirest.post("https://api.privy.io/v1/wallets/batch")
.header("privy-app-id", "<privy-app-id>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"wallets\": [\n {\n \"chain_type\": \"ethereum\"\n },\n {\n \"chain_type\": \"solana\"\n }\n ]\n}")
.asString();const options = {
method: 'POST',
headers: {
'privy-app-id': '<privy-app-id>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({wallets: [{chain_type: 'ethereum'}, {chain_type: 'solana'}]})
};
fetch('https://api.privy.io/v1/wallets/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.privy.io/v1/wallets/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallets' => [
[
'chain_type' => 'ethereum'
],
[
'chain_type' => 'solana'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"privy-app-id: <privy-app-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.privy.io/v1/wallets/batch"
payload := strings.NewReader("{\n \"wallets\": [\n {\n \"chain_type\": \"ethereum\"\n },\n {\n \"chain_type\": \"solana\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("privy-app-id", "<privy-app-id>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"results": [
{
"index": 0,
"success": true,
"wallet": {
"id": "id2tptkqrxd39qo9j423etij",
"address": "0xF1DBff66C993EE895C8cb176c30b07A559d76496",
"display_name": "Treasury",
"external_id": "my-order-123",
"chain_type": "ethereum",
"policy_ids": [],
"additional_signers": [],
"owner_id": "rkiz0ivz254drv1xw982v3jq",
"entity": null,
"created_at": 1741834854578,
"exported_at": null,
"imported_at": null,
"archived_at": null
}
},
{
"index": 1,
"success": false,
"error": "Policy not found",
"code": "not_found"
}
]
}Batch behavior
This endpoint creates multiple wallets in a single request. Each wallet creation is processed independently, so a failure for one wallet does not affect the others. If the request body is valid, the endpoint returns HTTP 200 with aresults array containing the success or failure status for each wallet. Request-level errors (invalid body, authentication failure, rate limiting) return standard HTTP error codes before any wallets are processed.Authorizations
Basic Auth header with your app ID as the username and your app secret as the password.
Headers
ID of your Privy app.
Body
application/json
Request body for batch wallet creation.
Array of wallet creation requests. Minimum 1, maximum 100.
Required array length:
1 - 100 elementsShow child attributes
Show child attributes
Response
200 - application/json
Batch creation results. Always returns 200 with a results array containing success/failure status for each wallet.
Response for a batch wallet creation request.
Array of results for each wallet creation request, in the same order as input.
A successful wallet creation result within a batch operation.
- WalletBatchCreateSuccess
- WalletBatchCreateFailure
Show child attributes
Show child attributes
Was this page helpful?

