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
- 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
anddestinationWallet
at 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 1 day ago