Skip to content

Webhooks for blockchain transfers

Monitor wallet addresses across multiple blockchains and receive webhooks when transfers are confirmed.

Supported networks: Ethereum, BNB Smart Chain, Polygon, Arbitrum One, OP Mainnet, Base, Avalanche C-Chain, TRON, and Bitcoin.

From block to backend

Chainhook scans each network, waits for confirmations, matches transfers to your webhooks, and sends a signed POST.

Transfers from Ethereum, BNB Smart Chain, Polygon, Arbitrum One, OP Mainnet, Base, Avalanche C-Chain, TRON, and Bitcoin flow into Chainhook, which scans blocks, waits for confirmations, matches your addresses, and sends each transfer to your app as a signed POST request.

One request to create, one handler to receive

Create webhooks in the dashboard or over the API. Handle events in any language.

  • REST API

    Create, pause, and delete webhooks. Look up and replay deliveries.

  • Duplicate-safe

    Delivery is at-least-once. Skip duplicates by event id, which stays the same across retries and replays.

  • MCP server for AI agents

    Connect any MCP client to manage webhooks and check deliveries from an AI agent.

  • Docs for people and LLMs

    A complete API reference, plus llms.txt and llms-full.txt for AI tools.

Read the API reference

1. Create a webhook

curl https://api.chainhook.io/v1/webhooks \
  -H "Authorization: Bearer $CHAINHOOK_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "network": "bsc",
    "type": "token",
    "direction": "in",
    "address": "0x9d2a7e41c8b05f3e6a1d4c7b28e0f95a3b6c1d47",
    "webhook_url": "https://api.example.com/webhooks/chainhook"
  }'

2. Receive and verify the event

POST /webhooks/chainhook HTTP/1.1
Host: api.example.com
Content-Type: application/json
User-Agent: chainhook/1.x
X-Webhook-Id: 01a0fbfd-4fe4-7a3c-8f21-6b9d0e4c7a15
X-Webhook-Signature: 7a12d02673420517279805cf8188a1a62c6f69706161ba5cf0a8ec91ea66b8e3

{
  "id": "01a0fbfd-4fe4-7a3c-8f21-6b9d0e4c7a15",
  "event": "transfer.detected",
  "created_at": "2026-10-02T09:41:17Z",
  "webhook_id": "01a0fbf2-fadc-7c3e-9b1a-4d6f2e8a5c71",
  "data": {
    "network": "bsc",
    "direction": "in",
    "type": "token",
    "transaction_hash": "0x7c1e9f4a2b6d8035e4f1a9c27d3b5e8061f4a2c9d7b3e5f8a1c4d6e9b2f7a3c5",
    "transfer_index": 214,
    "block_number": 71206438,
    "block_hash": "0x3a8f2c6e1d9b4f7a0c5e8d2b6f1a9c4e7d0b3f6a2c8e5d1b9f4a7c0e3d6b8f2a",
    "block_timestamp": "2026-10-02T09:41:05Z",
    "confirmations": 16,
    "from": "0xe3b1c5a9f27d4e8b06c1a3f5d9e2b7c4a8f6d0e1",
    "to": "0x9d2a7e41c8b05f3e6a1d4c7b28e0f95a3b6c1d47",
    "currency": "USDT",
    "amount": "1250.75",
    "amount_raw": "1250750000000000000000",
    "decimals": 18,
    "contract_address": "0x55d398326f99059ff775485246999027b3197955"
  }
}

What you don't have to build

Scanning, confirmations, token decoding, and delivery work the same on every network.

  • Confirmed before it's sent

    Nothing is sent until the transfer reaches the network's confirmation depth.

  • Signed requests

    Each request has an HMAC-SHA256 signature you check with your webhook's secret. URLs must use HTTPS, and private IP addresses are refused.

  • Automatic retries

    If your server is down, Chainhook retries. You can replay any delivery later.

  • Delivery log

    Every delivery's status and your endpoint's response, in the dashboard and the API.

Networks and tokens

What Chainhook detects today, and how many confirmations it waits for on each network.

NetworkValueNative coinTokensConfirmations
EthereumethereumETHUSDT, USDC, BUSD, DAI, WETH, WBTC, LINK, UNI, SHIB, PEPE12
BNB Smart ChainbscNot detectedUSDT, USDC, BUSD, DAI, WBNB, Cake, ETH, BTCB15
PolygonpolygonNot detectedUSDT, USDC, DAI, WETH, WPOL, WBTC64
Arbitrum OnearbitrumNot detectedUSDT, USDC, DAI, WETH, ARB, WBTC20
OP MainnetoptimismNot detectedUSDT, USDC, DAI, WETH, OP, WBTC20
BasebaseNot detectedUSDC, DAI, WETH, cbBTC20
Avalanche C-ChainavalancheNot detectedUSDT, USDC, DAI.e, WAVAX, WETH.e, WBTC.e20
TRONtronNot detectedUSDT, USDC, WTRX, JST19
BitcoinbitcoinBTCNot detected6

Contracts, confirmations and sample payloads per network. Missing a token? Email us.

Pay per detection

Start with 100 trial detections for 1 month and pay only for what you use. Paid plans add detections, webhooks, and per-detection overage.

  • Pay as you go

    $0/month

    Card required, no monthly fee

    • 100 trial detections for 1 month
    • 3 active webhooks
    • $0.001 per detection after the trial
    • Decoded transfers, delivered once confirmed
  • Starter

    $9/month

    or $90/year billed yearly

    • 25,000 detections a month
    • 25 active webhooks
    • $0.0006 per extra detection
    • Decoded transfers, delivered once confirmed
  • Recommended

    Growth

    $29/month

    or $290/year billed yearly

    • 100,000 detections a month
    • 100 active webhooks
    • $0.0003 per extra detection
    • Decoded transfers, delivered once confirmed
  • Scale

    $99/month

    or $990/year billed yearly

    • 400,000 detections a month
    • 200 active webhooks
    • $0.0002 per extra detection
    • Decoded transfers, delivered once confirmed

Enterprise

Custom limits for teams that need more than 400,000 detections a month or more than 200 active webhooks. Contact us and we'll set up a plan around your volume.

Contact support

Prices in USD, plus applicable tax. Billed monthly or yearly, and paid allowances reset monthly. Cancel any time and keep your plan until the period ends.

Compare plans and estimate your bill

Questions

How Chainhook detects, confirms, and delivers transfers, and how billing works.

Can't find your answer? Contact support.

Does Chainhook hold my funds?

No. Chainhook only reads public blockchain data and never asks for private keys. Transfers go straight to addresses you control.

Can I get alerts in Discord or Telegram?

Yes, through a small bridge. Point the webhook at your own endpoint or serverless function, verify the signature, and post a message to a Discord webhook or a Telegram bot. Chainhook sends JSON events, not chat messages.

How do I match a payment to an order?

Give each open order its own deposit address and webhook, and delete the webhook once it's paid to stay within your plan's active webhook limit. Each event includes the receiving address, transaction hash, and amount.

How quickly are transfers delivered?

As soon as the block reaches the network's confirmation depth: seconds on the fastest networks, a few minutes on Ethereum, about an hour on Bitcoin.

How do I verify a request came from Chainhook?

Each request has an X-Webhook-Signature header, an HMAC-SHA256 of the raw body using your webhook's secret. Compute the same hash and compare.

What if my endpoint is down?

Chainhook retries automatically. If every attempt fails, replay the delivery from the dashboard or the API.

How is my account protected?

Sign in with an authenticator app, a passkey, or both. API keys are shown once and never stored, and you can revoke one or set it to expire.

What counts as a detection?

One transfer matched by one webhook. A transfer that matches three webhooks is three detections. Retries and replays are free.

What happens when I reach my allowance?

Pay as you go has no monthly fee and includes 100 trial detections for 1 month after sign-up, then each detection is paid from prepaid credit at $0.001. Paid plans keep detecting past their allowance and pay for extra detections from prepaid credit at the plan's overage rate. You can turn overage off to stop at the allowance instead.

Can I pay yearly?

Yes. Every paid plan can be billed monthly or yearly, and yearly billing costs less. Your allowance still resets every month, and extra detections are paid from credit on both.

Can I change or cancel my plan?

Yes. Upgrades apply right away, with a prorated charge for the rest of the period. Downgrades and cancellations apply at the end of the billing period, so you keep your current plan until then. Detection stops when a cancelled plan ends. There are no refunds for partial periods.

Watch your first wallet

Create an account and start with 100 trial detections for 1 month.