CLI Quickstart
Set up your affiliate program in 3 commands with npx affitor.
Get your affiliate program running in under 5 minutes -- program creation, Stripe webhooks, and live tracking all from your terminal.
Prefer a UI? Use the dashboard quickstart instead.
Why CLI?
| Dashboard | CLI | |
|---|---|---|
| Setup time | ~15 minutes | ~5 minutes |
| Stripe webhooks | Manual (11 steps) | Automatic (1 command) |
| AI agent compatible | No | Yes (--json mode) |
| Config files generated | No | Yes (.affitor/) |
Step 1 -- Create Your Program
Run npx affitor init and follow the prompts:
npx affitor initYou'll be asked for:
- Program name -- your product or company name
- Domain -- your root domain (e.g.,
example.com) - Commission type -- percentage, fixed, or recurring
- Commission rate -- default is 40% for recurring
- Duration -- how long recurring commissions last (default: 12 months)
- Cookie window -- attribution window in days (default: 90)
After confirming, the CLI creates your program and generates:
.affitor/
AGENTS.md -- AI agent instructions (primary, universal standard)
config.json -- program ID, settings
.env -- API key and secrets (gitignored)
.env.example -- env template for teammates and CI
skills.md -- tracking code snippets (backward-compat)AGENTS.md follows the open standard supported by Claude Code, Cursor, GitHub Copilot, Windsurf, Aider, and 16+ AI tools. Your AI assistant reads it and integrates Affitor tracking into your codebase automatically.
Step 2 -- Add Click Tracking
Paste the script tag from the CLI output into your site's <head>:
<script src="https://api.affitor.com/js/affitor-tracker.js"
data-affitor-program-id="YOUR_PROGRAM_ID">
</script>Replace YOUR_PROGRAM_ID with the program ID from step 1.
The script auto-detects ?aff=PARTNER_CODE in URLs and stores a first-party cookie for attribution (90-day window by default, set in your program).
Step 3 -- Track Signups
Call signup() when a user registers:
window.affitor.signup("user_123", "user@example.com");On new programs the browser call alone is provisional; the server call settles the lead.
Step 4 -- Track Payments
Choose your payment tracking method: Server-side tracking vs Stripe integration.
Option A: Stripe integration (automatic)
Connect Stripe in the Affitor dashboard: open the program, go to Settings, and use Connect Stripe. Affitor's own webhook then records sales, renewals and refunds. Add Affitor metadata to your Checkout Session so each sale is attributed; see the Stripe integration guide. The CLI does not connect Stripe (affitor setup stripe only points you to the dashboard).
Option B: Server-side tracking — your backend calls POST /api/v1/track/sale (any payment provider)
curl -X POST https://api.affitor.com/api/v1/track/sale \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"customer_key": "user_123", "amount_cents": 4900, "currency": "USD"}'Step 5 -- Test Your Integration
Send test events to verify your integration:
npx affitor test click
npx affitor test lead
npx affitor test saleThen check your program health:
npx affitor statusNon-Interactive Mode
For CI/CD and AI agents, pass --no-interactive --json to skip prompts and get machine-readable output:
npx affitor init \
--name "My SaaS" \
--domain example.com \
--commission-type recurring_percent \
--commission-rate 30 \
--duration-months 12 \
--cookie-duration 90 \
--no-interactive \
--jsonThe commission flags are saved on the program, but partners are paid by the program's Default group commission: set it in the dashboard after init (see CLI commands).
Output is valid JSON, ready for AI agents to parse:
{
"program_id": 430,
"api_key": "aff_...",
"domain": "example.com",
"status": "created",
"tracking": {
"script_tag": "<script src=\"...\"></script>",
"signup_call": "window.affitor.signup(\"customer_id\", \"email\")",
"sale_api": "POST https://api.affitor.com/api/v1/track/sale",
"lead_api": "POST https://api.affitor.com/api/v1/track/lead"
}
}- Running
npx affitor initin a directory that already has.affitor/config.json-- delete it first or use a different directory. - Skipping the tracking script -- the CLI creates the program but does not modify your code.
- Using an expired API key -- re-run
npx affitor initto get a new one.