Base URL: https://ledgerbell.quietworklabs.workers.dev. Auth: header x-api-key: lb_…. Machine-readable: /openapi.json, /.well-known/x402.
POST /api/key -> {key}
GET /api/me (x-api-key) -> plan, watches (with last_error, pending), invoices
POST /api/watch (x-api-key) {chain, kind, address, webhook, event?, token?, label?, safe_api_key?}
POST /api/watch/test (x-api-key) {id}
POST /api/watch/delete (x-api-key) {id}
POST /api/upgrade (x-api-key) {months?} -> exact USDC amount on Base (+ x402 pay link)
GET /api/stats -> public counters
GET /x402/pro-30d | /x402/pro-7d -> x402 payment, returns {key, plan, pro_until}
GET /upgrade/{report_id}[?format=json] -> proxy upgrade report
| kind | alerts on |
|---|---|
wallet | ERC-20 transfers in/out (non-zero), new Approval and ApprovalForAll granted by the wallet. Optional token filter. |
contract | Admin events: Upgraded, AdminChanged, BeaconUpgraded, OwnershipTransferred(Started), Paused/Unpaused, Role granted/revoked/admin changed, Safe owner/threshold/module/guard/fallback-handler changes and executions, Timelock CallScheduled/CallExecuted/Cancelled/MinDelayChange, Governor proposals. |
event | Any event: event = signature like Deposit(address,uint256) or a topic0 hash. |
safe_queue (Pro) | New queued (unexecuted) Safe transactions and when one reaches its signature threshold, from the Safe Transaction Service. Flags DELEGATECALL, settings changes and approvals. |
Discord (https://discord.com/api/webhooks/…), Slack incoming webhooks, Telegram (https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<ID>), ntfy (https://ntfy.sh/<topic>; the public ntfy.sh server rate-limits shared cloud IPs, so add an access token as ?auth=… or use your own ntfy server), or any HTTPS URL receiving JSON:
{"text":"⬇️ Received 250 USDC from 0x12ab…","watch_id":7,"chain":"base","kind":"wallet","watched":"0x…","tx":"0x…","log_index":12,"block":52750911,"log_address":"0x8335…","topics":[…],"data":"0x…","service":"ledgerbell"}
When several alerts for the same webhook are due at once they are sent as one message (JSON: {"text", "alerts":[…], "count"}). Failed deliveries are retried with exponential backoff (honoring Retry-After) for up to 24 hours.
Free: 3 watches, 50 alerts/day. Pro: 30 watches, 1,000 alerts/day. At most 5 alerts per watch per minute. Native ETH and NFT transfers are not covered.