Lux Financial

Customers

Customer management API — individual and business profiles, KYC verification, endorsements.

Customers

Customers represent individuals or businesses that use your platform. Each customer can have multiple accounts, wallets, and external accounts. Customers must complete KYC verification before accessing full platform capabilities.

The Customer Object

{
  "id": "cus_abc123",
  "object": "customer",
  "type": "individual",
  "email": "john@example.com",
  "first_name": "John",
  "last_name": "Doe",
  "phone": "+1234567890",
  "date_of_birth": "1990-01-15",
  "tax_id_provided": true,
  "address": {
    "line1": "123 Main St",
    "city": "New York",
    "state": "NY",
    "postal_code": "10001",
    "country": "US"
  },
  "status": "active",
  "kyc_status": "approved",
  "risk_rating": "low",
  "endorsements": ["can_trade_stablecoins", "can_wire_transfer"],
  "created_at": "2026-01-15T10:00:00.000Z"
}

Attributes

FieldTypeDescription
idstringUnique identifier
typestringindividual or business
emailstringCustomer email address
statusstringpending, active, suspended, deleted
kyc_statusstringnot_started, pending, incomplete, manual_review, under_review, awaiting_ubo, approved, rejected
risk_ratingstringlow, medium, high
endorsementsarrayCapabilities granted to customer

Endorsements

EndorsementDescription
can_trade_stablecoinsConvert fiat to stablecoins
can_wire_transferSend/receive wire transfers
can_ach_transferSend/receive ACH transfers
can_sepa_transferSend/receive SEPA transfers
can_swift_transferSend/receive SWIFT transfers
can_hold_custodyUse custodial wallets
can_use_mpcUse MPC wallets

Create a Customer

POST /v0/customers
const customer = await lux.customers.create({
  type: 'individual',
  email: 'john@example.com',
  first_name: 'John',
  last_name: 'Doe',
  phone: '+1234567890',
  date_of_birth: '1990-01-15',
  address: {
    line1: '123 Main St',
    city: 'New York',
    state: 'NY',
    postal_code: '10001',
    country: 'US',
  },
});

// Direct user to KYC flow
console.log(customer.kyc_link);

KYC Status Lifecycle

not_started → pending → incomplete → under_review → approved
                                   ↘ manual_review → approved
                                   ↘ rejected
StatusDescription
not_startedKYC not initiated
pendingAwaiting document submission
incompleteAdditional documents required
under_reviewDocuments being reviewed
manual_reviewRequires manual compliance review
awaiting_uboWaiting for Ultimate Beneficial Owner info (businesses)
approvedKYC approved, customer can transact
rejectedKYC rejected, see rejection_reasons

Submit KYC Documents

POST /v0/customers/{customer_id}/kyc
{
  "document_type": "passport",
  "document_front": "data:image/png;base64,...",
  "selfie": "data:image/png;base64,..."
}

Document types: passport, drivers_license, national_id

List / Retrieve / Update / Delete

GET    /v0/customers                    # List (paginated)
GET    /v0/customers/{customer_id}      # Retrieve
PATCH  /v0/customers/{customer_id}      # Update
DELETE /v0/customers/{customer_id}      # Soft delete
GET    /v0/customers/{customer_id}/wallets           # Customer wallets
GET    /v0/customers/{customer_id}/external-accounts  # Linked bank accounts

On this page