Skip to main content
Alchemy provides the two things Crypto Checkout needs to detect payments reliably and quickly: blockchain RPC access for reading balances and transaction data, and Alchemy Notify for push-based address activity webhooks. Without Alchemy, the server falls back to polling for new transactions; with Alchemy connected, payments are typically detected within seconds of the transaction landing on-chain.

What Alchemy Provides

Blockchain RPC

Read wallet balances, query transaction receipts, check confirmation counts, and broadcast transactions across all supported EVM chains, Solana, and Bitcoin.

Alchemy Notify

Push-based address activity webhooks — when a transfer arrives at a session’s deposit address, Alchemy sends an immediate HTTP notification instead of waiting for the next polling cycle.

Two Separate Credentials

Alchemy uses two distinct credentials, and confusing them is the most common setup mistake. You need both.
CredentialWhere to find it in AlchemyPurpose
API KeyApps → your app → API KeyAuthenticates RPC and data requests (reading balances, transactions, etc.)
Notify Auth TokenAccount menu → Auth Token (top bar)Authenticates webhook management requests (creating, listing, and deleting Notify webhooks)
The API Key and the Notify Auth Token are different values from different places in the Alchemy dashboard. Pasting your API key into the Auth Token field (or vice versa) is the most common misconfiguration — provisioning will fail with a 401 from the Alchemy webhook API.
Both values are treated as secrets: they are stored AES-256-GCM encrypted in the database and are never sent back to the browser. The dashboard only displays whether each field has been set, not the raw value.

Setup

1

Sign in to your Crypto Checkout dashboard and go to Integrations

From the main navigation, open the Integrations section. You will see a tile grid of available integrations.
2

Open the Alchemy tile

Click the Alchemy tile to expand the configuration form.
3

Enter your credentials

Fill in all three fields:
  • API Key — your Alchemy app’s API key. Copy it from Apps → your app → API Key in the Alchemy dashboard. Stored encrypted; never displayed after saving.
  • Notify Auth Token — the X-Alchemy-Token used to manage webhooks. Copy it from your Account menu → Auth Token in the top bar. Stored encrypted; never displayed after saving.
  • Webhook Public URL — the publicly reachable HTTPS base URL of your Crypto Checkout instance (e.g. https://checkout.example.com). This is where Alchemy will POST webhook events.
The Webhook Public URL must be reachable over public HTTPS. If you are developing locally, use a tunnel such as ngrok or Cloudflare Tunnel to expose your local server before provisioning.
4

Toggle Enabled and save

Switch the integration to Enabled and click Save. Your credentials are encrypted and persisted to the database at this point.
5

Click Provision webhooks

Click the Provision webhooks button. This action calls the Alchemy webhook API to create one Notify webhook per supported chain and stores each webhook’s ID and HMAC signing key in the database.You can safely run this multiple times — it is idempotent. Re-provision if you rotate credentials, change your public URL, or add new supported chains.

After Provisioning

Once webhooks are provisioned, no further manual configuration is needed. Every new checkout session automatically registers its assigned deposit address with the appropriate chain’s Alchemy webhook. When that address receives a transfer, Alchemy pushes a notification to your instance in near real-time. When the session terminates (paid, expired, or failed), the address is removed from the webhook to keep the watchlist lean. The following webhook receiver endpoints are registered on your instance:
Chain typeEndpoint path
EVM (Ethereum, Base, Arbitrum, Optimism, Polygon)/api/webhooks/alchemy
Solana/api/webhooks/alchemy/solana
Bitcoin/api/webhooks/alchemy/btc
Each endpoint verifies the HMAC-SHA256 signature using the signing key stored during provisioning, then runs the shared payment ingestion pipeline. Supported chains and chain IDs
NetworkMainnet chain IDTestnet chain ID
Ethereum111155111 (Sepolia)
Base845384532
Arbitrum42161421614
Optimism1011155420
Polygon13780002
Solana101103
Bitcoin833338333

Without Alchemy

If Alchemy is not configured or is toggled off, Crypto Checkout falls back to polling for all chains. Polling is slower — detection can take anywhere from several seconds to a few minutes depending on polling frequency — but the system remains fully functional. You can still accept payments; you just lose the near-instant detection that Notify provides. The fallback is also used automatically for any chain that Alchemy Notify does not support.
During local development you can leave Alchemy disabled and use the Check Payment button on a session’s detail page to trigger a manual poll. This avoids the need for a public tunnel just to test the happy path.

Security

  • Credential storage: both the API Key and the Notify Auth Token are encrypted at rest using AES-256-GCM. The encryption key is derived from your instance’s secret configuration and is never stored alongside the ciphertext.
  • Frontend exposure: the dashboard never returns raw credential values to the browser. API responses only include a boolean (hasApiKey, hasAuthToken) indicating whether a secret has been set.
  • Webhook verification: each inbound Alchemy webhook is verified against the per-chain signing key stored during provisioning. Requests with an invalid or missing signature are rejected before any payment logic runs.

Troubleshooting

Error / symptomCauseFix
”Alchemy API key not configured”API Key field is blankSet the API Key under Integrations → Alchemy
”Alchemy auth token not set”Notify Auth Token field is blankSet the Notify Auth Token under Integrations → Alchemy
Provisioning fails with 401API Key pasted in Auth Token field (or vice versa)Double-check which field maps to which Alchemy dashboard location (see table above)
Provisioning says public URL missingWebhook Public URL is blank or not HTTPSEnter a valid https:// URL; use a tunnel for local development
401 errors in webhook delivery logsSigning-key mismatch (e.g. after re-provisioning)Click Provision webhooks again to refresh signing keys
Webhooks not firing at allInstance URL not publicly reachableVerify the URL responds to external HTTPS traffic and check Alchemy’s delivery logs in their dashboard
For a detailed walkthrough of how a payment moves from “pending” to “paid” once a webhook fires, see Session Lifecycle.