FF Bitcoin
Part of FastFlowTech

Multi-sig Wallets
and Bitcoin Operations

2-of-3 P2WSH wallets, PSBT construction, deposit monitoring, and on-chain settlement - backed by Bitcoin Core and NBXplorer.

Create a 2-of-3 multi-sig wallet
$ curl -X POST /v1/wallets \
-H "Authorization: Bearer $TOKEN" \
-d '{"user_id":"usr_42","user_xpub":"xpub6D..."}'
// Response
{
"id": 1,
"user_id": "usr_42",
"derivation_scheme": "2-of-xpub6D...-xpub6E...-xpub6F...",
"created_at": "2026-03-20T02:15:00Z"
}

On-chain Bitcoin, properly abstracted

Five primitives. Everything you need to custody, receive, and send Bitcoin programmatically.

2-of-3 Multi-sig Wallets

P2WSH native segwit with BIP67-sorted keys. Platform key, user key, and backup key - two required to sign any transaction.

Deposit Monitoring

NBXplorer-backed address tracking with configurable confirmation thresholds. Fresh addresses per deposit, UTXO visibility.

PSBT Construction

Platform constructs and partially signs the PSBT. User completes the second signature. Two-step withdrawal flow, never touching the user's private key.

Settlement Engine

Batched, netted on-chain settlements. Multiple withdrawals consolidated into fewer transactions to minimize fees.

Fee Estimation

Real-time sat/vbyte estimates from Bitcoin Core. Fast (1 block), medium (3 blocks), and slow (6 blocks) targets.

UTXO Visibility

Full confirmed UTXO set per wallet. Transaction IDs, output indexes, amounts in sats, and confirmation counts.

API Reference

Seven endpoints. Wallets, withdrawals, and fees - the complete surface area.

Wallets
POST /v1/wallets
GET /v1/wallets/{userId}
GET /v1/wallets/{userId}/address
GET /v1/wallets/{userId}/utxos
Withdrawals
POST /v1/withdraw/prepare
POST /v1/withdraw/complete
Fees
GET /v1/fees

Where it fits

FF Bitcoin bridges the gap between platform services and the Bitcoin network.

FF Banking wallets, balances
FF Bitcoin multi-sig, PSBT
FF Bitcoin deposit tracking
NBXplorer UTXO indexer
FF Bitcoin fees, broadcast
Bitcoin Core full node

Two-step withdrawal

Platform signs first. User completes. Neither party can move funds alone.

withdrawal-flow.sh
# Step 1: Platform builds and partially signs the PSBT
$
curl -X POST /v1/withdraw/prepare \
-d '{"user_id":"usr_42","dest_address":"bc1q...","amount_sats":50000}'
{"psbt":"cHNidP8B...","fee_sats":1420,"tx_size":235}
# Step 2: User signs and broadcasts
$
curl -X POST /v1/withdraw/complete \
-d '{"user_id":"usr_42","signed_psbt":"cHNidP8B..."}'
{"txid":"a1b2c3d4e5f6...789"}