Skip to main content

Create Beneficiary (Atlas)

Overview

The POST /banking/ibans/v2/recipients endpoint registers a new payout recipient in the Atlas system. The endpoint supports three primary categories of beneficiaries via schema oneOf validation:

  1. Stablecoin Beneficiary (STABLECOIN): Requires cryptoCurrency (USDC or USDT), blockchain (ethereum_erc20), cryptoCurrencyWalletAddress (valid 0x-prefixed 40-character hex address), and cryptoCurrencyWalletHostedOption.
    • If accountLabel (wallet nickname) is provided, companyName is required.
    • If accountLabel is omitted, either companyName or both firstName + lastName must be provided, along with full beneficiaryAddress.
  2. Bank Beneficiary (Domestic / Non-International): LOCAL, MOBILE_MONEY, HK_BANK. Requires accountNumber, bankCode, bankName, and bankAddress.countryCode.
    • company: requires companyName.
    • individual: requires firstName and lastName.
    • myOrganisation: no name fields required.
  3. Bank Beneficiary (International SWIFT): INTERNATIONAL. In addition to bank details, requires beneficiaryAddress.addressLine1 and beneficiaryAddress.countryCode.

SWIFT codes belonging to sanctioned (OORA - Out of Risk Appetite) countries are automatically rejected. Furthermore, when the client company is classified as financial services or crypto, the nestedType attribute is mandatory.

Resource Access

  • HTTP Method: POST
  • Endpoint: /banking/ibans/v2/recipients
  • Authentication: Bearer token required

Request Headers

HeaderValueRequiredDescription
AuthorizationBearer {access_token}YesJWT Bearer access token
Content-Typeapplication/jsonYesRequest payload format
Acceptapplication/jsonYesResponse payload format
x-api-keystringNoOptional API key

Request Body

Core Requirements Matrix

Payment ModeBeneficiary TypeMandatory Fields
LOCAL / MOBILE_MONEY / HK_BANKcompanycurrencyId, paymentMode, beneficiaryType, accountNumber, bankCode, bankName, bankAddress.countryCode, companyName
LOCAL / MOBILE_MONEY / HK_BANKindividualcurrencyId, paymentMode, beneficiaryType, accountNumber, bankCode, bankName, bankAddress.countryCode, firstName, lastName
LOCAL / MOBILE_MONEY / HK_BANKmyOrganisationcurrencyId, paymentMode, beneficiaryType, accountNumber, bankCode, bankName, bankAddress.countryCode
INTERNATIONALcompanyAll local fields + companyName + beneficiaryAddress.addressLine1 + beneficiaryAddress.countryCode
INTERNATIONALindividualAll local fields + firstName + lastName + beneficiaryAddress.addressLine1 + beneficiaryAddress.countryCode
STABLECOINAnycurrencyId, paymentMode (STABLECOIN), beneficiaryType, cryptoCurrency, blockchain, cryptoCurrencyWalletAddress, cryptoCurrencyWalletHostedOption

Key Request Fields

FieldTypeRequiredDescription
currencyIdintegerYesSupported currency identifier (e.g., 1 for GBP, 2 for EUR, 4 for USD).
paymentModestringYesPayment route: LOCAL, INTERNATIONAL, MOBILE_MONEY, STABLECOIN, HK_BANK.
beneficiaryTypestringYesType of entity: company, individual, myOrganisation.
accountNumberstringConditionalAccount number or IBAN. Required for non-stablecoin payment modes.
accountLabelstringNoWallet nickname (max 50 chars) for stablecoin beneficiaries.
bankCodestringConditionalSort code, routing number, BIC, or clearing code. Required for bank modes.
bankNamestringConditionalOfficial name of receiving financial institution.
companyNamestringConditionalRequired when beneficiaryType is company.
firstNamestringConditionalRequired when beneficiaryType is individual.
lastNamestringConditionalRequired when beneficiaryType is individual.
bankAddressobjectConditionalBank location object with required countryCode (2-letter ISO code).
beneficiaryAddressobjectConditionalRecipient address object (addressLine1, city, countryCode, postCode, stateOrProvience).
cryptoCurrencystringConditionalUSDC or USDT. Required for STABLECOIN.
blockchainstringConditionalethereum_erc20. Required for STABLECOIN.
cryptoCurrencyWalletAddressstringConditional0x-prefixed 40-character hex address. Required for STABLECOIN.
cryptoCurrencyWalletHostedOptionstringConditionaldedicated_wallet_via_custodian, exchange, self_hosted_wallet, or not_known.
cryptoCurrencyWalletHostedOnstringNoSpecific custodian/exchange identifier (e.g. exchange_coinbase, custodian_bit_go, self_hosted_metamask).
nestedTypestringConditionalRequired for financial services/crypto clients: OPEX, NESTED_CUSTOMER, NESTED_PAYEE.

Request Examples

1. Corporate Bank Beneficiary (Domestic Local)

{
"currencyId": 1,
"paymentMode": "LOCAL",
"beneficiaryType": "company",
"companyName": "Acme Global Logistics Ltd",
"accountNumber": "20406080",
"bankCode": "200000",
"bankName": "Barclays Bank UK",
"bankAddress": {
"countryCode": "GB",
"city": "London",
"address": "1 Churchill Place"
},
"partyType": "Third_Party"
}

2. Stablecoin Beneficiary (USDC ERC-20)

{
"currencyId": 4,
"paymentMode": "STABLECOIN",
"beneficiaryType": "company",
"companyName": "Alpha Trading Corp",
"accountLabel": "Alpha Treasury USDC",
"cryptoCurrency": "USDC",
"blockchain": "ethereum_erc20",
"cryptoCurrencyWalletAddress": "0x71C84712F2843A1B51390467aC01C5B72803b9b3",
"cryptoCurrencyWalletHostedOption": "exchange",
"cryptoCurrencyWalletHostedOn": "exchange_coinbase",
"partyType": "Third_Party"
}

3. International Wire Beneficiary (SWIFT)

{
"currencyId": 4,
"paymentMode": "INTERNATIONAL",
"beneficiaryType": "company",
"companyName": "Nairobi Import Export Co",
"accountNumber": "010029384756",
"bankCode": "BARCKENX",
"bankName": "Absa Bank Kenya PLC",
"bankAddress": {
"countryCode": "KE",
"city": "Nairobi",
"address": "Absa Headquarters, Waiyaki Way"
},
"beneficiaryAddress": {
"countryCode": "KE",
"city": "Nairobi",
"addressLine1": "Plot 45 Enterprise Road Industrial Area",
"postCode": "00100"
},
"partyType": "Third_Party"
}

Response

Success Response (200 OK)

{
"success": true,
"accounts": {
"id": 948201,
"companyId": 1045,
"currencyId": 1,
"paymentMode": "LOCAL",
"beneficiaryType": "company",
"companyName": "Acme Global Logistics Ltd",
"accountNumber": "20406080",
"bankCode": "200000",
"bankName": "Barclays Bank UK",
"bankAddress": {
"countryCode": "GB",
"city": "London",
"address": "1 Churchill Place"
},
"verificationState": "approved",
"isAccountActive": true,
"isArchived": false,
"createdAt": "2026-09-15T18:30:00.000Z"
}
}

Response Fields

FieldTypeDescription
successbooleanIndicates if the beneficiary was registered successfully.
accounts.idintegerUnique identifier for the created beneficiary.
accounts.companyIdintegerCompany profile associated with this recipient.
accounts.verificationStatestringScreening status: approved, pending, or rejected.
accounts.isAccountActivebooleanWhether this account is active and available for payout routing.
accounts.createdAtstring (ISO-8601)Timestamp when the beneficiary was created.

Error Responses

  • 400 Bad Request: Invalid body parameters, missing mandatory conditional fields, or failed pattern validation.
  • 401 Unauthorized: Missing or expired Bearer token.
  • 404 Not Found: Currency or risk factor entry not found.
  • 500 Internal Server Error: Internal platform error.

Code Examples

cURL

curl -X POST "https://gateway.ahrvo.network/banking/ibans/v2/recipients" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"currencyId": 1,
"paymentMode": "LOCAL",
"beneficiaryType": "company",
"companyName": "Acme Global Logistics Ltd",
"accountNumber": "20406080",
"bankCode": "200000",
"bankName": "Barclays Bank UK",
"bankAddress": {
"countryCode": "GB"
}
}'

Python

import requests

url = "https://gateway.ahrvo.network/banking/ibans/v2/recipients"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}

payload = {
"currencyId": 1,
"paymentMode": "LOCAL",
"beneficiaryType": "company",
"companyName": "Acme Global Logistics Ltd",
"accountNumber": "20406080",
"bankCode": "200000",
"bankName": "Barclays Bank UK",
"bankAddress": {
"countryCode": "GB"
}
}

response = requests.post(url, json=payload, headers=headers)
data = response.json()
print("Beneficiary ID:", data["accounts"]["id"])

JavaScript (Node.js)

const axios = require('axios');

const url = 'https://gateway.ahrvo.network/banking/ibans/v2/recipients';
const headers = {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
};

const payload = {
currencyId: 1,
paymentMode: 'LOCAL',
beneficiaryType: 'company',
companyName: 'Acme Global Logistics Ltd',
accountNumber: '20406080',
bankCode: '200000',
bankName: 'Barclays Bank UK',
bankAddress: {
countryCode: 'GB'
}
};

axios.post(url, payload, { headers })
.then(res => console.log('Beneficiary Created:', res.data.accounts.id))
.catch(err => console.error(err.response ? err.response.data : err.message));

Interactive API Explorer