Webhooks
Webhook integration

Alchemy Webhooks: Send Onchain Activity to Sazabi

By Sazabi Team

Webhook facts checked on the platform’s docs on Nov 8, 2026.

Alchemy Notify pushes onchain activity to your server as it happens. Pointing it at Sazabi stores each notification as a log record, so wallet and contract events are searchable alongside the logs of the services that react to them.

What Alchemy sends

Alchemy's webhooks cover address activity and gas prices on several blockchains. The docs describe three types:

  • Address Activity tracks ETH, ERC-20, ERC-721 and ERC-1155 transfers when an address sends or receives. One webhook can track up to 100,000 addresses.
  • NFT Activity tracks ERC-721 and ERC-1155 token contracts for NFT transfers between addresses.
  • Custom tracks any smart contract or marketplace activity or contract creation, and uses a GraphQL interface with filters so you receive only the data you ask for.

Every delivery is a JSON event object. It has webhookId, an event id, createdAt and an event field that holds the payload, plus a type string such as ADDRESS_ACTIVITY, NFT_ACTIVITY or GRAPHQL. For Custom webhooks the shape of event depends on your GraphQL query.

Why send Alchemy webhooks to Sazabi

Onchain events trigger real work: crediting a deposit, minting an item, updating a balance. When a user says a transfer arrived but their balance did not change, you need to know whether Alchemy announced it, when it did and what your handler did next.

Sazabi's Webhook Events source stores each JSON payload as a log record, with fields under webhook.* attributes. Search for a transaction hash or address in a thread and you get the event, plus any matching lines from your own services if they log the hash. A suffix like /alchemy on the intake URL is stored as webhook.path, so you can scope searches to this source.

Set up an Alchemy webhook

Copy your intake URL from the Webhook Events source and keep it private. Then, in Alchemy:

  1. Open the webhooks dashboard and click Create Webhook, or create one by calling the createWebhook endpoint of the Notify API.
  2. Choose the webhook type and fill in what it asks for, such as the network, the addresses or a GraphQL filter.
  3. Paste the intake URL, with a path suffix if you like, as the Webhook URL.
  4. Use the Test Webhook button to send a sample event, then look for it in Sazabi.

The Notify API also lets you add addresses to a webhook programmatically. The dashboard shows an Auth Token that the API requires, and it keeps a signing key for each webhook.

Chain and product support differ, so check the Chains page in the Alchemy dashboard before you plan around a particular network.

Example Alchemy payload

This abbreviated example follows the Custom webhook response in the Alchemy docs. The block contents are trimmed and illustrative.

{
  "webhookId": "wh_a55wfsvq5h8n8u3z",
  "id": "whevt_rsdblc6zxi8a6ntl",
  "createdAt": "2024-01-23T07:51:07.945953790Z",
  "type": "GRAPHQL",
  "event": {
    "data": {
      "block": {
        "logs": [
          {
            "transaction": {
              "hash": "0x8a179038d909c1906fddf0a2d38e4d3ef76eba30c1c26f758451e3b69a64f5a6",
              "from": { "address": "0xeeda051ab883d52923bc0951dd2edcbc7c0da597" },
              "to": { "address": "0xdafce4acc2703a24f29d1321adaadf5768f54642" }
            }
          }
        ]
      }
    }
  }
}

Nested arrays stay inside the stored payload as sent. If you want one record per transfer, shape your GraphQL query or your handler accordingly, since Sazabi turns only a top-level JSON array into one record per element.

What to watch for

  • Non-200 responses. Alchemy's listener contract is a 200 response once the event is received. Failures trigger automatic retries with exponential backoff, which the docs say can extend up to 10 minutes for Free and PAYG teams and up to 1 hour for Enterprise.
  • No manual retries yet. The docs list manual retries as coming soon, so plan on failed events not being re-sent on demand.
  • Ordering. The docs promise in-order delivery for first-time notifications only, so retries are not covered by that statement. Use createdAt and the event id when you reconcile.
  • Source addresses. Alchemy lists two IP addresses that webhooks originate from, which you can use in a firewall allow list.
  • Signing. Requests carry an X-Alchemy-Signature header, a hex HMAC-SHA256 of the body made with the webhook's signing key.
  • Volume. Custom webhooks that follow whole blocks can be large. A drop to zero records is worth a look at the dashboard.

See also the Square and PayPal guides for fiat payment events. Other sources live on the integrations page, and plans are on pricing.

Alchemy webhook facts

Signatures: Sazabi doesn’t check Alchemy signatures by default, so it doesn’t reject unsigned or forged requests. Signature verification is in early access: contact support to turn it on for your organization, then verify signatures on the Webhook Events source with the Custom HMAC option (header X-Alchemy-Signature, SHA-256, hex), and Sazabi rejects a delivery that fails the check with a 401. Until it’s on, the intake URL is the only credential. It’s hard to guess, so keep it private, and rotate the project’s public key if it leaks.

  • Events: Alchemy offers Custom, Address Activity and NFT Activity webhooks, with event types such as ADDRESS_ACTIVITY, NFT_ACTIVITY and GRAPHQL. (Alchemy docs, accessed Nov 8, 2026)
  • Payload: The webhook event object has webhookId, id, createdAt, type and an event field holding the payload. (Alchemy docs, accessed Nov 8, 2026)
  • Signing: Every request carries an X-Alchemy-Signature header, a HMAC SHA256 hash computed with the webhook signing key. (Alchemy docs, accessed Nov 8, 2026)
  • Retries: Webhooks retry non-200 responses with exponential backoff, up to 10 minutes after for Free and PAYG teams and up to 1 hour for Enterprise. (Alchemy docs, accessed Nov 8, 2026)

Frequently Asked Questions

What kinds of Alchemy webhooks are there?

Alchemy documents three types. Custom webhooks track contract and marketplace activity, Address Activity webhooks track ETH and token transfers for chosen addresses, and NFT Activity webhooks track ERC-721 and ERC-1155 transfers.

How do I create an Alchemy webhook?

Open the webhooks dashboard and click Create Webhook, or call the createWebhook endpoint. Paste your endpoint as the Webhook URL and use Test Webhook to send a sample.

How many addresses can one Address Activity webhook track?

A maximum of 100,000 addresses can be added to a single webhook, according to the Alchemy docs.

Does Alchemy deliver events in order?

The docs say all first-time webhook notifications are delivered in order, regardless of chain and its speed. Retried notifications are separate from that guarantee.

Does Sazabi verify Alchemy signatures?

Not by default, and it doesn’t reject unsigned requests. Signature verification is in early access: contact support to turn it on for your organization, then turn on Verify signatures on the Webhook Events source with the Custom HMAC option (header X-Alchemy-Signature, SHA-256, hex), and Sazabi rejects a delivery that fails the check with a 401. Until it’s on, keep the intake URL private.

Sources

  1. Webhook types, dashboard or Notify API creation, webhook event object fields (accessed Nov 8, 2026)
  2. Custom, Address Activity and NFT Activity webhook types and the 100,000 address limit (accessed Nov 8, 2026)
  3. Creating and testing webhooks, 200 response, signing key and X-Alchemy-Signature, source IP addresses, delivery behavior and retries (accessed Nov 8, 2026)
  4. Custom webhooks use a GraphQL interface and the example GRAPHQL event body (accessed Nov 8, 2026)
  5. NFT_ACTIVITY webhook type (accessed Nov 8, 2026)
  6. Webhook Events log source: JSON only, payload under webhook.* attributes, path suffix stored as webhook.path; signature verification with the Standard Webhooks and Custom HMAC options, and rejected deliveries (accessed Nov 8, 2026)