confirmations.info Independent payment monitoring Start building

On-chain certainty / off your plate

Confirmations

Your wallet. Our watch.

Direct to you

Your
wallet.
Your
funds.

No middleman between the sender and your address.

No
custody.
No KYC.

Exact-amount crypto payment confirmation to your own cold-wallet addresses, delivered via webhooks.

Confirmations never custodies or moves funds.

01 / The process

Four steps.
Funds stay yours.

  1. Sign up

    Donate at least $5 to the EFF in BTC, ETH, or BNB for the free starter plan. Send the exact amount shown, then claim your API key after confirmation. Or subscribe directly to a paid plan.

  2. Keep keys offline

    Generate wallet addresses offline with python -m cli generate-wallet 10. Register only the public addresses with the API. Your private keys and mnemonic never leave your machine.

  3. Set the amount

    Create a payment with a USD amount, target chain, and callback URL. The API allocates one of your registered addresses and computes an exact native-token amount with a unique offset, distinguishing concurrent payments to the same address.

  4. Get the webhook

    The background monitor watches the chain and POSTs your callback URL once the transfer reaches the required confirmations. Unpaid payments expire after 1 hour.

02 / Coverage

Ten
chains.

One API. Native-token payments.

03 / Plans

Pick
your
pace.

Starter

Free

100 events/month

Via EFF donation
Minimum $5

Growth

$49/month

10,000 events/month

For a growing payment flow.

Scale

$199/month

100,000 events/month

For higher payment volumes.

04 / Quickstart

Make the call.

Base URL: https://api.confirmations.info
Replace the placeholders with your own values.

01 / POST /signup

Start with a donation

This creates a donation intent for the starter plan. Send the exact native-token amount returned to the EFF address returned by the API.

Shell / signup
curl -X POST https://api.confirmations.info/signup \
  -H "Content-Type: application/json" \
  -d '{"method":"donation","chain":"ethereum","usd_amount":5}'

02 / POST /signup/{intent_id}/claim

Claim your API key

After the donation confirms, replace INTENT_ID with the returned intent_id and claim your key. Store it securely; it cannot be recovered. Use it as YOUR_KEY below.

Shell / claim
curl -X POST https://api.confirmations.info/signup/INTENT_ID/claim

03 / POST /addresses

Register public addresses

Generate addresses offline first with python -m cli generate-wallet 10. Replace 0xYOUR_ADDR with your public Ethereum address.

Shell / addresses
curl -X POST https://api.confirmations.info/addresses \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"chain":"ethereum","addresses":["0xYOUR_ADDR"]}'

04 / POST /payments

Create a payment

Set the USD amount, chain, and your webhook URL. Ask the sender to transfer exactly the returned amount_native to the returned address.

Shell / payments
curl -X POST https://api.confirmations.info/payments \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"usd_amount":"25.00","chain":"ethereum","callback_url":"https://shop.example/callback"}'

Response fields: payment_id, chain, address, amount_wei, amount_native, usd_amount, expires_at. Amounts are strings; amount_wei is the exact amount in the chain’s smallest unit.

05 / GET /payments/{payment_id}

Check the status

Replace PAYMENT_ID with the returned payment_id. Status is PENDING, PAID, or EXPIRED.

Shell / status
curl https://api.confirmations.info/payments/PAYMENT_ID \
  -H "X-API-Key: YOUR_KEY"

Response fields: payment_id, status, chain, address, amount_native, usd_amount, tx_hash, confirmations.

06 / POST to your callback URL

Confirmation delivered

The webhook POST carries JSON transaction details when the payment confirms. Failed delivery is retried with exponential backoff.

Field names are camelCase. expectedAmountWei is the exact amount in the chain's smallest unit (wei or satoshis). Delivery is retried up to 6 times with exponential backoff. See /llms.txt for the full contract.

JSON / webhook body
{
  "paymentId": "0f2ac20d-3189-44b6-9fcf-6fb736e0aacf",
  "userId": "9a7d31d2-98f8-4d2e-a4d1-4f1849320d99",
  "chain": "ethereum",
  "address": "0xA11CE...",
  "txHash": "0x5cf4...d41",
  "blockNumber": 21000042,
  "confirmations": 2,
  "expectedAmountWei": "10483000000000000"
}

05 / Machine-readable

Built
for
agents.

The API is designed to be driven by LLM/coding agents, not just humans.