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.
BearerAuthorizationBearer <JWT>OAuth access token.
Idempotency-Key*stringIt 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 <= 64X-Volt-Api-Version*1Version of the API used. Currently, version 1 is the only version.
1application/json- body
sourceWalletId*stringWallet the funds are taken from. Must differ from targetWalletId.
uuidtargetWalletId*stringWallet the funds are credited to.
uuidamount*Amount to move as an exact decimal string, in major units of the source wallet's currency: at most 2 decimal places for a FIAT source wallet, 6 for CRYPTO.
internalReference?stringIdentifier of the transfer in the partner's system.
length <= 100Created - The transfer was created and dispatched, returning transfer details. Funds have not moved yet.
application/json- response
A movement of funds between two of your wallets. Execution is asynchronous: settlement-dependent fields are null until the transfer completes; rate stays null for INTERNAL transfers.
id*stringIdentifier of the wallet transfer.
uuidstatus*WalletTransferStatusEnumTransfer status.
"PENDING""PROCESSING""COMPLETED""FAILED"type*WalletTransferTypeEnumTransfer type, derived from the two wallets' currencies.
"INTERNAL""CONVERSION"internalReference*|Identifier of the transfer in the partner's system, as supplied at creation.
source*The debited side. amount is the requested amount and is always present.
target*The credited side. amount is null until the transfer completes, then carries the settled credited amount.
rate*|Settled conversion rate as an exact decimal string: 1 unit of the source currency equals rate units of the target currency. This field is null for INTERNAL transfers and until a CONVERSION executes.
failureReason*|Why the transfer failed. This field is null unless status is FAILED.
"REJECTED_BY_PROVIDER""INSUFFICIENT_FUNDS""WALLET_NOT_FOUND""WALLET_MERCHANT_MISMATCH""INTERNAL_ERROR"createdAt*stringDate of transfer creation.
date-timeupdatedAt*|Date of transfer's last update.
date-timecurl -X POST 'https://stablecoins.sandbox.volt.io/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"}