User Management

Overview

Before creating virtual accounts, you need to create users in the Kira system. Each user represents an individual or business that will own one or more virtual accounts.

Automatic Verification

When you create a user with all required fields, Kira automatically triggers identity verification (KYC/KYB) in the background. This means:

  1. No additional API calls needed - Verification starts automatically
  2. Faster onboarding - Users don't need to complete a separate verification step
  3. Webhook notifications - You'll receive user.verification.accepted or user.verification.failed events

The response includes a verification_triggered field indicating whether automatic verification was started.

Required Fields for Automatic Verification

Note: USA vs International is determined by the address_country field. See the Verification Guide for the complete list with descriptions.

Individual Users

FieldUSA ResidentsInternational
first_nameRequiredRequired
last_nameRequiredRequired
birth_dateRequiredRequired
emailRequiredRequired
phoneRequiredRequired
address_streetRequiredRequired
address_cityRequiredRequired
address_stateRequiredRequired
address_zip_codeRequiredRequired
address_countryRequiredRequired
document_typeRequiredRequired
document_numberRequiredRequired
document_countryRequiredRequired
nationalityRequiredRequired
genderRequiredRequired
ssn (via identifying_information)Required-
tax_id (via identifying_information)-Required
source_of_fundsRequiredRequired
account_purposeRequiredRequired
employment_statusRequiredRequired
occupationRequiredRequired
pep_statusRequiredRequired
expected_monthly_payments-Required
identifying_information with file_proof_of_address documentRequiredRequired
identifying_information with Government ID + front documentRequiredRequired

Business Users

FieldUSA BusinessesInternational
company_nameRequiredRequired
doing_business_asRequiredRequired
business_typeRequiredRequired
business_industryRequiredRequired
formation_dateRequiredRequired
formation_stateRequiredRequired
emailRequiredRequired
phoneRequiredRequired
address_streetRequiredRequired
address_cityRequiredRequired
address_stateRequiredRequired
address_zip_codeRequiredRequired
address_countryRequiredRequired
document_typeRequiredRequired
document_numberRequiredRequired
document_countryRequiredRequired
einRequired-
tax_id (via identifying_information)-Required
representative_first_nameRequiredRequired
representative_last_nameRequiredRequired
representative_titleRequiredRequired
representative_birth_dateRequiredRequired
representative_ssnRequired-
business_descriptionRequiredRequired
business_websiteRequiredRequired
source_of_fundsRequiredRequired
account_purposeRequiredRequired
pep_statusRequiredRequired
expected_monthly_payments-Required
identifying_information with file_proof_of_addressRequiredRequired
identifying_information with file_business_formationRequiredRequired
associated_persons with Government ID + front documentRequiredRequired

Create a User

Endpoint

POST /v1/users

Headers

HeaderRequiredDescription
AuthorizationYesBearer token from authentication
x-api-keyYesYour API key
Content-TypeYesMust be application/json
idempotency-keyYesUUID to prevent duplicate user creation

Individual User

Field Descriptions

Basic Information

FieldTypeRequiredDescription
typestringYesMust be "individual"
emailstringYesValid email address
first_namestringYesUser's first name
last_namestringYesUser's last name
middle_namestringNoUser's middle name
phonestringNo*Phone number in E.164 format (e.g., +1234567890). *Required for KYC
birth_datestringNo*Date of birth in YYYY-MM-DD format. User must be 18+ years old. *Required for KYC
nationalitystringNo3-letter ISO country code (e.g., "USA", "MEX")
genderstringNoGender: "male", "female", or "other"
external_idstringNoYour internal reference ID for this user

Address Fields

FieldTypeRequiredDescription
address_streetstringNo*Street address. *Required for KYC
address_street_2stringNoApartment, suite, unit, etc.
address_citystringNo*City. *Required for KYC
address_statestringNo*State or province code. *Required for KYC
address_zip_codestringNo*ZIP or postal code. *Required for KYC
address_countrystringNo*3-letter ISO country code. *Required for KYC

Identifying Information

The identifying_information array contains tax IDs and government-issued identification documents.

FieldTypeRequiredDescription
identifying_informationarrayNo*Array of identification objects. *Required for KYC

Identifying Information Object:

FieldTypeRequiredDescription
typestringYesType of identification (see table below)
issuing_countrystringYes3-letter ISO country code
numberstringNo*ID number. *Required for tax IDs
expirationstringNoExpiration date in YYYY-MM-DD format
descriptionstringNoAdditional description
documentsarrayNo*Array of document files. *Required for government IDs

Identification Types:

TypeCategoryDocuments RequiredDescription
passportGovernment IDYes (front)International passport
national_idGovernment IDYes (front, back)National ID card (INE, Cedula, etc.)
drivers_licenseGovernment IDYes (front, back)Driver's license
state_or_provincial_idGovernment IDYes (front, back)State-issued ID
permanent_residency_idGovernment IDYes (front, back)Permanent residency card
visaGovernment IDYes (front)Travel visa
military_idGovernment IDYes (front, back)Military identification
matriculate_idGovernment IDYes (front, back)Matricula consular
ssnTax IDNoUSA Social Security Number
itinTax IDNoUSA Individual Taxpayer ID
tax_idTax IDNoGeneric tax identifier — use this for all international (non-USA) users
curpTax IDNoMexico CURP (accepted by the API, but use tax_id for product eligibility)
rfcTax IDNoMexico RFC (accepted by the API, but use tax_id for product eligibility)
cpfTax IDNoBrazil CPF (accepted by the API, but use tax_id for product eligibility)
tinTax IDNoGeneric Tax ID Number (accepted by the API, but use tax_id for product eligibility)
nuipTax IDNoColombia NUIP (accepted by the API, but use tax_id for product eligibility)
proof_of_addressDocumentYes (file)Proof of address (utility bill, bank statement)
source_of_wealthDocumentYes (file)Source of wealth document. Required for usa-virtual-accounts eligibility.
business_formationDocumentYes (file)Business formation document (articles of incorporation)

Document Object:

FieldTypeRequiredDescription
typestringYesDocument type (see values below)
filestringYesBase64 data URI only.
descriptionstringNoDocument description

Document Type Values (Individual):

TypeDescription
frontFront of ID document
backBack of ID document
selfieSelfie photo for identity verification
file_proof_of_addressProof of address document (utility bill, bank statement)
file_source_of_wealthSource of wealth document

Document Type Values (Business):

TypeDescription
file_proof_of_addressProof of business address (utility bill, bank statement)
file_business_formationBusiness formation document (articles of incorporation, bylaws)
file_source_of_wealthSource of wealth document

Supported file formats: JPEG, PNG, PDF (max 10MB)

Compliance Fields

FieldTypeRequiredDescription
pep_statusbooleanNo*Is the user a Politically Exposed Person? *Required for KYC
source_of_fundsstringNo*Origin of funds (see values below). *Required for KYC
account_purposestringNo*Purpose of the account (see values below). *Required for KYC
expected_monthly_paymentsstringNoExpected monthly volume (see values below)
employment_statusstringNo*Employment status (see values below). *Required for KYC and ACT virtual accounts
current_employerstringNoName of current employer. Applicable when employment_status is employed
income_sourcestringNoSource of income. Applicable when employment_status is self_employed, retired, or unemployed
occupationstringNo*User's occupation. *Required for KYC
immigration_statusstringNo*U.S. residency status for non-U.S. citizens. *Required for ACT virtual accounts (international individuals)
additional_infoobjectNo*Additional information for ACT virtual accounts. *Required for ACT (international individuals and international businesses)

Source of Funds Values (Individual KYC): salary, self_employment_income, investment_proceeds, savings_inheritance_gift

Account Purpose Values (Individual KYC): receive_payments, manage_professional_income, make_payments, manage_personal_funds, investment_trading

Expected Monthly Payments Values: 0_4999, 5000_9999, 10000_49999, 50000_plus

Employment Status Values: employed, self_employed, unemployed, retired, student

Immigration Status Values (ACT): Permanent U.S. Resident, Non-Permanent U.S. Resident, Non-Resident of U.S.

Additional Info Fields (ACT) — for international individuals and international businesses:

Required for eligibility:

FieldTypeRequiredDescription
has_us_bank_accountYes / NoYesDoes the applicant have a U.S. bank account?
has_denied_bank_accountYes / NoYesHas the applicant been denied opening a U.S. bank account?
denied_bank_account_explainstringWhen YesExplanation required when has_denied_bank_account is Yes

Optional (default to No if not provided, validated at ACT submission):

FieldTypeRequiredDescription
past_owner_interactionYes / NoNoPrior adverse interactions (tax audits, regulatory sanctions, etc.)?
past_owner_interaction_explainstringWhen YesExplanation required when past_owner_interaction is Yes
any_politically_exposed_personYes / NoNoIs the applicant or any associated person a PEP?
any_politically_exposed_person_explainstringWhen YesExplanation required when any_politically_exposed_person is Yes
past_business_interactionYes / NoNoHas the business had prior adverse interactions? (international businesses only)
past_business_interaction_explainstringWhen YesExplanation required when past_business_interaction is Yes

Other Fields

FieldTypeRequiredDescription
metadataobjectNoCustom key-value pairs for your reference
documentsarrayNoLegacy document array (use identifying_information.documents instead)

Example Request - Individual USA

curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440001" \
  -d '{
    "type": "individual",
    "first_name": "John",
    "last_name": "Doe",
    "middle_name": "William",
    "email": "[email protected]",
    "phone": "+12025551234",
    "birth_date": "1990-01-15",
    "nationality": "USA",
    "gender": "male",
    "external_id": "your-internal-id-123",

    "address_street": "123 Main Street",
    "address_street_2": "Apt 4B",
    "address_city": "San Francisco",
    "address_state": "CA",
    "address_zip_code": "94105",
    "address_country": "USA",

    "identifying_information": [
      {
        "type": "ssn",
        "issuing_country": "USA",
        "number": "123-45-6789"
      },
      {
        "type": "drivers_license",
        "issuing_country": "USA",
        "number": "D1234567",
        "expiration": "2028-01-15",
        "documents": [
          {
            "type": "front",
            "file": "data:image/jpeg;base64,{{front}}"
          },
          {
            "type": "back",
            "file": "data:image/jpeg;base64,{{back}}"
          },
          {
            "type": "file_proof_of_address",
            "file": "data:image/jpeg;base64,{{proof_of_address}}"
          }
        ]
      }
    ],

    "pep_status": false,
    "source_of_funds": "salary",
    "account_purpose": "manage_personal_funds",
    "employment_status": "employed",
    "current_employer": "Acme Corp",
    "occupation": "Software Engineer",
    "expected_monthly_payments": "5000_9999"
  }'

Example Request - Individual International (Mexico)

curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440002" \
  -d '{
    "type": "individual",
    "first_name": "Maria",
    "last_name": "Garcia",
    "middle_name": "Lopez",
    "email": "[email protected]",
    "phone": "+5215512345678",
    "birth_date": "1988-05-20",
    "nationality": "MEX",
    "gender": "female",
    "external_id": "mex-user-456",

    "address_street": "Av. Reforma 222",
    "address_street_2": "Piso 10",
    "address_city": "Ciudad de Mexico",
    "address_state": "CDMX",
    "address_zip_code": "06600",
    "address_country": "MEX",

    "identifying_information": [
      {
        "type": "curp",
        "issuing_country": "MEX",
        "number": "GARM880520MDFRRL09"
      },
      {
        "type": "rfc",
        "issuing_country": "MEX",
        "number": "GARM880520XXX"
      },
      {
        "type": "national_id",
        "issuing_country": "MEX",
        "number": "1234567890123",
        "expiration": "2030-05-20",
        "documents": [
          {
            "type": "front",
            "file": "data:image/jpeg;base64,{{front}}"
          },
          {
            "type": "back",
            "file": "data:image/jpeg;base64,{{back}}"
          },
          {
            "type": "file_proof_of_address",
            "file": "data:image/jpeg;base64,{{proof_of_address}}"
          }
        ]
      }
    ],

    "pep_status": false,
    "source_of_funds": "salary",
    "account_purpose": "make_payments",
    "employment_status": "employed",
    "current_employer": "Empresa S.A.",
    "occupation": "Contador"
  }'

Business User

Field Descriptions

Basic Information

FieldTypeRequiredDescription
typestringYesMust be "business"
business_legal_namestringYesLegal registered business name
emailstringYesBusiness contact email
business_trade_namestringNoTrade name if different from legal name
doing_business_asstringNoDBA name
business_typestringNo*Business entity type. *Required for KYC
business_descriptionstringNoDescription of business activities
business_industryarrayNoArray of NAICS subsector codes (see values below)
business_websitestringNoBusiness website URL
phonestringNoBusiness phone number
external_idstringNoYour internal reference ID

Business Type Values: limited_liability_company, corporation, general_partnership, limited_liability_partnership, sole_proprietor, non_profit, trust, government_organization, publicly_traded_company

Business Industry Values (NAICS Subsector Codes)
SectorValues
Agriculture, Forestry, Fishing and Huntingcrop_production, animal_production, forestry_logging, fishing_hunting_trapping, support_activities_agriculture_forestry
Mining, Quarrying, and Oil and Gas Extractionoil_gas_extraction, mining_except_oil_gas, support_activities_mining
Utilitiesutilities
Constructionconstruction_of_buildings, heavy_civil_engineering_construction, specialty_trade_contractors
Manufacturingfood_manufacturing, beverage_tobacco_product_manufacturing, textile_mills, textile_product_mills, apparel_manufacturing, leather_allied_product_manufacturing, wood_product_manufacturing, paper_manufacturing, printing_related_support_activities, petroleum_coal_products_manufacturing, chemical_manufacturing, plastics_rubber_products_manufacturing, nonmetallic_mineral_product_manufacturing, primary_metal_manufacturing, fabricated_metal_product_manufacturing, machinery_manufacturing, computer_electronic_product_manufacturing, electrical_equipment_appliance_component_manufacturing, transportation_equipment_manufacturing, furniture_related_product_manufacturing, miscellaneous_manufacturing
Wholesale Trademerchant_wholesalers_durable_goods, merchant_wholesalers_nondurable_goods, wholesale_electronic_markets_agents_brokers
Retail Trademotor_vehicle_parts_dealers, furniture_home_furnishings_stores, electronics_appliance_stores, building_material_garden_equipment_supplies_dealers, food_beverage_stores, health_personal_care_stores, gasoline_stations, clothing_accessories_stores, sporting_goods_hobby_book_music_stores, general_merchandise_stores, miscellaneous_store_retailers, nonstore_retailers
Transportation and Warehousingair_transportation, rail_transportation, water_transportation, truck_transportation, transit_ground_passenger_transportation, pipeline_transportation, scenic_sightseeing_transportation, support_activities_transportation, postal_service, couriers_messengers, warehousing_storage
Informationpublishing_industries, motion_picture_sound_recording_industries, broadcasting, internet_publishing_broadcasting, telecommunications, data_processing_hosting_related_services, other_information_services
Finance and Insurancemonetary_authorities_central_bank, credit_intermediation_related_activities, securities_commodity_contracts_financial_investments, insurance_carriers_related_activities, funds_trusts_other_financial_vehicles
Real Estate and Rental and Leasingreal_estate, rental_leasing_services, lessors_nonfinancial_intangible_assets
Professional, Scientific, and Technical Servicesprofessional_scientific_technical
Management of Companies and Enterprisesmanagement_of_companies
Administrative and Support and Waste Managementadministrative_support_services, waste_management_remediation_services
Educational Serviceseducational_services
Health Care and Social Assistanceambulatory_health_care_services, hospitals, nursing_residential_care_facilities, social_assistance
Arts, Entertainment, and Recreationperforming_arts_spectator_sports, museums_historical_sites, amusement_gambling_recreation_industries
Accommodation and Food Servicesaccommodation, food_services_drinking_places
Other Servicesrepair_maintenance, personal_laundry_services, religious_grantmaking_civic_professional_organizations, private_households
Public Administrationpublic_administration

Formation Information

FieldTypeRequiredDescription
formation_datestringNo*Date of incorporation in YYYY-MM-DD format. *Required for KYC
formation_statestringNo*State/region where business was formed. *Required for KYC
formation_countrystringNo3-letter ISO country code where business was incorporated (e.g., "USA", "MEX")

Address Fields

FieldTypeRequiredDescription
address_streetstringNo*Registered business address. *Required for KYC
address_street_2stringNoSuite, floor, etc.
address_citystringNo*City. *Required for KYC
address_statestringNo*State or province. *Required for KYC
address_zip_codestringNo*ZIP or postal code. *Required for KYC
address_countrystringNo*3-letter ISO country code. *Required for KYC

Tax Identifiers

FieldTypeRequiredDescription
einstringNo*USA Employer Identification Number. *Required for USA businesses
rfcstringNo*Mexico RFC. *Required for Mexico businesses
cnpjstringNo*Brazil CNPJ. *Required for Brazil businesses

Legal Representative

FieldTypeRequiredDescription
representative_first_namestringNo*Representative's first name. *Required for KYC
representative_last_namestringNo*Representative's last name. *Required for KYC
representative_titlestringNo*Representative's title (CEO, Director, etc.). *Required for KYC
representative_birth_datestringNo*Representative's DOB in YYYY-MM-DD format. *Required for KYC
representative_ssnstringNo*Representative's SSN (USA only). *Required for USA KYC

Associated Persons (UBOs and Signers)

The associated_persons array contains information about Ultimate Beneficial Owners (UBOs) and authorized signers.

FieldTypeRequiredDescription
associated_personsarrayNo*Array of associated person objects. *Required for KYC

Associated Person Object:

FieldTypeRequiredDescription
first_namestringYesPerson's first name
last_namestringYesPerson's last name
middle_namestringNoPerson's middle name
emailstringNoPerson's email
birth_datestringNo*Date of birth in YYYY-MM-DD. *Required for KYC
nationalitystringNo3-letter country code
titlestringNoPosition/title in the company
has_ownershipbooleanNoDoes this person have ownership?
ownership_percentagenumberNoPercentage owned (0-100)
has_controlbooleanNoDoes this person have control?
is_signerbooleanNoIs this person an authorized signer?
ssnstringNoSSN (USA persons only)
address_streetstringNoStreet address
address_citystringNoCity
address_statestringNoState/province
address_zip_codestringNoZIP/postal code
address_countrystringNo3-letter country code
identifying_informationarrayNo*Government IDs. *Required for KYC

Note: Each associated person must include identifying_information with at least one government ID containing a documents array with a front image of their identification document.

Identifying Information (Business Documents)

FieldTypeRequiredDescription
identifying_informationarrayNoBusiness formation documents and tax IDs

Business Identification Types:

TypeCategoryDescription
business_formationDocumentArticles of incorporation, bylaws, etc.
proof_of_addressDocumentBusiness address verification
einTax IDUSA Employer Identification Number
nitTax IDColombia NIT

Compliance Fields

FieldTypeRequiredDescription
pep_statusbooleanNo*Any associated person is a PEP? *Required for KYC
source_of_fundsstringNo*Origin of business funds. *Required for KYC
account_purposestringNo*Purpose of the account. *Required for KYC
expected_monthly_paymentsstringNoExpected monthly volume
has_material_intermediary_ownershipbooleanNoIs there intermediary ownership?

Other Fields

FieldTypeRequiredDescription
metadataobjectNoCustom key-value pairs
documentsarrayNoAdditional business documents

Example Request - Business USA

curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440003" \
  -d '{
    "type": "business",
    "business_legal_name": "Acme Technology Inc.",
    "business_trade_name": "Acme Tech",
    "doing_business_as": "Acme",
    "email": "[email protected]",
    "phone": "+14155551234",
    "business_type": "corporation",
    "business_description": "SaaS platform for enterprise solutions",
    "business_industry": ["data_processing_hosting_related_services", "computer_electronic_product_manufacturing"],
    "business_website": "https://acmetech.com",
    "external_id": "business-usa-789",

    "formation_date": "2018-03-15",
    "formation_state": "DE",

    "address_street": "100 Market Street",
    "address_street_2": "Suite 500",
    "address_city": "San Francisco",
    "address_state": "CA",
    "address_zip_code": "94105",
    "address_country": "USA",

    "ein": "12-3456789",

    "representative_first_name": "Robert",
    "representative_last_name": "Smith",
    "representative_title": "CEO",
    "representative_birth_date": "1975-08-22",
    "representative_ssn": "987-65-4321",

    "associated_persons": [
      {
        "first_name": "Robert",
        "last_name": "Smith",
        "email": "[email protected]",
        "birth_date": "1975-08-22",
        "has_ownership": true,
        "ownership_percentage": 60,
        "has_control": true,
        "is_signer": true,
        "title": "CEO",
        "ssn": "987-65-4321",
        "address_street": "456 Oak Avenue",
        "address_city": "Palo Alto",
        "address_state": "CA",
        "address_zip_code": "94301",
        "address_country": "USA",
        "identifying_information": [
          {
            "type": "drivers_license",
            "issuing_country": "USA",
            "number": "CA12345678",
            "documents": [
              {
                "type": "front",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              },
              {
                "type": "back",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              }
            ]
          }
        ]
      },
      {
        "first_name": "Sarah",
        "last_name": "Johnson",
        "email": "[email protected]",
        "birth_date": "1980-11-10",
        "has_ownership": true,
        "ownership_percentage": 40,
        "has_control": false,
        "is_signer": false,
        "title": "Co-founder",
        "ssn": "111-22-3333",
        "address_street": "789 Pine Street",
        "address_city": "San Jose",
        "address_state": "CA",
        "address_zip_code": "95113",
        "address_country": "USA",
        "identifying_information": [
          {
            "type": "passport",
            "issuing_country": "USA",
            "number": "987654321",
            "expiration": "2029-11-10",
            "documents": [
              {
                "type": "front",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              }
            ]
          }
        ]
      }
    ],

    "identifying_information": [
      {
        "type": "business_formation",
        "issuing_country": "USA",
        "description": "Certificate of Incorporation",
        "documents": [
          {
            "type": "file_business_formation",
            "file": "data:application/pdf;base64,JVBERi0xLjQ..."
          }
        ]
      }
    ],

    "pep_status": false,
    "source_of_funds": "sales_of_goods_and_services",
    "account_purpose": "receive_payments_for_goods_and_services",
    "expected_monthly_payments": "50000_plus",
    "has_material_intermediary_ownership": false
  }'

Example Request - Business International (Mexico)

curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440004" \
  -d '{
    "type": "business",
    "business_legal_name": "Tecnologia Avanzada S.A. de C.V.",
    "business_trade_name": "TecAvanzada",
    "doing_business_as": "TecAv",
    "email": "[email protected]",
    "phone": "+5215598765432",
    "business_type": "corporation",
    "business_description": "Desarrollo de software empresarial",
    "business_industry": ["data_processing_hosting_related_services", "professional_scientific_technical"],
    "business_website": "https://tecavanzada.mx",
    "external_id": "mex-business-001",

    "formation_date": "2015-06-01",
    "formation_state": "CDMX",

    "address_street": "Paseo de la Reforma 505",
    "address_street_2": "Piso 20",
    "address_city": "Ciudad de Mexico",
    "address_state": "CDMX",
    "address_zip_code": "06500",
    "address_country": "MEX",

    "rfc": "TAV150601XXX",

    "representative_first_name": "Carlos",
    "representative_last_name": "Hernandez",
    "representative_title": "Director General",
    "representative_birth_date": "1970-02-14",

    "associated_persons": [
      {
        "first_name": "Carlos",
        "last_name": "Hernandez",
        "email": "[email protected]",
        "birth_date": "1970-02-14",
        "has_ownership": true,
        "ownership_percentage": 70,
        "has_control": true,
        "is_signer": true,
        "title": "Director General",
        "nationality": "MEX",
        "address_street": "Av. Insurgentes Sur 1000",
        "address_city": "Ciudad de Mexico",
        "address_state": "CDMX",
        "address_zip_code": "03100",
        "address_country": "MEX",
        "identifying_information": [
          {
            "type": "national_id",
            "issuing_country": "MEX",
            "number": "HERC700214HDFRRL01",
            "documents": [
              {
                "type": "front",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              },
              {
                "type": "back",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              }
            ]
          }
        ]
      },
      {
        "first_name": "Ana",
        "last_name": "Martinez",
        "email": "[email protected]",
        "birth_date": "1982-09-25",
        "has_ownership": true,
        "ownership_percentage": 30,
        "has_control": false,
        "is_signer": true,
        "title": "Directora Financiera",
        "nationality": "MEX",
        "address_street": "Calle Durango 200",
        "address_city": "Ciudad de Mexico",
        "address_state": "CDMX",
        "address_zip_code": "06700",
        "address_country": "MEX",
        "identifying_information": [
          {
            "type": "passport",
            "issuing_country": "MEX",
            "number": "G12345678",
            "expiration": "2030-09-25",
            "documents": [
              {
                "type": "front",
                "file": "data:image/jpeg;base64,/9j/4AAQ..."
              }
            ]
          }
        ]
      }
    ],

    "identifying_information": [
      {
        "type": "business_formation",
        "issuing_country": "MEX",
        "description": "Acta Constitutiva",
        "documents": [
          {
            "type": "file_business_formation",
            "file": "data:application/pdf;base64,JVBERi0xLjQ..."
          }
        ]
      },
      {
        "type": "proof_of_address",
        "issuing_country": "MEX",
        "description": "Comprobante de domicilio fiscal",
        "documents": [
          {
            "type": "file_proof_of_address",
            "file": "data:application/pdf;base64,JVBERi0xLjQ..."
          }
        ]
      }
    ],

    "pep_status": false,
    "source_of_funds": "sales_of_goods_and_services",
    "account_purpose": "receive_payments_for_goods_and_services",
    "expected_monthly_payments": "10000_49999"
  }'

Response

Success Response

Status: 201 Created

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "type": "individual",
  "email": "[email protected]",
  "status": "CREATED",
  "verification_status": "unverified",
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-01-15T10:30:00Z",
  "metadata": {
    "ssn": "123-45-6789",
    "occupation": "Software Engineer",
    "current_employer": "Acme Corp",
    "pep_status": false,
    "external_id": "your-internal-id-123",
    "account_purpose": "manage_personal_funds",
    "source_of_funds": "salary",
    "employment_status": "employed",
    "expected_monthly_payments": "5000_9999"
  },
  "first_name": "John",
  "last_name": "Doe",
  "middle_name": "William",
  "phone": "+12025551234",
  "birth_date": "1990-01-15",
  "nationality": "USA",
  "gender": "male",
  "residential_address": {
    "street_line_1": "123 Main Street",
    "street_line_2": "Apt 4B",
    "city": "San Francisco",
    "subdivision": "CA",
    "postal_code": "94105",
    "country": "USA"
  },
  "verification_triggered": true,
  "eligible_products": [
    {
      "product_id": "f4666460-1cb4-4030-8e78-6d67939c1ff1",
      "product_code": "usa-virtual-accounts",
      "product_name": "USA Virtual Accounts",
      "eligible": false
    },
    {
      "product_id": "7be91e3b-be09-48a6-8778-b856d5e0a97d",
      "product_code": "virtual_account",
      "product_name": "Virtual Account",
      "eligible": false
    },
    {
      "product_id": "4d1a6f16-2842-408d-973c-0492e5a59686",
      "product_code": "payout",
      "product_name": "Payout",
      "eligible": false
    }
  ]
}

Response Fields

FieldDescription
idUnique user identifier (UUID)
statusKYC status: CREATED, VERIFYING, VERIFIED, REJECTED, REVIEW
verification_statusLegacy field (deprecated) - use status instead
verification_triggeredtrue if automatic verification was started, false if required fields are missing
eligible_productsArray of products the user is eligible for based on their data
created_atTimestamp when user was created
updated_atTimestamp of last update

Get User Details

Endpoint

GET /v1/users/{userId}

Example Request

curl -X GET https://api.balampay.com/v1/users/550e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY"

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "type": "individual",
  "email": "[email protected]",
  "status": "VERIFIED",
  "verification_status": "verified",
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-01-15T12:00:00Z",
  "metadata": {
    "ssn": "123-45-6789",
    "occupation": "Software Engineer",
    "current_employer": "Acme Corp",
    "pep_status": false,
    "external_id": "your-internal-id-123",
    "account_purpose": "manage_personal_funds",
    "source_of_funds": "salary",
    "employment_status": "employed",
    "expected_monthly_payments": "5000_9999"
  },
  "first_name": "John",
  "last_name": "Doe",
  "middle_name": "William",
  "phone": "+12025551234",
  "birth_date": "1990-01-15",
  "nationality": "USA",
  "gender": "male",
  "residential_address": {
    "street_line_1": "123 Main Street",
    "street_line_2": "Apt 4B",
    "city": "San Francisco",
    "subdivision": "CA",
    "postal_code": "94105",
    "country": "USA"
  },
  "verification_triggered": true,
  "eligible_products": [
    {
      "product_id": "f4666460-1cb4-4030-8e78-6d67939c1ff1",
      "product_code": "usa-virtual-accounts",
      "product_name": "USA Virtual Accounts",
      "eligible": true
    },
    {
      "product_id": "7be91e3b-be09-48a6-8778-b856d5e0a97d",
      "product_code": "virtual_account",
      "product_name": "Virtual Account",
      "eligible": true
    },
    {
      "product_id": "4d1a6f16-2842-408d-973c-0492e5a59686",
      "product_code": "payout",
      "product_name": "Payout",
      "eligible": true
    }
  ]
}

User Status

The status field indicates the KYC verification state of the user:

StatusDescription
CREATEDUser created, verification may be pending or not triggered
VERIFYINGAutomatic verification is in progress
VERIFIEDUser has successfully completed identity verification
REJECTEDVerification was rejected
REVIEWVerification requires manual review

Verification Status (Deprecated)

Note: The verification_status field is deprecated. Use status instead.

StatusDescription
unverifiedUser created, not yet verified
verifiedUser has been verified
rejectedVerification was rejected

Idempotency

The idempotency-key header is required for user creation and must be a valid UUID. This prevents duplicate users if the request is retried.

  • Same idempotency key + same request body: Returns the existing user (200 OK)
  • Same idempotency key + different request body: Returns an error (409 Conflict)

Example

# First request - creates user
curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440001" \
  -d '{"type": "individual", "email": "[email protected]", ...}'

# Second request with same key and body - returns existing user
curl -X POST https://api.balampay.com/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "idempotency-key: 550e8400-e29b-41d4-a716-446655440001" \
  -d '{"type": "individual", "email": "[email protected]", ...}'

Error Responses

Missing Idempotency Key

Status: 400 Bad Request

{
  "error": "Invalid request data",
  "details": [
    {
      "path": "idempotency-key",
      "message": "Required",
      "code": "invalid_type"
    }
  ]
}

Invalid Idempotency Key Format

Status: 400 Bad Request

{
  "error": "Invalid request data",
  "details": [
    {
      "path": "idempotency-key",
      "message": "Invalid uuid",
      "code": "invalid_string"
    }
  ]
}

Idempotency Key Reused with Different Data

Status: 409 Conflict

{
  "code": "idempotency_key_reused",
  "message": "Idempotency key has already been used with different request data"
}

Validation Error

Status: 400 Bad Request

{
  "error": "Invalid request data",
  "details": [
    {
      "path": "first_name",
      "message": "Required",
      "code": "invalid_type"
    }
  ]
}

User Not Found

Status: 404 Not Found

{
  "code": "not_found",
  "message": "User with ID 550e8400-e29b-41d4-a716-446655440000 not found"
}

Unauthorized

Status: 401 Unauthorized

{
  "code": "unauthorized",
  "message": "No client ID found in claims"
}

Internal Server Error

Status: 500 Internal Server Error

{
  "code": "internal_error",
  "message": "An unexpected error occurred"
}

Best Practices

  1. Generate unique UUIDs for idempotency keys - Use a UUID library to generate unique identifiers
  2. Store the user ID - Save the returned user ID for future API calls
  3. Validate data before sending - Ensure all required fields are provided and properly formatted
  4. Use 3-letter ISO country codes - For nationality and address country fields (e.g., "USA", "MEX", "BRA")
  5. Handle errors gracefully - Implement proper error handling for all possible error responses
  6. Don't hardcode credentials - Store API keys and tokens securely using environment variables
  7. Include all KYC fields upfront - Providing all required fields at user creation triggers automatic verification
  8. Base64 encode documents properly - Use data URI format: data:image/jpeg;base64,...

Next Steps

After creating a user:

If verification_triggered: true:

  1. Wait for the user.verification.accepted webhook notification
  2. Once verified, create a virtual account for the user

If verification_triggered: false:

  1. Either update the user with the missing required fields, or
  2. Initiate identity verification manually (legacy flow)

Support