Send Money - Claimless
Send money to new or existing Payees using the Claimless Payment API
This endpoint is used to create Claimless Payments to new or existing payees. The endpoint is as follows:
POST https://sandbox-api.veem.com/veem/v1.2/claimless-payments
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 500 (Internal Server Error) 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 payer 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-08fe3770f4b3
Request Payload (US)
When sending a claimless payment using Veem's Claimless Payment API to any account using a US account, one must follow the format as shown in the following example:
{
"purposeOfPayment": "Goods",
"payee":{
"email": "[email protected]",
"firstName": "USA First Name",
"lastName": "USA Last Name",
"countryCode": "US",
"phone": "4152306359",
"phoneCountryCode": "+1",
"type": "Personal",
"industry": "Software, IT and Telecommunications",
"subIndustry": "Software",
"businessName": "USA Software Consultancy {{$guid}}",
"business": {
"address": {
"countryCode": "US",
"street": "300 Folsom",
"city": "San Francisco",
"postalCode": "94105",
"province": "CA"
},
"entity": "Contractor",
"taxIdNumber": "33-186-308"
},
"bank": {
"isoCountryCode": "US",
"bankName": "Access Credit Union",
"currencyCode": "USD",
"bankAccountNumber": "1234567",
"routingNumber": "122105155"
}
},
"amount": {
"number": 100,
"currency": "USD"
},
"fundingMethod": {
"id": 2393,
"type": "Bank"
}
}
Request Payload (International)
When sending a claimless payment using Veem's Claimless Payment API to any account using an international account, one must follow the format as shown in the following example:
{
"purposeOfPayment": "Goods",
"payee":{
"email": "[email protected]",
"firstName": "USA First Name",
"lastName": "USA Last Name",
"countryCode": "US",
"phone": "4152306359",
"phoneCountryCode": "+1",
"type": "Personal",
"industry": "Software, IT and Telecommunications",
"subIndustry": "Software",
"businessName": "USA Software Consultancy {{$guid}}",
"business": {
"address": {
"countryCode": "US",
"street": "300 Folsom",
"city": "San Francisco",
"postalCode": "94105",
"province": "CA"
},
"entity": "Contractor",
"taxIdNumber": "33-186-308"
},
"bank":{
"isoCountryCode":"FR",
"bankName":"Bank of France",
"currencyCode":"EUR",
"bankAccountNumber":"12345678",
"routingNumber":"041215032",
"swiftBic": "CUCXCATT",
"bankInstitutionNumber": "879",
"bic": "CUCXCATT",
"iban":"FR1420041010050500013M02606"
}
},
"amount": {
"number": 100,
"currency": "USD"
},
"fundingMethod": {
"id": 2393,
"type": "Bank"
}
}
Request Parameters
The following table contains detailed information on the payload's parameters, such as the parameter name, whether it is mandatory or not, formatting (if applicable), and size of the parameter
Parameter | Mandatory? | Format/Values | Size (in chars) |
---|---|---|---|
purposeOfPayment | Yes | Proof of Payment code required by country regulator (String) | |
notes | No | String | 128 (Max) |
payee.firstName | Yes | String | 64 (Max) |
payee.lastName | Yes | String | 64 (Max) |
payee.email | Yes | String | 254 (Max) |
payee.phone | Yes | String | 32 (Max) |
payee.countryCode | Yes | ISO 3166-1 alpha-2 standard (eg. US, BE, BT etc) | 2 |
payee.type | Yes | Business or Personal | |
payee.industry | Yes | Agriculture Business Services Construction Consumer Services Education Energy, Utilities, Waste & Minerals Finance, Insurance Government, Organizations Holding Companies & Conglomerates Hospitality, Recreation & Tourism Hospitals, Clinics & Healthcare Services Law Firms & Legal Services Manufacturing Media, Arts & Entertainment Real Estate Retail Trade Software, IT and Telecommunications Transportation, Warehousing, Wholesale | |
payee.subIndustry | Yes | Note: Subindustry is unique to each industry, and is impractical to list all of them here. Subindustry information can be found below the table eg. For Agriculture, one can use the Crops subindustry | |
payee.businessName | Yes | String | 128 (Max) |
payee.phoneCountryCode | Yes | Country code (such as +1 for US or Canada, +31 for Netherlands etc. More info available below the table) Note: The + prefix must be included in the parameter | 2-5 |
payee.business.address.countryCode | Yes | ISO 3166-1 alpha-2 standard (eg. US, BE, BT etc) | 2 |
payee.business.address.street | Yes | String | 128 (Max) |
payee.business.address.province | Yes (if no state is provided) | String | 64 (Max) |
payee.business.address.state | Yes(if no province is provided) | String | 64 (Max) |
payee.business.address.postalCode | Yes | String | 64 (Max) |
payee.business.address.city | Yes | String | 64 (Max) |
payee.business.entity | Yes | For Business: Corporation, Company, ForeignCompany, GeneralPartnership, JointVenture, LimitedCompany, LimitedPartnership, NonProfit, Partnership, PublicCompany, Trust, UnlimitedCompany, SoleProprietorship, LLC or Representative For Personal: Contractor, SoleProprietorship, Freelancer, SideProject or PersonalUse Note: Failure to use the correct business entity with the correct account type will result in a 500 Status (Internal Server Error) | |
payee.business.taxIdNumber | Yes | String | 32 (Max) |
payee.bank.isoCountryCode | Yes | ISO 3166-1 alpha-2 standard (eg. US, BE, BT etc) | 2 |
payee.bank.bankName | Yes | String (Note: Bank name and bank routing number MUST be valid) | 128 (Max) |
payee.bank.currencyCode | Yes | Currency Code (ISO 4217) | 3 |
payee.bank.bankAccountNumber | Yes | String Note: Make sure the bank account number is the one associated with the payer's account | |
payee.bank.routingNumber | Yes | Refer to your financial institution of choice for the correct routingNumber for said institution | |
payee.bank.swiftBic | Yes (if payer is a non-US account) | String | 64 (Max) |
payee.bank.bankInstitutionNumber | Yes (if payer is a non-US account) | String | |
payee.bank.bic | Yes (if payer is a non-US account) | String | 64 (Max) |
payee.bank.iban | Yes (if payer is a non-North American account) | String | 34 (Max) |
amount.number | Yes | BigDecimal | |
amount.currency | Yes | Currency Code (ISO 4217) | 3 |
fundingMethod.id | Yes | Long (Bank ID of payer) | |
fundingMethod.type | Yes | One of the following values: "Bank", "External", "Cheque", "Card", "Wallet" "VirtualCard" | |
bruid | No | String | 36 |
goodFundsPayment | No | Boolean |
For extra information, you can find some resources here:
ISO 3166-1 alpha-2 standard: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
Dial codes: https://en.wikipedia.org/wiki/List_of_country_calling_codes
Currency Codes (ISO 4217): https://www.iban.com/currency-codes
Response Payload
Once a valid request has been sent, a response payload of this format should be expected:
{
"requestId": "a5150c19-28d9-480e-9626-0dc220cdd607",
"payee": {
"email": "[email protected]",
"countryCode": "US",
"phone": "tel:+1-415-230-6359"
},
"payeeAmount": {
"number": 100.00,
"currency": "USD"
},
"status": "Sent",
"goodFundsPayment": false,
"realTimePayment": false,
"id": 1325036,
"exchangeRate": {
"fromAmount": 100.00,
"fromCurrency": "USD",
"toAmount": 100.00,
"toCurrency": "USD"
},
"feeInformation": {
"payerInfo": {
"originalAmount": 100.00,
"feeAmount": 0.00,
"totalAmount": 100.00,
"currency": "USD"
},
"payeeInfo": {
"originalAmount": 100.00,
"feeAmount": 1.00,
"totalAmount": 99.00,
"currency": "USD"
}
},
"timeCreated": "2025-01-03T13:26:06.648-08:00",
"timeUpdated": "2025-01-03T13:26:08.113-08:00",
"claimLink": "https://api.qa-us-west-2.veem.com/api/c/N32hI14n",
"debitCreditTxn": {
"creditTxn": null,
"debitTxn": null
},
"fastTransfer": false,
"cancelable": false,
"payerFundingMethodType": "Bank",
"receiverFundingMethodType": "Bank",
"originalRequestId": "a5150c19-28d9-480e-9626-0dc220cdd607"
}
Notes:
- Since the BRUID field is optional, if not provided or expired the payment will resort to using real-time FX rates
- Since the goodFundsPayment field is optional, it will default to false if not provided
Possible Errors
If any mandatory field is missing, one will get a Status 400 (Bad Request) error in the following format:
{
"validationErrorMessage": [
"payee.lastName is required for v1.2",
"payee.industry is required for v1.2"
]
}
Here are some extra examples of specific errors that can pop up during the use of the Claimless Payment API:
Unauthorized
Status Code: 401 (Unauthorized)
Example:
{
"error": "unauthorized",
"error_description": "Full authentication is required to access this resource"
}
Incorrect Funding Method ID
Status Code: 404 (Not Found)
Example:
{
"code": 10000000,
"message": "Resource of type: BankAccount with id: 180618 not found",
"logTag": "6642a1b3-9b67-4bf5-a9ba-ca34138f1b4c",
"timestamp": "2025-01-03T21:34:04.464",
"fileName": "CustomerSvcImpl.java",
"lineNumber": 886
}
Incorrect Business Entity to Account Type
Status Code: 400 (Bad Request)
Example:
{
"code": 50000000,
"message": "Value is unexpected: Personal",
"logTag": "e6313c6f-5d2f-4f93-8111-a225414c9e93",
"timestamp": "2025-01-03T21:35:39.510",
"fileName": "VeemResponseHandler.java",
"lineNumber": 98
}
Updated 3 days ago