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:
| Currency | Description |
|---|---|
| USD | United States Dollar |
| CAD | Canadian Dollar |
| EUR | Euro |
| CNY | Chinese Yuan |
| GBP | British Pound Sterling |
| INR | Indian Rupee |
| JPY | Japanese Yen |
| KRW | South Korean Won |
| MXN | Mexican Peso |
| PHP | Philippine Peso |
| SAR | Saudi Riyal |
| ZAR | South African Rand |
| AUD | Australian Dollar |
| TRY | Turkish Lira |
| IDR | Indonesian Rupiah |
Authorization
OAuth2 token is required in the Authorization header.
Headers
There are 2 headers necessary for the use of this endpoint:
- X-request-id: This is a number unique to the current API request, and follows the UUID format. Reusing this header without changing the value will result in a 409 (Conflict) status. An example X-request-id is as follows:
48855846-628d-4177-b071-80332a116f0a
- Authorization: This header holds the bearer token required to use Veem's public API, and belongs to the owner account. Failure to use a valid bearer token will result in a 404 (Not Found) status. An example of a valid token is as follows:
Bearer c047594b-082c-4da1-be89-08fe3770f4b3See Get Access Token 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/walletsUse 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/convertRequest 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
sourceWalletanddestinationWalletat the same time. - The request should be structured to either specify:
- The amount to send
sourceWallet.number - The amount to receive
destinationWallet.number
- The amount to send
- At least one wallet must be USD either source or destination
Error Responses
| HTTP Status | Description |
|---|---|
| 400 Bad Request | Converting number must be provided either in sourceWallet OR destinationWallet, but not both or neither. |
| 400 Bad Request | Missing Wallet Source currency code |
| 400 Bad Request | The amount $500000 exceeds the available balance |
| 400 Bad Request | Choose USD as one currency to proceed with conversion |
Updated about 2 months ago
