Skip to main content
Not sure if liquidation addresses are right for you? See Choose Your Integration for a comparison of all three integration patterns.
Liquidation addresses are persistent Bitcoin L1 deposit addresses. Each incoming deposit automatically creates an order that swaps BTC and delivers the output asset to a fixed destination on any supported chain. This is the right integration when you want a static bc1... address and you do not want to call /quote and /submit per deposit.

How It Works

  1. You create a liquidation address with a fixed destination chain, asset, and address.
  2. Flashnet returns an L1 deposit address (l1DepositAddress).
  3. Any BTC deposit to that address creates an order.
  4. You track the order by receiving partner webhooks.
Orders created from liquidation deposits have:
  • sourceChain = bitcoin
  • sourceAsset = BTC
  • destinationChain and destinationAsset from the liquidation address configuration
  • quoteId = null

Create a Liquidation Address

const BASE_URL = 'https://orchestration.flashnet.xyz';

const res = await fetch(`${BASE_URL}/v1/liquidation-addresses`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.FLASHNET_API_KEY}`,
    'X-Idempotency-Key': `liq:create:${Date.now()}`,
  },
  body: JSON.stringify({
    label: 'Merchant settlement',
    destinationChain: 'ethereum',
    destinationAsset: 'USDC',
    destinationAddress: '0xYourEthereumAddress',

    // If true, deposits may be credited via ZeroConf before confirmations.
    // If false, deposits wait for confirmations before processing.
    zeroconfEnabled: false,

    feeBps: 5,
    slippageBps: 50,
  }),
}).then((r) => r.json());

// res.l1DepositAddress is the reusable Bitcoin address.
console.log(res.l1DepositAddress);
Response fields:
  • liquidationAddressId: stable id
  • l1DepositAddress: Bitcoin deposit address (bc1...)
  • sparkAddress: Spark address used internally for deposit claiming and sweeps
  • destination.chain, destination.asset, and destination.address: fixed payout destination
Response example:
{
  "liquidationAddressId": "liq_...",
  "sparkAddress": "spark1...",
  "l1DepositAddress": "bc1...",
  "destination": { "chain": "ethereum", "asset": "USDC", "address": "0x..." },
  "zeroconfEnabled": false,
  "feeBps": 5,
  "slippageBps": 50,
  "enabled": true,
  "createdAt": "2026-02-04T01:00:00.000Z"
}

Deposit Lifecycle

Each Bitcoin deposit is identified by (txid, vout), where vout is the output index that paid the liquidation address. A single Bitcoin transaction can contain multiple outputs to different liquidation addresses (or multiple outputs to the same address). For reliable attribution, use webhooks and store order.id from the payload.

Webhooks

Liquidation deposits create normal order.* webhook events. To receive them:
  1. Register an endpoint with POST /v1/webhooks.
  2. Verify X-Flashnet-Signature on inbound requests.
  3. Treat webhook delivery as at least once.
See Webhooks.

Manage Addresses

List enabled liquidation addresses:
  • GET /v1/liquidation-addresses
Get an address by id (enabled or disabled):
  • GET /v1/liquidation-addresses/:id
Disable an address:
  • DELETE /v1/liquidation-addresses/:id (requires X-Idempotency-Key)

ZeroConf

Liquidation addresses support the zeroconfEnabled flag. When enabled, each deposit generates a ZeroConf offer requiring partner resolution. When disabled, deposits wait for 3 on-chain confirmations. See ZeroConf for the full offer flow, confirmation behavior, and accept/decline endpoints. Some deployments require ZeroConf to be configured for liquidation address provisioning. If address creation returns a configuration error, contact your Flashnet operator.

Next Steps