Get Beneficiary List

POST https://trade-uk.sandbox.zodiamarkets.com/api/3/beneficiaries

List Beneficiaries

Retrieve a list of third-party beneficiaries configured for your account along with their verified crypto wallet addresses. Beneficiaries are external entities that can receive digital assets from your trades via third-party settlement.


Request

Body Parameters

ParameterTypeRequiredDefaultDescription
accountGroupUuidStringNo-Filter beneficiaries by specific account group UUID
limitIntegerNo50Maximum results to return (1-200)
offsetIntegerNo0Offset for pagination

Example Request

{
  "accountGroupUuid": "2073252c-81ed-41be-bf4d-d51b8f2246b8",
  "limit": 50,
  "offset": 0
}

Get all beneficiaries (no filter):

{
  "limit": 100,
  "offset": 0
}

Response

Success Response (200 OK)

{
  "data": [
    {
      "companyName": "TECH COMPANY",
      "dateOfFormation": "2025-11-01",
      "countryOfFormation": "GB",
      "countryOfRegistration": "GB",
      "uuid": "5fff78ca-d87f-424f-90bf-96b1906a284b",
      "clientShortcode": "USDTTEST1",
      "clientAccountGroupName": "Default",
      "clientAccountGroupUuid": "2073252c-81ed-41be-bf4d-d51b8f2246b8",
      "type": "ENTITY",
      "kind": "BENEFICIARY",
      "phoneNumber": "(44)172799567",
      "website": "www.mytechcompany.com",
      "email": "[email protected]",
      "vasp": true,
      "enabled": false,
      "verified": false,
      "beneficiaryAddress": {
        "country": "GB",
        "city": "London",
        "street": "21 Tech Street",
        "postalCode": "N5 YAY",
        "stateProvince": "Greater London",
        "createdAt": "2026-01-23T17:49:56Z",
        "updatedAt": "2026-01-23T17:49:56Z"
      },
      "kycDetails": {
        "occupation": "Service Provider",
        "sourceOfFunds": "Trading",
        "methodOfVerification": "Electronic",
        "industryType": "Technology",
        "entityType": "NA",
        "natureOfActivity": "Fintech",
        "beneficiaryOwnership": false,
        "createdAt": "2026-01-23T17:49:55Z",
        "updatedAt": "2026-01-23T17:49:55Z"
      },
      "identifications": [
        {
          "type": "BUSINESS_REGISTRATION",
          "number": "EA990098771",
          "typeOther": "",
          "createdAt": "2026-01-23T17:49:52Z",
          "updatedAt": "2026-01-23T17:49:52Z"
        },
        {
          "type": "LEI",
          "number": "12345678",
          "typeOther": "",
          "createdAt": "2026-01-23T17:49:52Z",
          "updatedAt": "2026-01-23T17:49:52Z"
        },
        {
          "type": "TAX_ID",
          "number": "09898766",
          "typeOther": "",
          "createdAt": "2026-01-23T17:49:54Z",
          "updatedAt": "2026-01-23T17:49:54Z"
        }
      ],
      "bankAccounts": [
        {
          "bankName": "STANDARD CHARTERED BANK GB",
          "bankBranchName": "STANDARD CHARTERED BASINGHALL",
          "accountNumber": "",
          "accountAlias": "Tech Company (UK) GBP",
          "accountName": "TECH COMPANY Account Main",
          "currency": "GBP",
          "iban": "GB07SCB60924280026876",
          "swiftBic": "SCBGLXXX",
          "country": "GB",
          "city": "London",
          "street": "1 Basinghall Avenue",
          "postalCode": "EC1 2LA",
          "memo": "TEST MEMO",
          "enabled": true,
          "verified": true,
          "createdAt": "2026-01-23T17:49:50Z",
          "updatedAt": "2026-01-23T17:49:50Z"
        }
      ],
      "wallets": [
        {
          "uuid": "d1d6a755-e97e-4278-b246-2ea18a54ab60",
          "blockchain": "Polygon",
          "asset": "USDC",
          "walletAddress": "0x9882761678912",
          "alias": "TECH_USDC_POL",
          "type": "SELF_HOSTED",
          "memo": "Backup",
          "vasp": "",
          "executionProvider": "",
          "default": false,
          "enabled": true,
          "whitelisted": true,
          "createdAt": "2026-01-23T17:49:48Z",
          "updatedAt": "2026-01-23T17:50:32Z"
        },
        {
          "uuid": "88ce5ff8-3199-4b8c-85e2-44d9da960abf",
          "blockchain": "Ethereum",
          "asset": "USDC",
          "walletAddress": "0x908728727777661",
          "alias": "TECH_USDC_MAIN-ETH",
          "type": "SELF_HOSTED",
          "memo": "Payments",
          "vasp": "",
          "executionProvider": "",
          "default": false,
          "enabled": true,
          "whitelisted": true,
          "createdAt": "2026-01-23T17:49:49Z",
          "updatedAt": "2026-01-23T17:50:31Z"
        },
        {
          "uuid": "0e333c18-cbf1-4c26-8b9e-cdecce5e04bc",
          "blockchain": "TRON",
          "asset": "USDT",
          "walletAddress": "0x98887182891",
          "alias": "TECH_USDT_TRON",
          "type": "CUSTODY",
          "memo": "Payment2",
          "vasp": "COINBASE",
          "executionProvider": "BINANCE",
          "default": false,
          "enabled": true,
          "whitelisted": true,
          "createdAt": "2026-01-23T17:49:47Z",
          "updatedAt": "2026-01-23T17:50:30Z"
        }
      ],
      "createdAt": "2026-01-23T17:41:41Z",
      "updatedAt": "2026-01-23T17:41:41Z"
    }
  ]
}

Response Fields

Root Object

FieldTypeDescription
dataArrayArray of beneficiary objects

Beneficiary Object

FieldTypeDescription
uuidStringUnique identifier for the beneficiary
companyNameStringBeneficiary company/entity name
typeStringENTITY or INDIVIDUAL
kindStringAlways BENEFICIARY
enabledBooleanWhether beneficiary is enabled for trading
verifiedBooleanWhether beneficiary has completed verification
vaspBooleanVirtual Asset Service Provider flag
clientShortcodeStringYour account identifier
clientAccountGroupNameStringAccount group (sub-account) name
clientAccountGroupUuidStringAccount group UUID
emailStringBeneficiary contact email
phoneNumberStringBeneficiary contact phone
websiteStringBeneficiary website URL
dateOfFormationStringCompany formation date (YYYY-MM-DD)
countryOfFormationStringISO 3166-1 alpha-2 country code
countryOfRegistrationStringISO 3166-1 alpha-2 country code
beneficiaryAddressObjectBeneficiary address details
kycDetailsObjectKYC and compliance information
identificationsArrayBusiness registration and tax identifications
bankAccountsArrayBank accounts configured for fiat settlement
walletsArrayCrypto wallet addresses for digital asset settlement
createdAtStringBeneficiary creation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

Beneficiary Address

FieldTypeDescription
streetStringStreet address
cityStringCity
stateProvinceStringState or province
postalCodeStringPostal/ZIP code
countryStringISO 3166-1 alpha-2 country code
createdAtStringCreation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

KYC Details

FieldTypeDescription
occupationStringOccupation or business activity
sourceOfFundsStringSource of funds description
methodOfVerificationStringVerification method used
industryTypeStringIndustry classification
entityTypeStringLegal entity type
natureOfActivityStringNature of business activity
beneficiaryOwnershipBooleanBeneficiary ownership flag
createdAtStringCreation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

Identification Object

FieldTypeDescription
typeStringBUSINESS_REGISTRATION, LEI, PASSPORT, NATIONAL_ID, DRIVERS_LICENSE, SSN, TAX_ID, EIN, VAT_NUMBER, OTHER
numberStringIdentification number
typeOtherStringCustom type (if type is "OTHER")
createdAtStringCreation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

Bank Account Object

FieldTypeDescription
bankNameStringBank institution name
bankBranchNameStringBranch name
accountNumberStringBank account number
accountAliasStringFriendly alias for the account
accountNameStringAccount holder name
currencyStringAccount currency (ISO 4217)
ibanStringInternational Bank Account Number
swiftBicStringSWIFT/BIC code
countryStringISO 3166-1 alpha-2 country code
cityStringBank branch city
streetStringBank branch street address
postalCodeStringBank branch postal code
memoStringAdditional notes
enabledBooleanWhether account is enabled
verifiedBooleanWhether account is verified
createdAtStringCreation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

Wallet Object

FieldTypeDescription
uuidStringUnique identifier
blockchainStringBlockchain network (e.g., Ethereum, Polygon, TRON)
assetStringDigital asset symbol (e.g., USDC, USDT, BTC)
walletAddressStringBlockchain wallet address
aliasStringFriendly alias for the wallet
typeStringSELF_HOSTED or CUSTODY
memoStringAdditional notes
vaspStringVirtual Asset Service Provider name (if custody)
executionProviderStringExecution provider name (if applicable)
defaultBooleanWhether this is the default wallet for the asset
enabledBooleanWhether wallet is enabled for trading
whitelistedBooleanWhether wallet address is whitelisted
createdAtStringCreation timestamp (ISO 8601)
updatedAtStringLast update timestamp (ISO 8601)

Beneficiary Status

A beneficiary must be both enabled AND verified to be used for third-party settlement:

FieldValueMeaning
enabledtrueBeneficiary is active
enabledfalseBeneficiary is inactive
verifiedtruePassed KYC/compliance checks
verifiedfalsePending verification

Trading Requirement: Only beneficiaries with enabled: true AND verified: true can be used for third-party settlement orders.

Wallet Status

For crypto settlement, wallets must be properly configured:

FieldValueRequired for Trading?
enabledtrue✅ Yes
whitelistedtrue✅ Yes
enabledfalse❌ No - wallet disabled
whitelistedfalse❌ No - wallet not whitelisted

Crypto Settlement: To use a wallet for third-party settlement, the wallet must have enabled: true AND whitelisted: true, and match the asset being traded.



Pagination

Use max (1-200) and offset parameters to paginate through results.

Example: Get All Beneficiaries

def get_all_beneficiaries():
    all_beneficiaries = []
    offset = 0
    max_per_page = 200
    
    while True:
        response = make_api_request('POST', 'api/3/beneficiaries', {
            'max': max_per_page,
            'offset': offset
        })
        
        beneficiaries = response['data']
        all_beneficiaries.extend(beneficiaries)
        
        if len(beneficiaries) < max_per_page:
            break
        
        offset += max_per_page
    
    return all_beneficiaries

Code Examples

Python

import json
import hmac
import hashlib
import time
import requests

# Configuration
api_key = "your_api_key"
api_secret = "your_api_secret"
base_url = "https://trade-uk.sandbox.zodiamarkets.com"

# Request body
body = {
    "accountGroupUuid": "2073252c-81ed-41be-bf4d-d51b8f2246b8",
    "max": 50,
    "offset": 0
}
body_json = json.dumps(body)

# Generate signature
path = "api/3/beneficiaries"
tonce = str(int(time.time() * 1000000))
message = f"{path}\0{body_json}"
signature = hmac.new(
    api_secret.encode(),
    message.encode(),
    hashlib.sha512
).hexdigest()

# Make request
headers = {
    "Rest-Key": api_key,
    "Rest-Sign": signature,
    "Content-Type": "application/json"
}

response = requests.post(
    f"{base_url}/{path}",
    headers=headers,
    data=body_json
)

# Process response
if response.status_code == 200:
    data = response.json()
    for beneficiary in data['data']:
        print(f"\n{beneficiary['companyName']}: {beneficiary['uuid']}")
        print(f"  Enabled: {beneficiary['enabled']}")
        print(f"  Verified: {beneficiary['verified']}")
        print(f"  Wallets: {len(beneficiary['wallets'])}")
        print(f"  Bank Accounts: {len(beneficiary['bankAccounts'])}")
else:
    print(f"Error: {response.status_code}")
    print(response.text)

JavaScript (Node.js)

const crypto = require('crypto');
const axios = require('axios');

// Configuration
const apiKey = 'your_api_key';
const apiSecret = 'your_api_secret';
const baseUrl = 'https://trade-uk.sandbox.zodiamarkets.com';

// Request body
const body = {
  accountGroupUuid: '2073252c-81ed-41be-bf4d-d51b8f2246b8',
  max: 50,
  offset: 0
};
const bodyJson = JSON.stringify(body);

// Generate signature
const path = 'api/3/beneficiaries';
const tonce = Date.now() * 1000;
const message = `${path}\0${bodyJson}`;
const signature = crypto
  .createHmac('sha512', apiSecret)
  .update(message)
  .digest('hex');

// Make request
const headers = {
  'Rest-Key': apiKey,
  'Rest-Sign': signature,
  'Content-Type': 'application/json'
};

axios.post(`${baseUrl}/${path}`, body, { headers })
  .then(response => {
    response.data.data.forEach(beneficiary => {
      console.log(`\n${beneficiary.companyName}: ${beneficiary.uuid}`);
      console.log(`  Enabled: ${beneficiary.enabled}`);
      console.log(`  Verified: ${beneficiary.verified}`);
      console.log(`  Wallets: ${beneficiary.wallets.length}`);
      console.log(`  Bank Accounts: ${beneficiary.bankAccounts.length}`);
    });
  })
  .catch(error => {
    console.error('Error:', error.response?.status);
    console.error(error.response?.data);
  });

cURL

curl -X POST https://trade-uk.sandbox.zodiamarkets.com/api/3/beneficiaries \
  -H "Rest-Key: your_api_key" \
  -H "Rest-Sign: your_hmac_signature" \
  -H "Content-Type: application/json" \
  -d '{
    "accountGroupUuid": "2073252c-81ed-41be-bf4d-d51b8f2246b8",
    "max": 50,
    "offset": 0
  }'

Common Use Cases

Find Verified Beneficiaries

response = make_api_request('POST', 'api/3/beneficiaries', {})

verified = [
    b for b in response['data'] 
    if b['verified'] and b['enabled']
]

for beneficiary in verified:
    print(f"{beneficiary['companyName']}: {beneficiary['uuid']}")

Get Beneficiary by Name

def find_beneficiary_by_name(name):
    response = make_api_request('POST', 'api/3/beneficiaries', {})
    
    for beneficiary in response['data']:
        if beneficiary['companyName'].lower() == name.lower():
            return beneficiary
    
    return None

beneficiary = find_beneficiary_by_name('TECH COMPANY')
if beneficiary:
    print(f"UUID: {beneficiary['uuid']}")
    print(f"Status: {'Active' if beneficiary['enabled'] else 'Inactive'}")

Find Wallets for Specific Asset

def find_wallets_for_asset(beneficiary_id, asset):
    response = make_api_request('POST', 'api/3/beneficiaries', {})
    
    for beneficiary in response['data']:
        if beneficiary['uuid'] == beneficiary_id:
            wallets = [
                w for w in beneficiary['wallets']
                if w['asset'] == asset and w['enabled'] and w['whitelisted']
            ]
            return wallets
    
    return []

# Find USDC wallets for a beneficiary
wallets = find_wallets_for_asset(
    '5fff78ca-d87f-424f-90bf-96b1906a284b',
    'USDC'
)

for wallet in wallets:
    print(f"{wallet['alias']}: {wallet['blockchain']}")
    print(f"  Address: {wallet['walletAddress']}")

Check Beneficiary Trading Readiness

def is_beneficiary_ready_for_trading(beneficiary):
    """Check if beneficiary is ready for third-party settlement"""
    if not beneficiary['enabled']:
        return False, "Beneficiary is not enabled"
    
    if not beneficiary['verified']:
        return False, "Beneficiary is not verified"
    
    # Check if has at least one valid wallet or bank account
    has_wallet = any(
        w['enabled'] and w['whitelisted'] 
        for w in beneficiary['wallets']
    )
    has_bank = any(
        ba['enabled'] and ba['verified']
        for ba in beneficiary['bankAccounts']
    )
    
    if not (has_wallet or has_bank):
        return False, "No valid wallets or bank accounts configured"
    
    return True, "Ready for trading"

# Check beneficiary status
response = make_api_request('POST', 'api/3/beneficiaries', {})
for beneficiary in response['data']:
    ready, message = is_beneficiary_ready_for_trading(beneficiary)
    status = "✅" if ready else "❌"
    print(f"{status} {beneficiary['companyName']}: {message}")

Filter by Account Group

response = make_api_request('POST', 'api/3/beneficiaries', {
    'accountGroupUuid': '2073252c-81ed-41be-bf4d-d51b8f2246b8'
})

print(f"Found {len(response['data'])} beneficiaries in this account group")