← Blog
shippedattribution

Payout holdback: align partner commissions with your refund window

If your product has a 30-day money-back guarantee or a 14-day trial, you shouldn't pay your partners on conversions that might still refund. Holdback days makes that policy explicit, enforced, and visible to creators before they apply.

Brands running affiliate or creator partner programs hit the same problem early on: when do you actually pay out a commission?

If your product has a 30-day money-back guarantee or a 14-day trial, paying out a partner the moment a customer signs up means you’ll claw it back later when refunds come through. Most affiliate platforms either ignore this entirely (payouts immediate, refunds become your problem to chase) or hide the brand’s holdback policy in fine print that creators only discover once they’re already promoting.

We just shipped a fix for both halves: per-program payout holdback, with the policy enforced in the API and surfaced on the marketplace listing before creators apply.

How it works

When you create or edit a campaign in OpenPartner, there’s a new “Payout holdback (days)” picker with presets that match common refund-window patterns:

  • None — commissions can be approved as soon as they accrue (default; matches the previous behavior)
  • 7 days — short refund window
  • 14 days — matches a 14-day trial period
  • 30 days — matches a 30-day money-back guarantee
  • 60 / 90 days — for higher-touch products with extended return windows

Pick a value and three things happen:

  1. Commissions accrue immediately on conversion, but they sit in a “holdback” status until accruedAt + holdbackDays has elapsed.
  2. Manual approval is blocked before the window closes — the dashboard shows a “Holdback · N days left” pill and the Approve button is disabled with a tooltip explaining when it’ll unlock.
  3. A daily scheduler auto-approves matured commissions, so you don’t have to babysit the queue. Once approved, they go out on the next payout run.

Refunds + chargebacks already auto-reverse the commission via the Stripe webhook regardless of the holdback state — so you’re not on the hook for clawbacks you have to chase manually.

Why creators care: the policy is on the listing

The other half of the problem is that creators usually don’t find out about holdback until they’re already promoting. We surface the value on the marketplace listing in two places:

  • Discover grid: “20% recurring · 30d holdback” right in the commission line
  • Offering detail: “Holdback: 30 days” in the terms row alongside cookie window and payout cadence, with a tooltip explaining the policy

Same source of truth as the brand’s campaign config — when you set holdback on the Campaign, every Offering backed by that Campaign reflects it. No double configuration.

Why this matters

Two reasons we built it this way instead of leaving holdback as brand-side discipline:

Trust. Creators evaluating programs care about real payout speed, not nominal commission rate. A 30% rate on a program with no holdback is a different deal than 30% with 90-day holdback. Surfacing the policy upfront lets creators self-select; opaque policies create the “this brand keeps stalling on payouts” threads on creator subreddits that brands earn unfairly because they were just trying not to refund money.

Refund safety. If you ship to a brand who pays their partners immediately, they’re either eating the refund cost themselves or chasing partners for clawbacks. Both are bad — the first damages margins, the second damages the relationship. Holdback gives the brand a clean window to settle revenue before committing to pay it out.

Try it

Head to Admin → Campaigns and pick a holdback for your program. Existing campaigns default to no holdback (no behavior change). Existing published offerings won’t show the new chip until you re-save them — UI handles this gracefully so it’s a graceful upgrade, not a breaking change.

Open source repo: github.com/getcoherence/openpartner — the relevant commits are 4cad68b (backend

  • admin UI) and d763a9f (federation + creator-facing display).

We’re sweating these details as we approach v1. If your program has a payout flow that doesn’t fit cleanly here — say, multi-stage holdback or per-creator overrides — the issue tracker is open.