{{ t('title_dashboard') }}
{{ s.label }}
{{ s.value }}
Clicks (MTD)
{{ dashExtra.clicks_mtd || 0 }}
FTDs (MTD)
{{ dashExtra.ftds_mtd || 0 }} {{ dashExtra.ftds_pct >= 0 ? '+' : '' }}{{ dashExtra.ftds_pct }}%
Registrations (MTD)
{{ dashExtra.registrations_mtd || 0 }} {{ dashExtra.registrations_pct >= 0 ? '+' : '' }}{{ dashExtra.registrations_pct }}%
Conversion Rate
{{ dashExtra.conversion_rate || '0.00' }}%
Commission (MTD)
${{ (dashExtra.commission_mtd||0).toFixed(2) }}
Deposits (YTD)
${{ (dashExtra.deposits_ytd||0).toFixed(2) }}
FTDs by Day of Week (this month)
Top Countries (clicks)
{{ i+1 }} {{ c.country || 'Unknown' }}
{{ c.clicks }}
No click data yet
{{ t('welcome') }}, {{ userName }}

{{ t('welcome_sub') }}

{{ t('title_users') }}
{{ t('col_name') }}{{ t('col_email') }}{{ t('col_role') }}{{ t('col_status') }}{{ t('col_payments') }}{{ t('col_joined') }}{{ t('col_action') }}
{{ u.name }} {{ u.email }} {{ u.role }} {{ u.status }} 🔒 Frozen Active {{ u.created_at?.slice(0,10) }}
{{ t('title_products') }}
{{ t('col_name') }}{{ t('col_vertical') }}{{ t('col_owner') }}{{ t('col_status') }}{{ t('col_action') }}
{{ p.name }} {{ p.vertical }} {{ p.owner_name }} {{ p.status }}
{{ t('title_conversions') }}
{{ t('col_affiliate') }}{{ t('col_product') }}{{ t('col_player_id') }}{{ t('col_event') }}{{ t('col_amount') }}{{ t('col_commission') }}{{ t('col_status') }}{{ t('col_date') }}
{{ c.affiliate_name }} {{ c.product_name }} {{ c.external_id || '—' }} {{ c.event_type }} ${{ c.amount }} ${{ c.commission }} {{ c.status }} {{ c.created_at?.slice(0,10) }}
{{ t('title_payouts') }}
{{ t('col_affiliate') }}{{ t('col_amount') }}{{ t('col_method') }}{{ t('col_status') }}{{ t('col_date') }}{{ t('col_action') }}
{{ p.affiliate_name }} ${{ p.amount }} {{ p.method }} {{ p.status }} {{ p.created_at?.slice(0,10) }}
My Products
NameVerticalURLStatusAction
{{ p.name }} {{ p.vertical }} {{ p.url.slice(0,30) }}… {{ p.status }}
Affiliates
NameEmailProductTracking CodeStatusJoined
{{ a.name }}{{ a.email }}{{ a.product_name }} {{ a.tracking_code }} {{ a.status }} {{ a.created_at?.slice(0,10) }}
Conversions
AffiliateEventAmountCommissionStatusDate
{{ c.affiliate_name }} {{ c.event_type }} ${{ c.amount }} ${{ c.commission }} {{ c.status }} {{ c.created_at?.slice(0,10) }}
Campaigns
NameProductStatusStartEnd
{{ c.name }}{{ c.product_name }} {{ c.status }} {{ c.start_date || '—' }}{{ c.end_date || '—' }}
Browse Products
{{ p.name }}
{{ p.vertical }}
{{ p.description }}
{{ p.model?.toUpperCase() }} ${{ p.cpa_amount }} CPA {{ p.rev_pct }}% RevShare
My Tracking Links
{{ l.product_name }} {{ l.status }}
{{ l.vertical }} {{ l.campaign_name ? '· '+l.campaign_name : '' }}
Tracking Link:
Sub-IDs (optional traffic source tags):
No approved links yet. Apply to a product first.
My Conversions
ProductEventAmountCommissionStatusDate
{{ c.product_name }} {{ c.event_type }} ${{ c.amount }} ${{ c.commission }} {{ c.status }} {{ c.created_at?.slice(0,10) }}
Earnings
TypeAmountBalance AfterNoteDate
{{ e.type }} ${{ Math.abs(e.amount).toFixed(2) }} ${{ e.balance_after?.toFixed(2) }} {{ e.note || '—' }} {{ e.created_at?.slice(0,10) }}
Payout
Available Balance
${{ stats.find(s=>s.label==='Balance')?.raw?.toFixed(2) || '0.00' }}
Request Payout

{{ payoutSuccess }}

{{ payoutError }}

Payout History
AmountMethodStatusDate
${{ p.amount }}{{ p.method }} {{ p.status }} {{ p.created_at?.slice(0,10) }}
From To
Player Report
Player IDAffiliateProductEventsTotal DepositCommissionFirst Seen
{{ p.player_id }} {{ p.affiliate_name }} {{ p.product_name }} {{ p.event_types }} ${{ (p.total_deposit||0).toFixed(2) }} ${{ (p.commission||0).toFixed(2) }} {{ p.first_seen?.slice(0,10) }}
No player data. Player IDs are tracked via postback external_id field.
By Traffic Source (sub1 tag)
SourceClicksUniqueAffiliates
{{ s.source }} {{ s.clicks }} {{ s.unique_clicks }} {{ s.affiliates }}
No data
By Country
CountryClicksUnique
{{ c.country }}{{ c.clicks }}{{ c.unique_clicks||c.clicks }}
No data
Affiliate Activity Log
NameEmailClicksConversionsCommissionLast Click
{{ a.name }} {{ a.email }} {{ a.clicks||0 }} {{ a.conversions||0 }} ${{ (a.commission||0).toFixed(2) }} {{ a.last_click?.slice(0,16) || '—' }}
No activity in this period
Monthly Clicks (last 12 months)
Monthly Conversions & Commission
Monthly Breakdown
MonthClicksConversionsCommission
{{ m.month }} {{ m.clicks || 0 }} {{ m.conversions || 0 }} ${{ (m.commission||0).toFixed(2) }}
No monthly data available
FTDs by Day of Week
DayFTDsShare
{{ d.day }} {{ d.ftds }}
{{ ftdDayTotal>0 ? Math.round((d.ftds/ftdDayTotal)*100) : 0 }}%
No FTD data in this period
Media by Type
TypeItemsDownloads
{{ m.type }} {{ m.count }} {{ m.downloads || 0 }}
No media data
Media by Category
CategoryItems
{{ m.category || 'Uncategorized' }} {{ m.count }}
No data
Recent Media Uploads
TitleTypeDimensionsLanguageUploaded
{{ m.title }} {{ m.type }} {{ m.width && m.height ? m.width+'×'+m.height : '—' }} {{ m.language }} {{ m.created_at?.slice(0,10) }}
No recent uploads
Clicks
{{ reportData.clicks || 0 }}
Conversions
{{ reportData.conversions || 0 }}
Commission
${{ (reportData.commission||0).toFixed(2) }}
Active Affiliates
{{ reportData.active_affiliates || 0 }}
Volume
${{ (reportData.volume||0).toFixed(2) }}
Clicks Over Time
Conversions by Vertical
Performance by Product
ProductClicksConv.Commission
{{ p.name }}{{ p.clicks }}{{ p.conversions }} ${{ p.commission?.toFixed(2) }}
Top Affiliates
#NameEmailClicksConversionsConv. RateCommission
{{ i+1 }} {{ a.name }} {{ a.email }} {{ a.clicks||0 }} {{ a.conversions||0 }} {{ a.conv_rate||0 }}% ${{ (a.commission||0).toFixed(2) }}
Clicks by Country
CountryClicks
{{ c.country || 'Unknown' }}{{ c.clicks }}
Products Performance
ProductVerticalClicksConversionsConv. RateCommission
{{ p.name }}{{ p.vertical }}{{ p.clicks||0 }} {{ p.conversions||0 }}{{ p.conv_rate||0 }}% ${{ (p.commission||0).toFixed(2) }}
📋 Affiliate Applications
No pending applications.
AffiliateEmailProductAppliedAction
{{ a.affiliate_name }} {{ a.affiliate_email }} {{ a.product_name }} {{ a.created_at?.slice(0,10) }}
🔐 Two-Factor Authentication
Setup 2FA for Admin Account

Protect the admin account with Google Authenticator or any TOTP app.

Scan with your authenticator app:

Secret: {{ twoFaSecret }}

{{ twoFaMsg }}

Disable 2FA

Enter your credentials + current 2FA code to disable.

How It Works

1. Click Generate QR Code and scan with Google Authenticator, Authy, or any TOTP app.

2. Enter the 6-digit code shown in your app to verify and activate.

3. Next time you log in, after entering your password you'll be asked for a 6-digit code.

4. Codes expire every 30 seconds.

⚠ Save your secret key — if you lose access to your authenticator app and don't have the secret, you'll need database access to recover.
🎨 White-Label Branding
Brand Settings
Colors

{{ brandMsg }}

Live Preview
{{ brandForm.company_name || 'Your Company' }}
AFFILIATE PORTAL
Email
Password
Sign In
{{ brandForm.footer_text }}
Custom Domain Setup

To use your own domain for the affiliate portal:

  1. Add a CNAME record in your DNS:
Type: CNAME
Name: {{ brandForm.custom_domain ? brandForm.custom_domain.split('.')[0] : 'affiliates' }}
Value: p24-affiliate.pages.dev

2. Enter the full domain above and save.

3. Contact admin to activate SSL for your domain.

🎨 Owner Branding Management
All Product Owners
OwnerCompany NamePrimary ColorCustom DomainAction
{{ b.owner_name }} {{ b.company_name || '—' }} {{ b.primary_color }} Default {{ b.custom_domain }}
🚨 Fraud Detection
Total Duplicate Clicks
{{ fraudData.summary?.total_dup || 0 }}
Affiliates with Dups
{{ fraudData.summary?.affected_affiliates || 0 }}
Suspended
{{ fraudData.suspended?.length || 0 }}
Top Duplicate Click Offenders
AffiliateEmailDuplicate ClicksLast SeenAction
{{ a.name }} {{ a.email }} {{ a.dup_count }} {{ a.last_seen?.slice(0,16) }}
No duplicate click offenders detected
Currently Suspended Affiliates
NameEmailSuspended SinceAction
{{ a.name }}{{ a.email }} {{ a.created_at?.slice(0,10) }}
No suspended affiliates
🎯 Pixels & Tags
Your Tracking Pixels

Add Facebook Pixel, TikTok Pixel, GTM, GA4, Snapchat, or custom script tags. Active pixels fire on every click-through to your tracked products.

PlatformPixel / IDEventProductServer APIStatusActions
{{ px.platform }} {{ px.pixel_id }} {{ px.event_name }} {{ px.product_name || 'All Products' }} {{ (px.platform==='facebook'||px.platform==='tiktok') && px.access_token ? '✅' : '—' }} {{ px.is_active ? 'Active' : 'Paused' }}
No pixels added yet. Click "Add Pixel" to get started.
🖼️ Media Library
{{ m.name }}
{{ m.product_name || 'All Products' }} · {{ m.size || '—' }}
{{ m.type }} {{ m.status }}
View
No media yet. Add your first creative!
🎟️ Promo Codes
CodeProductOwnerAffiliateTypeValueUsesExpiresStatusAction
{{ p.code }} {{ p.product_name || 'All' }} {{ p.owner_name || '—' }} {{ p.affiliate_name || 'All' }} {{ p.bonus_type }} {{ p.bonus_value || '—' }} {{ p.uses_count||0 }}{{ p.max_uses ? '/'+p.max_uses : '' }} {{ p.expires_at?.slice(0,10) || 'Never' }} {{ p.status }}
No promo codes yet
🖼️ My Media
{{ m.name }}
{{ m.size || '—' }} · {{ m.type }}
View
No media yet. Add banners and creatives for affiliates to use.
🎟️ Promo Codes
CodeProductAffiliateTypeValueUsesExpiresAction
{{ p.code }} {{ p.product_name || '—' }} {{ p.affiliate_name || 'All' }} {{ p.bonus_type }} {{ p.bonus_value || '—' }} {{ p.uses_count||0 }}{{ p.max_uses ? '/'+p.max_uses : '' }} {{ p.expires_at?.slice(0,10) || 'Never' }}
No promo codes yet
🖼️ Creatives

Browse and download banners, logos and creatives for your approved products.

{{ m.name }}
{{ m.product_name || 'All Products' }} · {{ m.type }}
⬇ Download
No creatives available yet for your approved products.
💎 Commission Management
{{ cr.product_name }} — {{ cr.model?.toUpperCase() }}
No products with commission rules yet.
AffiliateProductPlanModelCPARev%CAPCarryoverAction
{{ p.affiliate_name }}
{{ p.affiliate_email }}
{{ p.product_name }} {{ p.plan_name }} {{ p.model }} ${{ p.cpa_amount || '—' }} {{ p.rev_pct ? p.rev_pct+'%' : '—' }} {{ p.cpa_cap ? p.cpa_cap+'/'+p.cpa_cap_period : '—' }} {{ p.negative_carryover ? 'Yes' : 'No' }}
No custom plans. All affiliates use the default product commission.
Current Period CPA CAP Usage
AffiliateProductUsedLimit% UsedPeriod
{{ c.affiliate_name }} {{ c.product_name }} {{ c.count }} {{ c.cap_limit || '∞' }}
{{ Math.round((c.count/c.cap_limit)*100) }}%
No cap
{{ c.period }}
No CPA activity this period
💎 Commission Settings
{{ cr.product_name }} — {{ cr.model?.toUpperCase() }}
Set commission rules first via My Products.
🤝 Referral Commission
Referral Relationships
ReferrerSub-AffiliateJoinedTheir EarningsReferral Earned
{{ r.referrer_name }}
{{ r.referrer_email }}
{{ r.referee_name }}
{{ r.referee_email }}
{{ r.created_at?.slice(0,10) }} ${{ (r.total_referral_earned||0).toFixed(2) }}
No referral relationships yet
Global Commission Rate

Affiliates earn this % of their sub-affiliates' commissions.

{{ referralMsg }}

🧾 Invoices
Invoice #AffiliateAmountStatusCreatedActions
{{ inv.invoice_number || '#'+inv.id }} {{ inv.affiliate_name }}
{{ inv.affiliate_email }}
${{ inv.amount?.toFixed(2) }} {{ inv.currency }} {{ inv.status }} {{ inv.created_at?.slice(0,10) }}
No invoices yet. They are auto-created when payouts are approved.
💬 Messages
ToSubjectTypeDate
{{ m.is_broadcast ? '📢 All Affiliates' : (m.to_name||m.to_id) }} {{ m.subject }} {{ m.is_broadcast ? 'Broadcast' : 'Direct' }} {{ m.created_at?.slice(0,16) }}
No messages sent yet
🎟️ Available Promo Codes

Use these promo codes in your promotions. Click a code to copy it.

CodeProductBonus TypeValueExpires
{{ p.code }} ✓ Copied! {{ p.product_name || 'All Products' }} {{ p.bonus_type }} {{ p.bonus_value || '—' }} {{ p.expires_at?.slice(0,10) || 'Never' }}
No promo codes available for your products yet.
🤝 Refer & Earn
Your Referral Link

Share this link to recruit other affiliates. You earn a % of their commissions automatically.

Code: {{ refCode }}
Sub-Affiliates
{{ myReferrals.length }}
Total Earned
${{ refEarningsTotal.toFixed(2) }}
How It Works

1. Share your referral link with other marketers

2. When they register and get approved, they become your sub-affiliate

3. Every time they earn a commission, you automatically earn a percentage

4. Your referral earnings appear in your earnings ledger

My Sub-Affiliates
NameEmailStatusTheir ClicksTheir ConversionsJoined
{{ r.name }} {{ r.email }} {{ r.status }} {{ r.clicks || 0 }} {{ r.their_commission?.toFixed(2) ? '$'+r.their_commission.toFixed(2) : '—' }} {{ r.created_at?.slice(0,10) }}
No sub-affiliates yet. Share your referral link to get started!
🧾 My Invoices
Invoice #AmountStatusCreatedPaid
{{ inv.invoice_number || '#'+inv.id }} ${{ inv.amount?.toFixed(2) }} {{ inv.currency }} {{ inv.status }} {{ inv.created_at?.slice(0,10) }} {{ inv.paid_at?.slice(0,10) || '—' }}
No invoices yet. Invoices are generated automatically when your payout is approved.
💬 Messages
{{ m.subject }} New {{ m.created_at?.slice(0,16) }}
{{ m.body }}
No messages yet.
🏷️ Brands
BrandOwnerWebsiteProductsStatusAction
{{ b.name }}
{{ b.owner_name || '—' }} {{ b.website }} {{ b.product_count || 0 }} products {{ b.status }}
No brands yet. Add a brand to categorize your products.
🏷️ My Brands
BrandWebsiteProductsColor
{{ b.name }}
{{ b.website }} {{ b.product_count || 0 }} products {{ b.primary_color }}
No brands yet.
💱 Exchange Rates (from USD)
Add / Update Rate

{{ rateMsg }}

Current Rates
FromToRateUpdatedAction
USD {{ r.to_currency }} {{ r.rate }} {{ r.updated_at?.slice(0,16) }}
No exchange rates configured
🌍 Country Tax Rules
Add / Update Rule

{{ taxMsg }}

Country Tax Rules
CountryTax RateApplies ToAction
{{ t.country }} {{ t.tax_rate }}% {{ t.applies_to }}
No tax rules configured
✅ Payment Qualification Rules
Add Rule

{{ qualMsg }}

Active Rules
TypeMin ClicksMin Conv.Min BalanceAction
{{ q.is_global ? 'Global' : 'Product' }} {{ q.min_clicks || 0 }} {{ q.min_conversions || 0 }} ${{ q.min_balance || 0 }}
No qualification rules — all affiliates can request payout