Skip to main content

Overview

KillB implements a tiered Know Your Customer (KYC) system with five levels (L0-L4). Each level has different requirements and transaction limits to balance user experience with regulatory compliance.

Level Comparison

LevelVerificationDaily LimitMonthly LimitProcessing Time
L0Email only$500$1,000Instant
L1Basic info + ID number$2,500$10,000Instant
L2ID images + proof of address$10,000$50,0001-24 hours
L3Enhanced due diligence$50,000$250,0001-5 days
L4Enterprise verificationCustomCustom5-10 days

Level L0 - Email Verification

L0 Requirements

Minimum Information:
  • Email address
  • Email verification click
Limits:
  • Daily: $500
  • Monthly: $1,000
Use Cases:
  • Testing integration
  • Initial user experience
  • Small test transactions
What users can do:
  • Create account
  • Get quotations
  • Small test ramps
Limitations:
  • Very low limits
  • Limited payment methods
  • Cannot access savings
Upgrade Path: Submit basic personal information → L1

Level L1 - Basic KYC

L1 Requirements

Information Needed:
  • Full name (first, middle, last)
  • Date of birth
  • Email and phone
  • Physical address
  • Government ID number
  • Nationality
Limits:
  • Daily: $2,500
  • Monthly: $10,000
Verification: Automated, instant
What users can do:
  • Regular on/off-ramps
  • Most payment methods
  • Multiple accounts
  • Basic savings accounts
Example:
{
  "type": "PERSON",
  "data": {
    "firstName": "María",
    "lastName": "López",
    "dateOfBirth": "1992-03-10",
    "email": "[email protected]",
    "phone": "+525512345678",
    "address": { /* full address */ },
    "document": {
      "type": "RFC",
      "number": "LOMM920310ABC",
      "issuedCountryCode": "MX"
    },
    "nationality": "MX",
    "citizenship": "MX"
  }
}
Upgrade Path: Upload ID images and proof of address → L2

Level L2 - Enhanced KYC

L2 Requirements

Documents Needed:
  • All L1 information
  • Government ID images (front + back)
  • Proof of address (utility bill, bank statement, or lease)
  • Selfie for liveness check
Limits:
  • Daily: $10,000
  • Monthly: $50,000
Verification: 1-24 hours (manual review)
What users can do:
  • Higher value transactions
  • All payment methods
  • Pre-funded accounts
  • Full savings features
  • Priority support
Document Upload:
POST /api/v2/users/person/document
Content-Type: multipart/form-data
const formData = new FormData();
formData.append('userId', userId);
formData.append('documentType', 'PASSPORT');
formData.append('frontDocument', frontImageFile);
formData.append('backDocument', backImageFile);

await fetch('/api/v2/users/person/document', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`
  },
  body: formData
});
Accepted Document Types:
  • PASSPORT
  • DRIVER_LICENSE
  • NUIP
  • INE
  • PROVE_OF_ADDRESS_UTILITY_BILL
  • PROVE_OF_ADDRESS_BANK_STATEMENT
Upgrade Path: Submit source of funds documentation → L3

Level L3 - Advanced KYC

L3 Requirements

Additional Documents:
  • All L2 requirements
  • Source of funds documentation
  • Bank statements (last 3 months)
  • Employment verification OR business financials
  • Enhanced due diligence questionnaire
Limits:
  • Daily: $50,000
  • Monthly: $250,000
Verification: 1-5 business days
What users can do:
  • High-value transactions
  • Institutional features
  • Custom settlement terms
  • Dedicated account manager
Source of Funds Documents:
POST /api/v2/users/person/document
const uploadSourceOfFunds = async (userId, documentFile) => {
  const formData = new FormData();
  formData.append('userId', userId);
  formData.append('documentType', 'SOURCE_OF_FUNDS_BANK_STATEMENT');
  formData.append('frontDocument', documentFile);
  
  await fetch('/api/v2/users/person/document', {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${token}` },
    body: formData
  });
};
Document Types:
  • SOURCE_OF_FUNDS_BANK_STATEMENT
  • SOURCE_OF_FUNDS_PAYSLIP
  • Employment letters
  • Business financial statements
Upgrade Path: Contact support for enterprise verification → L4

Level L4 - Enterprise

L4 Requirements

Custom Verification:
  • All L3 requirements
  • Business plan and model
  • Corporate documents
  • Compliance approval
  • Legal review
  • Contract negotiation
Limits:
  • Custom daily limits
  • Custom monthly limits
  • Negotiated pricing
Verification: 5-10 business days + negotiation
What users can do:
  • Unlimited transactions (custom limits)
  • White-label integration
  • Custom features
  • SLA guarantees
  • Dedicated infrastructure
How to Apply: Contact KillB sales at [email protected]

Checking User Level

GET /api/v2/users/{userId}
Response
{
  "id": "user-id",
  "accessLevel": "L2",
  "status": "ACTIVE",
  "note": "KYC verification complete"
}

Level Transitions

Automatic Upgrades

Users are automatically upgraded when they submit required information:

Monitoring Upgrades

Use webhooks to track level changes:
{
  "event": "user.level_changed",
  "data": {
    "userId": "user-id",
    "previousLevel": "L1",
    "newLevel": "L2",
    "status": "ACTIVE"
  }
}

Handling Rejections

If KYC verification fails:
{
  "id": "user-id",
  "status": "REJECTED",
  "accessLevel": "L0",
  "note": "Document image unclear. Please resubmit with better quality image."
}
Common Rejection Reasons:
  • Unclear document images
  • Information mismatch
  • Document expired
  • Underage user
  • Prohibited jurisdiction
  • Failed liveness check
Resolution:
  1. Review note field for specific reason
  2. Correct the issue
  3. Resubmit documents
  4. Wait for re-review

Transaction Limits

Limits are cumulative across all transactions:
const checkUserLimits = async (userId) => {
  const user = await getUser(userId);
  const limits = {
    'L0': { daily: 500, monthly: 1000 },
    'L1': { daily: 2500, monthly: 10000 },
    'L2': { daily: 10000, monthly: 50000 },
    'L3': { daily: 50000, monthly: 250000 }
  };
  
  const userLimits = limits[user.accessLevel];
  const usedToday = await getTransactionTotal(userId, 'today');
  const usedMonth = await getTransactionTotal(userId, 'month');
  
  return {
    dailyRemaining: userLimits.daily - usedToday,
    monthlyRemaining: userLimits.monthly - usedMonth
  };
};
Limits are in USD equivalent. All transactions are converted to USD for limit tracking.

Best Practices

  • Start users at L0/L1
  • Upgrade only when needed
  • Don’t request L2 docs until user hits L1 limits
  • Explain benefits of higher levels
  • Show current level and limits
  • Explain what’s needed for upgrade
  • Provide document guidelines
  • Set expectations on review time
  • Guide users on photo quality
  • Show example of good documents
  • Check file size and format
  • Verify images before upload
  • Use the provided complianceUrl
  • Direct users there for KYC completion
  • KillB handles the entire KYC flow
  • Receive webhooks on completion

Next Steps