Create wallet transfer
Create new wallet transfer, moving funds from one of your wallets to another.
The same currency on both sides executes as an INTERNAL book move; different currencies execute as a CONVERSION at the live rate. The type is derived, never supplied.
Execution is asynchronous: 201 returns the transfer in PENDING and funds have not moved yet. Poll the transfer until it reaches COMPLETED or FAILED. Insufficient balance is discovered during execution and surfaces as FAILED.
Authorization
Bearer OAuth access token.
In: header
Header Parameters
It helps prevent duplicates in your POST requests.
We recommend using a UUID for the key, however you may use any other unique identifier you choose.
1 <= length <= 64Version of the API used. Currently, version 1 is the only version.
Value in
- 1
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/wallet-transfers" \ -H "Idempotency-Key: 85136c79cbf9fe36bb9d05d0639c70c265c18d37" \ -H "X-Volt-Api-Version: 1" \ -H "Content-Type: application/json" \ -d '{ "sourceWalletId": "0b8d3f21-7c4e-4a6d-8e2f-a9c1b3d5e7f0", "targetWalletId": "6a4f0c9e-2d1b-4c8a-9f3e-b7d2a1c4e5f6", "amount": "100.50", "internalReference": "inv-2214" }'{ "id": "4d7e1a9c-3b5f-4e8d-a2c6-f0b4d8e2a6c0", "status": "PENDING", "type": "CONVERSION", "internalReference": "inv-2214", "source": { "walletId": "0b8d3f21-7c4e-4a6d-8e2f-a9c1b3d5e7f0", "currency": "USDC", "amount": "100.500000" }, "target": { "walletId": "6a4f0c9e-2d1b-4c8a-9f3e-b7d2a1c4e5f6", "currency": "EUR", "amount": null }, "rate": null, "failureReason": null, "createdAt": "2026-08-25T10:12:03+00:00", "updatedAt": "2026-08-25T10:12:03+00:00"}