Notes from the
payments edge.

What we learn shipping crypto money-movement at scale: postmortems, network deep-dives, compliance notes, and field lessons.

The halfin journal is where our payments and engineering teams write down what actually happens when crypto money moves at scale: invoice lifecycles and underpayment handling, mass-payout idempotency, confirmation timing across chains, settlement-currency choices, and the compliance boundaries that gate going live. Each post is a field note, not a press release — concrete patterns you can apply to your own integration. For step-by-step walkthroughs see the guides, short operational answers in the FAQ, and term definitions in the glossary.

archive · all entries53 of 54 posts
playbooks
Playbooks02

Instant player withdrawals: a retention metric

For casinos and sportsbooks, a withdrawal that lands in two minutes beats the bonus you paid to acquire the player — and crypto delivers it.

M. VossJun 09, 2026 · 9 min
playbooks
Playbooks03

Kill the Friday CSV: idempotent affiliate payouts

Pay an affiliate network from an idempotent fan-out over the single-payout API, with operator approval and an audit trail, so retrying the file is always safe.

R. AdeyemiJun 06, 2026 · 9 min
fx
FX04

USDT vs USDC for prop firm deposits

Stablecoin choice is not a brand preference. It changes trader adoption, treasury controls, network cost, and the support path when a deposit gets stuck.

halfin teamJun 05, 2026 · 8 min
fx
FX05

Mass payouts to traders: a technical guide

Trader withdrawals, IB commissions, rebates, and profit splits need the same basics: approval IDs, wallet checks, batch state, and reconciliation.

halfin teamJun 05, 2026 · 10 min
compliance
Compliance06

Compliance for FX brokers accepting crypto

Crypto payment acceptance does not remove broker obligations. The safer design keeps trader controls in the broker stack and payment controls in the rail.

halfin teamJun 05, 2026 · 9 min
fx
FX07

How crypto cuts trader funding time

A trader deposit is slow when payment, proof, review, and crediting live in separate queues. Stablecoin rails only help when the broker removes the handoffs.

halfin teamJun 05, 2026 · 9 min
product
Product08

Recurring crypto billing without a saved card

There is no card to vault and no instrument to auto-charge, so stop pretending. The honest pattern is an invoice per cycle with a fresh rate lock, and entitlements driven off the verified webhook.

L. TanakaJun 03, 2026 · 8 min
playbooks
Playbooks09

The chargeback math of a stablecoin checkout

What an online store actually changes when settlement happens on-chain instead of on a card rail — disputes, refunds, and who eats the loss.

M. VossMay 31, 2026 · 8 min
playbooks
Playbooks10

Collecting cross-border tuition without losing the dollar

A playbook for schools and bootcamps that price in USD but get paid from forty countries — fiat-anchored invoices that don't drift, instructor payouts, and refunds that aren't chargebacks.

S. BrandtMay 29, 2026 · 8 min
playbooks
Playbooks11

Creator payouts and donations at scale: money in, money out, on the same rails

A working blueprint for a creator platform that takes crypto tips at the checkout and pays thousands of creators back out, without two reconciliations that disagree.

R. AdeyemiMay 27, 2026 · 10 min
engineering
Engineering12

Verify the signature before you act on a webhook

An unsigned webhook is an anonymous HTTP request that knows your invoice IDs — here is how to handle a halfin event so a forged one can't ship a customer their order.

R. AdeyemiMay 26, 2026 · 7 min
networks
Networks13

USDC on Base vs Ethereum: the same dollar, a different rail

Why the network you steer a USDC payer toward matters more than the asset itself, and why a fiat-anchored invoice lets you stop choosing.

M. VossMay 24, 2026 · 8 min
networks
Networks14

Why a confirmation on Bitcoin isn't a confirmation on Solana

Per-chain thresholds aren't arbitrary caution — they're the price of reorg-aware crediting, and the reason a paid event reflects value that actually held.

M. VossMay 22, 2026 · 8 min
engineering
Engineering15

Reorg-aware crediting: why we don't mark you paid the instant we see the money

A transaction in the latest block is the least safe transaction on the chain. Here is what a reorg actually does, and why halfin waits before it tells you to ship.

R. AdeyemiMay 20, 2026 · 8 min
engineering
Engineering16

Designing an idempotent payout runner

A payout run is a loop over POST /api/v1/payouts, not a batch call — so the runner you write is the batch. Here is how we build one that survives a crash mid-file.

R. AdeyemiMay 18, 2026 · 10 min
product
Product17

The deferred invoice: bill in fiat, let the payer pick the asset

How a fiat-anchored deferred invoice moves the asset choice and the rate lock to activation time, and when you should reach for it over a fixed-asset invoice.

L. TanakaMay 16, 2026 · 8 min
playbooks
Playbooks18

From sandbox to production: the checklist we actually use

Six gates to clear before you flip from test keys to live keys, in the order that catches the most bugs while it's still free to find them.

S. BrandtMay 14, 2026 · 8 min
playbooks
Playbooks19

When the card processor says no: a high-risk crypto playbook

A concrete playbook for businesses that get declined, throttled, or have funds held by card processors — what changes when settlement moves on-chain, and what doesn't.

S. BrandtMay 12, 2026 · 9 min
product
Product20

Mass payouts vs single payouts: the same endpoint, a different mindset

Both go through POST /api/v1/payouts and both land in pending-approval — so the choice isn't an API decision, it's about who owns the loop and the ledger.

L. TanakaMay 11, 2026 · 8 min
product
Product21

Static deposit addresses vs invoices: pick the right primitive

One is a mailbox that never closes; the other is a question with a deadline. The choice is not stylistic — it changes how you credit money and which webhooks you wait for.

L. TanakaMay 09, 2026 · 8 min
compliance
Compliance22

The travel rule for crypto merchants, explained

What it actually is — passing originator and beneficiary information above a threshold between regulated providers — why it exists, and why it's a process you may run, not a badge a payment provider wears.

P. NairMay 07, 2026 · 8 min
compliance
Compliance23

What to expect from KYB: business verification as a process, not a wall

KYB is the gate at the start of a payment relationship, not a certificate and not an API flag. Here is what it establishes, why it runs in parallel with your build, and the language to be precise about.

P. NairMay 05, 2026 · 8 min
engineering
Engineering24

When the deposit isn't the amount: handling underpaid and overpaid invoices

The amount that lands on-chain is the customer's decision, not yours — so invoice.underpaid and invoice.overpaid aren't errors to catch, they're outcomes to design for. Here's the policy code that turns a support fire-drill into a switch statement.

R. AdeyemiMay 03, 2026 · 9 min
playbooks
Playbooks25

A treasury playbook for the crypto you didn't ask to hold

Accepting crypto leaves you holding a dozen assets across seven networks. Here is how we use balance conversion to collapse that into a stablecoin position you can actually manage.

S. BrandtMay 01, 2026 · 8 min
networks
Networks26

XRP and Solana for fast settlement: two rails, two definitions of 'done'

Both confirm in seconds, but they get there by different mechanics — and that difference decides where each one earns a place in your acceptance and payout flows.

M. VossApr 29, 2026 · 8 min
halfin Q2 2026 changelog cover
changelog
Changelog27

Changelog: Q2 2026 SPL settlements, batch v2, EU MiCA notes

Solana SPL is now a first-class settlement rail, batch payouts get idempotent re-submission, and MiCA Phase 2 affects our roadmap.

halfin teamApr 28, 2026 · 6 min
engineering
Engineering28

A crypto checkout that doesn't lose payments

The browser redirect is a courtesy, not a fact. The webhook is the source of truth — verify the HMAC, fulfil on invoice.paid, and reconcile through the API after every outage.

R. AdeyemiApr 27, 2026 · 10 min
playbooks
Playbooks29

Accepting crypto on Shopify, the honest way

There is no official halfin Shopify plugin. The real path is a hosted-checkout link and webhook-driven order reconciliation. Here is exactly what you wire up, and what nobody tells you about the order edge cases.

S. BrandtApr 26, 2026 · 8 min
engineering
Engineering30

The redirect_url is a UI. The webhook is the truth.

The browser return is a courtesy to the customer. Fulfilment runs off the verified invoice.paid webhook, or it doesn't run at all. Here's why, and what breaks when you confuse the two.

R. AdeyemiApr 24, 2026 · 8 min
product
Product31

Choosing a settlement currency: hold, convert, or rebalance

Three honest options for what your balance does after an invoice is paid — hold the asset you were paid in, auto-convert toward a stablecoin, or rebalance treasury by hand. None of them is a bank wire.

L. TanakaApr 22, 2026 · 8 min
Stablecoin payroll playbook cover
playbooks
Playbooks32

A stablecoin payroll playbook for distributed teams

How three remote-first companies replaced SWIFT and EOR fees with USDC payouts, including the tax and accounting plumbing nobody tells you about.

L. ParkApr 21, 2026 · 12 min
networks
Networks33

XRP destination tags: the integer that decides who gets paid

On the XRP Ledger the address is shared and the destination tag is the routing detail. Drop the tag and the money lands, but in the wrong ledger row. Here is why, and how it shapes acceptance.

M. VossApr 20, 2026 · 8 min
product
Product34

The pending-approval gate: why every payout waits

Every payout you create sits inert until someone releases it from the dashboard. Teams read that pause as friction. It is the opposite — it is the one place a wrong address gets caught before the chain makes it permanent.

L. TanakaApr 18, 2026 · 7 min
playbooks
Playbooks35

Why on-chain payments have no chargebacks

A confirmed crypto payment is final, with no card network to claw it back. Here is what that actually changes for disputes, fraud reserves, and the refund flow that replaces the chargeback button.

S. BrandtApr 16, 2026 · 8 min
Webhook reliability engineering deep-dive cover
engineering
Engineering36

Designing webhooks that survive everything

Idempotency keys, signed envelopes, exponential backoff with jitter, and the moment your queue catches fire at 03:14 UTC. Lessons from the halfin event bus.

A. RibeiroApr 14, 2026 · 11 min
product
Product37

Multi-currency invoices in practice: one bill, the coin they brought

One fiat-anchored invoice can present USDT, USDC, BTC, ETH, SOL, and XRP at once. The customer settles in whatever they hold, and the fiat figure you billed never moves. Here is how that plays out at the checkout and in your books.

L. TanakaApr 14, 2026 · 9 min
engineering
Engineering38

Building a crypto subscription system without a card on file

Invoice-per-cycle, a fresh rate lock every period, entitlement granted off the verified invoice.paid webhook, and dunning that doesn't lock people out on the first miss. The architecture, not the marketing.

R. AdeyemiApr 12, 2026 · 10 min
networks
Networks39

Accepting USDT on three chains: let the payer pick

The same dollar of USDT settles on Tron, Ethereum, and Solana with wildly different fees and confirmation times. Here is how to expose all three and why TRC-20 keeps winning high-volume acceptance.

M. VossApr 10, 2026 · 8 min
engineering
Engineering40

Reconciling mass payouts without tears

A payout run of 5,000 lines will time out, double-fire, and lie to you at least once. Per-line idempotency_key, the payout webhooks as truth, and the recovery query that closes the books.

R. AdeyemiApr 08, 2026 · 10 min
MiCA Phase 2 explainer cover
compliance
Compliance41

MiCA Phase 2, in plain English

The CASP licence track, stablecoin reserve rules, and what changes for merchants accepting EUR-denominated crypto invoices in the EU.

R. SahinApr 07, 2026 · 8 min
compliance
Compliance42

KYB and going live: how verification gates the live key

Business verification isn't a hurdle you clear before you start — it's the one thing standing between a sandbox key and a live one. Here is what the process looks like and how to run it so going live is a credential swap, not a scramble.

P. NairApr 06, 2026 · 8 min
product
Product43

Account funding: give each customer one address, not one invoice per top-up

When a customer adds money to a balance again and again, an invoice per charge is the wrong tool. A persistent per-customer deposit address credits reorg-aware with a webhook and keeps your reconciliation flat.

L. TanakaApr 04, 2026 · 8 min
playbooks
Playbooks44

Crypto for prop firms: funding challenges in, paying winners out

How to take stablecoin deposits for challenge fees with a fiat-anchored, rate-locked invoice, and how to release trader profits through approved payouts without leaking treasury control.

S. BrandtApr 02, 2026 · 8 min
engineering
Engineering45

After the window closes: late deposits, reversals, and the handler that doesn't double-credit

An invoice that already expired can still receive money, and a credit you already booked can still be unwound by a reorg. invoice.late_deposit and invoice.deposit_reversed are the two events that make those facts arrive as data instead of as a finance ticket — if your handler is idempotent enough to trust them.

R. AdeyemiMar 31, 2026 · 10 min
Fiat-anchored invoice pricing mechanics cover
product
Product46

How fiat-anchored invoices actually price themselves

A look under the hood at the rate window, settlement tolerance, and why a 90-second TTL is the right answer for almost everyone.

halfin teamMar 31, 2026 · 7 min
networks
Networks47

Base vs Arbitrum for merchant settlement: how to actually choose

Two Ethereum L2s, both EVM, both cheap, both reorg-aware. The decision is not throughput benchmarks — it's which assets settle on each rail and where your customers' funds already sit.

M. VossMar 29, 2026 · 8 min
playbooks
Playbooks48

Accepting crypto donations for creators: whose tip is this?

A tip is a payment with a name on it. The hard part isn't taking the money — it's knowing which creator it belongs to when the signed webhook arrives, and paying them all back out without a reconciliation that disagrees with itself.

S. BrandtMar 27, 2026 · 9 min
engineering
Engineering49

A sandbox-first testing playbook: prove the lifecycle before you flip to live

Simulate the full invoice and payout lifecycle with test keys, drive the real webhook events, assert idempotency under replay, then promote. What we want green before a single mainnet cent moves.

R. AdeyemiMar 25, 2026 · 10 min
Marketplace settlements playbook cover
playbooks
Playbooks50

Closing 4,000 sellers a week without losing your mind

A marketplace finance lead walks through their batch-payout reconciliation, dispute window, and the single Postgres view they wish they'd built sooner.

D. OkonkwoMar 24, 2026 · 10 min
playbooks
Playbooks51

Selling across borders when the card declines anyway

The order is real, the customer is real, and the card still gets rejected for being in the wrong country. Here's how to price in your own fiat and settle in USDT or USDC without the card network getting a vote.

S. BrandtMar 23, 2026 · 8 min
engineering
Engineering52

Webhook idempotency and replays: build the handler that ships nothing twice

A webhook can arrive more than once. Verify the HMAC, dedupe on the event id, and make the side effect itself idempotent — so a redelivery is a no-op instead of a second shipment.

R. AdeyemiMar 21, 2026 · 8 min
networks
Networks53

Orderbook vs AMM: where your conversion price actually comes from

When you convert one asset to another, a price has to come from somewhere. Two machines produce it differently — a matched book of resting orders, or a pool with a formula. Knowing which is answering decides how you read the number you get.

M. VossMar 19, 2026 · 8 min
First hour in halfin sandbox tour cover
engineering
Engineering54

Your first hour in the halfin sandbox

A guided tour: create a key, fire an invoice, simulate a confirmation, replay a webhook. Everything you need to demo a flow before standup.

halfin devrelMar 17, 2026 · 5 min