How to handle an affiliate refund clawback
Void a commission that is unpaid, net a paid one against the next payout. Covers a 21-day hold, partial refunds, $15 Stripe disputes and replayed webhooks.
Muzahid Maruf, FounderUpdated
On this page
- 01What an affiliate refund clawback does at each stage of a commission
- 02Which billing events should trigger a reversal
- 03Partial refunds and several refunds on one charge
- 04Choosing the hold period and the reversal window
- 05Recovering a commission you already paid
- 06Reversing commissions on chargebacks and disputes
- 07Making reversals safe to replay
- 08How TrackRev reverses commissions
Explore with AI
Opens this article inside the chosen assistant with a ready-made prompt.
An affiliate refund clawback takes back a commission when the sale behind it is refunded. A $100 sale at 30% earns the partner $30. If the $30 is unpaid, void it and the partner never sees it.
If you already paid it, record a negative balance and deduct it from the partner's following payout instead of asking for cash back.
A hold at least as long as your 14-day or 30-day refund window keeps most refunds in the first case, and because card networks typically allow disputes for 120 days, you still need a plan for the rest.
Key takeaways
- Void a commission that is unpaid. Once it is paid, net it against the next payout: a partner who earned $600 and owes $180 receives $420.
- Set the hold to your refund guarantee plus 7 days, and expect card disputes to arrive up to 120 days after the payment anyway.
- An uncontested $49 dispute costs $64 with the $15.00 fee, or $78.70 if a 30% commission stays paid, so reverse when the dispute opens.
What an affiliate refund clawback does at each stage of a commission
Take that $100 sale with a 14-day money-back guarantee, a 21-day hold and a monthly payout on day 30.
| Day | Where the $30 sits | What a refund or dispute does |
|---|---|---|
| 0 to 14 | Pending, while the customer can still ask for a refund | Void the $30, because nothing was paid |
| 15 to 20 | Pending, in the 7 extra days of the 21-day hold | Void it, which covers refunds approved late |
| 21 to 29 | Payable, waiting for the day 30 batch | Pull the $30 from the batch before you export it |
| 30 | Paid in the monthly batch | Record -$30 and net it against the next payout |
| 31 to 120 | Paid, with the 120-day dispute window still open | Same netting, usually triggered by a dispute |
| After 120 | Paid, past the usual dispute window | Usually only a refund you grant reverses it |
A recommended policy, not an industry standard.
Which billing events should trigger a reversal
| Processor | Refund events | What to check before reversing |
|---|---|---|
| Stripe | charge.refunded, refund.created | refund.created fires when the refund is created, and the customer sees the credit about 5 to 10 business days later. A refund the bank rejects sends refund.failed, and the money can take up to 30 days to return to your balance |
| Paddle Billing | adjustment.created, adjustment.updated | Live refunds start as pending_approval unless Paddle approves them automatically, which needs a verified account, a refund of 400 USD or less, and a payment method other than bank transfer |
| Lemon Squeezy | order_refunded, subscription_payment_refunded | The second carries the subscription invoice, so it maps to one renewal's commission |
| Polar | refund.created, refund.updated | refund.created fires regardless of status, so wait for the refund to go through |
Event names from each vendor's webhook documentation, checked October 2026.
Partial refunds and several refunds on one charge
Stripe allows several refunds against one charge, up to the original amount, and each one fires its own event. On the $100 charge above, the partner's $30 reverses in proportion.
| Refund | Returned to customer | Reversal at 30% | Reversed so far | Commission left |
|---|---|---|---|---|
| First partial refund | $40 | $12 | $12 | $18 |
| Second partial refund | $60 | $18 | $30 | $0 |
Tie each reversal to the refund ID, because a charge-level check drops the second refund as a duplicate. Reverse the amount you credited, since rates change between a sale and its refund.
On a recurring Stripe Billing subscription, a refund on invoice 3 leaves invoices 1 and 2 alone. Upgrades and proration credits are in affiliate commissions on Stripe refunds, upgrades and downgrades, and renewals in affiliate tracking for recurring subscriptions.
Choosing the hold period and the reversal window
The hold keeps a commission unpayable, and the reversal window is how long a refund or dispute can still reach it. I would set the hold to the refund guarantee plus 7 days, to cover refunds that are approved late.
| Refund guarantee | Hold |
|---|---|
| 7 days | 14 days |
| 14 days | 21 days |
| 30 days | 37 days |
| 60 days | 67 days |
| 90 days | 97 days |
| Program | Wait before a commission can be paid |
|---|---|
| Fathom | 30 days, then a $200 minimum by Wise or $20 as account credit |
| HubSpot, monthly plan | 30 days plus the rest of that month, paid within 2 months |
| HubSpot, annual plan | 60 days plus the rest of that month, paid within 3 months |
| Rewardful Help Center | Set per campaign, and Rewardful recommends matching your refund policy |
| TrackRev | 0 to 180 days per program, default 0 |
A hold of the full 120 days would make partners wait 4 months for a first payout. The hold handles refunds, and the negative-balance rule handles disputes and the pro-rata refund an annual customer can get 6 months in.
Recovering a commission you already paid
Record the reversal as a negative ledger entry, deducted from the following payout with a line item naming the refunded sale.
Test the minimum after the offset, so a partner who earned $60 and owes $30 rolls over under a $50 minimum.
| Partner | Earned this month | Owed from refunds | Net | Paid at a $50 minimum | Carried forward |
|---|---|---|---|---|---|
| Healthy partner | $600 | $180 | $420 | $420 | $0 |
| Small partner | $60 | $30 | $30 | $0 | $30 |
| Partner who stopped | $40 | $180 | -$140 | $0 | -$140 |
- Ask for money back only from a partner you are terminating or whose own fraud caused the refund. Chasing $40 abroad costs more than $40.
- Set a carry-forward limit such as 90 days, then write the balance off, as with the partner above sitting at -$140.
- Put partners with a refund rate well above average on a rolling reserve, such as 10% of each payout until the 120-day dispute window closes.
Put the rules in the partner terms before the first sale, or the clawback becomes a dispute you start yourself. How to pay affiliates covers payouts and tax forms.
Reversing commissions on chargebacks and disputes
You cannot refund a charge outside the dispute process while a dispute is open, and the cardholder's bank decides the outcome.
| Step | Typical time or cost |
|---|---|
| Cardholder files the dispute | Within 120 days of the payment, longer in some cases |
| You respond to the issuer | 7 to 21 days, depending on the network |
| Issuer reviews your evidence | 60 to 75 days |
| Whole lifecycle | 2 to 3 months |
| Early fraud warning from Visa or Mastercard | About 40% become fraud disputes when the charge is not refunded |
| Dispute countered fee | $15.00 when you respond manually, returned only if you win |
| Dispute received fee | $15.00 in the US, debited with the disputed amount and not returned even when you win |
From Stripe's dispute documentation and pricing page, October 2026.
A $49 plan at 30% commission pays the partner $14.70.
| Outcome | What you lose | Total |
|---|---|---|
| Not contested, commission left paid | $49 sale, $15.00 fee, $14.70 commission | $78.70 |
| Not contested, commission reversed | $49 sale, $15.00 fee | $64.00 |
| Won, commission restored | $15.00 fee | $15.00 |
Reverse on charge.dispute.created, restore the commission if charge.dispute.closed reports a win, and leave it reversed on a loss, which can arrive 2 to 3 months later. Paddle's chargeback_warning, chargeback and chargeback_reverse adjustments follow the same cycle.
Several disputes behind one partner suggest self-referral or attribution fraud.
A refund and a dispute can hit the same charge
If a customer disputes a charge while your refund is pending, Stripe fails the refund with charge_for_pending_refund_disputed. Cap total reversals per charge at the commission you credited, $30 on the first sale above, so the refund and the dispute never reverse one sale twice.
Making reversals safe to replay
Stripe says an endpoint might receive the same event more than once and does not guarantee delivery order. A unique constraint on the refund ID stops the second insert, where a read-then-write check can pass twice.
A refund that arrives before its charge is recorded should trigger an API fetch of the charge.
| Replay path | How long after the event |
|---|---|
| Automatic retries, live mode | Up to 3 days |
| Resend from the Stripe Dashboard | Up to 15 days |
| Resend with the Stripe CLI | Up to 30 days |
| Sandbox retries | 3 attempts over a few hours |
create table commission_reversals ( id bigserial primary key, commission_id bigint not null references commissions (id), refund_id text not null, -- Stripe re_..., or the dispute ID amount_cents integer not null check (amount_cents > 0), created_at timestamptz not null default now(), unique (refund_id)); -- A replayed event inserts nothing, so the handler can stop.insert into commission_reversals (commission_id, refund_id, amount_cents)values ($1, $2, $3)on conflict (refund_id) do nothingreturning id;Edit the original row or append a negative one
FirstPromoter's refund endpoint appends negative commissions, requires an event ID to avoid duplicates, and rejects one that already exists.
| Ledger design | After a $30 commission and a $12 refund | Paid, then refunded |
|---|---|---|
| Edit the original row | One row, amount changed from $30 to $18 | Needs a separate balance |
| Append a negative row | Two rows, +$30 and -$12, balance $18 | The balance goes negative by itself |
How TrackRev reverses commissions
TrackRev writes a commission against each order, and each renewal earns its own.
When Stripe, Paddle Billing, Polar, Lemon Squeezy, Creem or Dodo Payments reports a charge as refunded, TrackRev marks the order and every commission it produced as refunded, at each level of a Partner Accelerator chain.
| Situation | What TrackRev does |
|---|---|
| Stripe refund of any size | Reverses the sale's whole commission, with no proration for partial refunds |
| Commission already paid | Marked refunded, with no negative balance, so you deduct it by hand from a later payout |
| Dispute or chargeback | No Stripe dispute events are read, so reverse the commission by hand |
| Hold period | 0 to 180 days per program, default 0 |
| Plan needed | Indie at $29 a month or Growth at $299 a year, with no cap on the commission tracked; Free covers link tracking only |
See pricing and the affiliate program page.
Found this useful? Share it.
Frequently asked questions
- A clawback recovers commission a partner earned on a sale that was later refunded, disputed or charged back, such as the $30 on a refunded $100 sale. Before payout it is a void. After payout it needs a rule in the partner terms.
- Only as far as your partner agreement allows. Put the netting rule and a carry-forward limit, such as 90 days, in writing before the first sale and have a lawyer check it.
- Stripe sends refund.failed, and the money can take up to 30 days to return to your balance. If you refund the customer another way, keep the reversal. If they never get their money back, restore the commission.
- Only with a refund or credit. With pro-rata reversal, a $20 refund on a 30% program takes back $6, while a downgrade that returns no money just lowers later commissions.
- No, because it is not a chargeback yet. Hold a new partner's commission if the sale looks odd, and reverse when a dispute opens or you refund.
- Yes for refunds, on any paid plan, from Indie at $29 a month. Disputes are reversed by hand. The Free plan covers link tracking only.

Written by
Founder, TrackRev.io & Contant.io
Muzahid Maruf founded TrackRev.io, SaaS affiliate software with no limit on tracked revenue, and Contant.io. He writes about affiliate programs.
Writes about Marketing attribution · Link tracking · Revenue analytics · SaaS growth
Stop guessing where your revenue comes from.
Set up TrackRev in about five minutes. The free plan covers 1,000 events a month, no card needed.
Start free