Merchant Payment Confirmations.
Automate checkouts and billing pipelines with reorg-safe block confirmations.
Verify customer on-chain payments securely. Track transfer events across multiple networks, and parse payment payloads with built-in reorg protection.
Confirming crypto payments safely requires more than detecting transactions
Accepting cryptocurrency payments isn't just about knowing when a transaction appears on-chain. Merchants must account for confirmation depth, blockchain reorganizations, duplicate events, and chain-specific settlement rules before treating a payment as final. Building these safeguards yourself adds significant complexity and increases the risk of premature payment confirmation, duplicate processing, or reconciliation errors.
Reliable payment confirmation across multiple blockchains
Blockferry tracks payment transactions from detection through final confirmation, applying chain-aware confirmation rules before notifying your application. Transactions are normalized across supported networks, deduplicated automatically, and delivered through verified webhooks with rich metadata for reconciliation. With built-in replay, retries, and correlation IDs, Blockferry helps you build secure crypto checkout experiences without maintaining custom blockchain monitoring infrastructure.
Build it with the SDK & CLI
| 1 | import { eventFilter } from "@blockferry/sdk"; |
| 2 | import { Blockferry } from "@blockferry/sdk"; |
| 3 | |
| 4 | const bf = new Blockferry({ |
| 5 | webhookSecret: process.env.BF_WEBHOOK_SECRET!, |
| 6 | }); |
| 7 | |
| 8 | export async function POST(req: Request) { |
| 9 | const ok = bf.verify(req); |
| 10 | if (!ok) return new Response("Unauthorized", { status: 401 }); |
| 11 | |
| 12 | const checkout = await db.checkouts.findActive(); |
| 13 | |
| 14 | const matched = await eventFilter() |
| 15 | .isAddress([checkout.depositAddress]) |
| 16 | .isConfirmed(true) |
| 17 | .verifySignature(process.env.BF_WEBHOOK_SECRET!) |
| 18 | .andWhere(event => event.addressContext.checkout_id === checkout.id) |
| 19 | .validate(req); |
| 20 | |
| 21 | if (matched) { |
| 22 | const [event] = bf.parse(req); |
| 23 | await db.payments.update(checkout.paymentId, { |
| 24 | status: "confirmed", |
| 25 | amount: event.valueInDecimals, |
| 26 | chain: event.chain, |
| 27 | }); |
| 28 | return new Response("Payment Processed", { status: 200 }); |
| 29 | } |
| 30 | return new Response("No Match", { status: 200 }); |
| 31 | } |
What you get out of the box
Reliable block finality status tracking directly inside the webhook payload metadata
Standardized ERC-20 token transfer symbol, decimals, and value parsing across chains
Idempotent processing via dedicated correlation IDs and unique block transaction identifiers
Durable webhook replay utility to reconstruct billing states and reconcile missed events
Multi-tenant isolation ensuring merchant account payloads are strictly isolated
Other Blueprints
Wallet Activity Monitoring
Track address balances, state changes, and token transfers in real time.
Multisig & Treasury Alerts
Secure institutional funds with automated alerts for multi-chain wallet transfers.
Token Distribution Alerts
Engage users with live webhook feeds for loyalty token and utility transfers.
Ship merchant payment confirmations this week.
Create an account and hook up your first workflow rule in just a few minutes.