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
Three headers are required to use this endpoint.
Required Headers
Name
Type
Required
Description
Authorization
stringYes
Bearer token (OAuth 2.0) 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 code in the response. An example of a valid header value is as follows:
Bearer c047594b-082c-4da1-be89-08fe3770f4b3See Get Access Token section to generate your Bearer token
X-Request-Id
stringYes
This is a unique string that identifies the current API request, and should follow the UUID format. Reusing this header without changing the value will result in a 409 (Conflict) status code in the response. An example X-request-id is as follows:
48855846-628d-4177-b071-80332a116f0a
Content-Type
stringYes
The content type of the request. Must be
application/json
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 6 days ago
