Earnings
Sales list, refund handling, and what each status means.
/a/earnings is the full record of every commission credited to you, across every campaign. It is the ground truth for "what have I earned and what is it doing right now".
What you see
The earnings table has columns:
- Date: when the sale event was created.
- Type: how it got created (invoice-paid for Stripe, s2s for server-to-server API, refund for reversed sales, manual for one-off entries).
- Sale amount: what the customer paid the brand (in the brand's currency).
- Commission: what you earned on this sale.
- Status: the current state in the sales lifecycle (see below).
Filter chips at the top: All, Pending, Approved, Paid, Refunded.
Maximum 200 rows per page. Cursor pagination handles older history.
Status meanings
A sale moves through these states:
Pending
The sale was credited. It sits in the refund-hold window so the brand can claw back the commission if the customer refunds their first invoice. Default hold is 30 days from the invoice paid date.
You see the sale but cannot withdraw the commission yet.
Approved
The hold window passed. The commission is locked in. It will be included in the next payout batch the brand runs.
Paid
The payout settled. The money is in your Stripe Connect account (or your PayPal, or your bank account, depending on payout method). You can spend it.
Refunded
The customer refunded their invoice within the hold window. The sale reverses. The commission is subtracted from your Pending balance. If the commission had already been paid out (rare with default 30-day hold), the next payout batch debits the overpayment.
You can see the refund timestamp in the row's detail panel.
Denied
Rare. Manually denied by the brand. Typically only happens for disputed sales where the brand has evidence the affiliate did not actually drive the customer (proxy clicks, fraud, terms violation). You should see a denial reason in the row detail.
How to read the lifecycle
For most subscription products on the default settings (30-day hold, per-sale recurring), a typical sales lifecycle:
- Day 0: customer signs up via your link and pays first invoice. Sale created with
Status = Pending. - Day 0 to 30: customer can refund. If they do, sale flips to
Refunded. - Day 30: if no refund, sale flips to
Approved. The brand can include it in a payout batch. - Day 30 onwards (whenever the brand runs payouts): you get paid.
For recurring subscriptions, this lifecycle repeats per invoice. Customer pays month 2, you get another sale at the recurring rate. Customer pays month 3, another one. And so on.
Cap and delay settings
Brands can configure two settings that affect what you see:
recurringMonths: cap commissions to the first N paid invoices. For example, if the brand sets this to 12, you stop getting credited after a customer's twelfth invoice. The customer keeps paying the brand; you stop earning.recurringDelayInvoices: skip the first N invoices before crediting. For example, if set to 1, you only start earning from the customer's second invoice. Brands use this if they have a high first-invoice refund rate.
You can see these settings (when they are non-default) on /a/campaigns/{campaign-id}.
What if a conversion is missing
If you drove a customer and the conversion is not showing up:
- Check the cookie window. Did the customer convert within the brand's window? Default is 90 days, but some brands run 30 or 60.
- Check attribution model. If the brand uses LastTouch and another affiliate touched the customer more recently, they get credit.
- Check S2S setup. If the brand uses server-side tracking (no edge redirect) and they haven't set it up correctly, conversions get dropped.
- Ask the brand. The conversion list at their
/dashboard/conversionsshows every conversion across all affiliates. They can see whether yours was attributed or not.
If after all that, the conversion is genuinely missing, chat with us and share the customer's email (or partial email) and the approximate date. We can trace through logs.
Export
There is no CSV export button on /a/earnings today. If you need an export for tax reporting, ask the brand to pull the data via their conversions endpoint, or contact support.