HomeUse casesMerchant Payment Confirmations
Commerce

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.

By the numbers
Reorg-SafeBlock Finality
At-Least-OnceDelivery Guarantee
10+Chains Monitored
The Problem

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.

The Solution

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.

Implementation

Build it with the SDK & CLI

SDK
payments.ts
1import { eventFilter } from "@blockferry/sdk";
2import { Blockferry } from "@blockferry/sdk";
3
4const bf = new Blockferry({
5 webhookSecret: process.env.BF_WEBHOOK_SECRET!,
6});
7
8export 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}
Terminal
~
Capabilities

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

Ship merchant payment confirmations this week.

Create an account and hook up your first workflow rule in just a few minutes.