Skip to main content

Overview

Monitoring webhooks push signed HTTPS notifications to your endpoint when on-chain activity happens on addresses you watch. Configure them in the developer console: choose an endpoint URL, the event types you care about, the chains to watch, and up to 25 addresses per webhook. Watched addresses are polled roughly every 5 minutes, and an event is reported once it is a few blocks deep (about 2–3 minutes on Ethereum and Base) so that a chain reorganisation can never retract a delivery. Expect a delivery within roughly 5–10 minutes of the on-chain event. Compound V2 lending events are the exception: they come from an hourly index of the whole protocol, so allow up to about an hour.

Event Types

Lending events

Decoded from the lending protocols’ own events: Aave V2 and V3, Compound V3 and Morpho Blue on Ethereum and Base, and Compound V2 on Ethereum. These are the same events the credit score’s Borrowing History reads. Lending events are available on Ethereum and Base only; a webhook that subscribes to one must include at least one of those chains. Watching an address starts from the moment monitoring first sees it: its earlier borrowing history is never replayed as events.

Wallet activity events

Available on every supported chain.

Score events

A score is recomputed when anyone requests it, when the cache warmer refreshes a popular address, and, for addresses watched by a score_change webhook, automatically within about 10 minutes of new on-chain activity on any of the webhook’s chains. Only complete (non-provisional) scores are compared, and only a change in the score value fires the event. Each recorded score is also available from the score history endpoint. Score events are not tied to a chain: blockchain and transaction_hash are null in the payload, and the webhook’s chains only say where activity triggers a recomputation. Other protocol events (swaps, staking) are not yet supported.

Supported Chains

Ethereum, Base, Optimism, Arbitrum, Polygon, BNB Chain, Avalanche, Linea, Celo, and Robinhood Chain. Chain values in payloads use lowercase slugs (ethereum, base, bsc, robinhood, …).

Endpoint Requirements

  • HTTPS only, on port 443 or 8443, resolving to a public IP address (private and internal hosts are rejected, both at registration and at delivery time).
  • Respond with any 2xx status within 10 seconds. Anything else counts as a failed delivery.
  • At most 10 webhooks per user and 25 addresses per webhook.

Delivery Payload

Every delivery is a POST with a JSON body:
The data object varies by event type: transaction events carry value_wei, approval events carry spender and the raw allowance value, and token events carry the fields shown above. Lending events carry the protocol, the market contract and the amounts, as raw integers in the asset’s smallest unit (strings, to keep full precision). For a liquidation, asset and amount_raw are the debt repaid and collateral_asset / collateral_amount_raw the collateral seized (for Compound V2, the seized cToken and an amount in cTokens). counterparty is the caller, recipient, repayer or liquidator, depending on the event.
A score_change event carries the previous and current scores and the difference between them:

Headers

Verifying Signatures

Each webhook has a signing secret, shown once when you create it. The signature is HMAC-SHA256 over the string {t}.{raw_body}, where t is the timestamp from the signature header and raw_body is the exact request body bytes. Always verify the signature and reject stale timestamps (5 minutes is a reasonable tolerance) to prevent replays.
Compute the HMAC over the raw request body bytes, not a re-serialized copy of the parsed JSON — serialization differences will break verification.

Retries and Failure Handling

  • Failed deliveries are retried up to 4 times with increasing backoff: 1 minute, 5 minutes, 30 minutes, then 2 hours.
  • Every attempt is recorded in the delivery history, visible in the console next to each webhook.
  • After 10 consecutive failed attempts (across deliveries), the webhook is automatically disabled. Re-enable it from the console once your endpoint is healthy — the failure counter resets on the first successful delivery.

Testing

Use the test button in the console to send a synthetic test event through the real delivery pipeline. Test deliveries appear in the delivery history but are never retried and don’t count toward auto-disable.
When a new address is added to a webhook, monitoring starts from the current chain head — historical activity is not backfilled.