From 59b86e6e63ce3b72666b4372b930d3007fa4c4b9 Mon Sep 17 00:00:00 2001 From: sonpiaz Date: Sat, 17 Oct 2026 00:54:24 -0700 Subject: [PATCH 1/2] fix: brand docs menu paths for nav v2 (Program settings, Your account) Nav v2 replaced the program menu's All settings / Team with Program settings / Members, dropped the Personal group from settings, and moved personal settings to Your account in the profile menu. Update every brand page that pointed at the old menu, the partner Integrations path on the MCP page, the list_my_payouts note (Wise, not PayPal), the read-only sign-in email in the FAQ, and the fee-free tier refund rule (cms#384: refunds lower the counted revenue, capped at what the sale added). Co-Authored-By: Claude Opus 5.5 (1M context) --- content/docs/api-reference/errors.mdx | 6 +++--- .../docs/api-reference/integrations/fastify.mdx | 4 ++-- .../api-reference/integrations/nextjs-clerk.mdx | 4 ++-- .../integrations/nextjs-nextauth.mdx | 4 ++-- .../integrations/nextjs-supabase.mdx | 4 ++-- .../docs/api-reference/integrations/nextjs.mdx | 4 ++-- .../api-reference/integrations/node-express.mdx | 4 ++-- content/docs/api-reference/integrations/polar.mdx | 4 ++-- .../docs/api-reference/integrations/stripe.mdx | 8 ++++---- content/docs/api-reference/mcp.mdx | 14 +++++++------- content/docs/api-reference/track-refund.mdx | 3 ++- content/docs/brand/api-keys.mdx | 6 +++--- content/docs/brand/cli/commands.mdx | 10 +++++----- content/docs/brand/cli/quickstart.mdx | 4 ++-- .../quickstart/commission-approval-cash-flow.mdx | 4 ++-- content/docs/brand/quickstart/setup-program.mdx | 8 ++++---- content/docs/brand/settings.mdx | 15 ++++++++------- .../brand/tracking/quickstart-integration.mdx | 4 ++-- content/docs/faq/index.mdx | 6 +++--- .../getting-started/pricing-performance-model.mdx | 4 ++-- content/docs/support/glossary.mdx | 4 ++-- 21 files changed, 63 insertions(+), 61 deletions(-) diff --git a/content/docs/api-reference/errors.mdx b/content/docs/api-reference/errors.mdx index bf02744..d3cbe75 100644 --- a/content/docs/api-reference/errors.mdx +++ b/content/docs/api-reference/errors.mdx @@ -2,7 +2,7 @@ title: Errors & Troubleshooting description: All API error codes, their causes, and how to fix common integration problems. kind: reference -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- > **Beta** — The Affitor SDKs and CLI are in active development. The documented happy-path works; edge cases may change. Report issues on GitHub. @@ -193,7 +193,7 @@ The JSON body also gains a `warnings` array. No existing field is removed or ren This body is the [typed envelope](#the-typed-envelope): no `data` key, and an `error.code` to branch on. -**Fix:** In your Affitor dashboard, go to **Settings** → **API keys** and regenerate the key, then update `AFFITOR_API_KEY` on your server with the new value. See [Rotate your API key](/docs/brand/settings#step-3-regenerate-the-key) for the full walkthrough. +**Fix:** In your Affitor dashboard, open the program menu and choose **Program settings**. Under **Developers** → **API keys**, regenerate the key, then update `AFFITOR_API_KEY` on your server with the new value. See [Rotate your API key](/docs/brand/settings#step-3-regenerate-the-key) for the full walkthrough. --- @@ -437,7 +437,7 @@ An expired session is not an error on `/auth/poll`: it answers `200` with `"data |----------|--------|---------------|---------|-----| | both | `401` | `Missing or malformed Authorization header. Expected: Bearer ` | The `Authorization` header is missing or does not start with `Bearer ` | Send `Authorization: Bearer YOUR_PROGRAM_API_KEY` | | both | `401` | `Missing API token` | The token is empty after `Bearer ` | Check for an empty env variable | -| both | `401` | `Invalid API key. To get a working key for the program you already have, ask a workspace owner of that program to open Affitor → Settings → API Key and click Regenerate, then replace the key you are sending with the new one.` | The key matches no program | Do as the message says. Running `affitor init` does not help: it creates a second program | +| both | `401` | `Invalid API key. To get a working key for the program you already have, ask a workspace owner of that program to open Affitor → Settings → API Key and click Regenerate, then replace the key you are sending with the new one.` | The key matches no program | Do as the message says: the key is under program menu → **Program settings**, then **Developers** → **API keys**. Running `affitor init` does not help: it creates a second program | | both | `401` | [`api_key_rotation_required`](#api_key_rotation_required) | The key is retired | Create a new key | | `GET /status` | `500` | `Failed to get status (request_id: )` | Status lookup failed on our side | Retry with backoff | | `POST /test-event` | `400` | `Invalid event_type: . Valid: click, lead, sale` | Single-event mode got a missing or unknown `event_type` | Send `click`, `lead` or `sale`, or `{"type": "chain"}` for the full chain | diff --git a/content/docs/api-reference/integrations/fastify.mdx b/content/docs/api-reference/integrations/fastify.mdx index fcecfee..55be4de 100644 --- a/content/docs/api-reference/integrations/fastify.mdx +++ b/content/docs/api-reference/integrations/fastify.mdx @@ -2,7 +2,7 @@ title: "Fastify" description: "Server-side Affitor integration with @affitor/sdk/server — track signups and sales from your Fastify backend, including a raw-body Stripe webhook." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide wires Affitor into a Fastify app. Because Fastify is a pure server runtime, the click is captured by a frontend script tag, then the `affitor_click_id` is forwarded to your server so all tracking calls — lead and sale — happen server-side with `@affitor/sdk/server`. The sale is tracked from your Stripe webhook handler, which needs the **raw request body** for signature verification. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls (dashboard → API keys) - `@affitor/sdk` and `stripe` installed in your backend diff --git a/content/docs/api-reference/integrations/nextjs-clerk.mdx b/content/docs/api-reference/integrations/nextjs-clerk.mdx index 91d74e0..1993d2c 100644 --- a/content/docs/api-reference/integrations/nextjs-clerk.mdx +++ b/content/docs/api-reference/integrations/nextjs-clerk.mdx @@ -2,7 +2,7 @@ title: "Next.js + Clerk" description: "Add Affitor tracking to a Next.js (App Router) app that uses Clerk for authentication." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide covers the auth-specific parts of an Affitor integration when your Next.js app uses Clerk. Steps 1 (capture the click) and 3 (track the sale) are identical to the [base Next.js guide](/docs/api-reference/integrations/nextjs) — this guide focuses on **Step 2: tracking the signup** with Clerk's identity model. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls (leads and sales) - A Next.js App Router app with **Clerk** configured diff --git a/content/docs/api-reference/integrations/nextjs-nextauth.mdx b/content/docs/api-reference/integrations/nextjs-nextauth.mdx index 7bd29e5..c344978 100644 --- a/content/docs/api-reference/integrations/nextjs-nextauth.mdx +++ b/content/docs/api-reference/integrations/nextjs-nextauth.mdx @@ -2,7 +2,7 @@ title: "Next.js + NextAuth" description: "Add Affitor lead tracking to a Next.js app using NextAuth (Auth.js) — handle the click-id cookie gap correctly." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide covers the signup step when your Next.js app uses **NextAuth (Auth.js)** for authentication. Steps 1 (capture click) and 3 (track sale) are identical to the [base Next.js guide](/docs/api-reference/integrations/nextjs) — this page focuses on what is different: wiring the lead call to NextAuth's auth lifecycle without losing the click attribution. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls - A Next.js App Router app with NextAuth (Auth.js) configured diff --git a/content/docs/api-reference/integrations/nextjs-supabase.mdx b/content/docs/api-reference/integrations/nextjs-supabase.mdx index cb52e09..362c0aa 100644 --- a/content/docs/api-reference/integrations/nextjs-supabase.mdx +++ b/content/docs/api-reference/integrations/nextjs-supabase.mdx @@ -2,7 +2,7 @@ title: "Next.js + Supabase Auth" description: "Add Affitor tracking to a Next.js app that uses Supabase Auth — clicks, signups, and sales." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide covers the Supabase-specific signup step. Steps 1 (capture the click) and 3 (track the sale) are identical to the [base Next.js guide](/docs/api-reference/integrations/nextjs) — refer there for full detail. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls (leads and sales) - A Next.js app with **Supabase Auth** configured diff --git a/content/docs/api-reference/integrations/nextjs.mdx b/content/docs/api-reference/integrations/nextjs.mdx index 639605e..fc25a70 100644 --- a/content/docs/api-reference/integrations/nextjs.mdx +++ b/content/docs/api-reference/integrations/nextjs.mdx @@ -2,7 +2,7 @@ title: "Next.js" description: "Add Affitor tracking to a Next.js (App Router) app — clicks, signups, and sales." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide wires Affitor into a Next.js App Router app with the three moves every integration needs: **capture the click**, **track the signup**, **track the sale**. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls (leads and sales) - A Next.js app on the **App Router** diff --git a/content/docs/api-reference/integrations/node-express.mdx b/content/docs/api-reference/integrations/node-express.mdx index 562f689..876bd1a 100644 --- a/content/docs/api-reference/integrations/node-express.mdx +++ b/content/docs/api-reference/integrations/node-express.mdx @@ -2,7 +2,7 @@ title: "Node / Express" description: "Server-side Affitor integration with @affitor/sdk/server — track signups and sales from your Express backend." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide wires Affitor into a Node.js / Express app. Because Express is a pure server runtime, the click is captured by a frontend script tag, then the `affitor_click_id` is forwarded to your server so all tracking calls — lead and sale — happen server-side with `@affitor/sdk/server`. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) +- Your **program ID** (program menu → **Program settings** → **Business**) - A **program API key** for server-side calls (dashboard → API keys) - `@affitor/sdk` installed in your backend diff --git a/content/docs/api-reference/integrations/polar.mdx b/content/docs/api-reference/integrations/polar.mdx index 20b8924..ae4a18f 100644 --- a/content/docs/api-reference/integrations/polar.mdx +++ b/content/docs/api-reference/integrations/polar.mdx @@ -2,7 +2,7 @@ title: "Polar" description: "Canonical recipe for attributing Polar payments to Affitor partners — one-time, subscriptions, renewals, and refunds. No Stripe account needed." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide is the **canonical reference for the Polar sale path**. Polar is a merchant of record, so there is no Stripe account to connect — instead, your app hosts a small webhook route that reports every paid order to Affitor. @@ -15,7 +15,7 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** and a **program API key** (run `npx affitor init`, or **Settings** → **Program settings** → **Business** for the ID and **Developers** → **API keys** for the key) +- Your **program ID** and a **program API key** (run `npx affitor init`, or, in the program menu, **Program settings** → **Business** for the ID and **Developers** → **API keys** for the key) - A Polar organization with checkout working in your app - Access to your Polar organization's webhook settings. Sandbox is a separate environment with its own tokens and its own webhook endpoints (`sandbox-api.polar.sh`). diff --git a/content/docs/api-reference/integrations/stripe.mdx b/content/docs/api-reference/integrations/stripe.mdx index 1f8a2f3..2333a01 100644 --- a/content/docs/api-reference/integrations/stripe.mdx +++ b/content/docs/api-reference/integrations/stripe.mdx @@ -2,7 +2,7 @@ title: "Stripe" description: "Canonical recipe for attributing Stripe payments to Affitor partners — one-time and recurring." kind: guide -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- This guide is the **canonical reference for the Stripe sale path**. Other framework guides (Next.js, Express, etc.) link here for Step 3. If you need click capture or signup tracking first, start with the [Next.js guide](/docs/api-reference/integrations/nextjs) or the framework guide for your stack. @@ -15,10 +15,10 @@ The `@affitor/sdk` package is **Beta**. The documented happy-path works; report ## Prerequisites -- Your **program ID** (**Settings** → **Program settings** → **Business**) -- A **program API key** (dashboard → program settings → API keys) +- Your **program ID** (program menu → **Program settings** → **Business**) +- A **program API key** (program menu → **Program settings**, then **Developers** → **API keys**) - Stripe Checkout or Stripe Billing already working in your app -- Affitor receiving your Stripe webhooks (dashboard → program settings → Stripe connect) +- Affitor receiving your Stripe webhooks (program menu → **Program settings** → **Payments**, **Connect Stripe**) ## 1. Capture clicks and track signups diff --git a/content/docs/api-reference/mcp.mdx b/content/docs/api-reference/mcp.mdx index dc20aa2..a4eee9a 100644 --- a/content/docs/api-reference/mcp.mdx +++ b/content/docs/api-reference/mcp.mdx @@ -2,7 +2,7 @@ title: Affitor MCP server description: Connect Claude, ChatGPT, Cursor, VS Code, Perplexity, Claude Code, Codex and other AI apps to your Affitor program or partner account at https://mcp.affitor.com/mcp. Sign in with your Affitor account; access is read-only. kind: reference -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- The Affitor MCP server lets an AI app read your Affitor data: a brand's program, partners, applications, commissions and billing, or a partner's programs, links, earnings, commissions and payouts. It is a hosted [Model Context Protocol](https://modelcontextprotocol.io) server. You sign in with your Affitor account, no API key needed, and the connection is read-only: it cannot change data or move money. @@ -38,7 +38,7 @@ https://mcp.affitor.com/mcp ## Connect your AI app -In the Affitor dashboard, **Connect an AI tool** shows the server URL and steps for Claude, Cursor, Claude Code and Codex. Brands find it in **All settings** › **Developers** › **AI agents**, and on the program's **Tracking** step under **Your agent** › **Connect your AI**. Partners find it in **Settings** › **Integrations**. +In the Affitor dashboard, **Connect an AI tool** shows the server URL and steps for Claude, Cursor, Claude Code and Codex. Brands find it in the program menu under **Program settings**, then **Developers** › **AI agents**, and on the program's **Tracking** step under **Your agent** › **Connect your AI**. Partners find it in the **⋯** menu next to their name, at the bottom of the left menu, under **Integrations**. `. Lowercase letters, numbers and dashes, up to 48 characters. You can change it later | | **Program ID** | Shown, not edited | Used by the tracking script, the API and AI agents. **Copy** copies it | | **Logo** | No | PNG, JPG or SVG, square, under 5 MB | -| **Tagline** | No | In Settings only (**Program settings** → **Business**): one line on your marketplace card, up to 160 characters | +| **Tagline** | No | In **Program settings** → **Business** only: one line on your marketplace card, up to 160 characters | **Continue** saves only the fields you changed and moves on once every save succeeds; an error shows under its field. The step is done once the program has a business name and a website. @@ -191,7 +191,7 @@ Once live, the page says your program is live and shows its link with **Copy lin ## Verify it worked -Open **Settings** → **Program settings** and check that each page kept what you saved: +In the program menu, choose **Program settings** and check that each page kept what you saved: ``` -Replace `YOUR_PROGRAM_ID` with your program ID (**Settings** → **Program settings** → **Business** → **Program ID**, **Copy**). +Replace `YOUR_PROGRAM_ID` with your program ID (program menu → **Program settings** → **Business** → **Program ID**, **Copy**). ### What this does diff --git a/content/docs/faq/index.mdx b/content/docs/faq/index.mdx index 765bab8..4afb994 100644 --- a/content/docs/faq/index.mdx +++ b/content/docs/faq/index.mdx @@ -2,7 +2,7 @@ title: "Frequently Asked Questions" description: "Common questions about Affitor's pricing, tracking, commissions, and integration options." kind: faq -last_updated: 2026-10-14 +last_updated: 2026-10-17 --- Quick answers about Affitor's pricing, tracking, commissions, and payouts, with links to the full guides where you need more depth. @@ -27,7 +27,7 @@ Affitor differentiates on: ## Accounts ### Can I use a personal email address to sign up? -Yes, but a business email is recommended for team management — a shared address like `partnerships@yourcompany.com` keeps access simple as the team grows. You can update your email later in account settings. +Yes, but a business email is recommended for team management: a shared address like `partnerships@yourcompany.com` keeps access simple as the team grows. Your sign-in email is shown read-only in **Your account** → **Profile** (the **⋯** menu next to your name). ### Is there a cost to create an advertiser account? No. Creating an account is free. The platform fee is $0 until your program earns its first $10,000 through affiliates, then 3.5% on affiliate-driven sales only. @@ -107,7 +107,7 @@ At a high level: 5. the partner requests a withdrawal, and Affitor sends it ### What happens if there is a refund? -It depends on where the commission is. Before approval, the commission is removed before it reaches the partner. After approval, the amount is taken back from the partner's balance. If the commission was already collected, reconciling with the partner is a manual step and you get a dashboard notification. Platform fees already billed are not refunded, and refunds do not lower the revenue counted toward the $10,000 fee-free tier. See [commission approval and cash flow](/docs/brand/quickstart/commission-approval-cash-flow#refund-handling). +It depends on where the commission is. Before approval, the commission is removed before it reaches the partner. After approval, the amount is taken back from the partner's balance. If the commission was already collected, reconciling with the partner is a manual step and you get a dashboard notification. Platform fees already billed are not refunded, and a refund lowers the revenue counted toward the $10,000 fee-free tier by the refunded amount, never by more than that sale added. See [commission approval and cash flow](/docs/brand/quickstart/commission-approval-cash-flow#refund-handling). --- diff --git a/content/docs/getting-started/pricing-performance-model.mdx b/content/docs/getting-started/pricing-performance-model.mdx index 23825d5..c1525ee 100644 --- a/content/docs/getting-started/pricing-performance-model.mdx +++ b/content/docs/getting-started/pricing-performance-model.mdx @@ -2,7 +2,7 @@ title: "Pricing" description: "Affitor pricing: $0/month, $0 setup, 3.5% of partner-generated revenue — and each program's first $10,000 in affiliate-driven revenue is fee-free." kind: concept -last_updated: 2026-10-14 +last_updated: 2026-10-17 --- Affitor charges only when partners generate revenue — no subscription, no setup fee. @@ -48,7 +48,7 @@ Commissions wait out your program's hold period, then are approved and added to ## $10K guarantee -Each program's first $10,000 in affiliate-driven revenue is fee-free. The threshold is counted per program, so every program you run gets its own $10,000. Refunds do not lower the revenue counted toward it. +Each program's first $10,000 in affiliate-driven revenue is fee-free. The threshold is counted per program, so every program you run gets its own $10,000. A refund lowers the revenue counted toward it by the refunded amount, never by more than that sale added. Confirm your exact commercial terms with the Affitor team before launch. diff --git a/content/docs/support/glossary.mdx b/content/docs/support/glossary.mdx index 7afabe1..1aa3b80 100644 --- a/content/docs/support/glossary.mdx +++ b/content/docs/support/glossary.mdx @@ -2,7 +2,7 @@ title: Glossary description: Common terms used across Affitor docs — server-side tracking, Stripe integration, invoice billing, and more kind: reference -last_updated: 2026-10-16 +last_updated: 2026-10-17 --- ## A @@ -58,7 +58,7 @@ A pricing model where fees are tied to partner-generated revenue rather than a m Affitor's fee on partner-generated revenue: $0 until a program's affiliate-driven revenue reaches $10,000, then 3.5% of each affiliate-driven sale. The threshold is counted per program. ### Program ID -The identifier for your Affitor program. It is used in tracker setup, test flows, and Stripe metadata. Find it under **Settings** → **Program settings** → **Business**, where **Program ID** is shown with **Copy**. +The identifier for your Affitor program. It is used in tracker setup, test flows, and Stripe metadata. Find it in the program menu under **Program settings** → **Business**, where **Program ID** is shown with **Copy**. ## R From d53f1722da6b35f74ae9e3015be1c4237d3a061b Mon Sep 17 00:00:00 2001 From: sonpiaz Date: Sat, 17 Oct 2026 00:55:46 -0700 Subject: [PATCH 2/2] fix: keep the refund fee-tier wording out of this PR (held for review) Co-Authored-By: Claude Opus 5.5 (1M context) --- content/docs/api-reference/track-refund.mdx | 3 +-- .../docs/brand/quickstart/commission-approval-cash-flow.mdx | 4 ++-- content/docs/faq/index.mdx | 2 +- content/docs/getting-started/pricing-performance-model.mdx | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/content/docs/api-reference/track-refund.mdx b/content/docs/api-reference/track-refund.mdx index 674d109..e589574 100644 --- a/content/docs/api-reference/track-refund.mdx +++ b/content/docs/api-reference/track-refund.mdx @@ -2,7 +2,7 @@ title: Track Refund description: Reverse a commission when a sale is refunded kind: reference -last_updated: 2026-10-17 +last_updated: 2026-10-15 --- `POST /api/v1/track/refund` @@ -150,7 +150,6 @@ When a commission is reversed or refunded, Affitor: - transitions the commission to `reversed` or `refunded` status - if the commission was already credited to the partner (any status past `pending`, and not a test), deducts the proportional amount from the partner's balance in the same transaction as the status change; the balance can go negative, and open withdrawals are reduced to fit -- lowers the revenue counted toward your program's $10,000 fee-free tier by the refunded amount, never by more than that sale added - sends an in-app notification to the partner - sends a manual-review warning to the advertiser if the commission had already been paid out diff --git a/content/docs/brand/quickstart/commission-approval-cash-flow.mdx b/content/docs/brand/quickstart/commission-approval-cash-flow.mdx index 99b5b5e..6f18efd 100644 --- a/content/docs/brand/quickstart/commission-approval-cash-flow.mdx +++ b/content/docs/brand/quickstart/commission-approval-cash-flow.mdx @@ -2,7 +2,7 @@ title: Commission Approval & Cash Flow description: Understand how attributed sales move into commissions, billing, and payout workflow. kind: concept -last_updated: 2026-10-17 +last_updated: 2026-10-14 --- This page traces the journey from an attributed sale through the commission hold, billing, and partner payout. @@ -116,7 +116,7 @@ What happens depends on where the commission is when the refund arrives: - **Approved or invoiced** — the refunded share is taken back from the partner's balance: all of the commission for a full refund, and the same fraction of it for a partial refund. The balance can go negative; the partner sees it as **Balance owed**, recovered from their next commissions. - **Already collected** — Affitor deducts it from the partner's balance, which can go negative, and sends you a notification: reconciling with the partner is a manual step. -Platform fees already billed are not refunded, and a refund lowers the revenue total that counts toward your program's $10,000 fee-free tier by the refunded amount, never by more than that sale added. See [Track refund](/docs/api-reference/track-refund) for the API details. +Platform fees already billed are not refunded, and a refund does not lower the revenue total that counts toward your program's $10,000 fee-free tier. See [Track refund](/docs/api-reference/track-refund) for the API details. --- diff --git a/content/docs/faq/index.mdx b/content/docs/faq/index.mdx index 4afb994..ee023a3 100644 --- a/content/docs/faq/index.mdx +++ b/content/docs/faq/index.mdx @@ -107,7 +107,7 @@ At a high level: 5. the partner requests a withdrawal, and Affitor sends it ### What happens if there is a refund? -It depends on where the commission is. Before approval, the commission is removed before it reaches the partner. After approval, the amount is taken back from the partner's balance. If the commission was already collected, reconciling with the partner is a manual step and you get a dashboard notification. Platform fees already billed are not refunded, and a refund lowers the revenue counted toward the $10,000 fee-free tier by the refunded amount, never by more than that sale added. See [commission approval and cash flow](/docs/brand/quickstart/commission-approval-cash-flow#refund-handling). +It depends on where the commission is. Before approval, the commission is removed before it reaches the partner. After approval, the amount is taken back from the partner's balance. If the commission was already collected, reconciling with the partner is a manual step and you get a dashboard notification. Platform fees already billed are not refunded, and refunds do not lower the revenue counted toward the $10,000 fee-free tier. See [commission approval and cash flow](/docs/brand/quickstart/commission-approval-cash-flow#refund-handling). --- diff --git a/content/docs/getting-started/pricing-performance-model.mdx b/content/docs/getting-started/pricing-performance-model.mdx index c1525ee..23825d5 100644 --- a/content/docs/getting-started/pricing-performance-model.mdx +++ b/content/docs/getting-started/pricing-performance-model.mdx @@ -2,7 +2,7 @@ title: "Pricing" description: "Affitor pricing: $0/month, $0 setup, 3.5% of partner-generated revenue — and each program's first $10,000 in affiliate-driven revenue is fee-free." kind: concept -last_updated: 2026-10-17 +last_updated: 2026-10-14 --- Affitor charges only when partners generate revenue — no subscription, no setup fee. @@ -48,7 +48,7 @@ Commissions wait out your program's hold period, then are approved and added to ## $10K guarantee -Each program's first $10,000 in affiliate-driven revenue is fee-free. The threshold is counted per program, so every program you run gets its own $10,000. A refund lowers the revenue counted toward it by the refunded amount, never by more than that sale added. +Each program's first $10,000 in affiliate-driven revenue is fee-free. The threshold is counted per program, so every program you run gets its own $10,000. Refunds do not lower the revenue counted toward it. Confirm your exact commercial terms with the Affitor team before launch.