Skip to main content

KYC

KYC (Know Your Customer) verification is required before customers can issue cards. Proxy handles identity verification through Rain’s KYC infrastructure to comply with financial regulations.

Why KYC?

Card issuance is a regulated activity. Before a customer can:
  • Issue virtual cards
  • Fund their account
  • Make transactions
They must complete identity verification to prevent fraud and money laundering.

Creating a KYC Application

Submit a KYC application with the customer’s identity information:
curl -X POST https://api.useproxy.ai/v1/kyc/applications \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_xxx",
    "application": {
      "firstName": "John",
      "lastName": "Doe",
      "birthDate": "1990-01-15",
      "nationalId": "123456789",
      "countryOfIssue": "US",
      "email": "john@example.com",
      "address": {
        "line1": "123 Main St",
        "city": "San Francisco",
        "state": "CA",
        "postalCode": "94102",
        "country": "US"
      },
      "ipAddress": "1.2.3.4",
      "occupation": "SOFTWARE_ENGINEER",
      "annualSalary": "100000_149999",
      "accountPurpose": "PERSONAL_SPENDING",
      "expectedMonthlyVolume": "1000_4999",
      "isTermsOfServiceAccepted": true,
      "phoneCountryCode": "1",
      "phoneNumber": "5551234567"
    }
  }'

Required Fields

FieldTypeDescription
firstNamestringCustomer’s first name (max 50 chars)
lastNamestringCustomer’s last name (max 50 chars)
birthDatestringDate of birth in YYYY-MM-DD format
nationalIdstringNational ID (9-digit SSN for US customers)
countryOfIssuestring2-letter country code for national ID
emailstringCustomer’s email address
addressobjectCustomer’s physical address
ipAddressstringCustomer’s IP address
occupationstringCustomer’s occupation code
annualSalarystringAnnual salary range
accountPurposestringPurpose of account
expectedMonthlyVolumestringExpected monthly spend range
isTermsOfServiceAcceptedbooleanMust be true
phoneCountryCodestringPhone country code (e.g., “1” for US)
phoneNumberstringPhone number without country code

Address Object

FieldTypeDescription
line1stringStreet address
line2stringApartment, suite, etc. (optional)
citystringCity
statestringState/province code
postalCodestringPostal/ZIP code
countrystring2-letter country code

Optional Fields

FieldTypeDescription
walletAddressstringEVM wallet address (auto-created if not provided)
solanaAddressstringSolana wallet address (auto-created if not provided)
You don’t need to provide a wallet address. Proxy automatically creates a secure server-managed wallet for each customer during KYC.

Occupation Codes

Common values:
  • SOFTWARE_ENGINEER
  • PRODUCT_MANAGER
  • BUSINESS_OWNER
  • ACCOUNTANT
  • CONSULTANT
  • OTHER

Salary Ranges

  • 0_24999
  • 25000_49999
  • 50000_99999
  • 100000_149999
  • 150000_249999
  • 250000_499999
  • 500000_PLUS

Monthly Volume Ranges

  • 0_999
  • 1000_4999
  • 5000_9999
  • 10000_24999
  • 25000_49999
  • 50000_PLUS

Account Purpose

  • PERSONAL_SPENDING
  • BUSINESS_EXPENSES
  • PAYROLL
  • VENDOR_PAYMENTS

Response

{
  "id": "app_xxx",
  "customerId": "cus_xxx",
  "status": "pending",
  "reason": null,
  "completionLink": "https://verify.example.com/complete/xyz789"
}
FieldDescription
idApplication ID
customerIdYour customer ID
statusCurrent application status
reasonReason if status is not approved
completionLinkURL for customer to complete additional verification

Application Statuses

StatusDescription
pendingApplication submitted, under review
approvedVerified, customer can issue cards
needsInformationAdditional info required
needsVerificationIdentity verification needed - send customer to completionLink
manualReviewFlagged for manual review
deniedApplication rejected
lockedAccount locked

KYC Flow

1

Create Customer

Create a customer record via POST /v1/customers
2

Submit KYC Application

Submit application with all required identity fields
3

Check Status

Response indicates if additional verification is needed
4

Complete Verification

If needsVerification, direct customer to completionLink to upload ID documents
5

Wait for Approval

Poll status or receive webhook when application is approved
6

Issue Cards

Once approved, customer can issue virtual cards

Checking Application Status

curl https://api.useproxy.ai/v1/kyc/applications/app_xxx \
  -H "Authorization: Bearer sk_live_xxx"
Response:
{
  "id": "app_xxx",
  "customerId": "cus_xxx",
  "status": "needsVerification",
  "reason": "Identity verification required",
  "completionLink": "https://verify.example.com/complete/xyz789"
}
When status is needsInformation or needsVerification, the response includes a completionLink. Direct your customer to this URL to complete the verification process (e.g., upload government ID).
Completion links expire after 24 hours. Request a new application status to get a fresh link if needed.

Webhooks

Subscribe to KYC events for real-time updates:
EventDescription
kyc.approvedCustomer approved for card issuance
kyc.rejectedApplication was rejected

Next Steps