Beneficiaries

Beneficiaries are the integrator's customers — the individuals or businesses that hold funds and execute transactions on the Caliza platform. Every API call that moves funds requires a beneficiaryId.

This page covers the full beneficiary lifecycle: creating individual and business beneficiaries, understanding KYX verification, checking status, and managing beneficiary state. For a quick walkthrough of creating your first beneficiary, see Create a Beneficiary.

Prerequisites


Beneficiary types

The Caliza API supports two types:

  • INDIVIDUAL — A person with personal KYC requirements (name, DOB, citizenship)
  • BUSINESS — A company with corporate KYB requirements (incorporation info, tax ID, authorized contacts)

The type field determines which data structure you must provide. If you're creating a beneficiary for your own business and your account has already completed KYB onboarding, the system automatically approves the beneficiary.


Create an individual beneficiary

Send a POST request to /v1/beneficiaries with type set to INDIVIDUAL.

Required fields

FieldTypeDescription
integratorBeneficiaryIdstringYour unique identifier for this beneficiary
typestringMust be "INDIVIDUAL"
person.firstNamestringFirst name (max 100 characters)
person.lastNamestringLast name (max 100 characters)
person.dateOfBirthstringDate of birth (YYYY-MM-DD)
person.citizenshipstring2-letter ISO country code
person.idNumberstringGovernment-issued identification number
person.emailstringEmail address
person.phoneNumberstringPhone number (+[country code][number], 6–20 digits)
person.address.streetOnestringPrimary street address (max 100 characters)
person.address.citystringCity name
person.address.zipcodestringPostal or ZIP code
person.address.statestringState or province (max 3 characters)
person.address.countrystring2-letter ISO country code

Optional fields

FieldTypeDescription
person.address.streetTwostringSecondary address line (max 100 characters)
person.placeOfBirthstringPlace of birth
person.professionstringProfession
person.genderstringMALE, FEMALE, or OTHER
person.maritalStatusstringMarital status
person.mothersNamestringMother's name
person.industrystringIndustry (see enum values in API spec)
person.incomeSourcestringSource of income (see enum values in API spec)
person.annualIncomenumberAnnual income
person.occupationstringOccupation (see enum values in API spec)
person.wealthSourcestringSource of wealth (see enum values in API spec)
localTargetBankAccountobjectBank account details for receiving payouts
activebooleanWhether the beneficiary is active (defaults to true)

Example request

curl -X POST 'https://api.sandbox.caliza.com/core-api/v1/beneficiaries' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {{ACCESS_TOKEN}}' \
  -d '{
    "integratorBeneficiaryId": "individual_jane_doe_001",
    "type": "INDIVIDUAL",
    "person": {
      "firstName": "Jane",
      "lastName": "Doe",
      "dateOfBirth": "1985-11-20",
      "citizenship": "US",
      "idNumber": "D1234567",
      "email": "[email protected]",
      "phoneNumber": "+12025550148",
      "address": {
        "streetOne": "1600 Pennsylvania Avenue NW",
        "streetTwo": "Suite 200",
        "city": "Washington",
        "zipcode": "20500",
        "state": "DC",
        "country": "US"
      },
      "profession": "Software Engineer",
      "gender": "FEMALE"
    },
    "active": true
  }'
const response = await axios.post(
  'https://api.sandbox.caliza.com/core-api/v1/beneficiaries',
  {
    integratorBeneficiaryId: 'individual_jane_doe_001',
    type: 'INDIVIDUAL',
    person: {
      firstName: 'Jane',
      lastName: 'Doe',
      dateOfBirth: '1985-11-20',
      citizenship: 'US',
      idNumber: 'D1234567',
      email: '[email protected]',
      phoneNumber: '+12025550148',
      address: {
        streetOne: '1600 Pennsylvania Avenue NW',
        streetTwo: 'Suite 200',
        city: 'Washington',
        zipcode: '20500',
        state: 'DC',
        country: 'US'
      },
      profession: 'Software Engineer',
      gender: 'FEMALE'
    },
    active: true
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${accessToken}`
    }
  }
);
response = requests.post(
  'https://api.sandbox.caliza.com/core-api/v1/beneficiaries',
  headers={
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {access_token}'
  },
  json={
    'integratorBeneficiaryId': 'individual_jane_doe_001',
    'type': 'INDIVIDUAL',
    'person': {
      'firstName': 'Jane',
      'lastName': 'Doe',
      'dateOfBirth': '1985-11-20',
      'citizenship': 'US',
      'idNumber': 'D1234567',
      'email': '[email protected]',
      'phoneNumber': '+12025550148',
      'address': {
        'streetOne': '1600 Pennsylvania Avenue NW',
        'streetTwo': 'Suite 200',
        'city': 'Washington',
        'zipcode': '20500',
        'state': 'DC',
        'country': 'US'
      },
      'profession': 'Software Engineer',
      'gender': 'FEMALE'
    },
    'active': True
  }
)

Example response

{
  "id": "6925dd986a93002882da640b",
  "integratorId": "6920925fdbadfe09b1bf9e5e",
  "integratorBeneficiaryId": "individual_jane_doe_001",
  "type": "INDIVIDUAL",
  "person": {
    "firstName": "Jane",
    "lastName": "Doe",
    "dateOfBirth": "1985-11-20",
    "citizenship": "US",
    "idNumber": "D1234567",
    "email": "[email protected]",
    "phoneNumber": "+12025550148",
    "profession": "Software Engineer",
    "gender": "FEMALE",
    "address": {
      "streetOne": "1600 Pennsylvania Avenue NW",
      "streetTwo": "Suite 200",
      "city": "Washington",
      "zipcode": "20500",
      "state": "DC",
      "country": "US"
    }
  },
  "business": null,
  "localTargetBankAccount": null,
  "files": [],
  "active": true,
  "kycVerified": false,
  "status": "PENDING",
  "createdDate": "2025-01-15T16:47:20.568615486Z"
}

Create a business beneficiary

Send a POST request to /v1/beneficiaries with type set to BUSINESS.

Required fields

FieldTypeDescription
integratorBeneficiaryIdstringYour unique identifier for this beneficiary
typestringMust be "BUSINESS"
business.namestringBusiness name (max 60 characters)
business.dateOfIncorporationstringDate of incorporation (YYYY-MM-DD)
business.idNumberstringBusiness tax ID or registration number
business.phoneNumberstringBusiness phone number (+[country code][number], 6–20 digits)
business.emailstringBusiness email address
business.address.streetOnestringPrimary street address (max 100 characters)
business.address.citystringCity name
business.address.zipcodestringPostal or ZIP code
business.address.statestringState or province (max 3 characters)
business.address.countrystring2-letter ISO country code
business.contactsarrayAt least one contact person (each contact requires the same fields as an individual's person object)

Optional fields

FieldTypeDescription
business.address.streetTwostringSecondary address line (max 100 characters)
business.websitestringBusiness website URL (max 100 characters)
business.descriptionstringBusiness description
business.legalStructurestringLegal structure: MEI, ME, EI, SLU, LTDA, SS, SA, SOLE_PROP, SINGLE_MEMBER_LLC, LLC, GP, LP, LLP, S_CORP, C_CORP, PC, NONPROFIT, B_CORP
localTargetBankAccountobjectBank account details for receiving payouts
localCalizaOwnedBankAccountIdstringID of a Caliza-owned bank account
activebooleanWhether the beneficiary is active (defaults to true)

Example request

curl -X POST 'https://api.sandbox.caliza.com/core-api/v1/beneficiaries' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {{ACCESS_TOKEN}}' \
  -d '{
    "integratorBeneficiaryId": "business_acme_001",
    "type": "BUSINESS",
    "business": {
      "name": "Acme Corp",
      "dateOfIncorporation": "2015-03-20",
      "idNumber": "12-3456789",
      "phoneNumber": "+12125550100",
      "email": "[email protected]",
      "website": "https://acme.example.com",
      "legalStructure": "LLC",
      "address": {
        "streetOne": "350 Fifth Avenue",
        "city": "New York",
        "zipcode": "10118",
        "state": "NY",
        "country": "US"
      },
      "contacts": [
        {
          "firstName": "John",
          "lastName": "Smith",
          "dateOfBirth": "1980-06-15",
          "citizenship": "US",
          "idNumber": "A9876543",
          "email": "[email protected]",
          "phoneNumber": "+12125550101",
          "address": {
            "streetOne": "350 Fifth Avenue",
            "city": "New York",
            "zipcode": "10118",
            "state": "NY",
            "country": "US"
          }
        }
      ]
    },
    "active": true
  }'
const response = await axios.post(
  'https://api.sandbox.caliza.com/core-api/v1/beneficiaries',
  {
    integratorBeneficiaryId: 'business_acme_001',
    type: 'BUSINESS',
    business: {
      name: 'Acme Corp',
      dateOfIncorporation: '2015-03-20',
      idNumber: '12-3456789',
      phoneNumber: '+12125550100',
      email: '[email protected]',
      website: 'https://acme.example.com',
      legalStructure: 'LLC',
      address: {
        streetOne: '350 Fifth Avenue',
        city: 'New York',
        zipcode: '10118',
        state: 'NY',
        country: 'US'
      },
      contacts: [
        {
          firstName: 'John',
          lastName: 'Smith',
          dateOfBirth: '1980-06-15',
          citizenship: 'US',
          idNumber: 'A9876543',
          email: '[email protected]',
          phoneNumber: '+12125550101',
          address: {
            streetOne: '350 Fifth Avenue',
            city: 'New York',
            zipcode: '10118',
            state: 'NY',
            country: 'US'
          }
        }
      ]
    },
    active: true
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${accessToken}`
    }
  }
);
response = requests.post(
  'https://api.sandbox.caliza.com/core-api/v1/beneficiaries',
  headers={
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {access_token}'
  },
  json={
    'integratorBeneficiaryId': 'business_acme_001',
    'type': 'BUSINESS',
    'business': {
      'name': 'Acme Corp',
      'dateOfIncorporation': '2015-03-20',
      'idNumber': '12-3456789',
      'phoneNumber': '+12125550100',
      'email': '[email protected]',
      'website': 'https://acme.example.com',
      'legalStructure': 'LLC',
      'address': {
        'streetOne': '350 Fifth Avenue',
        'city': 'New York',
        'zipcode': '10118',
        'state': 'NY',
        'country': 'US'
      },
      'contacts': [
        {
          'firstName': 'John',
          'lastName': 'Smith',
          'dateOfBirth': '1980-06-15',
          'citizenship': 'US',
          'idNumber': 'A9876543',
          'email': '[email protected]',
          'phoneNumber': '+12125550101',
          'address': {
            'streetOne': '350 Fifth Avenue',
            'city': 'New York',
            'zipcode': '10118',
            'state': 'NY',
            'country': 'US'
          }
        }
      ]
    },
    'active': True
  }
)

Example response

{
  "id": "6925ee107b04003992eb751c",
  "integratorId": "6920925fdbadfe09b1bf9e5e",
  "integratorBeneficiaryId": "business_acme_001",
  "type": "BUSINESS",
  "person": null,
  "business": {
    "name": "Acme Corp",
    "dateOfIncorporation": "2015-03-20",
    "idNumber": "12-3456789",
    "address": {
      "streetOne": "350 Fifth Avenue",
      "city": "New York",
      "zipcode": "10118",
      "state": "NY",
      "country": "US"
    },
    "email": "[email protected]",
    "website": "https://acme.example.com",
    "contacts": [
      {
        "firstName": "John",
        "lastName": "Smith",
        "dateOfBirth": "1980-06-15",
        "citizenship": "US",
        "idNumber": "A9876543",
        "email": "[email protected]",
        "phoneNumber": "+12125550101",
        "address": {
          "streetOne": "350 Fifth Avenue",
          "city": "New York",
          "zipcode": "10118",
          "state": "NY",
          "country": "US"
        }
      }
    ]
  },
  "localTargetBankAccount": null,
  "files": [],
  "active": true,
  "kycVerified": false,
  "status": "PENDING",
  "createdDate": "2025-01-15T17:10:08.123456789Z"
}

Check beneficiary status

Retrieve the current status of a beneficiary with GET /v1/beneficiaries/{beneficiaryId}:

curl -X GET 'https://api.sandbox.caliza.com/core-api/v1/beneficiaries/{{BENEFICIARY_ID}}' \
  -H 'Authorization: Bearer {{ACCESS_TOKEN}}'

The response includes the full beneficiary object. The key fields for status tracking are:

FieldTypeDescription
statusstringCurrent verification status (see table below)
kycVerifiedbooleantrue once KYX verification is complete
activebooleanWhether the beneficiary is active

Beneficiary statuses

StatusDescription
CREATEDBeneficiary record created
PENDINGAwaiting KYX verification
KYC_IN_PROGRESSKYX verification in progress
MANUAL_REVIEWRequires manual review
APPROVEDFully verified — ready for transactions
DISABLEDBeneficiary has been disabled
FAILEDKYX verification failed

KYX verification

When you create a beneficiary, the system automatically initiates KYX (Know Your Customer/Business) verification:

  1. Triggers verification — Creating a beneficiary automatically starts KYX.
  2. Determines requirements — Required documents depend on the beneficiary's risk profile and jurisdiction.
  3. Notifies integrators — The system sends BENEFICIARY_APPROVED or BENEFICIARY_FAILED webhook notifications.
  4. May direct users — End users may be directed to a third-party verification provider (such as AiPrise) to upload documents.

For individuals, the system typically requests government-issued identification.

For businesses, the system typically requests proof of address, business registration documents, and beneficial ownership information.

KYX endpoints

EndpointDescription
GET /v1/beneficiaries/{beneficiaryId}Check status and kycVerified fields
GET /v1/kyx/{id}/kyx/documentsRetrieve submitted KYX documents
GET /v1/kyx/{id}/kyx/re-runRetry identity verification
POST /v1/kyx/check-requirementsCheck required documents before starting KYX
📘

Beneficiaries must complete KYX verification before they can execute certain transactions. Subscribe to webhooks to be notified when verification completes or fails.


Next steps