Overview
The JOIP Referral Program rewards you for bringing new users to the platform. When someone signs up using your referral link:- You receive: 10 credits
- They receive: 25 bonus credits
- No limits: Refer as many friends as you want (subject to rate limiting)
How It Works
1. Get Your Referral Code
Every user automatically gets a unique 8-character referral code:- 8 uppercase alphanumeric characters
- Globally unique across all users
- Generated on first account access
- Never changes once created
2. Share Your Link
Your referral link includes your encoded code:r parameter is your referral code encoded in base64url format.
3. New User Signs Up
When someone visits your referral link:-
Cookie is Set
- System stores referral code in
pending_referralcookie - Also stores
referral_source(direct or session_share) - And
referral_source_idif from shared session
- System stores referral code in
-
User Creates Account
- Goes through normal signup/login flow
- System detects pending referral cookie
-
Referral Processed
- Validates referral code
- Checks for fraud (self-referral, duplicates)
- Awards credits atomically in database transaction
- Clears referral cookies
4. Credits Awarded
Both accounts receive credits instantly:Referral Code Format
Code Structure
Raw Code:- Length: Exactly 8 characters
- Characters: A-Z and 0-9 (uppercase only)
- Validation regex:
/^[A-Z0-9]{8}$/
- Format: Base64URL encoding
- Safe for URL parameters
- Decoded server-side for validation
Code Generation
Codes are generated using cryptographically random selection:- Database unique constraint on
users.referralCode - Automatic retry with new code on collision
- Maximum 10 attempts before error
- Collision probability: ~1 in 2.8 trillion
API Endpoints
Get Your Referral Stats
GET /api/referrals/stats
GET /api/referrals/stats
Get your referral statistics and earnings.Response:Fields:
referralCode- Your unique codetotalReferrals- Number of successful referralscreditsEarned- Total credits earned from referralsreferrerCredits- Credits per referral (configurable)referredCredits- Credits new users receive (configurable)isProgramActive- Whether program is currently active
Get Referral History
GET /api/referrals/history
GET /api/referrals/history
View your referral history with pagination.Query Parameters:Privacy Note:
For privacy reasons, referred user details (email, name) are not included in the response.
page- Page number (default: 1)limit- Items per page (default: 10)
Get Referral Link
GET /api/referrals/link
GET /api/referrals/link
Get your referral code and shareable URL.Response:Usage:
Validate Referral Code
POST /api/referrals/validate
POST /api/referrals/validate
Check if a referral code is valid (public endpoint).Request Body:Response:Note:
Does not reveal the referrer’s identity for privacy.
Referral Sources
Referrals can come from two sources:Direct Referrals
Source Type:direct
When someone uses your referral link directly:
Session Share Referrals
Source Type:session_share
When someone discovers JOIP through a shared session:
- Tracks which shared session brought in the user
- Helps measure content virality
- Same credit rewards as direct referrals
Fraud Prevention
Self-Referral Prevention
You cannot refer yourself:Duplicate Prevention
Each user can only be referred once:- Database unique constraint on
userReferrals.referredUserId - Check performed in transaction with row locking
users.referredByfield tracks referrer
Rate Limiting
To prevent abuse, referrals are rate-limited: Default Limits:- Maximum 10 successful referrals per hour per referrer
- Configurable via admin settings
Code Validation
Strict validation prevents malformed codes:Database Schema
Users Table
Referral-related fields:User Referrals Table
Tracks all successful referrals:Referral Settings Table
Admin-configurable settings:Referral Processing Flow
Step-by-Step Process
Transaction Atomicity
The entire referral process happens in a single database transaction:- Either everything succeeds or nothing happens
- No partial referrals
- No lost credits
- No race conditions
Admin Features
View Referral Statistics
GET /api/admin/referrals/stats
GET /api/admin/referrals/stats
Get system-wide referral statistics (admin only).Response:
Update Referral Settings
PATCH /api/admin/referrals/settings
PATCH /api/admin/referrals/settings
Update referral program configuration (admin only).Request Body:Response:
Returns updated settings object.Note:
Changes affect future referrals only. Existing referrals are not retroactively adjusted.
View Recent Referrals
GET /api/admin/referrals/recent
GET /api/admin/referrals/recent
Get recent referrals with user details (admin only).Query Parameters:
limit- Number of results (default: 50)
Best Practices
For Users
-
Share Responsibly
- Only share with genuinely interested people
- Don’t spam or use deceptive tactics
- Explain what JOIP is before sharing link
-
Track Your Success
- Check
/api/referrals/statsregularly - Monitor which sharing methods work best
- Use session shares to showcase content
- Check
-
Maximize Referrals
- Share your best sessions publicly
- Include referral link in social media bios
- Engage with community to build trust
For Developers
-
Always Validate Codes
-
Set Secure Cookies
-
Clear Cookies After Processing
-
Log Referral Events
Troubleshooting
Referral not processed
Referral not processed
Possible Causes:
- User already had an account
- Self-referral attempt
- Invalid referral code
- Rate limit exceeded
- Referral program disabled
- Check server logs for referral processing errors
- Verify referral code exists:
SELECT * FROM users WHERE referral_code = 'CODE' - Check if user already referred:
SELECT referred_by FROM users WHERE id = 'USER_ID' - Verify program is active:
SELECT is_active FROM referral_settings
Credits not awarded
Credits not awarded
Possible Causes:
- Credits initialization failed
- Transaction rollback due to error
- Database connection issue
- Check if referral record exists:
SELECT * FROM user_referrals WHERE referred_user_id = 'USER_ID' - Check credit transactions:
SELECT * FROM credit_transactions WHERE user_id IN ('REFERRER_ID', 'REFERRED_ID') - Review server logs for transaction errors
Invalid referral code error
Invalid referral code error
Possible Causes:
- Code format incorrect (must be 8 chars, A-Z0-9)
- Code doesn’t exist in database
- Encoding/decoding error
Rate limit exceeded
Rate limit exceeded
Cause: Referrer has made 10+ successful referrals in the past hourSolution:
- Wait for rate limit window to pass (1 hour)
- Admin can adjust limit:
UPDATE referral_settings SET max_referrals_per_hour = 20
Analytics & Tracking
Referral Metrics
Track these metrics to measure program success:-
Conversion Rate
-
Credits Per User
-
Source Distribution
-
Top Referrers
Activity Logging
Referral events are logged in the activity system:Future Enhancements
Planned improvements to the referral system:-
Tiered Rewards
- More credits for milestone referrals (10, 25, 50, 100)
- Bonus rewards for high-quality referrals (active users)
-
Referral Contests
- Monthly leaderboards
- Prizes for top referrers
-
Custom Referral Codes
- Allow users to set vanity codes
- Validation for uniqueness and appropriateness
-
Referral Dashboard
- Visual analytics
- Referral timeline
- Conversion funnel
-
Social Sharing Integration
- One-click sharing to Twitter, Discord, Reddit
- Pre-written share messages
- Referral link shortening
Related Documentation
- Credits System - How credits work
- Authentication - User account creation
- Profile Management - View referral stats in profile