Use cases

Crypto payments for affiliate networks, CPA platforms, and webmasters

Every payout cycle, someone exports a list of publishers from the tracker, reconciles approved conversions against held and reversed leads, splits the list by payment method, and starts firing transfers. Bank wires don't reach half the affiliates, the crypto rows go out one wallet at a time, and the run can die in the middle with no clear record of who already got paid. halfin replaces that ritual with idempotent batch payouts and auditable on-chain settlement: stage the whole publisher list from your platform, let each line carry its own idempotency key so a retry never double-pays, approve once, and reconcile against a clean per-recipient result that ties back to a real transaction hash.

01

Payout day is where affiliate programs lose trust and money

Affiliate economics run on the payout. A publisher will send traffic to whoever pays reliably and on time, and the moment a payment is late, partial, or silently missing, they move their volume to a competitor. The problem is that the payout itself is the least automated part of most networks: the tracking platform knows exactly what each affiliate earned, but moving that money out is a manual, brittle, end-of-week event run under time pressure.

The mechanics are where it breaks. A network pays publishers in dozens of countries, and traditional rails don't cover them evenly — a bank wire that's routine for a US affiliate is impossible for a webmaster in a region your bank won't serve, and card or PayPal rails carry their own reversals and account freezes. So crypto becomes the fallback, and the first version of crypto payouts is a person sending transfers one address at a time from a spreadsheet. That works until the run is interrupted: a dropped connection, a wallet out of gas, a rate limit on row 240 of 600, and now nobody can say for certain which affiliates were already paid. Re-running the file risks paying the first 239 twice; resuming by hand risks skipping someone.

The expensive failure is the silent double-pay. A send times out and returns ambiguously — the transaction may already be on-chain even though your script never saw the confirmation — and a naive retry pushes a second payment. On-chain payments are final, so you only discover it when treasury reconciliation comes up short or a publisher quietly keeps the overpayment. halfin's payout model removes that ambiguity: every payout carries a caller-supplied idempotency key, and re-submitting the same key returns the original payout instead of creating a new one. The batch becomes safe to retry from the top, which is exactly the property a payout run needs and a hand-rolled loop never has.

02

How halfin maps onto the affiliate money flow

halfin does not become your tracker, anti-fraud engine, or commission ledger — those stay the systems of record for which conversions are valid and what each affiliate is owed. halfin is the payment layer underneath: it takes the approved payout instruction your platform produces, executes it on-chain, and returns signed status your finance and partner-ops teams can reconcile. The same primitives also cover the inbound side for networks that collect deposits or budget top-ups from advertisers.

The flow lines up with how an affiliate platform already works. Advertisers or clients can fund their balance through invoicing or hosted checkout when you need to collect crypto. Deposits credit with reorg-aware accounting and per-chain confirmation thresholds, so a balance only moves once the payment has actually settled to the depth that chain requires. When the payout cycle closes, your platform stages a batch of single payouts — one line per publisher, each with its own idempotency key derived from your ledger — and a treasurer releases it from the dashboard. Balance conversion handles the treasury side when commissions are earned in one asset and paid in another, and every step emits an HMAC-signed webhook so your platform learns the outcome independently of any API response it might have missed.

  • Collect advertiser deposits or budget top-ups via invoicing and hosted checkout (reorg-aware crediting, per-chain confirmations).
  • Stage the publisher payout list as one idempotent batch from your tracker's approved-earnings export.
  • Release the batch once from the dashboard — programmatic staging and human approval stay separate.
  • Convert and rebalance treasury so commissions earned in one asset settle in the asset each publisher wants.
  • Reconcile every deposit and payout against signed webhooks and on-chain transaction hashes.
03

Idempotent batch payouts replace the weekly CSV run

The core change for an affiliate network is the payout batch. A mass payout is a set of single payouts you submit together and reason about as one unit. Each publisher line specifies a currency, an amount as a string, and a destination wallet, plus its own idempotency key — typically the affiliate's account id joined with the payout period, so the same publisher in the same cycle always maps to the same key. Because that derivation is deterministic, re-submitting the batch reproduces the keys exactly, and halfin matches each one to the payout it already created.

Partial failure is treated as the normal case. Some lines get rejected up front — a malformed address a publisher pasted wrong, an amount below a chain's dust threshold, a currency the destination can't receive — and those are reported per-line so the rest of the batch still goes through. You fix the rejected rows and re-submit the whole file; the lines that already succeeded are no-ops, and only the corrected ones execute. There is no step where one bad row blocks two hundred good ones, and no spreadsheet column tracking 'paid / not paid' by hand.

Payouts don't move funds the instant the API is called. Each one enters a pending-approval state and is released from the dashboard, so the batch your platform POSTs is a proposal, not an irreversible action. That keeps the high-throughput programmatic path and the human control point separate: your integration stages thousands of publisher payouts unattended, and whoever owns the money still signs off before anything leaves the balance.

04

Pay every publisher on the chain they actually use

A global affiliate base doesn't share one preferred rail. A publisher running traffic in one region may settle in USDT on Tron because the network fee is predictable; a US-facing affiliate may want USDC on Ethereum or Base for their own accounting; another might prefer Solana for speed and low cost. Forcing everyone onto a single network means rejected payments and addresses that can't receive the asset you sent. halfin lets each payout line pick its own currency and network, so one run spans all of them.

Settlement is reorg-aware and uses per-chain confirmation thresholds, so a payout reported complete has actually settled to the depth that chain requires — not merely been broadcast. That matters most at the tail of a large batch, where you want each publisher's status to mean 'done', not 'submitted and hopefully fine'. Each line resolves to a transaction hash your support team can hand to a publisher who asks where their money is.

Publisher needCommon railWhy it fits
Low, predictable network fee on a stablecoinUSDT on Tron (TRC-20)Widely held by affiliates; predictable cost per payout at volume.
US-facing accounting and reporting comfortUSDC on Ethereum (ERC-20) or BaseStablecoin many publishers reconcile against directly.
Fast, low-cost settlementUSDT or USDC on Solana, or native SOLQuick confirmation for high-frequency, small-value payouts.
Native-asset payoutBTC, ETH, XRP, or an EVM L2 / BSC native tokenFor publishers who hold and want the base asset of a chain.
05

The affiliate payout flows halfin is built for

The recipient list changes shape by program, but the operational shape is identical: many destinations, varying amounts, a recurring cadence, and zero tolerance for paying anyone twice. These are the flows networks reach for halfin to run.

Affiliate payouts are the base case — settling approved commissions to a long tail of publisher accounts on a fixed weekly or monthly schedule, replacing the manual CSV send. CPA-network payments push per-action payouts to a large publisher base where the amounts vary line by line and the volume makes hand-sending impractical. A mass-payout platform that itself moves money on behalf of other programs needs the idempotency and per-line failure handling as a hard requirement, not a nice-to-have. Global affiliate payments reach publishers in countries where bank, card, and PayPal rails simply don't go, which is the original reason crypto entered the affiliate world. Instant affiliate payouts compress the cycle from a weekly batch toward on-demand settlement for trusted publishers, using the same idempotent single-payout primitive triggered per request instead of per batch.

Higher-risk niches lean on the same machinery. Gambling-affiliate payouts move revenue-share and CPA commissions to publishers driving iGaming traffic, where reliable, fast, global settlement is the baseline expectation and where the program still owns its own counterparty and compliance checks. And compliance for affiliates is its own concern across all of these — knowing who you're paying, screening wallets and counterparties, and keeping an auditable record — which the next section covers. Each of these is a payout flow built on the same batch primitive; the difference is cadence, amount distribution, and the compliance posture the program wraps around it.

06

Auditable settlement and the compliance boundary

The reason affiliate programs accumulate payment risk is that the old process leaves no trustworthy record. A spreadsheet of 'paid' checkboxes isn't an audit trail, and a bank statement weeks later doesn't tie a line back to a specific publisher and conversion period. halfin's settlement leaves a concrete trail: every payout maps to an idempotency key from your ledger, a dashboard record, a signed webhook, and an on-chain transaction hash. When a publisher disputes a payment or finance closes the period, the chain of evidence is concrete rather than reconstructed from memory.

Compliance stays the program's responsibility, and halfin is deliberate about not overstating its role. halfin supports KYB onboarding when you become a merchant, applies AML awareness to the payment rail, and treats travel-rule considerations as a process to understand — none of which is a certification or license that halfin holds or grants. The network still owns publisher identity, the decision about which counterparties it will pay, wallet and sanctions screening before funds move, and the regulatory obligations of its own market. That separation is the point: keep affiliate vetting and the decision to pay inside your platform, hand halfin the approved instruction, and use the dashboard records and signed webhooks as the settlement evidence.

  • Keep your tracker as the system of record for valid conversions and amounts owed.
  • Screen publisher wallets and counterparties before accepting funds in or paying out.
  • Tie every payout to an idempotency key, a dashboard record, a signed webhook, and a transaction hash.
  • Treat KYB, AML awareness, and travel-rule as process — never as a license or certification claim.
07

Where to start an integration

The fastest path is to map your existing payout cycle onto the batch primitive. Take the approved-earnings export your tracker already produces, derive a deterministic idempotency key per publisher and period, and submit each line through the payouts API — the same call backs a weekly fan-out and a single on-demand payout. You can safely wrap the loop in a retry: because each call is idempotent, a second pass converges on exactly one payout per publisher.

Point a webhook at your platform so settlement state arrives independently of any API response, verify the signature before you mark a payout complete, and reconcile against the transaction hash. The dashboard gives partner-ops and finance a place to review and release batches without touching code. Start in the sandbox with a small slice of your publisher list, confirm the reconciliation loop end to end, then scale the same flow to the full base.