Referrals

Growth

Build a referral program to incentivize users to invite friends.

Unique Codes

Auto-generated referral links

Flexible Rewards

Credits, discounts, trials & more

Leaderboards

Gamify referral competition

Fraud Protection

Built-in abuse prevention

Get Referral Code

Each user gets a unique referral code:

Client-side
'use client'

import { useReferral } from '@sylphx/platform-sdk/react'

export function ReferralSection() {
  const { referralCode, referralUrl, copyUrl, copied } = useReferral()

  return (
    <div>
      <h3>Invite Friends</h3>
      <p>Share your referral link and earn rewards!</p>

      <div className="flex gap-2 mt-4">
        <input readOnly value={referralUrl} className="flex-1 border rounded px-3 py-2" />
        <button onClick={copyUrl}>{copied ? 'Copied!' : 'Copy'}</button>
      </div>

      <p className="text-sm text-muted-foreground mt-2">
        Your code: <code>{referralCode}</code>
      </p>
    </div>
  )
}
Server-side
import { platform } from '@/lib/platform'

// Get or create referral code for user
const { code, url } = await platform.referrals.getCode(userId)

// Custom referral URL
const customUrl = `https://myapp.com/signup?ref=${code}`

Redeem Referral

1

User Signs Up

New user arrives via referral link with ?ref=CODE parameter.

2

Create Account

User completes the signup process.

3

Redeem Code

Call platform.referrals.redeem() to link the referral and trigger rewards.

During signup
import { platform } from '@/lib/platform'

// After creating the new user account
const referralCode = searchParams.get('ref')

if (referralCode) {
  try {
    const result = await platform.referrals.redeem({
      code: referralCode,
      newUserId: newUser.id,
    })

    console.log('Referral redeemed:', result)
    // result.referrerId - Who referred them
    // result.reward - Reward details
  } catch (error) {
    // Invalid or expired code - still allow signup
    console.log('Invalid referral code:', referralCode)
  }
}

Reward Types

Configure rewards in your dashboard:

credit

Account credit for billing

discount

Percentage off purchase

trial

Extended trial period

feature

Unlock specific feature

custom

Custom reward via webhook

Dashboard configuration
// App Settings → Growth → Referrals

{
  "enabled": true,
  "rewards": {
    "referrer": {
      "type": "credit",
      "amount": 10,         // $10 credit
      "triggerOn": "signup" // or "purchase", "subscription"
    },
    "referee": {
      "type": "discount",
      "amount": 20,         // 20% discount
      "maxUses": 1
    }
  },
  "limits": {
    "maxReferrals": 50,     // Per user
    "expirationDays": 30    // Code expiration
  }
}

Referral Stats

Show users their referral performance:

'use client'

import { useReferral } from '@sylphx/platform-sdk/react'

export function ReferralStats() {
  const { stats } = useReferral()

  return (
    <div className="grid grid-cols-3 gap-4">
      <div className="border rounded p-4 text-center">
        <div className="text-2xl font-bold">{stats?.clicks}</div>
        <div className="text-muted-foreground">Link Clicks</div>
      </div>
      <div className="border rounded p-4 text-center">
        <div className="text-2xl font-bold">{stats?.signups}</div>
        <div className="text-muted-foreground">Sign Ups</div>
      </div>
      <div className="border rounded p-4 text-center">
        <div className="text-2xl font-bold">${stats?.earned}</div>
        <div className="text-muted-foreground">Earned</div>
      </div>
    </div>
  )
}
Server-side
const stats = await platform.referrals.getStats(userId)

// {
//   code: 'ABC123',
//   clicks: 45,
//   signups: 12,
//   conversions: 8,
//   earned: 80.00,
//   referrals: [
//     { userId: 'user_123', signedUpAt: '2024-01-15', status: 'converted' },
//     { userId: 'user_456', signedUpAt: '2024-01-16', status: 'pending' },
//   ]
// }

Leaderboard

Create competition with a leaderboard:

const leaderboard = await platform.referrals.getLeaderboard({
  period: 'month', // 'week', 'month', 'all-time'
  limit: 10,
})

// [
//   { userId: 'user_1', name: 'Alice', referrals: 25, earned: 250 },
//   { userId: 'user_2', name: 'Bob', referrals: 18, earned: 180 },
//   // ...
// ]

Custom Codes

Allow users to customize their referral codes:

// Request custom code (subject to availability)
await platform.referrals.setCustomCode({
  userId: user.id,
  code: 'ALICE20', // Must be unique
})

// Validate custom code
const available = await platform.referrals.checkCodeAvailability('ALICE20')

Fraud Prevention

Built-in fraud prevention mechanisms:

PropertyTypeDescription
Self-referral detectionAutomaticPrevents users from referring themselves
Duplicate account detectionAutomaticIdentifies suspicious signups from same device/IP
IP-based rate limitingAutomaticLimits referrals from same IP address
Email domain validationConfigurableBlock disposable email domains
Delayed reward releaseConfigurableHold rewards for verification period

Verification Period

Rewards can be held for a verification period (e.g., 30 days) before being released, allowing you to verify legitimate referrals.