# Affonso — Affiliate Software to Scale Your SaaS
> Launch your SaaS affiliate program in under 15 minutes.
> Starting at €15/mo — no transaction fees, fraud detection, managed payouts in 190+ currencies.
## What is Affonso?
Affiliate software for SaaS. All you need to launch and manage your affiliate program, with the tools that help you find affiliates who drive revenue.
## Key Features
- **Fast setup** — Go live in minutes with built-in payment integrations (Stripe, Paddle, Polar, Creem, Dodo Payments)
- **Flexible commissions** — Fixed, percentage, one-time, or recurring payouts with per-product and per-affiliate overrides
- **Managed payouts** — We pay your affiliates worldwide via bank wire or PayPal. One invoice per month, 190+ currencies
- **Fraud protection** — Block self-referrals, detect disposable emails, flag suspicious activity automatically
- **White-label affiliate portal** — Branded dashboard with real-time analytics, 14 languages, embeddable in your app
- **Real-time analytics** — Track every click, conversion, and revenue attribution with deep campaign insights
- **GDPR-ready tracking** — Works when users decline cookies, compatible with Cookiebot, OneTrust, and any consent platform
- **Affiliate discovery** — AI-powered finder and marketplace to recruit high-quality affiliates
- **Automated invoicing** — Self-billing invoices, W-8/W-9 tax form collection, compliance included
- **Multi-level commissions** — Pay-per-lead, multi-tier, and custom commission structures
## For AI Agents
- **REST API**: https://api.affonso.io/v1 — [Documentation](https://docs.affonso.io/api/introduction)
- **OpenAPI spec**: https://api.affonso.io/openapi.json
- **MCP Server**: https://api.affonso.io/mcp — [Documentation](https://docs.affonso.io/mcp/introduction)
- **TypeScript SDK**: [@affonso/sdk](https://www.npmjs.com/package/@affonso/sdk)
- **CLI**: [@affonso/cli](https://www.npmjs.com/package/@affonso/cli)
## OAuth 2.1 Authentication
- **Authorization**: https://api.affonso.io/oauth/authorize
- **Token**: https://api.affonso.io/oauth/token
- **Dynamic registration**: https://api.affonso.io/oauth/register
- **Discovery**: https://api.affonso.io/.well-known/oauth-authorization-server
---
# Help Center
## Competitor Search — The Best Way to Start
Why searching for competitor websites is the fastest way to find high-quality affiliates
If you're not sure where to start with the Affiliate Finder, we recommend **searching for competitor websites** first. Here's why.
## Why competitor search works so well
When you search for a competitor URL, you find websites and creators that are already writing about products like yours. These people:
- **Already understand your market** — They know what your target audience cares about
- **Have existing content** — They've already written reviews, comparisons, or tutorials in your space
- **Are easier to convert** — They're familiar with affiliate programs in your niche and know how they work
- **Have the right audience** — Their readers are already looking for products like yours
This makes them the lowest-hanging fruit for your affiliate program.
## How to do it
1. Go to **Discovery** and start a **New Search**
2. Enter a competitor's website URL (e.g. `competitor.com`)
3. Browse the results — you'll see websites that mention or link to that competitor
4. Add the best matches to your **Shortlist**
## What to look for
Focus on creators who:
- Have written detailed reviews or comparisons (not just a passing mention)
- Regularly publish content in your niche
- Have an engaged audience (comments, social shares)
## Next steps
Once you've built a shortlist from competitor searches, you can [find their email addresses](/help/affiliate-finder/find-email-addresses) and [start your outreach](/help/affiliate-finder/shortlist-and-outreach).
**Pro tip:** Don't stop at one competitor. Run searches for 3-5 competitors to build a solid list of potential affiliates.
---
## Discovery Credits
Understand how discovery and email credits work in the Affiliate Finder
The Affiliate Finder uses two types of credits: **discovery credits** for searching and **email credits** for looking up contact information.
## Discovery Credits
Discovery credits are used when you run a search. Each search costs 1 discovery credit.
| Plan | Discovery Credits / Month |
|------|--------------------------|
| Free | 5 |
| Launch | 15 |
| Growth | 35 |
| Elite | 50 |
## Email Credits
Email credits are used when you look up an email address for a website. Each lookup costs 1 email credit.
| Plan | Email Credits / Month |
|------|----------------------|
| Free | — |
| Launch | — |
| Growth | 50 |
| Elite | 250 |
## Yearly plans
On a yearly plan, you receive **all 12 months of credits upfront**. For example, Elite yearly gives you 600 discovery credits and 3,000 email credits from day one — so you can run larger campaigns right away without worrying about monthly limits.
## Good to know
- **Credits reset monthly** on monthly plans — your allocation refreshes at the start of each billing cycle
- **Cached results are free** — If you look up the same website again within 30 days, it won't cost a credit
- **Use credits wisely** — Shortlist first, then use email lookup only on your top candidates
## Checking your balance
You can see your remaining credits at the top of the Discovery page in your dashboard.
---
## Finding Email Addresses
How to use the email lookup to find contact information for potential affiliates
Once you've found potential affiliates, you'll need their contact information to reach out. The email lookup feature helps you find email addresses for the websites in your search results or shortlist.
## How to use it
Click the **Find Email** button next to any result. The system will look up contact information for that website and show you the results.
## What you get
We use a waterfall enrichment process that checks multiple data sources to find the best contact email for a website. In some cases, multiple emails may be found — the most relevant one is shown first.
## Credits
Each email lookup costs **1 email credit**. Your monthly allocation depends on your plan:
| Plan | Email Credits / Month |
|------|----------------------|
| Launch | — |
| Growth | 50 |
| Elite | 250 |
**Yearly plans** receive all 12 months of credits upfront — so on Elite yearly you'd get 3,000 email credits right away.
If you look up the same website again within 30 days, it won't cost an additional credit — you'll see the cached result.
For more details on credits, see [Discovery Credits](/help/affiliate-finder/discovery-credits).
## Tips
- **Use email lookup selectively** — Don't burn credits on every result. First shortlist the most promising candidates, then find their emails
- **Look at the website first** — Some websites have their contact info right on their page, no credit needed
---
## How to Search for Affiliates
Learn how to use the search to find affiliates that match your niche
The Affiliate Finder lets you search for potential partners using keywords or competitor URLs. Here's how to get started.
## Starting a new search
1. Go to **Discovery** in the sidebar
2. Click **New Search**
3. Enter your search query — this can be keywords related to your niche (e.g. "project management tools") or a competitor's website URL
4. Review the results
## Understanding the results
Each result shows you:
- **Website/Creator** — The name and URL of the potential affiliate
- **Niche relevance** — How closely they match your search
- **Traffic & reach** — An estimate of their audience size
- **Email** — Contact information (if found or after using email lookup)
## Tips for better results
- **Be specific** with your keywords — "best CRM for startups" works better than just "CRM"
- **Try different angles** — Search for your product category, related topics, or competitor names
- **Start with competitor searches** — See the [Competitor Search](/help/affiliate-finder/competitor-search) article for why this is the best starting point
## Adding to your shortlist
Found someone interesting? Click the **Add to Shortlist** button to save them. You can review and manage all your saved candidates in the [Shortlist](/help/affiliate-finder/shortlist-and-outreach).
---
## Shortlist & Outreach
How to manage your shortlist and reach out to potential affiliates
The shortlist is where you collect all your top affiliate candidates before reaching out to them.
## Managing your shortlist
Go to **Discovery > Shortlist** to see all the candidates you've saved. From here you can:
- Review your saved candidates
- Find email addresses for candidates you haven't looked up yet
- Remove candidates that are no longer relevant
## Exporting your shortlist
When you're ready to start outreach, click **Export** to download your shortlist as a CSV file. The export includes all the information you've gathered — website, name, email address, and more.
## Starting your outreach
We recommend uploading your exported CSV to a dedicated outreach tool (like Instantly, Smartlead, or similar) to automate your email campaigns. This way you can:
- Send personalized emails at scale
- Set up automated follow-up sequences
- Track open rates and replies
**Tip:** A good outreach sequence typically has 3-4 emails over 2 weeks. Keep it short, personal, and focused on why your program is a great fit for their audience.
## What makes a good outreach message
- **Be personal** — Reference their content or website specifically
- **Lead with value** — Explain what's in it for them (commission rates, audience fit)
- **Keep it short** — Nobody reads long cold emails
- **Include a clear CTA** — "Want me to set you up?" works better than a wall of information
---
## What is the Affiliate Finder?
Learn how the Affiliate Finder helps you discover and recruit affiliates for your program
The Affiliate Finder helps you discover potential affiliates that are a great fit for your product. Instead of waiting for affiliates to find you, you can actively search for creators, bloggers, and websites in your niche and reach out to them.
## How it works
1. **Search** — Enter keywords, competitor URLs, or niche topics to find relevant websites and creators
2. **Review** — Browse through the results and see who might be a good match
3. **Shortlist** — Save the best candidates to your shortlist
4. **Find contact info** — Use email lookup to get their contact details
5. **Reach out** — Export your shortlist and start your outreach
## Where to find it
Go to **Discovery** in the left sidebar of your dashboard. From there you can start a new search or view your shortlist.
## What you need
The Affiliate Finder is available on all plans. Each plan comes with a set amount of discovery credits and email credits — yearly plans receive all 12 months of credits upfront. Check the [Credits](/help/affiliate-finder/discovery-credits) article for details.
---
## Understanding Conversion Rate & Initial EPC
Learn how your two most important performance metrics are calculated and what they mean for your success.
# Understanding Your Key Performance Metrics
Your **Conversion Rate** and **Initial EPC** are the two most important numbers for measuring affiliate success. Here's exactly how they work and what they mean for you.
## Conversion Rate: "How many clicks become customers?"
### The Simple Formula
**Conversion Rate = Paying Customers ÷ Total Clicks × 100**
### Real Example
```
Monday: You get 100 clicks on your affiliate link
Over the next 2 weeks:
→ 5 people sign up AND make their first purchase
→ 10 people sign up but never buy anything
Result: Monday shows "Conversion Rate: 5%"
```
### Key Points
- **Only counts paying customers**, not just signups
- **Appears on the day you got clicks**, even if purchases happen later
- **Updates over time** as more people convert (up to 60 days typically)
---
## Initial Earn Per Click: "How much revenue per click?"
### The Simple Formula
**Initial EPC = First Purchase Revenue ÷ Total Clicks**
### Real Example
```
Monday: You get 100 clicks
Over the next 2 weeks:
→ Customer A: First purchase $50
→ Customer B: First purchase $100
→ Customer C: First purchase $75
→ Customer A buys again: $30 (ignored for EPC)
Result: Monday shows "Initial EPC: $2.25" ($225 ÷ 100 clicks)
```
### Key Points
- **Only first purchases count** - shows true referral value
- **Repeat purchases ignored** - they're product value, not referral value
- **Includes all clicks** - even non-buyers, so don't expect huge numbers
---
## "Why do these numbers seem different from what I expected?"
### "My conversion rate seems low"
**2-5% is actually excellent!** Here's why:
- ✅ **2-5%**: Outstanding performance
- ✅ **1-2%**: Good, solid performance
- ⚠️ **0.5-1%**: Average, room for improvement
- 🔴 **<0.5%**: Needs optimization
**Remember**: We only count people who actually pay, not just visitors or signups.
### "My EPC seems small"
**$1-5 per click is great!** Industry benchmarks:
- 🏆 **$5+**: Exceptional (usually high-ticket products)
- ✅ **$2-5**: Very good performance
- ✅ **$1-2**: Solid, profitable performance
- ⚠️ **$0.50-1**: Average, can be improved
- 🔴 **<$0.50**: Needs strategy adjustment
### "The numbers keep changing"
**This is completely normal!** Both metrics update for 30-60 days because:
- People take time to decide and purchase
- Higher or lower value customers convert at different speeds
- Your true performance emerges over time
---
## When Do These Numbers Update?
### Timeline Attribution
**Both metrics appear on the day you got clicks**, regardless of when purchases happen.
```
Day 1: You share your link → 50 clicks recorded
Day 3: First purchase → Conversion rate & EPC update on Day 1
Day 7: Second purchase → Both metrics update on Day 1 again
Day 14: Third purchase → Both metrics update on Day 1 again
```
### Tracking Duration
We track conversions indefinitely, but most happen within:
- **24 hours**: 20-30% of total conversions
- **1 week**: 60-70% of total conversions
- **1 month**: 90-95% of total conversions
---
## 📈 How to Improve Your Performance
### Boosting Conversion Rate
1. **Target Better Audiences**
- Focus on people who actually need the product
- Share in relevant communities and forums
- Use educational content to pre-qualify interest
2. **Improve Your Messaging**
- Be clear about product benefits
- Address common objections upfront
- Use social proof and testimonials
3. **Time Your Promotions**
- Share when people are ready to buy (end of month, budget planning)
- Follow up with interested prospects
- Use limited-time offers strategically
### Boosting Initial EPC
1. **Promote Higher-Value Plans**
- Focus on premium tiers when appropriate
- Educate about advanced features
- Target serious businesses, not hobbyists
2. **Quality Over Quantity Traffic**
- 100 targeted clicks > 1000 random clicks
- Focus on warm audiences who trust you
- Build relationships before promoting
3. **Use Compelling Incentives**
- Exclusive discounts for your audience
- Bonus materials or consultations
- Limited-time value adds
---
## 🔍 Troubleshooting Common Issues
### "My conversion rate is 0% but people told me they bought"
**Possible causes:**
- ⏳ **Too early**: Give it 1-2 weeks minimum
- 🔗 **Different link used**: Customer may have used different method
- ❌ **Incomplete signup**: Check if customer finished all steps
- 🏷️ **Attribution issue**: They might be credited to different source
### "My numbers seem inconsistent"
**This is normal because:**
- Different quality of traffic on different days
- Seasonal buying patterns
- Various customer types convert at different rates
- Market conditions and competition changes
### "When should I worry about performance?"
**Give any campaign 2-4 weeks** before making big changes. Early data can be misleading.
**Red flags after 1 month:**
- Conversion rate consistently under 0.5%
- EPC under $0.25
- No conversions at all with 200+ clicks
---
## 🎯 Pro Tips for Success
### Set Realistic Expectations
- **Week 1**: Often looks low (only fast converters)
- **Week 2-3**: More realistic picture emerges
- **Month 2+**: True long-term performance
### Focus on Trends, Not Daily Numbers
- Look at weekly and monthly patterns
- Compare similar promotional efforts
- Track improvement over time, not absolute perfection
### Quality Metrics vs Vanity Metrics
- **Quality**: Conversion rate, EPC, customer satisfaction
- **Vanity**: Total clicks, social media likes, email opens
Focus on metrics that directly translate to income.
---
## 🏆 What Great Performance Looks Like
### Example: Successful Affiliate
```
Month 1: 1,000 clicks → 25 conversions → 2.5% conversion rate
Average first purchase: $150 → EPC: $3.75
Monthly recurring income: $750+
```
### Your Growth Path
1. **Start**: Learn what works with your audience
2. **Optimize**: Improve targeting and messaging
3. **Scale**: Do more of what's working
4. **Diversify**: Try new channels and strategies
**Remember**: Consistency beats perfection. Small improvements compound over time.
---
_💡 **Need help optimizing your performance?** Check out our other analytics guides or contact support with specific questions about your metrics._
---
## Cap Commission Per Referred Customer
Set a hard ceiling on how much commission a single referred customer can ever generate, no matter how many payments they make
Percentage commissions on recurring subscriptions can stack up fast. A customer who stays for years on a high-priced plan might end up generating far more affiliate commission than you ever intended to pay for that single acquisition. The **Commission Cap** setting lets you draw a clear line: once an affiliate has earned a set amount in total from one customer, no further commission is generated for that customer — even if they keep paying.
## How It Works
Set a cap on any commission incentive. Affonso then tracks the total an affiliate has earned from each referred customer and compares it to the cap on every new payment:
- **Under the cap:** the new commission is paid in full
- **Would push the total over the cap:** the commission is reduced to fit exactly inside the remaining budget
- **Cap already reached:** no further commission is generated
The cap is per `(affiliate, referred customer)` pair — the same affiliate can still earn up to the cap on every other customer they refer.
## Multi-Level Programs
If you have multi-level commissions enabled, the cap also stops the chain. Once the direct affiliate hits their cap on a customer no further commission is created for that payment — and no upline partner receives a multi-level commission from it either.
## A Concrete Example
Cap is set to **$200**. An affiliate has already earned **$180** from one customer over a few months.
| Next payment generates... | Affiliate receives |
|---|---|
| $15 commission | $15 (total now $195) |
| $50 commission | $20 (capped to the remaining budget) |
| Any payment after $200 | $0 (cap exhausted) |
## How to Set It Up
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Open the group whose incentive you want to cap (or create a new incentive)
3. In the **Commission Conditions** section, find **Commission Cap**
4. Enter the maximum amount you're willing to pay per customer
5. Save the incentive
Leave the field blank if you don't want a cap. You can also set a different cap (or none at all) on per-affiliate overrides for specific partners.
---
## What are Credit-Based Commissions?
Reward affiliates with product credits instead of cash payouts, perfect for SaaS platforms and loyal customers
Credit-based commissions reward affiliates with product credits instead of cash payouts. This works especially well for loyal customers who naturally share your product and when you want to keep affiliates engaged with more of what they already use.
## How to Set Up Credit-Based Commissions
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Select the affiliate group you want to add rewards to
3. Click "Add Incentive" for that group
4. Choose which products/plans trigger this incentive (monthly plans, yearly plans, one-time products, or specific products)
5. Set incentive type to "Credits" and enter the credit amount per referral
6. Configure payout conditions (lifetime, time-limited, or payment-limited)
7. Set approval settings and create the incentive
**Example:** 20 credits per referral for monthly plans, with lifetime duration and immediate approval.
**Alternative:** You can also set up [individual commission rates](/help/managing-affiliates/setting-individual-commission-rates) for specific affiliates instead of group-based rewards.
## What Happens After Setup
Unlike cash commissions, credits can be awarded instantly after verified referrals and don't require banking details or invoices. Affiliates can redeem credits for your products, upgrades, or services either automatically through your system or manually through your team.
## Credit vs. Cash Commissions
Credit rewards reduce financial burden while offering high perceived value. They work best when rewarding loyal users rather than professional marketers, and when you already have a product people love and want more of. Cash commissions remain better for creators or agencies expecting traditional payouts.
---
**Ready to implement credit-based commissions?** Contact support for help setting up your credit reward system.
---
## Double-Sided Incentives with Coupon Codes
Boost affiliate performance and customer conversion with discount codes that automatically apply to referred customers — using program-wide or unique affiliate coupons
Double-sided incentives create a win-win situation where affiliates earn commissions while their referred customers automatically receive discount codes. This powerful feature increases both affiliate motivation and customer conversion rates by providing immediate value to every referred visitor.
Affonso supports two types of coupon codes for double-sided incentives:
- **Program-Wide Coupons:** A single coupon code shared across all affiliates in a program. Every referred customer sees the same discount.
- **Unique Affiliate Coupons:** Individual coupon codes per affiliate. Each affiliate can have their own personalized discount code(s), enabling more targeted promotions and better tracking.
You can use either type — or both together. When a customer arrives via an affiliate referral link, the Affonso tracking pixel automatically makes both the program-wide coupon and the affiliate's unique coupons available in the `affonso_data` cookie.
## Option 1: Program-Wide Coupon
Program-wide coupons are the simplest way to get started. One coupon code applies to all affiliates in the program.
### Create Program-Wide Coupon
1. Navigate to your [Affiliate Program Settings](https://affonso.io/app/affiliate-program)
2. Scroll down to the **"Program-Wide Coupon Code"** section
3. Click **"Create Program Coupon"**
4. **Configure your coupon:**
- **Discount Type:** Choose percentage or fixed amount
- **Discount Value:** Set your discount amount (e.g., 20% or $10)
- **Duration:** Select "once", "forever", or "repeating"
- **Coupon Code:** Enter a memorable code (e.g., "WELCOME20")
5. Click **"Create Coupon"** to generate it across all your connected payment providers
The coupon will be automatically created in Stripe, DODO, and Polar (depending on your integrations) and becomes immediately available to all customers.
### Access the Coupon in Your Checkout
```javascript
// Get the program-wide discount
const discount = window.Affonso.getDiscount();
if (discount) {
console.log(discount.promoCode); // e.g., "WELCOME20"
console.log(discount.couponId); // Payment provider coupon ID
console.log(discount.amount); // e.g., 20
console.log(discount.type); // "percentage" or "fixed"
}
```
## Option 2: Unique Affiliate Coupons
Unique affiliate coupons give each affiliate their own personalized discount code. This is great for influencer partnerships, brand ambassadors, or any scenario where you want affiliates to promote their own codes.
### Create Unique Coupons for Affiliates
You can create unique coupon codes for individual affiliates through:
- **Dashboard:** Navigate to the affiliate's profile and create a coupon code in the **"Coupon Codes"** section
- **API:** Use the [Affonso API](/help/connect/api-setup) to create coupons programmatically via `POST /v1/coupons`
- **Self-Service:** Enable self-service coupon creation to let affiliates create their own codes from the affiliate portal
### Access Affiliate Coupons in Your Checkout
When a customer arrives via an affiliate's referral link, all of that affiliate's unique coupons are available:
```javascript
// Get all unique coupons for this affiliate
const coupons = window.Affonso.getAffiliateCoupons(); // Returns array
if (coupons.length > 0) {
const coupon = coupons[0]; // Most recently created coupon
console.log(coupon.promoCode); // e.g., "JOHN20"
console.log(coupon.couponId); // Payment provider coupon ID
console.log(coupon.amount); // e.g., 20
console.log(coupon.type); // "percentage" or "fixed"
}
```
## Using Both Together
You can combine both coupon types. A common pattern is to prefer the affiliate's unique coupon when available, and fall back to the program-wide coupon:
```javascript
// Prefer affiliate's unique coupon, fall back to program-wide
const affiliateCoupons = window.Affonso.getAffiliateCoupons();
const programDiscount = window.Affonso.getDiscount();
const coupon = affiliateCoupons.length > 0
? affiliateCoupons[0] // Use affiliate's unique coupon
: programDiscount; // Fall back to program-wide
if (coupon) {
fetch('/api/checkout', {
method: 'POST',
body: JSON.stringify({
couponId: coupon.couponId,
// ... your other checkout data
})
});
}
```
For a complete implementation guide on auto-applying coupons at checkout, see [Auto-Apply Affiliate Coupons at Checkout](/help/commission-payouts/commission/auto-apply-affiliate-coupons).
## How It Works
1. **Customer clicks affiliate link** with referral parameter (e.g., `?via=affiliate123`)
2. **Affonso tracking pixel** automatically detects the referral and fetches coupon data
3. **Coupon information is stored** in the `affonso_data` cookie — both program-wide and affiliate-specific coupons
4. **Your checkout flow** retrieves the coupon and applies it during payment
5. **Customer gets discount** while affiliate earns commission on the sale
## Access Methods
You can access coupon data using these JavaScript methods:
```javascript
// Get program-wide discount (one per affiliate program)
const discount = window.Affonso.getDiscount(); // Returns discount object or null
// Get unique affiliate coupons (all coupons for this specific affiliate)
const coupons = window.Affonso.getAffiliateCoupons(); // Returns array (empty if none)
// Get all data
const data = window.Affonso.getData();
// Example discount/coupon object:
// {
// amount: 20,
// type: "percentage",
// maxDuration: "once",
// couponId: "stripe_coupon_id",
// promoCode: "WELCOME20"
// }
```
---
## How to Exclude Products or Plans from Commissions
Use a $0 fixed-amount incentive to exclude specific products, monthly plans, yearly plans, or one-time purchases from affiliate commissions
Sometimes you need to keep specific products out of your affiliate program — a lifetime deal, an internal add-on, a discounted promo plan, or any SKU where paying commission doesn't make sense. You don't have to remove the default reward for the whole group: you can layer a $0 incentive on top of it that targets only the products you want to exclude.
## How It Works
Affonso resolves commissions in a clear priority order. A more specific `applyTo` always wins over a more generic one:
1. `SPECIFIC_PRODUCTS` — match exact product or price IDs
2. `YEARLY_PLANS` — match yearly subscriptions
3. `MONTHLY_PLANS` — match monthly subscriptions
4. `ONE_TIME_PRODUCTS` — match one-time purchases
5. `ALL_PLANS` — the group default
A $0 incentive at a higher specificity overrides the default group reward for matching sales, leaving everything else untouched.
## Step-by-Step: Exclude a Specific Product
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Open the affiliate group whose default reward you want to override
3. Click **"Add Incentive"**
4. Choose **Fixed Amount** as the commission type
5. Set the **Amount** to `0`
6. Choose **"Specific products"** as the trigger
7. Select or create the product(s) you want to exclude (matching the price or product IDs from your payment processor)
8. Configure the rest of the incentive (length, approval) as usual
9. Save
That's it. Sales of the selected products will resolve to a $0 commission while every other product in the group keeps earning the default reward.
> **Note:** Only **Fixed Amount** rewards can be set to `0`. Percentage, Credits, and Free Months rewards must always be greater than 0. To exclude a product, choose Fixed Amount and enter `0`.
## Excluding Entire Plan Types
The same workflow applies for broader exclusions. Pick the matching `applyTo`:
- **Exclude all yearly plans** → Fixed Amount `0`, applyTo `Yearly plans`
- **Exclude all monthly plans** → Fixed Amount `0`, applyTo `Monthly plans`
- **Exclude one-time purchases** → Fixed Amount `0`, applyTo `One-time products`
Because these are more specific than `ALL_PLANS`, they override the group default for that segment of sales.
## Excluding for a Single Affiliate
If you want to exclude products only for one affiliate (and not the whole group), create an **AffiliateIncentiveOverride** with the same $0 setup. Per-affiliate overrides take precedence over group incentives, so the rest of the group keeps the original commission.
## What You'll See in the Dashboard
Excluded sales still flow through tracking, so you'll see a referral and an earning record for each one — just with a $0 commission. This keeps your reporting accurate and lets you confirm the exclusion is working without silencing the sale entirely.
---
**Need to exclude a product right now?** Open your [Groups & Rewards](https://affonso.io/app/groups) settings and add a $0 fixed-amount incentive on the product you want to skip.
---
## How to Reject Referrals and Commissions
Manage fraudulent activity, duplicate accounts, and invalid referrals by rejecting referrals and declining commissions in your affiliate program
Rejecting referrals and commissions gives you full control over which sales are eligible for payouts. Whether you're dealing with duplicate accounts, policy violations, chargebacks, or other fraudulent activity, Affonso provides flexible tools to manage these situations while protecting your program integrity.
> **Looking for self-referral specific guidance?** See our dedicated guide on [How to Reject a Self-Referral or Invalid Affiliate Sale](/help/faq/reject-self-referral-sales).
## Common Reasons to Reject Referrals
You might need to reject referrals and commissions for several legitimate reasons:
- **Duplicate accounts:** Same customer signing up multiple times to earn referral bonuses
- **Policy violations:** Affiliates using prohibited marketing methods (spam, misleading ads)
- **Chargebacks:** Customer disputed the charge or requested a refund
- **Invalid traffic:** Bot traffic, click fraud, or cookie stuffing attempts
- **Terms violations:** Any activity that breaches your program terms and conditions
- **Self-referrals:** Affiliates referring themselves (see our [dedicated guide](/help/faq/reject-self-referral-sales))
## How to Reject a Referral
Rejecting a referral blocks all future commissions from that specific customer relationship.
1. Navigate to your [Referrals](https://affonso.io/app/referrals) dashboard
2. Find the referral you want to reject
3. Click the **"⋯"** dropdown in the referral row
4. Select **"Change Status"**
5. Choose **"Rejected"** from the available statuses
6. Confirm the change
The referral status immediately changes to REJECTED, and any future purchases from that customer through that affiliate will no longer generate commissions.
## How to Decline Individual Commissions
Sometimes you need to reject specific commissions without blocking the entire referral relationship. This is useful for chargebacks or one-time policy violations.
### Option 1: From the Referrals Dashboard
1. Open your [Referrals](https://affonso.io/app/referrals) dashboard
2. Find the referral containing the commission
3. Click the **"⋯"** dropdown
4. Select **"View Transactions"**
5. In the transaction modal, find the specific commission
6. Click the **"⋯"** dropdown for that transaction
7. Select **"Change Status"**
8. Choose **"Declined"**
### Option 2: From the Sales Dashboard
1. Navigate to your [Sales](https://affonso.io/app/sales) dashboard
2. Locate the specific sale you want to decline
3. Click the **"⋯"** dropdown for that sale
4. Select **"Change Status"**
5. Choose **"Declined"**
The commission is immediately removed from pending payouts and marked as declined. The affiliate will no longer receive payment for that specific transaction.
## Understanding the Difference: Rejected vs Declined
It's important to understand when to use each status:
**Reject a Referral** when:
- You want to block ALL future commissions from a customer
- The referral relationship itself is invalid
- You're dealing with fraud or serious policy violations
**Decline a Commission** when:
- You need to reject ONE specific transaction
- There was a chargeback or refund
- The referral is legitimate but this specific sale isn't eligible
- You want to keep the relationship active for future purchases
## What Happens After Rejection
### When You Reject a Referral:
- Status changes to REJECTED permanently
- Future purchases from that customer won't generate commissions
- Existing pending commissions remain unless manually declined
- The referral appears as rejected in reporting and analytics
- The affiliate can still promote your program to other customers
### When You Decline a Commission:
- That specific commission is removed from pending payouts
- Other commissions from the same referral remain unaffected
- The customer can still make future purchases that generate commissions
- The declined amount is excluded from all payout calculations
## Managing Past Commissions After Rejection
**Important:** Rejecting a referral does NOT automatically decline existing commissions that were generated before the rejection. You must handle those separately.
To clean up existing commissions after rejecting a referral:
1. Open the rejected referral's transaction history
2. Review each pending or approved commission
3. Decline any commissions that should not be paid
4. Leave legitimate commissions if they were earned before the violation
This gives you granular control to handle each situation fairly while protecting your program.
## Best Practices for Managing Rejections
**Act Quickly:** Review new referrals within the first 24-48 hours to catch fraudulent activity before commissions are approved or paid out.
**Document Everything:** Keep internal notes about why referrals or commissions were rejected. This helps if affiliates question the decision or you need to review patterns later.
**Communicate Clearly:** If you reject a legitimate affiliate's commission due to policy violations, communicate the specific issue so they can correct their approach.
**Set Clear Terms:** Make your program rules explicit in your affiliate terms and conditions. Clear expectations prevent most rejection scenarios.
**Monitor Patterns:** Use the [referrals dashboard](https://affonso.io/app/referrals) filters to identify suspicious patterns like multiple referrals from similar email addresses or IP addresses.
**Review Regularly:** Schedule weekly reviews of new referrals and commissions to catch issues early and maintain program quality.
## Bulk Actions for Multiple Rejections
If you need to reject multiple referrals or commissions at once:
1. Use the [referrals dashboard](https://affonso.io/app/referrals) filters to identify problematic entries
2. Note the specific referrals or transactions you need to reject
3. Process each rejection individually to ensure accuracy
4. Consider reaching out to support for assistance with large-scale cleanup operations
---
**Need help managing complex rejection scenarios?** Contact support for personalized guidance on protecting your affiliate program from fraud and abuse.
---
## Multi-Level Commissions
Reward affiliates for recruiting other affiliates with up to 3 levels of sub-affiliate commissions
Multi-level commissions let you reward affiliates not just for their own sales, but also for the sales made by affiliates they recruit. When a sub-affiliate generates a sale, their parent affiliate automatically earns a commission — up to 3 levels deep.
**How it works:** Affiliate A recruits Affiliate B. When Affiliate B makes a sale and earns a $100 commission, Affiliate A automatically receives a multi-level commission based on your configured rate. If Affiliate B then recruits Affiliate C, the chain continues — Affiliate A earns from Affiliate C's sales too.
## Setting Up Multi-Level Commissions
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Select the group you want to enable multi-level commissions for
3. In the **Multi-Level Commissions** section, click **"Add Level"**
4. Choose the calculation type and set the rate
5. Optionally add Level 2 and Level 3 for deeper referral chains
Levels must be added in order — you can't add Level 2 without Level 1. Removing a level automatically removes all higher levels.
## Calculation Types
### Percentage of Commission
The parent earns a percentage of the sub-affiliate's commission amount. This is the default and most common setup.
**Example with 10% at each level:**
- Sub-affiliate earns $100 commission from a sale
- Level 1 parent earns $10 (10% of $100)
- Level 2 grandparent earns $1 (10% of $10)
- Level 3 great-grandparent earns $0.10 (10% of $1)
With this mode, commissions naturally decrease at each level since each level is a percentage of the previous level's earning.
### Percentage of Sale
The parent earns a percentage of the original sale amount, regardless of the sub-affiliate's commission rate.
**Example with 5% at each level on a $200 sale:**
- Sub-affiliate earns their normal commission
- Level 1 parent earns $10 (5% of $200)
- Level 2 grandparent earns $10 (5% of $200)
- Level 3 great-grandparent earns $10 (5% of $200)
With this mode, every level earns the same amount since it's always based on the original sale.
## Per-Affiliate Overrides
You can customize multi-level rates for individual affiliates. This is useful for top performers or partners with special agreements.
1. Go to the affiliate's detail page
2. In the Multi-Level section, add or modify rates for specific levels
3. The override takes priority over the group-level configuration
Overrides follow the same level rules — no gaps allowed, and levels can't exceed the group's maximum configured level.
## How Affiliates Recruit
When multi-level commissions are active, affiliates automatically see a **recruitment link** in their portal under the **Sub-Affiliates** tab. Anyone who signs up through this link becomes their sub-affiliate. Affiliates can track their recruited sub-affiliates, see their sales activity, and monitor their multi-level earnings — all from their portal dashboard.
## Manually Assigning Parent Affiliates
You can also manually set up parent-child relationships:
1. Go to the affiliate's group page
2. Click on the affiliate and select **"Assign Parent"**
3. Search for the parent affiliate by name or tracking ID
4. Confirm the assignment
The system prevents circular references — you can't assign an affiliate as a parent if it would create a loop in the referral chain.
## Refund Handling
When a sale is refunded, multi-level commissions are handled automatically:
- **Full refund:** All related multi-level earnings are set to REFUNDED
- **Partial refund:** Multi-level earnings are proportionally reduced based on the refund ratio
- **Declined/disputed:** All related multi-level earnings follow the same status
## Things to Know
- Multi-level commissions only apply to monetary commission incentives (not credits, free months, or points)
- Parent affiliates must be in ACTIVE status to receive multi-level earnings
- If a parent affiliate in the chain is inactive, the chain stops at that level
- Multi-level earnings inherit the same hold period and approval settings as the direct commission
- Multi-level commissions are included in regular payout calculations
---
**Ready to grow your affiliate network?** Visit your [Groups & Rewards](https://affonso.io/app/groups) settings to enable multi-level commissions.
---
## Pay Per Trial — Reward affiliates when a referral starts a trial
Pay your affiliates a fixed amount the moment a referred user starts a trial, regardless of whether the trial converts to a paid subscription.
Pay Per Trial lets you reward affiliates the moment one of their referrals starts a trial — without waiting for that trial to convert into a paying customer. It's the trial-equivalent of Pay Per Lead (CPL): a fixed commission tied to a specific user action.
## How it works
1. You configure a Pay Per Trial incentive in a group (or as an affiliate-level override).
2. A referred customer signs up and starts a trial.
3. As soon as we receive the trial-start event from a supported payment provider or your Events API integration, we create a fixed-amount commission for the referring affiliate.
The trial commission is **always paid**, even if the user never converts. There is no clawback on trial cancellation.
## Fixed amount only
Pay Per Trial incentives must use a fixed amount (for example, €5 per trial). Percentages are not allowed, because there is no sale value at the moment the trial begins. This matches how Pay Per Lead works.
## Which payment providers are supported for automatic trial tracking?
| Provider | Supported |
| --- | --- |
| Stripe | ✅ |
| Paddle | ✅ |
| Creem | ✅ |
| Polar | ❌ |
| Dodo Payments | ❌ |
Pay Per Trial can still be configured for any program. If Stripe, Paddle, or Creem are not connected, trial starts will not be tracked automatically.
In that case, send a trial-start event through the [Create Event API docs](https://docs.affonso.io/api/endpoint/events/create) to trigger the incentive manually.
## Approval types
Pay Per Trial supports the same three approval types as any other commission:
- **Immediate** — paid out right away when the trial starts.
- **Hold Period** — held for a configured number of days before becoming payable.
- **Manual** — held until you approve it.
This lets you protect against bad-actor trials while still rewarding legitimate referrals.
## Example use cases
- **€5 per trial start** — reward affiliates a small fixed amount for every qualified trial signup.
- **€5 trial + 20% recurring sale** — combine a small trial bonus with a regular percentage commission once the user pays.
- **Higher-ticket B2B** — pay $25 per booked demo / trial when your average customer LTV justifies it.
## FAQ
### Does the affiliate get paid twice if the trial converts?
Yes. The trial commission and the later sale commission are both paid out. They are independent events — the trial start triggers the trial incentive, and the first paid subscription triggers the sale incentive.
### What happens if the trial is cancelled before converting?
Nothing changes for the affiliate. The trial commission stays. We do not claw it back. Pay Per Trial rewards the act of starting a trial, full stop.
### What if the same trial event fires twice from my payment provider?
Only one trial commission is created per referral.
### Can I set Pay Per Trial with a percentage instead of a fixed amount?
No. There is no sale amount at the moment a trial starts, so percentage-based trial commissions aren't supported. Use a fixed amount instead.
---
## Set Custom Rewards for Specific Products and Plans
Set up targeted incentives for specific products to optimize commission rates based on margins and strategic priorities
Product-specific rewards let you create targeted incentives based on what's being sold. You can offer higher commissions for premium products, special rates for new launches, or adjust rewards based on product margins and strategic priorities.
## How to Create Product-Specific Rewards
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Select the affiliate group you want to add rewards to
3. Click **"Add Incentive"** for that group
4. Choose **"Specific products"** as your trigger option
5. **Select or create products:**
- Search for existing products in your list, OR
- Click **"Create New Product"** to add a new one
6. **If creating new products:**
- Enter product name (e.g. "Premium Plan")
- Add Price or Plan ID from your payment processor (e.g. "price_123")
- Add details (optional, e.g. "Starter Plan")
- Use **"Add another price"** for multiple pricing tiers
7. **Set incentive details:** Choose Fixed Amount, Percentage, Credits, or Free Months with your desired rate
8. **Configure payout conditions** and **approval settings**
9. Create the incentive
## What Happens After Setup
The reward applies only to sales of your selected products. Affiliates earn the specific commission rate you set for those products, while other products use different incentive rates or default group rates. You can create multiple product-specific incentives to build a comprehensive reward structure.
## Strategic Use Cases
Use product-specific rewards to offer higher commissions for premium products with better margins, create special launch incentives for new products, provide different rates for annual vs monthly plans, or adjust rewards based on strategic business priorities like customer lifetime value.
---
**Ready to create targeted rewards?** Visit your [Groups & Rewards](https://affonso.io/app/groups) settings to set up product-specific incentives.
---
## What are Groups?
Organize affiliates into logical collections for easier management and tailored commission structures
Groups let you organize affiliates into logical collections that share similar characteristics, commission structures, or business relationships. Instead of managing hundreds of partners individually, you can create meaningful segments with tailored incentives and streamlined management.
**Default Group:** Every affiliate program starts with a default group. New affiliates are automatically assigned to this group when they join your program. The group description you write will be displayed on the affiliate portal login page.
## How to Create and Manage Groups
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Click **"Create New Group"** to open the group creation modal
3. Enter group name, description (shown on affiliate login page), and optional custom website URL
4. Save the new group
5. Click **"Manage Partners"** on any group to add or move affiliates between groups
You can search for specific affiliates and select them to move from their current group. The system will warn you when moving affiliates between groups with different commission structures.
## What Groups Enable
With groups, you can set standard commission rates for similar affiliates, manage multiple partners efficiently under one structure, create clear progression paths between different group tiers, and organize partners based on performance, specialization, or market focus. Groups are flexible - you can move affiliates between groups and adjust settings as your program evolves.
## Common Group Types
- Customer Referrals: Existing customers who refer others, often rewarded with account credits or service extensions rather than cash payouts.
- Influencers: Content creators and social media personalities who need different commission structures due to their broad reach and content-based promotion style.
- Agency Partners: Marketing agencies and consultants who bring higher-value customers and may deserve elevated commission rates.
- Integration Partners: Software companies who have integrated with your platform and promote it to their user base.
**Ready to create your first group?** Visit your [Groups & Rewards](https://affonso.io/app/groups) settings to set up organized commission structures.
---
## What are Incentives and Rewards?
Create reusable reward templates to motivate affiliates with flexible commission structures and alternative rewards
Incentives are reusable reward templates that motivate your affiliates to promote your products. Instead of setting up the same commission structure multiple times, you create it once and apply it to multiple groups or individual partners as needed.
## How to Create Incentives
1. Go to your [Groups & Rewards](https://affonso.io/app/groups) settings
2. Select the affiliate group you want to add an incentive to
3. Click **"Add Incentive"** for that group
4. **Choose products:** Select which products/plans trigger this incentive (monthly plans, yearly plans, one-time products, or specific products)
5. **Set incentive details:**
- Enter incentive name (e.g. "20% recurring commission")
- Choose type: Fixed Amount, Percentage, Credits, or Free Months
- Set the rate/value
6. **Configure payout conditions:** Lifetime, time-limited, or payment-limited
7. **Set approval settings:** Immediate, hold period, or manual review
8. Create the incentive
## Types of Incentives Available
### Monetary Incentives
- **Fixed Amount:** Set a specific amount per sale in any currency (e.g. $20 per conversion, €15 per conversion, or £10 per conversion)
- **Percentage:** Commission based on a percentage of the sale value (e.g. 10% of sale)
### Non-Monetary Incentives
- **Credits:** Reward with product credits (e.g. 10 credits per referral)
- **Free Months:** Grant free months of your service (e.g. 1 free month per sale)
- **Points:** Award points for each conversion, which can later be exchanged for benefits or perks (e.g. 100 points per referral)
## What Happens After Creation
The incentive becomes active immediately and applies to new referrals that match your product criteria. You can use the same incentive template across multiple groups, modify it for different scenarios, or create individual overrides for specific affiliates.
---
**Ready to create your first incentive?** Visit your [Groups & Rewards](https://affonso.io/app/groups) settings to set up reward templates.
---
## Automating Affiliate Payouts with Affonso
Eliminate manual payout work with Affonso's automated system that handles invoicing, payments, and tax compliance for affiliate commissions
With Managed Payouts enabled, Affonso handles the entire affiliate payment process from start to finish. No more chasing invoices, managing banking details, or worrying about tax forms — you handle one monthly invoice and we take care of everything else.
💡 **Managed Payouts are exclusively available with the Growth & Elite Plan.**
## How Managed Payouts Work
When Managed Payouts are enabled, Affonso manages the end-to-end process of distributing affiliate commissions:
### 1. Monthly Invoice – Sent NET 7
In the first week of each month, we generate an invoice summarizing all approved commissions from the previous month. Only commissions that have cleared your [program-specific hold period](/help/commission-payouts/payouts/how-to-pay-affiliate-commissions) are included.
The invoice is sent via Stripe or Revolut and includes a payment link, allowing you to complete payment with just one click. The invoice includes all necessary business information and documentation for your records.
**Service Fee:** Each invoice includes a flat $25 service fee covering operational and compliance work for global payouts (waived for Elite Plan users).
⏱️ **Important:** We begin processing affiliate payouts only after receiving your payment, so prompt payment prevents delays for your affiliates.
### 2. Pay Affonso – We Handle the Rest
You can pay the invoice using:
To cover payment processing fees charged by the payment providers, a small surcharge is added to the total invoice amount:
**Via Stripe** – 3.25% surcharge
- Credit Card
- Bank Transfer
- PayPal
- Other supported payment methods
**Via Revolut** – 2.8% surcharge
- Credit Card
- Bank Transfer
- Other supported payment methods
**Currency Notes:**
- All invoices are issued in USD
- If your program operates in another currency, we convert commission amounts to USD using the exchange rate on invoice creation day
- Additional currency conversion fees may apply for different billing currencies
### 3. Global Affiliate Payouts
Once we receive funds, we distribute affiliate earnings via:
- **Bank Wire Transfers**
- **PayPal**
**Important:** All affiliate payouts are made in USD. Different commission currencies are converted to USD using the exchange rate on invoice creation day.
**Fees:** All fees related to receiving affiliate payouts (bank or platform fees) are the affiliate's responsibility, following industry standard practice.
### 4. Tax & Compliance Handled
Affonso manages all tax and compliance tasks in the background:
- Collecting required forms from affiliates
- Generating proper documentation
- Ensuring everything stays compliant
- No paperwork or follow-ups required from you
✅ **You receive one invoice, make one payment – we handle everything else.**
### 5. High-Volume Payout Fee
For more than 25 affiliates in a single month, we charge an additional $0.50 per affiliate payout beyond the first 25.
## Why Choose Managed Payouts
**Benefits:**
- **Time-saving:** No [manual payment processing](/help/commission-payouts/payouts/how-to-pay-affiliate-commissions)
- **Compliant:** All tax and legal requirements handled
- **Scalable:** Works globally with any number of affiliates
- **Simple:** One monthly invoice covers everything
**Perfect for:**
- Growing affiliate programs
- International affiliate networks
- Businesses wanting to focus on growth, not payments
## Getting Started
Managed Payouts are only available with the **Growth Plan**. Not on Growth yet? [Upgrade your plan](https://affonso.io/pricing) to unlock automated affiliate payments and eliminate manual payout work.
---
**Questions about Managed Payouts?** Contact support to learn more about automated payment processing and Growth Plan features.
---
## How & When Affiliate Payouts Are Generated
Understanding when and how Affonso automatically creates payouts based on thresholds, hold periods, and payout frequency settings
Affonso automatically handles payout generation based on your program settings, ensuring affiliates get paid consistently while protecting your business from chargebacks and fraud.
## Conditions That Must Be Met
For Affonso to create an open payout, all three conditions must be fulfilled:
### 1. Payout Threshold is Reached
Each affiliate program has a minimum payout threshold that affiliates must earn before a payout is triggered. You can define this threshold in your program settings (typically $50-$100).
**Example:** If your threshold is $50 and an affiliate has earned $45, no payout is created. Once they reach $50+ in approved commissions, the system evaluates the next payout opportunity.
### 2. Commission Hold Period Has Passed
When a sale occurs through an affiliate, the commission doesn't become "approved" immediately. There's a hold period (in days) to account for potential refunds or disputes.
**Example:** With a 30-day hold period, an affiliate earns a $20 commission on May 1st. This commission becomes "approved" on May 31st (assuming no refund). Only approved commissions count toward the payout threshold.
### 3. Payout Frequency Check is Triggered
Once the threshold is reached with approved commissions, Affonso checks on schedule whether to create a payout based on your frequency setting:
- **Weekly:** System checks every Monday
- **Monthly:** System checks on the 1st of each month
**Example:** If an affiliate crosses the threshold on Thursday, the system generates the open payout the following Monday (for weekly frequency).
## Where to Configure These Settings
You can adjust all payout settings from your Program Details page:
1. Go to [Payout Settings](https://affonso.io/app/affiliate-program/payment-terms) in your dashboard
2. Configure your preferred options:
- **Payout threshold** (minimum amount for payout)
- **Commission hold period** (days to wait before approval)
- **Payout frequency** (weekly or monthly)
- **[Auto payout](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso)** (optional automation)
## What Happens Next
Once an open payout is created:
- You'll see it listed under [**Payments > Pending**](https://affonso.io/app/payments)
- You can review and [send payouts manually](/help/commission-payouts/payouts/how-to-pay-affiliate-commissions) or export the data
- Affiliates will see that a payment is pending and being processed
## Troubleshooting
If a payout hasn't been created yet, check:
- Whether the affiliate has reached the threshold
- Whether their commissions are still in the hold period
- When the next payout check is scheduled
---
**Need help with payout settings?** Contact support for assistance with configuring your payout rules and schedules.
---
## How to Pay Affiliate Commissions
This article explains how to process affiliate payouts in Affonso — from exporting commissions to marking them as paid
If you're on the Launch Plan or using the Revenue Pass, affiliate payouts are handled manually by you as the program owner. Affonso helps you track, export, and manage commissions for external payment without processing payments on your behalf.
💡 **Want to automate payouts?** The Growth and Elite Plans include [managed payouts](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso) and credit note generation.
## When Payouts Are Generated
Payouts in Affonso are automatically generated based on each program's payment term settings:
- **Monthly payouts:** Created on the first business day of each month
- **Weekly payouts:** Created on Mondays
Only commissions that meet certain [payout conditions](/help/commission-payouts/payouts/how-and-when-affiliate-payouts-are-generated) will be included in a payout.
## How to Process Manual Payouts
### 1. Review Available Payouts
Once a payout is generated, you'll see pending affiliate commissions in your [Payouts dashboard](https://affonso.io/app/payments). Here you can:
- Review all affiliate commissions due for payment
- Export payouts grouped by method (PayPal, Wise, etc.) as CSV files
- View and pay each payout individually
💡 **Tip:** The CSV export is ideal for using PayPal or Wise's bulk payment tools.
### 2. Make Payments Externally
After exporting, complete the actual payments through your preferred provider (PayPal, Wise, bank transfer, etc.).
**Important:** Affonso does not process payments directly — you are responsible for sending funds externally.
### 3. Mark Payouts as Paid
After completing external payments:
1. Return to your [Payouts dashboard](https://affonso.io/app/payments) in Affonso
2. Mark each payout as **"Paid"**
This keeps your records accurate and updates the affiliate's dashboard to show payment completion.
### 4. Credit Notes (Elite Plan)
If you're on the Elite Plan with this feature enabled:
- Affonso automatically generates credit notes for each paid affiliate payout
- Credit notes are available to both you and the affiliate for accounting purposes
- Adds transparency and bookkeeping convenience for both sides
## Summary
Manual payouts in Affonso provide flexibility while maintaining transparency and tracking:
- **[Payouts are auto-generated](/help/commission-payouts/payouts/how-and-when-affiliate-payouts-are-generated)** based on program payment terms
- **Payments must be made outside Affonso** through your preferred method
- **Always mark commissions as paid** to keep records accurate
- **Growth Plan users get automatic credit notes** for accounting
## Prefer Hands-Off Affiliate Payouts?
Tired of exporting CSVs, handling payments manually, and dealing with tax documents?
**With the Affonso Growth or Elite Plan, we handle everything:**
- [Managed payouts](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso) via PayPal or Wise
- One monthly invoice — we pay all affiliates on your behalf
- Credit notes generated for every payout
- We manage tax handling, compliance, and payout tracking
All you do is approve — we take care of the rest.
---
**Need help with manual payouts?** Contact our support team for assistance with export processes and payment tracking.
---
## Manually Generate Payouts
Pay your affiliates exactly when you need to, not when the system decides
Your finance team needs to close the books on Friday. An affiliate is asking when they'll get paid. You ran a special promotion and want to reward participants immediately. These are real situations where waiting for the automatic payout schedule doesn't work.
Manual payout generation lets you pay affiliates on your timeline, not the system's.
## When You'll Use This
**Closing the books**: Your accountant needs affiliate payouts processed by month-end or quarter-end, regardless of when the automatic schedule runs.
**Responding to affiliate requests**: An affiliate reaches out asking about their earnings. Instead of explaining the schedule, just generate their payout and tell them it's done.
**Special promotions**: You ran a holiday campaign or special event and want to reward those affiliates right away - good for motivation and relationship building.
**Cleaning up small balances**: Some affiliates have $20 or $30 sitting there, below your threshold. Clear it out to simplify your books, even if they haven't hit the minimum.
**One-time situations**: A departing affiliate needs their final payment. A manual adjustment needs to go out. Someone asks for an exception. Handle it in seconds.
## How to Generate Manual Payouts
### Navigate to Upcoming Payments
Go to [**Payments > Upcoming**](https://affonso.io/app/payments/upcoming) in your dashboard. Click **"Generate Manual Payouts"** at the top.
### Pick Your Date Range
Select the time period you want to process. The form starts with last month's dates, but you can adjust to any range - last week, last quarter, specific campaign dates, whatever you need.
### Choose Who Gets Paid
- **All affiliates**: Everyone with eligible commissions in that date range
- **Single affiliate**: Search for and select one specific affiliate
### Override the Minimum (Optional)
Toggle this on if you want to pay affiliates who haven't reached your normal threshold. Useful for final payments or clearing small balances.
### Click Generate
That's it. The system starts processing in the background. Close the window and go back to work - you'll see the results under [**Payments > Pending**](https://affonso.io/app/payments) when it's done.
## What Happens Next
Once the processing completes:
1. Open payouts appear under [**Payments > Pending**](https://affonso.io/app/payments)
2. Affiliates see that payment is being processed
3. You can review, [send payments manually](/help/commission-payouts/payouts/how-to-pay-affiliate-commissions), or export for accounting
The system uses the same financial logic as automatic payouts - no duplicate payments, proper invoice numbering, same accuracy you'd expect.
## Common Questions
**How long does it take?**
Depends on how many affiliates and transactions. A handful of affiliates? Seconds. A hundred affiliates with lots of transactions? A few minutes. Either way, it runs in the background so you don't have to wait around.
**What if an affiliate doesn't have approved commissions?**
They won't get a payout. Only commissions that have passed the hold period and are approved get included. Same rules as automatic payouts.
**Can I generate payouts for the same date range twice?**
The system won't create duplicate payouts. If commissions are already associated with an existing payout, they're skipped.
**What if I need to cancel or redo it?**
Once generated, you'll find the payouts under Pending. You can review them there before actually sending payments. If something's wrong, contact support - they can help sort it out.
---
**Need help?** Contact support if you run into issues or have questions about your specific situation.
---
## PayPal Mass Payouts
Learn how to export affiliate payouts from Affonso and process bulk payments through PayPal Mass Payments
PayPal Mass Payments lets you pay multiple affiliates at once using a simple CSV file export from Affonso. This guide walks you through the entire process — from generating payouts to completing bulk payments in PayPal.
## Before You Start
### Prerequisites
1. **Pending payouts in Affonso** — Payouts are either [generated automatically](/help/commission-payouts/payouts/how-and-when-affiliate-payouts-are-generated) based on your program settings, or you can [manually generate payouts](/help/commission-payouts/payouts/manually-generate-payouts-for-custom-date-ranges) for custom date ranges.
2. **PayPal Business account** — Mass Payments (Payouts) requires a PayPal Business account with Payouts enabled. Personal accounts cannot send mass payments.
3. **Sufficient PayPal balance** — You must have enough funds in your PayPal balance to cover all payments. Mass payments can only be sent from your balance, not from a linked bank account or card.
## Step 1: Export PayPal Payouts from Affonso
1. Go to your [Payments dashboard](https://affonso.io/app/payments)
2. Select the **Pending** tab to view all open payouts
3. Click **Export** and choose **PayPal**
4. A CSV file will download containing all affiliates who have PayPal as their preferred payment method
The exported file includes:
- Email addresses of recipients
- Payment amounts
- Currency codes
## Step 2: Set Up PayPal Payouts
If you haven't enabled Payouts on your PayPal Business account yet:
1. Log in to your [PayPal Business account](https://www.paypal.com)
2. Go to **Business Tools** → [Make Payments](https://www.paypal.com/mep/merchantapps/businesstools)
3. Under "Make payments", click **Payouts**
4. Complete the onboarding process to enable mass payments
## Step 3: Process the Mass Payment
1. In your PayPal account, click **Pay & Get Paid**
2. Under "Make payments", select **Payouts**
3. Upload the CSV file exported from Affonso
4. Review all recipients and payment amounts
5. Confirm and send the payments
### Important Notes
- **Currency matching:** Your PayPal balance and the mass payment file must be in the same currency. If paying in multiple currencies, create separate files for each.
- **Maximum recipients:** Each mass payment can include up to 5,000 individual payments.
- **Fees:** PayPal charges 2% of the total transaction amount (capped at a maximum fee) for Payouts Web uploads, or a flat $0.25 per transaction via API.
## Step 4: Mark Payouts as Paid in Affonso
After successfully sending payments through PayPal:
1. Return to your [Payments dashboard](https://affonso.io/app/payments) in Affonso
2. Select the payouts you just processed
3. Mark them as **Paid**
This updates your records and shows affiliates that their payment has been sent.
## Troubleshooting
### "Denied" Status in PayPal
If your mass payment shows as "Denied", check that:
- You have sufficient funds in your PayPal balance
- All email addresses in the file are valid
- The currency matches your balance currency
### Recipients Without PayPal Accounts
If a recipient doesn't have a PayPal account, PayPal will notify them via email to claim the payment. Unclaimed payments are automatically returned to you after 30 days.
## Prefer Hands-Off Payouts?
Don't want to manage PayPal exports and payments manually? With [Managed Payouts](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso) on the Growth or Elite Plan, Affonso handles everything — you pay one invoice, and we distribute funds to all your affiliates worldwide.
---
**Need help with PayPal mass payments?** Contact our support team for assistance with exports or troubleshooting.
---
## Wire Transfer Bulk Payouts
Learn how to export affiliate payout data from Affonso for processing bank wire transfers
For affiliates who prefer traditional bank transfers, Affonso lets you export all necessary payment details for processing wire transfers through your bank. This guide explains how to export the data and what to do next.
## Before You Start
### Prerequisites
1. **Pending payouts in Affonso** — Payouts are either [generated automatically](/help/commission-payouts/payouts/how-and-when-affiliate-payouts-are-generated) based on your program settings, or you can [manually generate payouts](/help/commission-payouts/payouts/manually-generate-payouts-for-custom-date-ranges) for custom date ranges.
2. **Business bank account** — Most banks offer batch/bulk wire transfer functionality for business accounts. Check with your bank about their specific requirements and file formats.
## Step 1: Export Wire Transfer Payouts from Affonso
1. Go to your [Payments dashboard](https://affonso.io/app/payments)
2. Select the **Pending** tab to view all open payouts
3. Click **Export** and choose **Wire Transfer**
4. A CSV file will download containing all affiliates who have bank transfer as their preferred payment method
The exported file includes all necessary details:
- Recipient name
- Bank name
- IBAN (International Bank Account Number)
- SWIFT/BIC code
- Payment amount
- Currency
## Step 2: Process Transfers Through Your Bank
Since every bank has different procedures for bulk or batch wire transfers, the exact steps will vary depending on your financial institution. Generally, you'll need to:
1. **Log in to your business banking portal**
2. **Navigate to payments or transfers** — Look for options like "Batch Payments", "Bulk Transfers", or "File Upload"
3. **Upload or import the CSV file** — Some banks may require reformatting the data to match their specific template
4. **Review all transfers** — Verify recipient details and amounts
5. **Authorize the payments** — May require additional authentication or approval
### Bank-Specific Considerations
- **File format:** Some banks require specific CSV formats or even XML files. You may need to adjust the exported data to match your bank's requirements.
- **Batch limits:** Banks often have limits on the number of transfers per batch or daily/monthly limits.
- **Processing time:** International wire transfers typically take 1-5 business days depending on the destination country.
- **Fees:** Wire transfer fees vary significantly by bank and destination. International transfers often incur higher fees than domestic ones.
## Step 3: Mark Payouts as Paid in Affonso
After initiating the transfers through your bank:
1. Return to your [Payments dashboard](https://affonso.io/app/payments) in Affonso
2. Select the payouts you just processed
3. Mark them as **Paid**
This updates your records and shows affiliates that their payment has been initiated.
## When to Use Wire Transfers
Wire transfers are ideal when:
- Affiliates don't have PayPal or Wise accounts
- Large payment amounts make wire fees more economical
- Affiliates prefer receiving funds directly to their bank account
- Operating in regions where PayPal/Wise have limited support
## Considerations
### Fees
Wire transfer fees can be significant, especially for international transfers. Consider:
- Your bank's outgoing wire fee
- Intermediary bank fees (for international transfers)
- Recipient's bank incoming wire fee
For smaller payments, [PayPal](/help/commission-payouts/payouts/paypal-mass-affiliate-payouts) or [Wise](/help/commission-payouts/payouts/wise-bulk-affiliate-payouts) may be more cost-effective.
### Currency Conversion
If paying affiliates in different currencies, your bank will apply their exchange rates. These are often less favorable than services like Wise. Consider whether it's more economical to use Wise for multi-currency payments.
## Prefer Hands-Off Payouts?
Don't want to manage wire transfers manually? With [Managed Payouts](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso) on the Growth or Elite Plan, Affonso handles everything — you pay one invoice, and we distribute funds to all your affiliates worldwide via PayPal or bank transfer.
---
**Need help with wire transfer exports?** Contact our support team for assistance with formatting or bank-specific requirements.
---
## Wise Bulk Payouts
Learn how to export affiliate payouts from Affonso and process batch payments through Wise Business
Wise Batch Payments lets you pay multiple affiliates worldwide with low fees and competitive exchange rates. This guide walks you through exporting payouts from Affonso and processing them through Wise.
## Before You Start
### Prerequisites
1. **Pending payouts in Affonso** — Payouts are either [generated automatically](/help/commission-payouts/payouts/how-and-when-affiliate-payouts-are-generated) based on your program settings, or you can [manually generate payouts](/help/commission-payouts/payouts/manually-generate-payouts-for-custom-date-ranges) for custom date ranges.
2. **Wise Business account** — Batch payments are only available for Wise Business accounts. [Sign up for Wise Business](https://wise.com/business) if you haven't already.
3. **Sufficient balance** — Ensure you have enough funds in your Wise account or are ready to transfer the required amount.
## Step 1: Export Wise Payouts from Affonso
1. Go to your [Payments dashboard](https://affonso.io/app/payments)
2. Select the **Pending** tab to view all open payouts
3. Click **Export** and choose **Wise**
4. A CSV file will download containing all affiliates who have Wise as their preferred payment method
The exported file is formatted for direct upload to Wise Batch Payments.
## Step 2: Upload to Wise Batch Payments
1. Log in to your [Wise Business account](https://wise.com)
2. From the **Payments** menu, select **Batch**
3. Or go directly to [wise.com/batch](https://wise.com/batch)
4. Upload your CSV file from Affonso
5. Review all transfers in your batch
## Step 3: Pay for Your Batch
You can pay for your batch in two ways:
### Option A: Pay from Your Wise Account
1. Choose **Your account** as the payment method on the final step
2. The funds will be deducted directly from your Wise balance
### Option B: Pay by Bank Transfer
1. Wise will provide:
- The full amount to send
- Bank details for the transfer
- A unique payment reference (starts with **B-**)
2. Send the bank transfer using the exact amount and reference
3. Click **I have paid** to confirm
4. Wise will process payments once funds are received
**Important:** Always use your unique batch payment reference (B-ref) when sending money by bank transfer — this helps Wise complete your transfers faster.
## Step 4: Track Your Transfers
Once paid, you can track all transfers in real time from your Wise account dashboard. Each recipient will receive their payment according to Wise's standard delivery times.
## Step 5: Mark Payouts as Paid in Affonso
After your batch is processed:
1. Return to your [Payments dashboard](https://affonso.io/app/payments) in Affonso
2. Select the payouts you just processed
3. Mark them as **Paid**
This updates your records and shows affiliates that their payment has been sent.
## Wise Fees
Wise charges a fee for each transfer in your batch. The total fee is displayed before you confirm the payment. Key points:
- Fees vary by currency and destination country
- Check [Wise's pricing page](https://wise.com/pricing) for current rates
- If you've accepted a Guaranteed Rate, ensure payment is sent before it expires — otherwise payments will use the live exchange rate
## Benefits of Wise for Affiliate Payouts
- **Low fees:** Often significantly cheaper than PayPal or bank wires
- **Great exchange rates:** Mid-market rates with transparent fees
- **Global reach:** Send to 80+ countries
- **Fast delivery:** Most transfers arrive within 1-2 business days
## Prefer Hands-Off Payouts?
Don't want to manage Wise exports and batch payments manually? With [Managed Payouts](/help/commission-payouts/payouts/automating-affiliate-payouts-with-affonso) on the Growth or Elite Plan, Affonso handles everything — you pay one invoice, and we distribute funds to all your affiliates worldwide.
---
**Need help with Wise batch payments?** Contact our support team for assistance with exports or troubleshooting.
---
## API Integration
Connect Affonso to your tools and automate your affiliate program
# API Integration
Want to integrate your affiliate program into your existing workflows? The Affonso API gives you full control – no manual back-and-forth.
## What You Can Do
- Create, update, and retrieve affiliates
- Manage referrals and commissions
- Control payouts
- Pull data into your CRM, dashboard, or automation tool
## Getting Started
1. Go to **Connect → API** in your dashboard
2. Click **Create Key**
3. Set a name, permissions, and expiration
4. Copy your key (it's only shown once!)
Include your key in every request:
```
Authorization: Bearer sk_live_your_key_here
```
## Permissions
You control exactly what each key can do:
- **Affiliates**: read, write, delete
- **Referrals**: read, write, delete
- **Commissions**: read, write, delete
- **Payouts**: read, write, delete
Create separate keys for different use cases – one for your CRM, one for Zapier, one for your custom dashboard.
## Connect Any Payment Provider
Native integrations support Stripe, Paddle, Polar.sh, Creem, and Dodo Payments. But what if you use a different provider?
With the API, you can track purchases and subscriptions from any payment system. Send conversion data to Affonso when a sale happens – regardless of where the payment was processed.
To keep the hosted pixel or embedded dashboard more reliable when ad blockers
or privacy tools are present, see
[Proxy Setup (Optional)](/help/getting-started/proxy-setup-optional).
## Common Use Cases
- **Connect any payment provider** – track sales from Gumroad, LemonSqueezy, or your custom checkout
- **Send normalized backend events** – track conversions, leads, trials, and milestones through one endpoint
- **Sync affiliates to your CRM** when they sign up
- **Build a custom reporting dashboard** with real-time data
- **Automate affiliate onboarding** through your own systems
- **Integrate with Zapier, Make, or n8n** for no-code workflows
If you want one backend endpoint for both revenue and non-revenue events, see
[Server-Side Event Tracking](/help/installation-guides/overview/server-side-event-tracking)
and the
[Create Event API docs](https://docs.affonso.io/api/endpoint/events/create).
## Full Documentation
For endpoints, request/response examples, and advanced usage:
→ [docs.affonso.io](https://docs.affonso.io/)
---
## Webhooks
Get real-time notifications when things happen in your affiliate program
# Webhooks
Stop polling for changes. Webhooks push events to your systems the moment they happen – so your tools can react instantly.
## What You Get Notified About
- **Affiliate events**: new signups, profile updates, status changes
- **Referral events**: new referrals, conversions
- **Commission events**: created, approved, rejected
- **Payout events**: initiated, completed, failed
## Setting Up Webhooks
1. Go to **Connect → Webhooks** in your dashboard
2. Click **Add Endpoint**
3. Enter your URL and select the events you want
4. Save and test your endpoint
## Security
Every webhook payload is signed with HMAC-SHA256. Verify the signature to ensure requests actually come from Affonso.
Failed deliveries are retried with exponential backoff. You can also replay failed events from the delivery log.
## Common Use Cases
- **Slack notification** when a new affiliate joins
- **CRM update** when a referral converts
- **Custom email** when a payout is processed
- **Analytics tracking** for every conversion
## Full Documentation
For payload formats, signature verification, and event details:
→ [docs.affonso.io/webhooks](https://docs.affonso.io/webhooks)
---
## How can I find affiliates? Guide to Recruiting High-Quality Affiliates
Finding the right affiliates can make or break your program's success. But where do you start? And more importantly, how do you find affiliates who will actually drive results?
Finding the right affiliates can make or break your program's success. But where do you start? And more importantly, how do you find affiliates who will actually drive results?
## Understanding Different Types of Affiliate Programs
Before diving into recruitment strategies, it's important to understand that companies use Affonso in various ways to grow through word-of-mouth marketing. The most common approaches include customer referral programs, public affiliate programs, influencer partnerships, and strategic partner marketing with complementary services.
## Start With Your Best Asset: Existing Customers
Your current customers are often your most powerful advocates. Why? They already understand your product's value and can speak authentically about their experience. But timing is everything when inviting customers to become affiliates.
Consider reaching out at these key moments:
- Right after they initially sign up, when their excitement about your product is at its peak
- After they've hit a significant milestone or success point with your product
- Following a positive NPS survey response
- After they renew their subscription
These moments represent times when customers are most likely to be enthusiastic about promoting your product.
## Beyond Your Customer Base
While existing customers form a strong foundation, there are several effective ways to expand your affiliate network. Here's how successful companies do it:
### Website Integration
Don't hide your affiliate program - make it visible. Add a link in your marketing site's footer or even in the top navigation. This passive recruitment method can bring in motivated affiliates who are already interested in your industry.
### Strategic Outreach
Building relationships with industry influencers takes time, but can yield significant results. Start by:
- Reaching out to relevant bloggers or journalists in your industry
- Searching for and connecting with top-ranked sites in your space
- Engaging with influencers who align with your brand
- Joining and actively participating in affiliate-focused groups on LinkedIn and Facebook
### Partnership Development
Some of the most successful affiliate relationships come from complementary businesses. Consider partnering with solutions that serve your target market but don't compete directly. These partnerships can lead to powerful cross-promotion opportunities.
## Landing Your Dream Affiliates
Here's something crucial to understand: your ideal affiliates rarely come to you - you need to go to them. Just like landing dream customers, recruiting top affiliates requires a proactive approach.
Take time to identify what makes an ideal affiliate for your business. Look for:
- Partners with an overlapping but non-competing audience
- Those offering complementary products or services
- Existing customers who have significant influence in your industry
**Pro Tip:** Create a spreadsheet of 20-50 dream affiliates. Include their contact information, audience size, and potential reach. Then develop a personalized outreach strategy for each one.
## Building Long-Term Success
Remember that building a thriving affiliate program is a marathon, not a sprint. It often takes several months for a program to gain real momentum. However, once it does, the multiplier effect can be remarkable - a single well-matched affiliate can generate numerous customers for your business.
Stay patient and persistent in your recruitment efforts. Focus on building genuine relationships rather than just chasing quick wins. The most successful affiliate partnerships often start with a genuine connection and shared values.
---
**Ready to start recruiting affiliates?** Our team is here to help you develop and execute your affiliate recruitment strategy.
---
## Changing an affiliate's coupon code
Affiliates cannot reassign their own coupon codes. How program owners can rotate or replace them.
By design, affiliates cannot reassign their own coupon codes. This prevents code recycling and abuse — once a code is shared publicly, an affiliate could otherwise repeatedly claim it under a new name.
## How program owners can change a code
1. Open the affiliate's detail page in your dashboard.
2. Remove their existing coupon code.
3. Either assign a new code manually, or let the affiliate claim a new one from their portal (if self-service coupons are enabled).
## Enabling self-service coupons
If you want affiliates to be able to claim their own codes (subject to availability), enable self-service coupons in [Tracking & Coupons](https://affonso.io/app/affiliate-program/tracking-and-coupons).
---
## Affiliate Finder credits during the trial
How discovery credits behave on trial accounts vs paid plans, and what consumes credits.
Affiliate Finder uses **discovery credits** to surface candidate affiliates. The allocation differs between trial and paid plans.
## Trial vs paid
- **Trial accounts** receive a single allocation of 5 discovery credits, total, for the duration of the trial. This is intentional to prevent trial abuse.
- **Paid plans** get their full monthly allocation as listed on the [pricing page](https://affonso.io/pricing) (e.g. Launch = 15 credits / month). The allocation refreshes each billing cycle.
When you upgrade from trial to a paid plan, your full monthly allocation becomes available immediately.
## What consumes credits
Only the keywords or queries you **actively select** to search consume credits. AI-suggested keywords shown for inspiration are free until you act on them.
## See also
- [Discovery credits](/help/affiliate-finder/discovery-credits)
- [What is Affiliate Finder?](/help/affiliate-finder/what-is-affiliate-finder)
---
## How the affiliate-revenue cap on your plan works
The cap is a tracking limit, not a sales limit. Affonso never holds your revenue.
Each Affonso plan includes an **affiliate-revenue cap** — the volume of affiliate-attributed revenue you can track per month at that plan's price.
## What the cap is, and isn't
The cap is a **tracking and usage limit**. It is not a sales limit and Affonso never holds, processes, or takes a cut of your revenue. All money flows directly between your payment provider (Stripe, Polar, Paddle, etc.) and you.
"Affiliate revenue" means revenue **attributed to affiliates via your Affonso program**. Direct sales that don't have an affiliate cookie or coupon do not count toward the cap.
## What happens when you exceed the cap
Your checkout keeps working — there is no hard stop. You have two options:
1. **Upgrade to a higher plan** (or Enterprise) with a larger cap.
2. **Pay overage** at **$19 per additional $1,000** of affiliate-attributed revenue, billed at the end of the cycle.
## Where to see your current usage
Open [Billing](https://affonso.io/app/billing) — your plan, cap, and current month's usage are shown there.
---
## Can affiliates see customer details?
Privacy protection and what information affiliates can access about their referrals
**No, affiliates cannot see customer details or personal information.**
Affiliates only have access to aggregated performance data like total referrals, conversion statistics, commission earnings, click tracking, and performance metrics. They cannot see customer names, email addresses, purchase details, payment information, or any personal data.
This privacy protection follows GDPR and CCPA regulations while maintaining customer trust. Your customers' personal information stays private between you and them - affiliates can track their performance and earnings but cannot access individual customer details or contact information.
---
**Need more information about privacy and security?** Contact our team to learn more about how we protect your customer data.
---
## Cancelling your Affonso subscription
How to cancel from your billing page, and what happens to your account after cancellation.
Subscription management is self-service. Open [Billing](https://affonso.io/app/billing) and cancel from there. No email or support ticket required.
## After cancellation
Your account stays open and you can keep using the dashboard — a paid plan is only required to **launch your program** (i.e. make it publicly accessible to affiliates and list it on the marketplace). You can stay logged in indefinitely for setup, configuration, and testing without an active subscription.
Existing data (affiliates, referrals, commissions) is preserved and reactivates automatically if you resubscribe later.
---
## Setting up a custom domain for your affiliate portal
Replace yoursubdomain.affonso.io with your own domain (e.g. partners.yourbrand.com). DNS records and verification.
By default your affiliate portal lives at `yoursubdomain.affonso.io`. You can point it to a subdomain on your own brand instead — for example `partners.yourbrand.com` — by adding a DNS record at your domain provider.
## Setup
1. Open [Affiliate Program → Appearance](https://affonso.io/app/affiliate-program/appearance).
2. Click **Add custom domain** and enter the subdomain you want to use.
3. Affonso generates a TXT verification record. Copy the host and value.
4. At your DNS provider (Cloudflare, GoDaddy, Namecheap, Route 53, etc.), add the record:
- **Type**: TXT
- **Host / name**: as shown
- **Value**: as shown
5. Save the record at your DNS provider.
6. Back in Affonso, click **Refresh**. Once propagation completes, status flips to **Active** and your portal responds on the new domain.
## DNS propagation
Propagation typically takes a few minutes but can be longer depending on your provider's TTL. You can verify propagation at [dnschecker.org](https://dnschecker.org) before clicking Refresh in Affonso.
## Notes
- Use a subdomain you don't already point elsewhere (no conflicting A or CNAME records on the same host).
- The TXT verification record can stay in place after activation — removing it does not break the portal.
---
## How do I customize my referral tracking parameters?
Learn how to configure and customize the URL parameters affiliates use for tracking their referrals
Affonso allows you to customize which URL parameters your affiliates can use for tracking their referrals. By default, all five standard parameters are enabled, but you can choose which ones to make available and set a default parameter that appears pre-selected in your affiliate portal.
## Available tracking parameters
Affonso supports five standard referral tracking parameters:
- `?atp=` - Affonso Tracking Parameter (default)
- `?via=` - Common alternative parameter
- `?affonso=` - Branded parameter
- `?aff=` - Short form of "affiliate"
- `?ref=` - Common abbreviation for "referral"
All enabled parameters work identically for tracking. For example, if an affiliate's tracking ID is `john-doe`, these links would all work the same:
- `https://yourdomain.com?atp=john-doe`
- `https://yourdomain.com?via=john-doe`
- `https://yourdomain.com?ref=john-doe`
## How to configure referral parameters
1. **Navigate to your affiliate program settings**
Go to your dashboard and open your affiliate program settings.
2. **Open Referral Parameters settings**
Find and click on the "Referral Parameters" section or button.
3. **Enable or disable parameters**
Use the checkboxes to enable or disable specific parameters. You must keep at least one parameter enabled.
4. **Set your default parameter**
Click on the "Default" badge next to your preferred parameter to set it as the default. The active default will appear with a red badge, while other enabled parameters show a gray "Default" badge that you can click.
5. **Save your changes**
Click "Save Changes" to apply your configuration.
## Choosing your default parameter
The default parameter is the one that will be **pre-selected** in the affiliate portal. When affiliates log in and view their tracking link, they'll see the default parameter in their link by default.
Affiliates can still switch to any other enabled parameter from the dropdown in the portal, but the default parameter provides the best initial experience.
## Why enable multiple parameters?
There are several benefits to enabling multiple tracking parameters:
**Flexibility for affiliates**
- Some affiliates may have existing tracking systems or preferences
- They can choose a parameter that fits their workflow
**Avoid conflicts**
- If an affiliate already uses `?ref=` for another purpose, they can switch to `?via=`
- Reduces friction during onboarding
**Professional appearance**
- The `?via=` parameter is widely recognized and trusted
- The `?affonso=` parameter shows you're using a professional platform
**Migration support**
- If you're switching from another platform, you can enable their parameter format
- Makes transition smoother for existing affiliates
## Best practices
**Enable all parameters initially**
- Start with all five parameters enabled to maximize flexibility
- You can always disable specific parameters later if needed
**Choose a clear default**
- `?via=` is the most widely recognized parameter
- `?atp=` is Affonso's branded parameter and works great too
- Consider your brand and what affiliates might be familiar with
**Communicate to affiliates**
- Let your affiliates know which parameters are available
- Explain that they can switch parameters in the portal if needed
**Consider your existing setup**
- If you're migrating from another platform, check what parameter they used
- Enable that parameter to maintain compatibility with existing links
## Important notes
- **All enabled parameters work identically**: There's no functional difference between parameters, only the URL format changes
- **Minimum one parameter**: You must always have at least one parameter enabled
- **Real-time changes**: Changes take effect immediately after saving
- **Existing links remain valid**: Disabling a parameter won't break existing tracking links using that parameter, but affiliates won't be able to select it in the portal anymore
## Need help?
If you have questions about configuring your referral parameters or need assistance with your affiliate program setup, please [contact our support team](mailto:hello@affonso.io).
---
## Debugging Stripe Checkout tracking
How to verify that an affiliate referral made it all the way from the cookie into your Stripe Checkout Session metadata.
Affonso tracks a Stripe purchase as an affiliate referral when the customer's Checkout Session includes `affonso_referral` in its metadata. This guide walks through the chain from cookie to commission.
## 1. Live mode only
Affonso only processes Stripe **live-mode** webhooks. Test-mode purchases are ignored. For end-to-end testing, use live mode with a 100% off coupon.
## 2. The cookie is set in the browser
Open your site with an affiliate link (e.g. `https://yourdomain.com/?atp=affiliate-id`) and check DevTools → Application → Cookies. The cookie `affonso_referral` should exist on your domain.
If it's missing, the tracking script isn't loaded. See the [tracking debug checklist](/help/faq/troubleshooting-tracking).
## 3. The cookie is passed into Stripe metadata
On your server, read the cookie value when creating the Checkout Session and pass it as metadata:
```js
stripe.checkout.sessions.create({
// ...
metadata: {
affonso_referral: cookieValue,
},
});
```
The key must be exactly `affonso_referral`.
## 4. Verifying metadata on the Stripe side
1. Open the customer in your Stripe dashboard.
2. Scroll to **Events** and open the **Checkout Session completed** event.
3. Confirm `metadata.affonso_referral` is present and matches the cookie value.
If the metadata is missing, your server isn't reading the cookie or isn't including it in the session.
## 5. Webhook delivery
Your Stripe webhook endpoint must point at Affonso. Configure it in [Tracking & Coupons → Connect](https://affonso.io/app/affiliate-program/connect/website). Webhook logs are available in your Affonso dashboard for diagnostics.
## Deep links
Tracking parameters work on any path, not just the homepage. `https://yourdomain.com/welcome?atp=affiliate-id` and `https://yourdomain.com/pricing?atp=affiliate-id` both set the cookie correctly.
---
## How to Disable Affiliate Links (Coupon-Only Tracking)
Learn how to run a coupon-only affiliate program by disabling affiliate links while keeping coupon code tracking active
Some businesses prefer to run affiliate programs using only coupon codes for tracking, without affiliate links. Affonso lets you disable affiliate links entirely while keeping coupon-based tracking fully functional.
## What Happens When You Disable Affiliate Links?
When you disable affiliate links for your program:
- **Affiliates will no longer see** the affiliate link section in their portal and dashboard
- **Coupon codes remain fully functional** and visible to affiliates
- **Existing affiliate links** will stop appearing in the UI (though technically they still track if someone has the URL)
- **Affiliates can only promote** using their coupon codes
This simplifies the affiliate experience when you only want to track conversions through coupons.
## When Should You Disable Affiliate Links?
Consider disabling affiliate links if:
- You run a **coupon-only affiliate program** (e.g., influencer discount codes)
- You want to **simplify the affiliate experience** by offering only one tracking method
- Your checkout process is **optimized for coupon codes** rather than URL parameters
- You want to **prevent link-based promotion** and focus on coupon sharing
## How to Disable Affiliate Links
1. Navigate to **Settings → Affiliate Program**
2. Scroll to the **"Tracking Settings"** section
3. Find the **"Affiliate Links"** toggle switch
4. Click the toggle to **disable** affiliate links
5. Click **"Save Changes"** at the bottom of the page
That's it! Your affiliates will immediately stop seeing affiliate links in their portal and dashboard.
## Can I Re-enable Affiliate Links Later?
Yes, absolutely! You can toggle affiliate links back on at any time by following the same steps. When you re-enable them, affiliates will immediately see their referral links again.
## What If I Use Both Links and Coupons?
If you want to offer both tracking methods to your affiliates, simply keep the **"Affiliate Links"** toggle enabled (this is the default). Affiliates will see both:
- Their unique referral link with tracking parameters
- Their coupon code (if you've set up program coupons or self-service coupons)
This gives affiliates flexibility in how they promote your products.
## Important Notes
- **Coupon tracking is independent**: Disabling links does not affect coupon code tracking in any way
- **No data is lost**: Existing referral data and commissions remain intact
- **No affiliate notification**: Affiliates are not automatically notified when you disable links - you may want to communicate this change to them
- **Technical links still work**: While the UI hides the links, if an affiliate already shared a link URL, it will technically still track (though we recommend communicating the change)
---
**Need help setting up a coupon-only program?** Contact our support team for guidance on configuring your affiliate program for coupon-based tracking.
---
## Affiliate email notifications
Which emails Affonso sends to affiliates, language detection, and how to send from your own domain.
Affonso sends a small set of transactional emails to affiliates on your behalf. You can toggle each one and, on Elite plans, send from your own domain.
## Automated emails
- **Application approved** — sent when you approve an applicant.
- **Payout processed** — sent when a commission moves to Paid.
- **Manual messages** — anything you send from an affiliate's detail screen.
Enable, disable, and preview each email in [Affiliate Program → Emails](https://affonso.io/app/emails).
## Language
Emails are sent in the affiliate's portal language, auto-detected from their browser when they first signed up. The admin dashboard itself is English only.
## Customizing content
Today, the body of system emails is not editable from the dashboard — content customization is on the roadmap. Brand-level values (program name, support address) are pulled from your program settings.
## Custom sender domain
Sending from `partners@yourbrand.com` instead of `hello@affonso.io` is available on the **Elite plan**. Setup requires SPF and DKIM records on your domain; contact support to walk through it.
## See also
- [Inviting new affiliates](/help/managing-affiliates/inviting-new-affiliates)
---
## Can I Exclude Specific Products from Affiliate Commissions?
Yes — add a $0 fixed-amount incentive targeting the products or plans you want to keep out of the commission structure
**Q: I want some products in my catalog to never pay affiliate commission. Can I do that without changing my group's default reward?**
Yes. Add a new incentive to the group with **Fixed Amount = `0`** and set the trigger to the products or plan type you want to exclude (Specific Products, Monthly, Yearly, or One-time).
Only **Fixed Amount** supports `0` — Percentage, Credits, and Free Months rewards must always be greater than 0.
You'll still see the referral and a $0 earning record in the dashboard — that's expected and confirms the exclusion is being applied.
For the full walkthrough, see [How to Exclude Products or Plans from Commissions](/help/commission-payouts/commission/how-to-exclude-products-from-commission).
---
## First-Touch vs. Last-Touch Attribution in Affiliate Tracking
Understanding which affiliate gets credit when customers click multiple affiliate links before converting
Attribution determines which affiliate gets credit for a conversion when a customer clicks multiple affiliate links before purchasing. Understanding this helps you set proper expectations with your affiliates and choose the right tracking approach for your business.
## How Attribution Models Work
**First-Touch Attribution:** The first affiliate who brought the customer gets all credit, even if they later clicked other affiliate links. This rewards affiliates for initiating interest and works well for longer sales cycles.
**Last-Touch Attribution:** The most recent affiliate before conversion gets credit, regardless of who referred first. This focuses on the final action that drove the purchase and works well for immediate conversions and promotions.
## What Affonso Uses
Affonso currently uses **last-touch attribution** by default for all programs. When a customer clicks multiple affiliate links, the most recent affiliate receives the commission.
**Example:** Customer visits via Affiliate A, then later returns via Affiliate B and purchases → Affiliate B gets the commission.
## Can I Change Attribution Models?
Currently, attribution logic is not customizable in Affonso - all programs use last-touch attribution. We're considering adding attribution model options based on user feedback.
If you'd like to see customizable attribution models, you can [vote for this feature request](https://affonso.featurebase.app/p/custom-attribution-choose-between-first-touch-and-last-touch) to help us prioritize it.
---
**Have questions about your attribution setup?** Contact our support team for clarification on how tracking works for your specific program.
---
## How commission rate changes affect existing referrals
Rates are evaluated at the moment each commission is generated, not at the time the referral was made. What that means in practice.
Affonso evaluates the commission rate at the moment **each commission is generated** (i.e. at each payment event), not at the time the referral was first made. There is no per-referral rate locking.
## What that means in practice
- Editing a group's incentive from 40% to 30% — every future commission for every affiliate in that group is generated at 30%, including renewals for customers referred while the rate was 40%.
- Moving an affiliate from one group to another — all future commissions for that affiliate use the new group's rate, including renewals for previously-referred customers.
- Commissions already generated keep the rate they were generated with. The hold period does not re-evaluate the rate.
## Grandfathering old cohorts
Today, the workaround is cohort-based groups: keep one group per cohort and don't edit it.
- Group A: Early Bird affiliates, 40%, do not edit.
- Group B: Default, 30%, for new affiliates.
Per-referral rate locking is on the roadmap.
## Where to configure rates
[Groups & Rewards](https://affonso.io/app/groups) → group → **Incentives** tab.
---
## How do I change my tracking parameter?
Learn how to change your affiliate tracking ID in the Affonso portal
Your tracking parameter (also called tracking ID) is the unique identifier that appears in your affiliate links, like `?via=yourname`. You can change it at any time through the affiliate portal.
## Steps to change your tracking parameter
1. **Log in to your affiliate portal**
Access the affiliate portal through the link provided by the program you're promoting.
2. **Find the Advanced Settings**
Below your affiliate link, click on **Advanced Settings** to expand the options.
3. **Edit your tracking ID**
Click the pencil icon (✏️) next to your current tracking ID to enter edit mode.
4. **Enter your new tracking ID**
Type your desired tracking ID. It can contain letters, numbers, and hyphens (a-z, A-Z, 0-9, -).
5. **Confirm the change**
Click the checkmark (✓) to save. You'll see a confirmation popup warning you that:
- Your old tracking ID will no longer work
- You'll need to update all your existing links
6. **Update your links**
After confirming, make sure to update all places where you've shared your affiliate link with the new tracking parameter.
## Important notes
- **Old links stop working**: Once you change your tracking ID, any links using the old ID will no longer track your referrals.
- **Allowed characters**: Your tracking ID can contain letters, numbers, and hyphens. Hyphens cannot be at the start, end, or consecutive.
- **Minimum length**: Your tracking ID must be at least 4 characters long.
- **Must be unique**: The tracking ID must be unique within the program.
## Alternative: Use sub-parameters instead
If you want to track different campaigns or traffic sources without changing your main tracking ID, consider using [sub-parameters](/help/for-affiliates/sub-parameters) instead.
Sub-parameters let you add extra tracking information to your links:
- `?via=yourname&sub1=youtube` for YouTube traffic
- `?via=yourname&sub1=twitter&sub2=promo` for Twitter promotions
This way, you keep one consistent tracking ID while still getting detailed insights into where your conversions come from.
---
## How to Export Your Affiliate Data
Your Data. Your Control. Exporting from Affonso
At Affonso, transparency isn't just a buzzword. We understand that your data is crucial for your business, and you should have full control over it - whether you stay with us or decide to move on.
## Complete Data Export Service
While we hope Affonso continues to be your platform of choice, we respect your right to make the best decision for your business. If you need to export your data, we'll ensure you get everything you need in a format that works for you:
- **Complete affiliate database**
- **All referral records**
- **Payment history**
- **Commission structures**
- **Performance metrics**
## How to Request Your Export
Simply reach out to our team at [silvestro@affonso.io](mailto:silvestro@affonso.io), and we'll prepare a comprehensive export of your data. We'll work with you to:
- **Determine the best format for your needs**
- **Include all relevant data fields**
- **Help with understanding the exported data structure**
- **Assist with migration questions if needed**
No hidden processes, no unnecessary delays - just straightforward access to your business data when you need it.
## Our Promise
Your success matters more than keeping you locked into any platform. That's why we make data export simple and comprehensive, ensuring you can make informed decisions about your affiliate program's future.
## Before You Go
We value every customer and would love to understand if there's something we could improve. If you're considering switching platforms, let's talk first - maybe there's a solution we haven't explored yet. We are always open to feedback and ready to find ways to better serve your needs.
---
**Ready to export your data?** [Contact us at silvestro@affonso.io →](mailto:silvestro@affonso.io?subject=Data%20Export%20Request)
---
## How to integrate Affonso with next-safe-action?
Learn how to use Affonso affiliate tracking with next-safe-action Server Actions in Next.js.
[next-safe-action](https://next-safe-action.dev/) is a popular library for type-safe Server Actions in Next.js. Here's how to integrate Affonso affiliate tracking with your Server Actions.
## Basic Server Action Integration
First, make sure the Affonso tracking script is [installed in your Next.js](http://localhost:3000/help/installation-guides/frameworks/nextjs-integration) app. Then use the `affonso_referral` cookie in your Server Actions:
```typescript
'use server';
import { z } from 'zod';
import { cookies } from 'next/headers';
import { actionClient } from './safe-action';
const checkoutSchema = z.object({
email: z.string().email(),
priceId: z.string(),
});
export const createCheckoutAction = actionClient
.inputSchema(checkoutSchema)
.action(async ({ parsedInput: { email, priceId } }) => {
// Extract affiliate referral cookie
const cookieStore = await cookies(); // Next.js 15+
// const cookieStore = cookies(); // Next.js 13-14
const affiliateReferral = cookieStore.get('affonso_referral')?.value;
// Create Stripe checkout session with affiliate data
const session = await stripe.checkout.sessions.create({
customer_email: email,
line_items: [{ price: priceId, quantity: 1 }],
mode: 'subscription',
success_url: `${process.env.NEXT_PUBLIC_APP_URL}/success`,
cancel_url: `${process.env.NEXT_PUBLIC_APP_URL}/cancel`,
// Pass affiliate referral as metadata
metadata: affiliateReferral
? { affonso_referral: affiliateReferral }
: {},
});
return { checkoutUrl: session.url };
});
```
## Using Middleware for Automatic Cookie Extraction
You can create a middleware that automatically extracts the affiliate referral:
```typescript
import { createSafeActionClient } from 'next-safe-action';
import { cookies } from 'next/headers';
export const actionClientWithAffonso = createSafeActionClient({
// Handle server errors
handleServerError(e) {
console.error('Action error:', e.message);
return 'Something went wrong';
},
}).use(async ({ next }) => {
// Extract affiliate referral in middleware
const cookieStore = await cookies(); // Next.js 15+
const affiliateReferral = cookieStore.get('affonso_referral')?.value;
// Pass to action context
return next({
ctx: {
affiliateReferral,
},
});
});
```
Then use it in your actions:
```typescript
export const createCheckoutAction = actionClientWithAffonso
.inputSchema(checkoutSchema)
.action(
async ({ parsedInput: { email, priceId }, ctx: { affiliateReferral } }) => {
// affiliateReferral is now available in context
const session = await stripe.checkout.sessions.create({
customer_email: email,
line_items: [{ price: priceId, quantity: 1 }],
mode: 'subscription',
success_url: `${process.env.NEXT_PUBLIC_APP_URL}/success`,
cancel_url: `${process.env.NEXT_PUBLIC_APP_URL}/cancel`,
metadata: affiliateReferral
? { affonso_referral: affiliateReferral }
: {},
});
return { checkoutUrl: session.url };
}
);
```
## Frontend Usage
Use the action in your React components:
```tsx
'use client';
import { useAction } from 'next-safe-action/hooks';
import { createCheckoutAction } from './actions';
export default function CheckoutForm() {
const { execute, result, isExecuting } = useAction(createCheckoutAction);
const handleSubmit = (formData: FormData) => {
execute({
email: formData.get('email') as string,
priceId: 'price_1234567890',
});
};
return (
);
}
```
## Best Practices
### 1. Error Handling
Always handle cases where the affiliate referral might not be present:
```typescript
metadata: affiliateReferral ? { affonso_referral: affiliateReferral } : {};
```
### 2. Type Safety
Define types for your context:
```typescript
type ActionContext = {
affiliateReferral?: string;
};
export const actionClientWithAffonso = createSafeActionClient({
// ... config
});
```
### 3. Logging
Log affiliate referrals for debugging:
```typescript
.use(async ({ next }) => {
const affiliateReferral = cookieStore.get('affonso_referral')?.value;
if (affiliateReferral) {
console.log('Affiliate referral found:', affiliateReferral);
}
return next({ ctx: { affiliateReferral } });
});
```
## Multiple Payment Providers
The same pattern works with other payment providers:
```typescript
// Polar
const session = await polar.checkouts.create({
// ...
metadata: affiliateReferral ? { affonso_referral: affiliateReferral } : {},
});
// Dodo Payments
const session = await dodo.checkout.create({
// ...
metadata_affonso_referral: affiliateReferral,
});
```
This integration gives you the full power of next-safe-action's type safety while seamlessly passing affiliate referral data to your payment providers! 🚀
---
## Inviting team members
Add colleagues to your Affonso account so multiple people can manage the program.
Affonso accounts support multiple team members. Each member shares the same dashboard and can manage affiliates, payouts, and program settings.
## How to invite
1. Open [Settings → Team](https://affonso.io/app/settings/team/general).
2. Enter the colleague's email and click **Invite**.
3. They receive an email link to join your team.
Invitations don't expire; if a colleague hasn't joined yet, you can resend or revoke from the same page.
---
## How Managed Payouts work
Affonso pays your affiliates as Merchant of Record. Covers legal structure, SLA, supported currencies, edge cases.
Managed Payouts let you pay one consolidated invoice to Affonso and have Affonso pay each affiliate individually. This article covers the legal, operational, and edge-case details.
## Legal structure
Affonso acts as **Merchant of Record** for managed payouts. The relationship is between you and Affonso only — not between you and each affiliate. The invoice we issue covers the affiliate commissions plus transaction fees, billed as a service.
This matters for your accountant: it's a service invoice, not a pass-through agent fee.
## Timing
Managed Payouts are not real-time. After your invoice is paid, affiliates are typically paid within **7 business days**. The payout cycle itself runs monthly on the 1st.
## Supported currencies and methods
- **Currency**: USD only.
- **Methods**: PayPal and wire transfer.
## Affiliates without payout details
If an affiliate hasn't entered PayPal or wire details:
1. Affonso contacts them automatically.
2. If they don't respond before the invoice is issued, you choose either to exclude them from the invoice (their commissions roll into a future cycle) or to refund their commissions later.
## Activating Managed Payouts mid-cycle
Switching takes effect from the **next** payout cycle. Payouts already generated under the previous setup must be processed manually or deleted so they regenerate under managed mode.
## Works alongside the REST API
Managed Payouts apply to any tracked conversion, including those reported via the [REST API](/help/connect/api) for non-native payment integrations.
## Configuration
Enable and configure Managed Payouts in [Affiliate Program → Payment Terms](https://affonso.io/app/affiliate-program/payment-terms).
---
## Marketplace listing requirements and visibility
What it takes for your program to appear in the Affonso marketplace, and where to view the live listing.
The Affonso marketplace is a public directory at [marketplace.affonso.io](https://marketplace.affonso.io) where affiliates can discover programs to join.
## Requirements for listing
Your program is listed in the marketplace when:
- You have an **active paid subscription** (any plan tier).
- You've opted in to marketplace listing in your [program settings](https://affonso.io/app/affiliate-program/marketplace).
- Your program has a public description and logo.
Programs on expired trials or without a current subscription are not listed.
## Viewing your live listing
Log in at [marketplace.affonso.io](https://marketplace.affonso.io) with an affiliate account. That is what applicants see when browsing programs.
The preview in the program-owner dashboard shows how your card will render, but it is not the live marketplace.
## See also
- [List your program in the marketplace](/help/getting-started/list-your-program-in-marketplace)
---
## My website and app are on different domains. Will affiliate tracking still work?
Discover how Affonso affiliate tracking works across multiple domains and what steps to take to ensure accurate referral attribution when your website and app are hosted separately.
Yes – but the setup differs slightly depending on whether you're using subdomains or completely separate domains. To ensure proper affiliate tracking, you’ll need to install the Affonso tracking script on both your website and your app domain.
## Subdomains (e.g. yourwebsite.com → app.yourwebsite.com)
If your site and app share the same root domain, tracking works out of the box. Just make sure the Affonso tracking script is installed on both the marketing site and the app:
```html
```
**Configuration:**
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent="true"` to the script above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
The tracking cookie (`affonso_referral`) is shared across all subdomains, so no extra work is needed.
## Different domains (e.g. yourwebsite.com → yourapp.com)
Browsers do not share cookies across domains, so you'll need to pass the affiliate tracking info manually.
When redirecting from your website to your app, forward the original affiliate tracking parameter (`?ref=abc123`, `?via=`, `?atp=`, etc.) in the URL.
**Example redirect:**
```javascript
const query = window.location.search;
window.location.href = `https://yourapp.com/signup${query}`;
```
As long as the parameter is present in the URL on your app domain, Affonso will pick it up again and set the correct cookie there.
**Important:** Be sure the tracking script is installed on both domains.
---
## What is the default `data-cookie_duration` for the tracking pixel?
What happens when `data-cookie_duration` is omitted from the Affonso tracking script, and how long the referral cookie lasts by default.
If you do not set `data-cookie_duration` on the Affonso tracking script, the default is **30 days**.
That same default is used if the attribute is present but not a valid integer.
## Example
This script uses the default automatically:
```html
```
## What the duration controls
`data-cookie_duration` controls how long the `affonso_referral` cookie and the `affonso_data` cookie stay on the visitor's browser.
If you want a different attribution window, add the attribute explicitly:
```html
```
The value is interpreted in **days**.
## Related
If you are debugging the full tracking flow, see the [tracking debug checklist](/help/faq/troubleshooting-tracking).
---
## Refer & Earn
Earn growing recurring commissions with our tiered affiliate program - up to 30% recurring.
Hey there! 👋
You're looking at a **performance-rewarding affiliate program** for promoting a cutting-edge affiliate marketing platform. Meta, right? Here's why promoting Affonso is your next big opportunity.
## Why This Is Different From Other Affiliate Programs
Our platform helps SaaS companies launch and scale their affiliate programs. When you refer someone who needs this, you're not just earning commission - **you're connecting them with a solution that generates real revenue.**
The result? Happy customers who stick around, generating recurring income for both them and you.
## Your Earning Potential: Tiered Commission Structure
Our commission rates grow with your success:
### 🚀 Starter Tier (0+ Referrals)
- **30% first month → 20% recurring commission**
- 180-day cookie window
- Monthly payouts ($100 minimum)
### 🎯 Advanced Tier (25+ Referrals)
- **35% first month → 25% recurring commission**
- +5% commission bonus on all sales
- 240-day cookie window
- Bi-weekly payouts ($50 minimum)
### 💎 Expert Tier (100+ Referrals)
- **40% first month → 30% recurring commission**
- +10% commission bonus on all sales
- Weekly payouts (no minimum)
- Dedicated account manager
**Plus for all tiers:**
- **💳 Flexible payments** via PayPal, Wise, or Wire transfer
- **📈 Real-time tracking** and detailed analytics
- **🎨 Marketing materials** and custom coupon codes
## What Makes Affonso Worth Promoting
#### Performance-Based Growth System
- **Your commission rates increase** as you prove your value
- Better benefits unlock at each tier (faster payouts, lower minimums)
- Built to reward serious affiliates who drive real results
#### Built Specifically For SaaS
- Designed from the ground up for SaaS businesses
- Seamlessly integrates with major payment providers
- Handles both one-time and recurring commissions automatically
#### Multiple Programs Under One Roof
- Companies can manage different products in one dashboard
- Perfect for growing SaaS businesses, Solo Founders, and Indiemakers
- Scales from startup to enterprise
## Your 3-Step Path to Recurring Income
#### 1. **Get Approved Fast**
- Sign up takes less than 60 seconds
- Quick approval process
- Start earning immediately
#### 2. **Share Your Unique Link**
- Get your personalized affiliate link
- Access our proven marketing materials
- Share with your network of entrepreneurs
#### 3. **Earn Recurring Commissions**
- **Growing commission rates** as you refer more customers
- Real-time tracking and reporting
- Regular payments with improving terms as you advance
#### Who's Your Perfect Referral?
Your network likely includes these ideal prospects:
- **SaaS Companies** looking to scale through partnerships
- **Digital Product Creators** wanting recurring revenue streams
- **Solo Founders & Indiemakers** building subscription products
- **Anyone selling subscription products** who wants growth
#### The Numbers That Matter
**Starting in the Starter Tier** - when you refer a customer on our $99/month plan:
- **Month 1:** You earn $29.70 (30% commission)
- **Month 2+:** You earn $19.80/month (20% recurring)
**As you advance tiers**, your earnings grow significantly:
- **Advanced Tier:** Up to $24.75/month recurring per customer
- **Expert Tier:** Up to $29.70/month recurring per customer
Just **10 successful referrals in Expert Tier** = **$2,970/month recurring income**
## Ready to Start Earning?
Join hundreds of affiliates already earning recurring commissions by helping SaaS companies grow.
**[Apply Now →](https://affonso.io/affiliate/apply)**
_Questions? Reach out to our affiliate team - we're here to help you succeed._
---
## How to Reject a Self-Referral or Invalid Affiliate Sale
Block self-referrals and fraudulent activity by rejecting referrals and declining commissions to protect your affiliate program
Self-referrals occur when affiliates sign up as customers and make purchases through their own referral links, which violates most program terms. Affonso gives you complete control to identify, block, and manage these situations to protect your program integrity.
## How to Handle Self-Referrals
### Step 1: Reject the Referral
Rejecting the referral prevents all future purchases from that customer from being tracked as valid referrals.
1. Navigate to your [Referrals](https://affonso.io/app/referrals) dashboard
2. Find the suspicious referral in the list
3. Click the **"⋯"** dropdown on the right
4. Select **"Change Status"**
5. Choose **"Reject"** from the status options
6. Confirm the change
### Step 2: Decline the Commission
After rejecting the referral, you need to decline the associated sale to prevent commission payout.
1. Click on the rejected referral to open the details drawer
2. Scroll down to the **Sales table** section
3. Locate the sale linked to the referral
4. Click the **"⋯"** dropdown next to the sale
5. Select **"Change Status"**
6. Choose **"Declined"**
This removes the commission from your pending payouts and ensures the affiliate won't receive payment for the fraudulent sale.
### Step 3: Remove the Affiliate (Optional)
If the affiliate hasn't generated any legitimate referrals and you want to terminate the partnership completely:
1. Go to your [Affiliates](https://affonso.io/app/affiliates) dashboard
2. Find the affiliate in the list
3. Click the **"⋯"** dropdown
4. Choose **"Reject Partnership"**
5. Confirm the action
This permanently ends the partnership and prevents any future tracking or rewards through their referral link.
## What Happens When You Reject a Self-Referral
When you reject a referral, the status changes to REJECTED in your dashboard. All future purchases from that customer will be automatically blocked from generating commissions. The declined commission is removed from pending payouts and won't be included in any future payment calculations.
If you remove the affiliate entirely, their referral link becomes inactive and any visitor using it will not be tracked or attributed to your program.
## Best Practices for Preventing Self-Referrals
Monitor new referrals regularly, especially from newly joined affiliates, to catch suspicious activity early. Look for matching email addresses, IP addresses, or similar customer information between the affiliate and referred customer. Set clear program terms that explicitly prohibit self-referrals and communicate these rules during affiliate onboarding.
Consider implementing a manual approval process for high-value sales or new affiliates until they establish a track record of legitimate referrals. Use the [referral dashboard](https://affonso.io/app/referrals) filters to quickly identify patterns that might indicate abuse.
---
**Need help managing fraudulent referrals?** Contact support for guidance on protecting your affiliate program from abuse.
---
## Self-billing invoices for affiliate payouts
Auto-generate compliant payout invoices on behalf of your affiliates. Plan requirements, configuration, and format limits.
Self-billing lets Affonso issue invoices on behalf of your affiliates automatically each payout cycle, so neither you nor your affiliates have to do it manually.
## Plan requirement
Self-billing is available on the **Elite plan**. Below Elite, your invoices section will be empty and you have three alternatives:
- request invoices from each affiliate before processing payouts,
- issue credit notes yourself, or
- automate via the [REST API](/help/connect/api) plus a workflow tool such as Zapier, Make, or n8n.
## Configuration
1. Open [Payment Terms](https://affonso.io/app/affiliate-program/payment-terms).
2. Enable invoice generation.
3. Configure the issuer details, address, and tax handling.
## Country support
## See also
- [How Managed Payouts work](/help/faq/managed-payouts-explained) — Managed Payouts use a different flow where Affonso invoices you instead.
---
## Setting the commission hold (pending) period
How long a commission stays pending before approval, how to set it per incentive, and how it interacts with refunds.
The hold period (also called the pending period) is the number of days a commission stays **Pending** before it becomes **Approved** and eligible for payout. It exists so that refunds and chargebacks during that window automatically reduce or void the commission before money goes out.
## Where to set it
The hold period is set **per incentive**, not at program level.
1. Open [Groups & Rewards](https://affonso.io/app/groups).
2. Open the group whose incentive you want to configure.
3. Open the **Incentives** tab → click the incentive.
4. Set **Hold period** in days.
You can have different hold periods on different incentives — for example, longer hold on one-time products with a generous refund policy, shorter hold on monthly subscriptions.
## Choosing a value
A common formula is **trial length + refund window**. For instance, a 7-day free trial plus a 30-day refund policy → 37 days. This guarantees the customer is past the refund window before the affiliate's commission is approved.
## Refunds during the hold period
If the customer refunds while the commission is pending, the commission is automatically adjusted to $0 (or pro-rated for partial refunds). The rate locked at commission generation does not re-evaluate when the refund happens.
## See also
- [How rate changes affect existing referrals](/help/faq/how-rate-changes-affect-existing-referrals)
- [How Managed Payouts work](/help/faq/managed-payouts-explained)
---
## Skipping the free trial
How to end the 14-day free trial early and move directly to a paid plan.
New Affonso accounts include a 14-day free trial. The trial is optional — if you'd rather start paying immediately, contact support (in-app chat or `hello@affonso.io`) and we'll end the trial so you can subscribe right away.
---
## Stripe test mode and Affonso tracking
Affonso only tracks Stripe live-mode payments. How to test end-to-end without charging real cards.
Affonso processes Stripe webhooks only from **live mode**. Purchases made in Stripe test mode are intentionally ignored — they will never appear as referrals in Affonso.
## How to test end-to-end
Run the test in **live mode** and use a **100% off coupon** so no money is actually charged. This exercises the exact same flow as a real customer:
- The cookie is set in the browser.
- The cookie value is passed into the Checkout Session metadata.
- Stripe fires the live-mode webhook to Affonso.
- The referral and commission show up in the dashboard.
## Why test mode isn't tracked
Test-mode events can be generated freely against Stripe's test API. If Affonso accepted them, anyone could fabricate referrals and inflate commission totals. Limiting to live mode protects program integrity.
## See also
- [Debugging Stripe tracking](/help/faq/debug-stripe-tracking)
- [Tracking debug checklist](/help/faq/troubleshooting-tracking)
---
## How do I track leads, trials, and product conversions with the Events API?
Example payloads for sending lead, trial, milestone, and product-specific conversion events through POST /v1/events.
Use `POST /v1/events` when your backend wants one endpoint for both revenue and
non-revenue affiliate events.
Common patterns:
- `lead` for signup or qualified lead events
- `trial` for non-revenue trial starts
- `milestone` for lifecycle steps such as onboarding, KYC, or activation
- `conversion` for paid purchases and product-specific incentive matching
## Lead example
```json
{
"event_name": "signup_completed",
"event_type": "lead",
"referral_id": "ref_123",
"external_user_id": "usr_104982",
"external_event_id": "evt_signup_001"
}
```
## Trial example
```json
{
"event_name": "trial_started",
"event_type": "trial",
"external_user_id": "usr_104982",
"external_event_id": "evt_trial_001"
}
```
## Product-specific conversion example
```json
{
"event_name": "invoice_paid",
"event_type": "conversion",
"customer_id": "cus_R8d92kLm3pQx71",
"external_event_id": "evt_conversion_001",
"sale_amount": 2000,
"sale_amount_currency": "USD",
"product_ids": ["downstream"]
}
```
## Milestone example
```json
{
"event_name": "kyc_passed",
"event_type": "milestone",
"external_user_id": "usr_104982",
"external_event_id": "evt_kyc_001"
}
```
Use `trial` only for non-revenue trial starts. If revenue happened, or if you
need product-specific incentive matching, send the event as `conversion` and
include `product_ids` or `price_ids`.
For the full setup guide, see
[Server-Side Event Tracking](/help/installation-guides/overview/server-side-event-tracking).
For the exact request schema, see
[Create Event API docs](https://docs.affonso.io/api/endpoint/events/create).
---
## Default tracking parameter vs. enabled parameters
How Affonso handles multiple referral parameters (ref, via, aff, atp) and what "default" means in your settings.
Affonso supports several referral parameter styles — `ref`, `via`, `aff`, `atp`, and others. In your program settings you choose one as the **default** and can enable or disable each individually.
## What "default" means
The default is the parameter Affonso uses when it generates new affiliate links shown in the portal. It does **not** disable the other parameters — every enabled parameter still tracks correctly if it appears in an incoming URL.
If you want affiliates to only use a single parameter (e.g. `aff`), disable the others under [Tracking & Coupons → Referral Parameters](https://affonso.io/app/affiliate-program/tracking-and-coupons).
## Functional differences
There are none. `ref`, `via`, `aff`, `atp` all track identically. The choice is cosmetic and lets you match the convention your marketing team or community is used to.
---
## Moving an affiliate between two of your programs
Affonso doesn't have a one-click transfer. The supported workaround using manual attribution.
Affonso supports running multiple programs under one account, but there is no one-click "move affiliate from program A to program B" action. The supported workaround uses manual attribution.
## Steps
1. Invite or add the affiliate to the target program.
2. Use [Manual Referral Attribution](/help/managing-affiliates/manual-referral-attribution) to add their existing customers to the new program.
3. Remove or suspend the affiliate in the source program (suspending preserves historical data).
Future renewals will continue tracking under the new program as long as the customer's payment-provider email stays the same.
---
## Tracking debug checklist
Step-by-step diagnostic when affiliate clicks come in but referrals or commissions don't.
Affonso tracking works in two stages: a browser-side cookie set by the pixel script, and a server-side metadata field forwarded into your payment provider. This checklist walks through each stage so you can pinpoint where attribution is failing.
## 1. The pixel script is installed on the live site
View source on your live site and search for `affonso`. The pixel `
```
**Configuration:**
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
- Using Google Tag Manager? If you manage your scripts through GTM, [follow our GTM integration guide](/help/installation-guides/tag-managers/google-tag-manager-integration) instead.
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent="true"` to the script above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
> **🛡️ Want more reliable delivery when ad blockers or privacy tools are present?** Keep the hosted setup as the default, but use [Proxy Setup (Optional)](/help/getting-started/proxy-setup-optional) if you want to serve the pixel or embedded dashboard through your own domain.
### Installation Guides
Choose your framework or platform for detailed installation instructions:
#### Frameworks & Libraries
**Don't see your platform?** Affonso works with any website that runs JavaScript. Need help? [Email us at hello@affonso.io](mailto:hello@affonso.io)
### Track User Signups (Optional but Recommended)
While this step is optional, we **strongly recommend** implementing signup tracking for better insights and affiliate management.
### Implementation
Add this code after your user registration logic:
```javascript
// Simple: pass the user's email
window.Affonso.signup(userEmail);
// Advanced: pass an options object
window.Affonso.signup({
email: 'user@email.com', // optional
externalUserId: 'user_123', // optional
name: 'John Doe' // optional
});
```
At least one of `email` or `externalUserId` is required when using the object format. Use `externalUserId` to track users by your internal user ID instead of (or in addition to) their email address.
**Why track signups?**
- See which affiliates drive the most registrations
- Calculate conversion rates from clicks to signups
- Optimize your funnel based on affiliate performance
[**📖 Learn more about signup tracking →**](/help/installation-guides/overview/signup-tracking)
### Connect Your Payment Provider
[Connect your payment provider](/help/getting-started/connect-payment-provider) to automatically track purchases and calculate commissions.
---
## Next Steps
Once your basic setup is complete, take your affiliate program to the next level:
- Testing Your Integration
- Custom Branding
- Go-live checklist
- Invite Affiliates
- Upload Marketing Materials
- Create Affiliate Discovery Agent
- Affiliate Program Best Practices
---
**Need help?** [Contact our support team](mailto:hello@affonso.io) - we typically respond within 2 hours during business hours.
---
## Payment Provider Guide
Learn how to pass affiliate tracking data to your payment provider for accurate commission calculation.
After [connecting your payment provider](/help/getting-started/connect-payment-provider), you need to pass affiliate tracking data from your application to your payment system. This ensures that when customers make purchases, Affonso can properly attribute commissions to the right affiliates.
## Choose Your Payment Provider
## Need Help?
Don't see your payment provider or integration method? [Contact us at hello@affonso.io](mailto:hello@affonso.io) and we'll help you set it up.
---
## Proxy Setup
Proxy the pixel or embedded dashboard through your own domain to improve tracking accuracy and reduce losses from ad blockers and privacy tools.
# Proxy Setup
Roughly 30% of internet users use ad blockers, and privacy tools are common.
They can block third-party scripts and requests before Affonso ever gets the
chance to track the click, signup, or embed view.
Proxy setup improves accuracy by serving Affonso through your own domain instead
of directly from Affonso-hosted domains.
If you proxy tracking requests, make sure Affonso still receives a trusted real
client IP header such as `CF-Connecting-IP`, `True-Client-IP`, or `X-Real-IP`.
Otherwise attribution can still work while country data is wrong or missing.
## What Proxy Setup Changes
Instead of loading Affonso directly from:
- `cdn.affonso.io` for the pixel
- `api.affonso.io` for tracking requests
- `affonso.io` for the embedded dashboard
you proxy only the routes you need through your own domain, for example under
`/r`.
## Choose What You Need
You usually need one of these:
- **Pixel tracking proxy** if you want the tracking script, click tracking, and
signup tracking to stay on your own domain.
- **Embedded dashboard proxy** if you want the referral iframe to load through
your own domain.
If you use both, you can keep them under the same prefix.
## Guides
- [Proxy Setup Guide](/help/installation-guides/proxy-setup/get-started)
- [Proxy Pixel Tracking Through Your Own Domain](/help/installation-guides/proxy-setup/pixel-tracking-proxy)
- [Proxy the Embedded Dashboard Through Your Own Domain](/help/installation-guides/proxy-setup/embedded-dashboard-proxy)
---
## Bolt.new Integration
Learn how to integrate Affonso affiliate tracking into applications generated by Bolt.new.
Bolt.new is an AI-powered web development tool that generates complete applications from text prompts. To add Affonso tracking to your existing project, use the interactive system below.
## Choose Your Integration Method
Select your payment provider, then choose your integration method to copy the AI prompt:
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-buy-button.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Buy Button
Embedded purchase buttons
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-pricing-tables.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Pricing Tables
Subscription pricing tables
### Polar Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
### Paddle Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/references/paddle-billing-checkout.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Billing Checkout
Paddle Billing checkout
### Dodo Payments Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
API-based checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Shareable payment URLs
### Creem Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Programmatic checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Bolt.new.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Simple payment links
## How to Use
1. **Select your payment provider** by clicking on the logo above
2. **Choose your integration method** by clicking on the method image
3. **Complete AI prompt is automatically copied** to your clipboard
4. **Paste directly in Bolt.new** - no additional editing needed!
5. **Replace `[your-program-id]`** with your actual Program ID from [your Affonso dashboard](https://affonso.io/app/affiliate-program/connect)
---
## Cursor Integration
Learn how to integrate Affonso affiliate tracking into applications built with Cursor AI code editor.
Cursor is an AI-powered code editor that helps you build applications faster. To add Affonso tracking to your existing Cursor project, use the interactive system below.
## Choose Your Integration Method
Select your payment provider, then choose your integration method to copy the AI prompt:
## How to Use
1. **Select your payment provider** by clicking on the logo above
2. **Choose your integration method** by clicking on the method image
3. **Cursor will open automatically** with the prompt ready to use
4. **Replace `[your-program-id]`** with your actual Program ID from [your Affonso dashboard](https://affonso.io/app/affiliate-program/connect)
---
## Lovable Integration
Learn how to integrate Affonso affiliate tracking into applications generated by Lovable.
Lovable generates full-stack web applications with modern frameworks. To add Affonso tracking to your existing Lovable project, use the interactive system below.
## Choose Your Integration Method
Select your payment provider, then choose your integration method to copy the AI prompt:
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-buy-button.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Buy Button
Embedded purchase buttons
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-pricing-tables.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Pricing Tables
Subscription pricing tables
### Polar Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
### Paddle Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/references/paddle-billing-checkout.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Billing Checkout
Paddle Billing checkout
### Dodo Payments Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
API-based checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Shareable payment URLs
### Creem Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Programmatic checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Lovable.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Simple payment links
## How to Use
1. **Select your payment provider** by clicking on the logo above
2. **Choose your integration method** by clicking on the method image
3. **Complete AI prompt is automatically copied** to your clipboard
4. **Paste directly in Lovable** - no additional editing needed!
5. **Replace `[your-program-id]`** with your actual Program ID from [your Affonso dashboard](https://affonso.io/app/affiliate-program/connect)
---
## Replit Integration
Learn how to integrate Affonso affiliate tracking into applications built and deployed on Replit.
Replit allows you to build and deploy web applications directly in the browser using various frameworks and languages. To add Affonso tracking to your existing Replit project, use the interactive system below.
## Choose Your Integration Method
Select your payment provider, then choose your integration method to copy the AI prompt:
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-buy-button.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Buy Button
Embedded purchase buttons
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-pricing-tables.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Pricing Tables
Subscription pricing tables
### Polar Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
### Paddle Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/references/paddle-billing-checkout.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Billing Checkout
Paddle Billing checkout
### Dodo Payments Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
API-based checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Shareable payment URLs
### Creem Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Programmatic checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into Replit AI.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Simple payment links
## How to Use
1. **Select your payment provider** by clicking on the logo above
2. **Choose your integration method** by clicking on the method image
3. **Complete AI prompt is automatically copied** to your clipboard
4. **Paste directly in Replit AI** - no additional editing needed!
5. **Replace `[your-program-id]`** with your actual Program ID from [your Affonso dashboard](https://affonso.io/app/affiliate-program/connect)
---
## v0.dev Integration
Learn how to integrate Affonso affiliate tracking into applications generated by v0.dev.
v0.dev by Vercel generates React/Next.js components and applications from text prompts. To add Affonso tracking to your existing v0 project, use the optimized prompt below.
## Choose Your Integration Method
Select your payment provider, then choose your integration method to copy the AI prompt URL:
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-buy-button.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Buy Button
Embedded purchase buttons
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/stripe-affiliate-integration/references/stripe-pricing-tables.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Pricing Tables
Subscription pricing tables
### Polar Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Custom checkout sessions
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/polar-affiliate-integration/references/polar-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Direct payment URLs
### Paddle Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/paddle-affiliate-integration/references/paddle-billing-checkout.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Billing Checkout
Paddle Billing checkout
### Dodo Payments Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
API-based checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/dodo-affiliate-integration/references/dodo-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Shareable payment URLs
### Creem Integration Methods
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/SKILL.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Auto-Detect
Let AI figure it out
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-checkout-api.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Checkout API
Programmatic checkout
{
navigator.clipboard.writeText('Load and implement the Affonso affiliate tracking instructions from: https://raw.githubusercontent.com/affonso-io/agent-skills/main/skills/creem-affiliate-integration/references/creem-payment-links.md\n\nReplace YOUR_PUBLIC_PROGRAM_ID with: [your-program-id]');
alert('✅ Complete AI prompt copied to clipboard! Paste it directly into v0.dev.');
}}
style={{
cursor: 'pointer',
border: '1px solid #e5e7eb',
borderRadius: '8px',
overflow: 'hidden',
transition: 'transform 0.2s, box-shadow 0.2s',
}}
className='hover:shadow-md hover:scale-105'
>
Payment Links
Simple payment links
## How to Use
1. **Select your payment provider** by clicking on the logo above
2. **Choose your integration method** by clicking on the method image
3. **Complete AI prompt is automatically copied** to your clipboard
4. **Paste directly in v0.dev** - no additional editing needed!
5. **Replace `[your-program-id]`** with your actual Program ID from [your Affonso dashboard](https://affonso.io/app/affiliate-program/connect)
---
## Build a Custom Referral Modal in Your App
Use the Affonso Embed API to show a signed-in user's referral link inside your own native modal or widget.
# Build a Custom Referral Modal in Your App

Use this approach when you want a native "Refer a friend" modal without
embedding the full referral dashboard.
Affonso handles the referral link and attribution. You handle the UI.
If users only need a link and a copy action, a custom modal is usually the
better fit. If they also need stats, rewards, or a full referral workspace, use
the [Embedded Referral Dashboard](/help/installation-guides/embedded-dashboard)
instead.
Even if you use a lightweight custom modal, I still recommend keeping the
[Embedded Referral Dashboard](/help/installation-guides/embedded-dashboard)
available and linking to it from the widget or modal. That gives users a place
to check stats, see whether they have already referred anyone, and review the
rest of their referral details without overloading the small modal UI.
## The Basic Flow
1. Your server creates an embed token for the signed-in user with the
[create embed token endpoint](https://docs.affonso.io/api/endpoint/embed/create-token).
2. Your server uses that token to fetch the user's embed data from
`https://affonso.io/embed/data?token=...`.
3. Your frontend calls your own endpoint and renders the response in any modal,
drawer, or card you want.
Keep token creation on the server. Never expose your Affonso API key in the
browser.
## Example Server Endpoint
You do not need special frontend integration code for the modal itself. A small
authenticated backend endpoint is enough:
```ts
// app/api/referral-modal/route.ts
export async function GET() {
const user = await getCurrentUser();
const tokenResponse = await fetch('https://api.affonso.io/v1/embed/token', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.AFFONSO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
programId: 'YOUR_PROGRAM_ID',
partner: {
email: user.email,
name: user.name,
},
externalUserId: user.id,
}),
});
const { data: tokenData } = await tokenResponse.json();
const embedResponse = await fetch(
`https://affonso.io/embed/data?token=${tokenData.publicToken}`,
{ cache: 'no-store' }
);
const { data: embedData } = await embedResponse.json();
return Response.json({
link: embedData.link,
portalUrl: embedData.portalUrl,
trackingId: embedData.affiliate.trackingId,
});
}
```
If you already proxy embed routes through your own domain, you can resolve the
same data through your proxied `embed/data` path instead.
## UI Ideas
Keep the modal small. A headline, one sentence about the reward, the referral
link, and a `Copy link` button are usually enough.
If you want design inspiration for your own modal or widget UI, this
[referral card on 21st.dev](https://21st.dev/@lavikatiyar/components/referral-card)
is a good starting point. I recommend adding a secondary link to the full
[Embedded Referral Dashboard](/help/installation-guides/embedded-dashboard) so
users can open their stats, payouts, and referral activity from the same flow.
## Next Steps
- [Embedded Referral Dashboard](/help/installation-guides/embedded-dashboard)
- [Proxy the Embedded Dashboard Through Your Own Domain](/help/installation-guides/proxy-setup/embedded-dashboard-proxy)
- [API Integration](/help/connect/api)
---
## Embedded Referral Dashboard
Show each signed-in user their referral link, stats, and rewards directly inside your product.
# Embedded Referral Dashboard
Use the embedded dashboard when you want users to manage referrals inside your
app instead of sending them to a separate portal.
It gives each user a referral link, performance stats, and reward details in a
single view.
If you only want a lightweight widget or modal for the link itself, see
[Build a Custom Referral Modal in Your App](/help/installation-guides/custom-referral-modal).
That pattern works well as an entry point, while the embedded dashboard remains
the better destination for stats, rewards, and referral activity.
## When to Use It
Choose the embedded dashboard if:
- referrals should happen inside your product
- users already have accounts in your app
- you want a lightweight referral experience without a separate affiliate login
Use the standard affiliate portal instead if you need a dedicated affiliate
workspace, a separate onboarding flow, or broader partner management features.
## What You Need
Before you embed it, make sure you have:
- an Affonso program configured
- a signed-in user in your app
- a server-side endpoint that creates embed tokens for that user
Never create embed tokens in frontend code and never expose your Affonso API
key in the browser.
## Step 1: Preview and Customize the Dashboard
In Affonso:
1. Open [**Affiliate Program → Appearance**](https://affonso.io/app/affiliate-program/appearance)
2. Switch to the [**Embed** tab](https://affonso.io/app/affiliate-program/appearance?tab=embed)
3. Adjust theme, language, and background
4. Copy the generated integration code as your starting point
## Step 2: Create the Embed Token on Your Server
Your backend should create an embed token for the current signed-in user and
return it to your frontend.
Treat the token like any other authenticated app resource:
- create it on the server
- scope it to the current user
- send it to the frontend only when you are ready to render the iframe
For the endpoint details, see the
[create embed token API reference](https://docs.affonso.io/api/endpoint/embed/create-token).
## Step 3: Render the Hosted Iframe
For the standard hosted setup, render the iframe like this:
```html
```
Replace `YOUR_EMBED_TOKEN` with the token your server generated for the current
user.
## Step 4: Switch to First-Party Mode If Blockers Interfere
For more reliable iframe delivery when ad blockers or privacy tools are
present, proxy the embed route through your own domain.
Example using the prefix `/r`:
```html
```
That setup is covered in
[Proxy the Embedded Dashboard Through Your Own Domain](/help/installation-guides/proxy-setup/embedded-dashboard-proxy).
## What Your Users See
The embedded dashboard can show:
- their personal referral link
- performance stats such as clicks, signups, and sales
- rewards or earnings based on your program configuration
## Verify the Integration
1. Sign in as a real or test user in your app
2. Load the page that contains the iframe
3. Confirm the iframe renders without console or network errors
4. Confirm the user sees their own referral data, not another user's
5. If you use first-party mode, confirm the iframe URL starts with your domain
## Troubleshooting
### The iframe is blank or blocked
- Check the iframe `src`
- Verify the token is valid and generated on the server
- Inspect browser DevTools for CSP, blocker, or proxy errors
- If blockers affect the hosted URL, switch to the first-party proxy setup
### The wrong user data appears
- Confirm you create the embed token for the currently signed-in user
- Make sure cached tokens are not reused across users
## Next Steps
- [Proxy the Embedded Dashboard Through Your Own Domain](/help/installation-guides/proxy-setup/embedded-dashboard-proxy)
- [How Affiliate Tracking Works](/help/installation-guides/overview/how-affiliate-tracking-works)
- [Full embedded dashboard API guide](https://docs.affonso.io/api/embedded-dashboard)
---
## Astro Integration
Learn how to integrate Affonso affiliate tracking into your Astro application.
Astro's component-based architecture and island-first approach make it ideal for adding tracking scripts through layout components that work efficiently with static generation and partial hydration.
## Add tracking script to your Astro app
Astro's recommended approach is to create a layout component that includes your tracking script, which can then be reused across all your pages for consistent tracking.
1. Create or open your main layout at `src/layouts/Layout.astro`
2. Add the tracking script in the `` section
3. Use this layout across your pages:
```astro
---
export interface Props {
title: string;
}
const { title } = Astro.props;
---
{title}
```
**Configuration:**
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent='true'` to the Script component above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
**Alternative:** Use [Astro's environment variables](https://docs.astro.build/en/guides/environment-variables/) with the `PUBLIC_` prefix to manage your Program ID dynamically.
## Testing
1. Start your Astro dev server: `npm run dev`
2. Visit `localhost:4321?atp=test` (or your configured port)
3. Check browser DevTools → **Console** → type `window.affonso_referral`
4. Build and deploy: `npm run build`
5. Verify tracking in your Affonso dashboard
**Note:** Astro's island architecture means client scripts run after page load, which works well with Affonso's deferred loading.
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## Django Integration
Learn how to integrate Affonso affiliate tracking into your Django application.
Django's template inheritance system makes it easy to add tracking scripts globally across your entire application using a base template that all pages extend.
## Add tracking script to your Django app
Django's recommended approach is to add the tracking script to your base template, which serves as the foundation for all other templates in your application.
1. Open or create your base template at `templates/base.html`
2. Add the tracking script in the `` section
3. Ensure all your page templates extend this base template:
```html
{% block title %}Your Site{% endblock %}
{% block content %} {% endblock %}
```
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent='true'` to the Script component above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
**Alternative:** Store your Program ID in [`settings.py`](https://docs.djangoproject.com/en/stable/topics/settings/) and reference it in your template using `{{ settings.AFFONSO_PROGRAM_ID }}`.
## Testing
1. Start your Django server: `python manage.py runserver`
2. Visit `localhost:8000?atp=test`
3. Check browser DevTools → **Application** → **Cookies** → `affonso_referral`
4. Deploy and verify tracking in your Affonso dashboard
**Note:** Make sure your `ALLOWED_HOSTS` includes your domain when deployed.
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## Laravel Integration
Learn how to integrate Affonso affiliate tracking into your Laravel application.
# Laravel Integration
Laravel's Blade templating system combined with environment configuration provides a clean and maintainable way to add tracking scripts across your entire application.
## Add tracking script to your Laravel app
Laravel's best practice is to add the tracking script to your main layout template and configure your Program ID through environment variables for better security and flexibility.
1. Open your main layout file at `resources/views/layouts/app.blade.php`
2. Add the tracking script in the `` section
3. Configure your Program ID in your environment file:
```html
@yield('title', config('app.name'))@yield('content')
```
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent='true'` to the Script component above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
[Find your Program ID →](https://affonso.io/app/affiliate-program)
Create a configuration file at `config/affonso.php` and add your credentials to your `.env` file following [Laravel's configuration conventions](https://laravel.com/docs/configuration).
## Testing
1. Start your Laravel server: `php artisan serve`
2. Visit `localhost:8000?atp=test`
3. Check browser DevTools → **Application** → **Cookies** → `affonso_referral`
4. Deploy and verify tracking in your Affonso dashboard
**Note:** Ensure your session configuration allows cross-domain cookies if using subdomains.
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## Next.js Integration
Learn how to integrate Affonso affiliate tracking into your Next.js application using App Router.
Next.js provides built-in Script optimization that makes it easy to add tracking scripts with optimal loading performance.
## Add tracking script to your root layout
Next.js App Router allows you to add scripts globally through the root layout component for consistent tracking across all pages.
1. Open your root layout file at `app/layout.tsx` (or `app/layout.jsx`)
2. Import the [Script component](https://nextjs.org/docs/app/api-reference/components/script) from `next/script`
3. In the `` section, add your Affonso tracking script:
```tsx
import Script from 'next/script';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
{children}
);
}
```
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent='true'` to the Script component above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
## Testing
1. Start your development server: `npm run dev`
2. Visit `localhost:3000?atp=test`
3. Check browser DevTools → **Application** → **Cookies** → `affonso_referral`
4. Deploy and verify tracking in your Affonso dashboard
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## Nuxt.js Integration
Learn how to integrate Affonso affiliate tracking into your Nuxt.js application.
# Nuxt.js Integration
Nuxt.js provides multiple ways to add tracking scripts that work seamlessly with server-side rendering, static generation, and client-side hydration.
## Add tracking script to your Nuxt app
The recommended approach is to create an `app.html` file in your root directory, which gives you full control over the HTML template that wraps your Nuxt application.
1. Create an `app.html` file in your project root directory
2. Copy the default Nuxt HTML template
3. Add your Affonso tracking script in the `` section:
```html
{{ HEAD }}
{{ APP }}
```
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `data-requires-consent='true'` to the Script component above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
**Alternative:** Configure the script via [`nuxt.config.ts`](https://nuxt.com/docs/api/nuxt-config#head) in the `app.head.script` array or create a client-side plugin.
## Testing
1. Start your development server: `npm run dev`
2. Visit `localhost:3000?atp=test`
3. Check browser DevTools → **Console** → type `window.affonso_referral`
4. Deploy and verify tracking in your Affonso dashboard
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## React Integration
Learn how to integrate Affonso affiliate tracking into your React application with React Router.
React provides flexible ways to add tracking scripts, either through the useEffect hook for dynamic loading or directly in your HTML template for immediate loading.
## Add tracking script to your React app
The recommended approach is to add the script dynamically in your root component using React's useEffect hook for proper cleanup and lifecycle management.
1. Open your root component file, typically `src/App.jsx`
2. Import `useEffect` from React
3. Add the script loading logic inside useEffect:
```jsx
import { useEffect } from 'react';
function App() {
useEffect(() => {
const script = document.createElement('script');
script.async = true;
script.defer = true;
script.setAttribute('data-affonso', 'YOUR_PUBLIC_PROGRAM_ID');
script.setAttribute('data-cookie_duration', 'YOUR_COOKIE_DURATION');
script.src = 'https://cdn.affonso.io/js/pixel.min.js';
document.head.appendChild(script);
return () => {
// Cleanup on unmount
if (document.head.contains(script)) {
document.head.removeChild(script);
}
};
}, []);
return
{/* Your components */}
;
}
export default App;
```
- Replace `YOUR_PUBLIC_PROGRAM_ID` with your program ID from the [Affonso dashboard](https://affonso.io/app/affiliate-program)
- Set `YOUR_COOKIE_DURATION` to how many days the tracking should persist
> **🍪 Need GDPR/Cookie Consent compliance?** Add `script.setAttribute('data-requires-consent', 'true');` to the script creation above and [follow our GDPR integration guide](/help/installation-guides/overview/gdpr-cookie-consent-integration) for privacy-first tracking.
**Alternative:** Add the script directly to your `public/index.html` file in the `` section for immediate loading.
## Testing
1. Start your development server: `npm start`
2. Visit `localhost:3000?atp=test`
3. Check browser DevTools → **Console** → type `window.affonso_referral`
4. Deploy and verify tracking in your Affonso dashboard
## Next Steps
Once installed, you can access affiliate referral data and pass it to your payment provider. [Connect your payment provider →](/help/getting-started/payment-provider-guide)
---
## Svelte/SvelteKit Integration
Learn how to integrate Affonso affiliate tracking into your Svelte or SvelteKit application.
Svelte and SvelteKit offer flexible ways to add tracking scripts, with SvelteKit providing an HTML template approach and regular Svelte using component lifecycle hooks.
## Add tracking script to your Svelte app
For SvelteKit, the recommended approach is to modify your `app.html` template to include the tracking script globally across all routes.
1. Open `src/app.html` in your project
2. Add the tracking script in the `` section
3. Make sure it's before the `%sveltekit.head%` placeholder:
```html
%sveltekit.head%