Why Base for a dollar payment
Base is an Ethereum L2 — it inherits Ethereum's USDC and EVM tooling but settles transactions at a small fraction of mainnet cost. For a merchant taking dollar payments, that cost difference is the whole point. The amount on the invoice and the amount that lands on-chain are still dollars, so reconciliation is unchanged from any other USDC rail, but the network fee a payer pays to send it is low enough that it stops being a reason to avoid an everyday-sized payment.
That makes Base the network to reach for when ticket sizes are small or mid-range and your buyers already hold USDC on an EVM chain. On Ethereum mainnet, the network fee on a modest payment can be a meaningful slice of the amount; on Base, the same USDC moves cheaply, so a smaller invoice is still worth settling on-chain. If your customers are US businesses or EVM-native treasuries comfortable bridging to or holding on Base, steering them there keeps their cost — and the friction of paying you — down.
USDC on Base is the same asset halfin makes a single claim about: a dollar-denominated stablecoin, one unit intended to track one US dollar. It is not a bank deposit, not a regulated payment instrument, and halfin does not say otherwise. What changes between Ethereum and Base is only the rail the dollar travels on — the dollar value, and the way halfin anchors and reconciles it, stay the same.
Base in the USDC lineup
halfin accepts USDC on three networks, and they are not interchangeable from the payer's point of view — they differ in cost and in which wallets people use. Base is the low-cost EVM option; Ethereum is the canonical, higher-cost home for larger payments; Solana is the fast, low-fee non-EVM rail. The right network is usually whichever one the customer already holds, and a single invoice can offer more than one. The table below is the quick way to place Base against its siblings.
| Network | How USDC moves | Cost profile | Best for |
|---|---|---|---|
| Base | ERC-20 USDC on the Base L2 | Low-cost settlement | Everyday and smaller-ticket dollar payments from EVM wallets |
| Ethereum | ERC-20 token on Ethereum mainnet | Highest network fee of the three | Larger payments; institutional / EVM-native payers |
| Solana | SPL token on Solana | Fast, low-fee | Payers already holding USDC on Solana |
How a Base USDC payment is credited
Accepting USDC on Base is not just reading a wallet balance — it is deciding when an on-chain payment is final enough to act on. halfin watches the USDC deposit as it appears on Base, then confirms it against Base's own confirmation threshold before the invoice is marked paid, so you are not releasing goods against a transaction that could still be reorganized away. Finality on an L2 is its own thing, distinct from Ethereum mainnet and from Solana, which is why the threshold is set per chain rather than by one global rule.
Crediting on Base is reorg-aware, the same as every supported rail. If a block that carried a payment is unwound, that is reflected rather than silently kept as settled — the amount you see as paid is an amount that actually held. Because the asset is dollar-denominated and the invoice is dollar-anchored, the underpaid and overpaid cases stay legible: send slightly less USDC than the invoice expected and the shortfall is recorded against the invoice so you can request a top-up or settle partially under your own policy; send more and the excess is recorded and visible instead of disappearing into an unmatched-deposit pile.
- Base confirmation threshold — the invoice is marked paid only after on-chain confirmations reach Base's own finality, not a single global rule.
- Reorg-aware crediting — a transaction unwound by a reorg is reflected, not kept as settled.
- Underpaid and overpaid are first-class — the gap is recorded against the invoice, not discarded.
- Dollar anchor preserved — you reconcile against the USD figure you billed, not the token's spot value at confirmation.
Take a USDC-on-Base payment with a fiat-anchored invoice
You do not create a "Base invoice." You create an invoice priced in your fiat currency, and USDC on Base is one of the ways it can be paid — alongside USDC on Ethereum or Solana, and the other supported assets. The rate locks at activation, so the payable token amount is fixed for the life of the invoice and a stale quote never re-prices in the background.
Here is a minimal create call against the public API. The amount is a string — monetary values are strings end to end, never floats — and the currency is your fiat anchor. The exact request and response shapes live in the docs and the @halfin/sdk-merchant types; the point here is that one authenticated call gives you a payable invoice that a USDC holder on Base can settle straight from their EVM wallet.
curl -X POST https://api.thehalfin.com/api/v1/invoices \
-H "X-API-Key: $HALFIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount_fiat": "19.00",
"fiat_currency": "USD",
"deferred": true,
"description": "Starter plan — March",
"idempotency_key": "00000000-0000-4000-8000-000000000002"
}'
# halfin locks the rate at activation and returns a payable invoice. A USDC
# holder can settle it on Base; you reconcile against the USD figure. See
# docs.thehalfin.com for the full request and response schema.Knowing the payment landed
Once an invoice exists, you track it the same way no matter which network the USDC arrives on. State changes are observable across the dashboard, the REST API, and signed webhooks, so your backend can fulfill, email, or update records the moment a Base payment confirms — without polling a block explorer.
The webhook envelope is HMAC-signed. Verify the signature before you take any business action on an event: a verified invoice.paid event is your signal that the USDC payment reached Base's confirmation threshold and the dollar amount settled to your balance. invoice.underpaid and invoice.overpaid tell you a payment arrived but did not match the expected amount, so you can act on the shortfall or excess deliberately rather than treating it as a failed payment.
Base alongside the rest of the platform
USDC on Base rarely stands alone. It is one option on a fiat-anchored invoice that hosted checkout can render for you, or that you can render yourself against the same API. Many merchants offer Base for everyday payments and Ethereum for larger ones, so the same dollar invoice fits both the small-ticket and the institutional payer without a second integration.
On the settlement side, USDC you take in on Base accrues to a balance you can convert or pay out, and a refund flows back through the refunds primitive. For the cross-network view — how USDC on Base compares with Solana, and how the wider set of supported chains confirm and settle — the USDC hub and the networks page are the companions to this one.