What ZeroConf Does
When enabled, Bitcoin L1 deposits can receive full credit instantly. Instead of waiting for on-chain confirmations, the engine generates a ZeroConf offer that partners accept or decline. Accepted offers credit the deposit immediately and proceed with execution.Confirmation Behavior
| Scenario | Confirmations required |
|---|---|
| ZeroConf offer accepted | 0 (instant) |
| ZeroConf offer declined | 1 |
| ZeroConf offer expired (no response) | 1 |
ZeroConf disabled (zeroconfEnabled=false) | 3 |
The Offer Flow
Quote with ZeroConf enabled
Create a quote with
sourceChain=bitcoin and zeroconfEnabled=true (the default for bitcoin source, exact-in quotes). Set zeroconfEnabled=false explicitly to disable.Deposit detected
After the Bitcoin transaction is broadcast and detected by the mempool monitor, the engine evaluates the deposit for ZeroConf eligibility.
Offer generated
The engine generates a ZeroConf offer and moves the order to
awaiting_approval. The offer appears in order.zeroconfOffer in both status responses and webhook payloads.Accept or decline
Call
POST /v1/orchestration/zeroconf/accept for instant credit, or POST /v1/orchestration/zeroconf/decline to wait for 1 confirmation. If you do not respond before expiresAt, the offer expires and the engine waits for 1 confirmation.ZeroConf Offer Fields
When present,order.zeroconfOffer contains:
| Field | Type | Description |
|---|---|---|
status | string | pending, accepted, declined, expired, or confirmed |
quoteId | string | ZeroConf quote identifier |
depositSats | string | Total BTC deposited (sats) |
instantSats | string | Amount credited instantly on acceptance |
holdbackSats | string | Amount held until on-chain confirmation |
feeSats | string | ZeroConf fee (sats) |
confirmationProbability | number | Estimated probability the transaction confirms |
expiresAt | string | Offer expiry (ISO 8601) |
offeredAt | string | When the offer was generated |
resolvedAt | string or null | When accepted, declined, or expired. null while pending |
confirmed status means the Bitcoin transaction reached 1 confirmation before the offer was resolved, bypassing the approval window entirely.
Distinguishing ZeroConf from Repricing
Both ZeroConf offers and repricing requests move orders toawaiting_approval. Check which field is present:
order.zeroconfOfferwithstatus=pending-> ZeroConf offer. Resolve with/zeroconf/acceptor/zeroconf/decline.order.repricewithstatus=awaiting_approval-> Repricing request. Resolve with/reprice/approve,/reprice/reject, or/reprice/refund.
Accept and Decline
Accept (instant credit):Scope
- ZeroConf applies when
sourceChain=bitcoinandamountMode=exact_in. - Exact-out (
amountMode=exact_out) uses confirmation-based processing and does not use ZeroConf. zeroconfEnableddefaults totruewhensourceChain=bitcoin. Set it tofalseexplicitly to disable.- If the deployment does not have ZeroConf configured, the engine falls back to on-chain confirmations silently. No error is returned.
Liquidation Addresses
Liquidation addresses support thezeroconfEnabled flag. When enabled, each Bitcoin deposit generates a ZeroConf offer requiring partner resolution via webhook + API call. When disabled, deposits wait for 3 on-chain confirmations.
Some deployments require ZeroConf to be configured for liquidation address provisioning. If address creation returns a configuration error, contact your Flashnet operator.
See Liquidation Addresses for setup.