Wallet
Transfer
Execute a transfer from the bot embedded wallet
When to use this
Send SOL or token value directly from the bot wallet.
Endpoint
POST /api/bot/v1/wallet/transfersAuth
Authorization: Bot YOUR_BOT_TOKEN
Request Body
| Field | Type | Required | Notes |
|---|---|---|---|
to_address | string | Yes | Recipient wallet address |
asset | `"SOL" | string` | Yes |
amount | string | Yes | Decimal amount |
memo | string | No | Optional annotation |
idempotency_key | string | No | Retry-safe transfer intent |
Response
| Field | Type | Description |
|---|---|---|
transfer_id | string | Internal transfer ID |
status | `"submitted" | "confirmed" |
signature | string | Chain transaction signature |
Errors
| Status | Reason |
|---|---|
400 | Invalid transfer payload |
401 | Invalid token |
402 | Insufficient balance |
403 | Wallet transfer scope disabled |
429 | Rate limited |
cURL
curl -X POST https://api.vxil.io/api/bot/v1/wallet/transfers \
-H "Authorization: Bot YOUR_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to_address": "8a5...xyz",
"asset": "SOL",
"amount": "0.25"
}'TypeScript
await fetch("https://api.vxil.io/api/bot/v1/wallet/transfers", {
method: "POST",
headers: {
"Authorization": `Bot ${process.env.VXIL_BOT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
to_address: "8a5...xyz",
asset: "SOL",
amount: "0.25",
}),
});Retry and idempotency
Always retry with the same idempotency_key after network failures to prevent duplicate transfers.