Stablecoins APIbetaWallet transfers

Create wallet transfer

POST
/wallet-transfers

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.

Authorization

Bearer
headerAuthorizationBearer <JWT>

OAuth access token.

Header Parameters

Idempotency-Key*string

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.

Length1 <= length <= 64
X-Volt-Api-Version*1

Version of the API used. Currently, version 1 is the only version.

Value in1

Request Body

application/json
  1. body
sourceWalletId*string

Wallet the funds are taken from. Must differ from targetWalletId.

Formatuuid
targetWalletId*string

Wallet the funds are credited to.

Formatuuid
amount*

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?string

Identifier of the transfer in the partner's system.

Lengthlength <= 100

Response Body

Created - The transfer was created and dispatched, returning transfer details. Funds have not moved yet.

application/json
  1. 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*string

Identifier of the wallet transfer.

Formatuuid
status*WalletTransferStatusEnum

Transfer status.

Value in"PENDING""PROCESSING""COMPLETED""FAILED"
type*WalletTransferTypeEnum

Transfer type, derived from the two wallets' currencies.

Value in"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.

Value in"REJECTED_BY_PROVIDER""INSUFFICIENT_FUNDS""WALLET_NOT_FOUND""WALLET_MERCHANT_MISMATCH""INTERNAL_ERROR"
createdAt*string

Date of transfer creation.

Formatdate-time
updatedAt*|

Date of transfer's last update.

Formatdate-time
Example Request
curl -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"}'
Example Response
{  "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"}