Integration guides

Wallet transfers

Move funds between your own stablecoin and fiat wallets


Overview

A wallet transfer moves funds between two wallets you own — for example, consolidating a collected USDC balance into your EUR target wallet on demand, without going through a payment or .

If the source and target wallets share a currency, Volt performs an internal ledger move (INTERNAL); if they differ, Volt converts the funds at the prevailing rate (CONVERSION) — you don't choose this explicitly.

Create the transfer

Requires an Idempotency-Key header (1–64 characters).

FieldTypeRequiredDescription
sourceWalletIdUUIDYesThe to move funds from.
targetWalletIdUUIDYesThe to move funds to.
amountStringYesPositive decimal amount in major units — 2 decimal places for a fiat wallet, 6 for a crypto wallet.
internalReferenceStringNoYour own label for the transfer (up to 100 characters). Not used for deduplication — use Idempotency-Key for that.
Request body
{
  "sourceWalletId": "a1b2c3d4-1234-5678-9abc-def012345678",
  "targetWalletId": "e5f6a7b8-9012-3456-7890-abcdef123456",
  "amount": "100.00",
  "internalReference": "monthly-sweep"
}
Response 201
{
  "id": "f1e2d3c4-1234-5678-9abc-def012345678",
  "status": "PENDING",
  "type": "CONVERSION",
  "internalReference": "monthly-sweep",
  "source": {
    "walletId": "a1b2c3d4-1234-5678-9abc-def012345678",
    "currency": "USDC",
    "amount": "100.00"
  },
  "target": {
    "walletId": "e5f6a7b8-9012-3456-7890-abcdef123456",
    "currency": "EUR",
    "amount": null
  },
  "rate": null,
  "failureReason": null,
  "createdAt": "2026-04-08T10:12:04Z",
  "updatedAt": "2026-04-08T10:12:04Z"
}

A transfer is always created as PENDINGtarget.amount and rate are only populated once a CONVERSION transfer completes.

Wallet transfer statuses

StatusDescription
PENDINGTransfer created, not yet processed.
PROCESSINGTransfer is being executed.
COMPLETEDFunds moved successfully.
FAILEDTransfer failed — see failureReason.

When a transfer ends in FAILED, failureReason explains why:

Failure reasonDescription
INSUFFICIENT_FUNDSThe source wallet does not have enough funds.
WALLET_NOT_FOUNDOne of the specified wallets was not found.
WALLET_MERCHANT_MISMATCHOne of the wallets does not belong to your account.
REJECTED_BY_PROVIDERThe transfer was rejected by the provider.
INTERNAL_ERRORAn internal error occurred.

Reference

Full wallet transfers API reference can be found .

How is this guide?

Last updated on