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
Field Type Description firstNamestring Customer’s first name (max 50 chars) lastNamestring Customer’s last name (max 50 chars) birthDatestring Date of birth in YYYY-MM-DD format nationalIdstring National ID (9-digit SSN for US customers) countryOfIssuestring 2-letter country code for national ID emailstring Customer’s email address addressobject Customer’s physical address ipAddressstring Customer’s IP address occupationstring Customer’s occupation code annualSalarystring Annual salary range accountPurposestring Purpose of account expectedMonthlyVolumestring Expected monthly spend range isTermsOfServiceAcceptedboolean Must be true phoneCountryCodestring Phone country code (e.g., “1” for US) phoneNumberstring Phone number without country code
Address Object
Field Type Description line1string Street address line2string Apartment, suite, etc. (optional) citystring City statestring State/province code postalCodestring Postal/ZIP code countrystring 2-letter country code
Optional Fields
Field Type Description walletAddressstring EVM wallet address (auto-created if not provided) solanaAddressstring Solana 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"
}
Field Description idApplication ID customerIdYour customer ID statusCurrent application status reasonReason if status is not approved completionLinkURL for customer to complete additional verification
Application Statuses
Status Description 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
Create Customer
Create a customer record via POST /v1/customers
Submit KYC Application
Submit application with all required identity fields
Check Status
Response indicates if additional verification is needed
Complete Verification
If needsVerification, direct customer to completionLink to upload ID documents
Wait for Approval
Poll status or receive webhook when application is approved
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"
}
Completion Link
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:
Event Description kyc.approvedCustomer approved for card issuance kyc.rejectedApplication was rejected
Next Steps
Customers Learn about customer management
Cards Issue cards after KYC approval