Veem Multi-Currency Wallet

The Wallet APIs enable users to manage digital wallets, including creating wallets, funding or withdrawing balances, and performing currency conversions

Currently, following currencies are supported:

CurrencyDescription
USDUnited States Dollar
CADCanadian Dollar
EUREuro
CNYChinese Yuan
GBPBritish Pound Sterling
INRIndian Rupee
JPYJapanese Yen
KRWSouth Korean Won
MXNMexican Peso
PHPPhilippine Peso
SARSaudi Riyal
ZARSouth African Rand
AUDAustralian Dollar
TRYTurkish Lira
IDRIndonesian Rupiah

Authorization

OAuth2 token is required in the Authorization header.

Headers

  • X-request-id: For example 48855846-628d-4177-b071-80332a116f0a
  • Authorization: Bearer bearerToken

bearerToken is the Authorization token that belongs to the account created

i.e. Bearer d49e7fd4-2600-4dd4-a572-118668febbe7

see this section to generate your bearerToken

Sandbox Endpoints

Veem's Sandbox environment provides a number of endpoints that can be used to configure testing scenarios.

Use the base URL to access the endpoints in sandbox environment.

POST https://sandbox-api.veem.com/veem/

Create Wallet

All accounts have USD wallet created by default.

POST /v1.2/wallets

Use the table above to check the available currencies.

{
    "currencyCode": "EUR"
}
{
    "id": 66760,
    "accountId": null,
    "availableBalance": {
        "number": 0,
        "currency": "EUR"
    },
    "pendingBalance": {
        "number": 0,
        "currency": "EUR"
    },
    "totalBalance": {
        "number": 0,
        "currency": "EUR"
    },
    "status": "Active"
}

Add funds

To add funds to your wallet, use this endpoint. A valid funding method is required. You can retrieve your funding methods here.

POST /v1.2/payments/wallet/addFunds
{  
    "amount": {  
        "number": 100,  
        "currency": "USD"  
    },  
    "fundingMethod": {  
        "id": 3518,  
        "type": "Bank"  
    }
}
{
    "requestId": "93c4f7df-3b70-4b5b-b496-87f81e0f2b59",
    "payee": {
        "email": "[email protected]",
        "countryCode": "US",
        "phone": "tel:+1-204-661-1473"
    },
    "payeeAmount": {
        "number": 81.10,
        "currency": "EUR"
    },
    "status": "Sent",
    "goodFundsPayment": false,
    "realTimePayment": false,
    "extraInfo": {
        "customInfo": null,
        "isPayeeCoveringCardFee": null
    },
    "id": 1357754,
    "exchangeRate": {
        "fromAmount": 100,
        "fromCurrency": "USD",
        "toAmount": 100,
        "toCurrency": "USD"
    },
    "feeInformation": {
        "payerInfo": {
            "originalAmount": 100.00,
            "feeAmount": 0.00,
            "totalAmount": 100.00,
            "currency": "USD"
        },
        "payeeInfo": {
            "originalAmount": 85.37,
            "feeAmount": 4.27,
            "totalAmount": 81.10,
            "currency": "EUR",
            "fees": [
                {
                    "name": "FX Markup",
                    "displayValue": "0.050000 USD->EUR",
                    "priceItemType": "FX_MARKUP",
                    "rate": 0.050000
                },
                {
                    "name": "FX Marked Up",
                    "displayValue": "0.853730000000 USD->EUR",
                    "priceItemType": "FX_TOTAL_RATE",
                    "rate": 0.811044
                }
            ]
        }
    },
    "timeCreated": "2025-06-27T07:56:25.395-07:00",
    "timeUpdated": "2025-06-27T07:56:27.216-07:00",
    "fastTransfer": false,
    "cancelable": false,
    "payerFundingMethodType": "Bank",
    "receiverFundingMethodType": "Wallet"
}

List Wallets - Balance

Retrieve a list of all wallets and check their current balances.

GET /v1.2/wallets
[
    {
        "id": 66760,
        "status": "Active",
        "availableBalance": {
            "number": 0.00,
            "currency": "EUR"
        },
        "pendingBalance": {
            "number": 81.10,
            "currency": "EUR"
        },
        "totalBalance": {
            "number": 81.10,
            "currency": "EUR"
        }
    },
    {
        "id": 66704,
        "status": "Active",
        "availableBalance": {
            "number": 0.00,
            "currency": "USD"
        },
        "pendingBalance": {
            "number": 0.00,
            "currency": "USD"
        },
        "totalBalance": {
            "number": 0.00,
            "currency": "USD"
        }
    }
]

List Wallet by ID

Retrieve a wallet and check their current balances.

GET /v1.2/wallets/{{wallet_id}}
{
    "id": 66704,
    "status": "Active",
    "availableBalance": {
        "number": 0.00,
        "currency": "USD"
    },
    "pendingBalance": {
        "number": 0.00,
        "currency": "USD"
    },
    "totalBalance": {
        "number": 0.00,
        "currency": "USD"
    }
}

Wallet Withdraw

The withdraw endpoint allows to withdraw money from the wallet. The withdrawal will transfer the funds to the account's default funding method, whether it’s a bank account or card.

GET /v1.2/payments/wallet/withdraw
{
    "amount": {
        "number": 50,
        "currency": "USD"
    }
}
{
    "id": 12345,
    "payee": {
        "email": "[email protected]",
        "phone": "tel:+33-1-23-45-67-89",
        "countryCode": "FR"
    },
    "status": "Sent",
    "claimLink": "https://api.veem.com/api/c/ABCDEF",
    "requestId": "e5dbaf73-38c2-4a92-bf3d-87bc65d77a9i",
    "payeeAmount": {
        "number": 15224,
        "currency": "USD"
    },
    "timeCreated": "2024-08-22T16:54:54.367-07:00",
    "timeUpdated": "2024-08-22T16:54:56.024-07:00",
    "fastTransfer": false,
    "debitCreditTxn": {
        "debitTxn": null,
        "creditTxn": null
    }
}

Move funds between Wallets

The convert endpoint allows to transfer funds between different wallets under their account.

Note: When moving funds between wallets, both the source and target wallet should exist.

GET /v1.2/payments/wallet/convert

Request Payloads

The API supports two types fund movement between wallet balances - sending exact amount and receiving exact amount.

Sending Exact Amount

Used when the user specifies the exact amount to send from the source wallet.

{
    "sourceWallet": {
        "currency": "USD",
        "number": 50
    },
    "destinationWallet": {
        "currency": "MXN"
    }
}
{
    "id": 462531,
    "status": "Sent",
    "exchangeRate": {
        "fromAmount": 50.00,
        "fromCurrency": "USD",
        "toAmount": 50.00,
        "toCurrency": "USD"
    },
    "payeeAmount": {
        "number": 911.59,
        "currency": "MXN"
    },
    "payerFundingMethodType": "Wallet",
    "receiverFundingMethodType": "Wallet"
  ....
}

Receiving Exact Amount

Used when the user specifies the exact amount to receive in the destination wallet.

{
    "sourceWallet": {
        "currency": "USD"
    },
    "destinationWallet": {
        "currency": "MXN",
        "number": 1030
    }
}
{
    "id": 462531,
    "status": "Sent",
    "exchangeRate": {
        "fromAmount": 50.00,
        "fromCurrency": "USD",
        "toAmount": 50.00,
        "toCurrency": "USD"
    },
    "payeeAmount": {
        "number": 911.59,
        "currency": "MXN"
    },
    "payerFundingMethodType": "Wallet",
    "receiverFundingMethodType": "Wallet"
  ....
}

Validation Rules

  • The number field cannot be sent in both sourceWallet and destinationWallet at the same time.
  • The request should be structured to either specify:
    • The amount to send sourceWallet.number
    • The amount to receive destinationWallet.number
  • At least one wallet must be USD either source or destination

Error Responses

HTTP StatusDescription
400 Bad RequestConverting number must be provided either in sourceWallet OR destinationWallet, but not both or neither.
400 Bad RequestMissing Wallet Source currency code
400 Bad RequestThe amount $500000 exceeds the available balance
400 Bad RequestChoose USD as one currency to proceed with conversion