Skip to content

User Onboarding Flow

Complete user journey from anonymous visitor to fully verified platform user.

Overview

The onboarding flow consists of several stages:

  1. Anonymous visit with referral attribution
  2. Registration and email verification
  3. Profile completion
  4. KYC verification (required for investments and payouts)

Main Flow Diagram


Step Details

1. Anonymous Visit

Trigger: User lands on the platform via referral link or direct visit.

Referral Link Format:

https://platform.com/?ref=ABC123&utm_source=instagram&utm_medium=post&utm_campaign=summer

Cookie Storage:

KeyValueDuration
iwm_ref_codePartner referral code30 days
iwm_ref_link_idSpecific link ID (if tracked)30 days
iwm_first_touchFirst visit timestamp30 days
iwm_utmJSON with UTM paramsSession

Attribution Data Stored:

json
{
  "partner_code": "ABC123",
  "link_id": "uuid-of-link",
  "first_touch_at": "2024-01-15T10:30:00Z",
  "last_touch_at": "2024-01-15T10:30:00Z",
  "utm_source": "instagram",
  "utm_medium": "post",
  "utm_campaign": "summer",
  "landing_page": "/products",
  "ip_address": "192.168.1.1",
  "user_agent": "Mozilla/5.0..."
}

2. Registration

Endpoint: POST /auth/register

Request Body:

json
{
  "email": "user@example.com",
  "password": "SecureP@ss123",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "+7900123456",
  "acceptTerms": true,
  "acceptMarketing": false
}

Validation Rules:

FieldRules
emailRequired, valid email format, unique in DB
passwordMin 8 chars, 1 uppercase, 1 lowercase, 1 number, 1 special
firstNameRequired, 2-100 chars, letters only
lastNameRequired, 2-100 chars, letters only
phoneOptional, E.164 format
acceptTermsRequired, must be true

Error Scenarios:

CodeScenarioResponse
400Validation failed{ "errors": [...] }
409Email exists{ "code": "EMAIL_EXISTS" }
429Rate limit exceededRetry-After header

3. Email Verification

Verification Token:

  • Format: UUID v4
  • Expiry: 24 hours
  • Single use (deleted after verification)

Verification Email Content:

  • Subject: "Verify your email - IWM Platform"
  • Link: https://platform.com/verify?token={token}
  • Includes: User name, expiry notice, support contact

Resend Logic:

  • Max 3 resends per hour
  • New token generated each time
  • Previous tokens invalidated

Timeout Handling:

  • Token expires after 24 hours
  • User can request new token
  • Account auto-deleted after 7 days if unverified

4. Profile Completion

Endpoint: PATCH /users/me/profile

Optional Fields:

json
{
  "middleName": "Ivanovich",
  "dateOfBirth": "1990-05-15",
  "avatarUrl": "https://cdn.example.com/avatar.jpg",
  "language": "ru",
  "timezone": "Europe/Moscow"
}

Avatar Upload:

  • Endpoint: POST /users/me/avatar
  • Max size: 5MB
  • Formats: JPEG, PNG, WebP
  • Resized to: 200x200, 400x400

5. KYC Submission

KYC Levels:

LevelRequirementsCapabilities
NONEDefaultBrowse, basic purchases
BASICEmail verifiedAll purchases
STANDARDID + Selfie verifiedInvestments up to 1M RUB
ENHANCEDAddress proof + Income proofUnlimited investments

Required Documents (STANDARD):

DocumentAccepted Types
ID DocumentPassport, National ID, Driver's License
SelfiePhoto with ID visible

Document Upload:

  • Endpoint: POST /kyc/documents
  • Max size: 10MB per file
  • Formats: JPEG, PNG, PDF
  • Encrypted at rest (AES-256)

Validation Rules:

  • Document must be legible
  • Selfie must clearly show face and ID
  • ID not expired
  • Name matches profile

6. KYC Review Process

Status Flow:

NOT_STARTED -> DOCUMENTS_PENDING -> SUBMITTED -> UNDER_REVIEW -> APPROVED/REJECTED/NEEDS_INFO

Review Timeline:

  • Standard: 24-48 business hours
  • Priority (large investments): 4-8 hours

Rejection Reasons:

CodeDescriptionUser Action
DOCUMENT_BLURRYDocument not readableRe-upload clearer image
DOCUMENT_EXPIREDID has expiredUpload valid ID
SELFIE_MISMATCHFace doesn't match IDRetake selfie
INFO_MISMATCHDetails don't match profileUpdate profile or upload correct docs
SUSPECTED_FRAUDSuspicious activityContact support

Re-submission:

  • Max 3 attempts per document type
  • After 3 failures, manual review required
  • Cool-down: 24 hours between submissions

Error Scenarios

Registration Errors

ScenarioHTTP CodeError CodeUser Message
Email already registered409EMAIL_EXISTS"This email is already registered. Try logging in."
Weak password400WEAK_PASSWORD"Password does not meet requirements."
Invalid email format400INVALID_EMAIL"Please enter a valid email address."
Terms not accepted400TERMS_REQUIRED"You must accept the terms to continue."
Rate limited429RATE_LIMITED"Too many attempts. Please wait."

Verification Errors

ScenarioHTTP CodeError CodeUser Message
Token expired400TOKEN_EXPIRED"This link has expired. Request a new one."
Token already used400TOKEN_USED"This link has already been used."
Token not found404TOKEN_NOT_FOUND"Invalid verification link."

KYC Errors

ScenarioHTTP CodeError CodeUser Message
File too large413FILE_TOO_LARGE"File exceeds 10MB limit."
Invalid file type400INVALID_FILE_TYPE"Please upload JPEG, PNG, or PDF."
KYC already approved400ALREADY_VERIFIED"Your identity has already been verified."
Max attempts exceeded400MAX_ATTEMPTS"Please contact support for assistance."