Authorize.Net Webhook Monitoring: HMAC-SHA512 & SRE Guide
Authorize.Net powers credit card processing and recurring billing for enterprise merchants, healthcare portals, and high-ticket B2B platforms. To notify merchant backends when a card transaction settles, an automated recurring billing (ARB) subscription renews, or a chargeback occurs, Authorize.Net dispatches asynchronous HTTP webhooks.
However, if your endpoint fails to return an HTTP 200 OK or fails cryptographic verification of the X-ANET-Signature header, payment settlement updates stall. Authorize.Net will retry failed webhooks over a 5-day window, but without proactive monitoring, recurring invoices and customer accounts remain un-reconciled.
Site Reliability Engineers ensure zero missed merchant events by validating HMAC-SHA512 signature keys, testing endpoints in sandbox environments, and configuring out-of-band heartbeat alerts. This guide details Authorize.Net signature verification, event types, and production troubleshooting runbooks.
1. Settlement Availability & Authorize.Net Retry Schedule
Evaluate merchant payment pipeline reliability using the Settlement Webhook Delivery Ratio:
[R_{\text{settlement}} = \frac{\text{Successfully Processed Authorize.Net Webhooks}}{\text{Total Batched Merchant Events}} \times 100]
When your receiver fails to respond or returns a non-2xx status code, Authorize.Net executes an exponential backoff retry schedule:
| Attempt Interval | Retry Schedule Delay | Cumulative Time Since Event |
|---|---|---|
| Attempt 1 | Immediate dispatch | (0\text{ minutes}) |
| Attempt 2 | (5\text{ minutes}) after failure | (5\text{ minutes}) |
| Attempt 3 | (15\text{ minutes}) after failure | (20\text{ minutes}) |
| Attempt 4 | (1\text{ hour}) after failure | (1.3\text{ hours}) |
| Attempt 5 - 8 | Every (4\text{ to } 12\text{ hours}) | Up to (5\text{ days}) |
If an endpoint remains down past 5 days, Authorize.Net terminates retries and permanently marks the event failed.
2. Core Authorize.Net Webhook Event Types & Risk Matrix
Prioritize engineering monitoring across critical payment lifecycle events:
| Event Type Name | Primary Business Action | Failure Risk & Merchant Impact | SRE Severity |
|---|---|---|---|
net.authorize.payment.authcapture.created | Capture funds & fulfill physical/digital order | Order paid but warehouse hold not released | P0 (Critical) |
net.authorize.customer.subscription.created | Provision recurring subscription contract | User billed but subscription not activated | P0 (Critical) |
net.authorize.customer.subscription.cancelled | Terminate user access upon cancellation | Canceled user retains access indefinitely | P1 (High) |
net.authorize.payment.refund.created | Log accounting refund & reverse credit | Accounting balance discrepancy | P2 (Medium) |
net.authorize.payment.fraud.held | Flag order for manual risk review | High-risk order fulfilled automatically | P1 (High) |
3. SRE Authorize.Net Webhook Threshold Matrix
Establish operational boundaries to ensure reliable event processing:
| Telemetry Signal | Healthy Baseline | Warning Investigation | Critical Incident Alert |
|---|---|---|---|
| Webhook Delivery Success Rate | (\ge 99.95%) | (99.0% - 99.95%) | (< 99.0%) (Active delivery drop) |
| Endpoint Response TTFB | (< 400\text{ ms}) | (400\text{ ms} - 1500\text{ ms}) | (> 3000\text{ ms}) (Timeout threshold) |
| HMAC-SHA512 Signature Errors | (0.0%) | (> 0.01%) | (> 0.1%) (Signature Key mismatch) |
| Unreconciled ARB Subscriptions | (0\text{ records}) | (1 - 5\text{ records}) | (> 5\text{ records}) (Billing desync) |
| Webhook Retry Backlog | (0\text{ events}) | (1 - 10\text{ events}) | (> 10\text{ events}) in retry state |
4. Test Authorize.Net Webhook Payloads (Zero Setup)
Before connecting live production merchant credentials, test incoming payload formatting and verify signature headers.
You can capture and inspect live Authorize.Net webhook dispatches using our free cloud debugger without registration:
š Launch Free Webhook Tester & Payload Debugger
- Open the Webhook Tester to generate a temporary HTTPS catcher endpoint.
- In the Authorize.Net Merchant Portal, navigate to Account (\rightarrow) Business Settings (\rightarrow) Webhooks (\rightarrow) Add Webhook.
- Paste the tester URL and select event triggers (e.g.
net.authorize.payment.authcapture.created). - Trigger a test event from your merchant portal.
- Inspect the
X-ANET-Signatureheader, timestamp, and JSON structure in real-time.
5. Production Node.js HMAC-SHA512 Signature Verification
Authorize.Net signs webhooks using HMAC-SHA512 with your Signature Key (distinct from your Transaction Key). The header format is: X-ANET-Signature: 512=<hex_digest>:
import crypto from "crypto";
import { Request, Response } from "express";
export function verifyAuthorizeNetWebhook(req: Request, res: Response) {
const signatureHeader = req.headers["x-anet-signature"] as string;
if (!signatureHeader || !signatureHeader.startsWith("512=")) {
console.error("[Authorize.Net] Missing or invalid signature prefix");
return res.status(400).send("Invalid Signature Header");
}
const receivedHash = signatureHeader.replace("512=", "").toLowerCase();
// req.rawBody must be the unparsed UTF-8 payload buffer
const calculatedHash = crypto
.createHmac("sha512", process.env.AUTHORIZE_NET_SIGNATURE_KEY!)
.update(req.body, "utf8")
.digest("hex")
.toLowerCase();
// Timing-safe comparison to prevent cryptographic timing attacks
const isValid = crypto.timingSafeEqual(
Buffer.from(receivedHash),
Buffer.from(calculatedHash)
);
if (!isValid) {
console.error("[Authorize.Net] HMAC-SHA512 signature mismatch");
return res.status(401).send("Unauthorized Webhook Signature");
}
// 1. Immediately acknowledge 200 OK to satisfy Authorize.Net
res.status(200).send("OK");
// 2. Offload settlement to background job queue
const payload = JSON.parse(req.body.toString());
enqueueSettlementProcessing({
webhookId: payload.webhookId,
eventType: payload.eventType,
transactionId: payload.payload.id,
responseCode: payload.payload.responseCode,
});
}
Simulate an Authorize.Net payload dispatch via cURL:
# Calculate HMAC-SHA512 signature and dispatch test POST request
PAYLOAD='{"notificationId":"d182-3921","eventType":"net.authorize.payment.authcapture.created","payload":{"id":"6019283746","responseCode":1}}'
SIGNATURE_KEY="your_authorize_net_signature_key"
HEX_SIG=$(echo -n "$PAYLOAD" | openssl dgst -sha512 -hmac "$SIGNATURE_KEY" | awk '{print $2}')
curl -X POST http://localhost:3000/api/webhooks/authorize-net \
-H "Content-Type: application/json" \
-H "X-ANET-Signature: 512=$HEX_SIG" \
-d "$PAYLOAD"
[!TIP] Production SRE Tools: Calculate merchant pipeline downtime allowances with our free SLA Calculator. If destination endpoints encounter DNS resolution delays, inspect zone records with the DNS Lookup tool.
6. Implementing Heartbeat Alerts for Authorize.Net Reconciliation
To catch missed recurring subscription renewals before merchant accounting periods close, configure a daily reconciliation worker connected to Pingzo Heartbeats:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Daily Authorize.Net ARB Reconciliation Worker ā
ā 1. Query Authorize.Net API for settled batch list ā
ā 2. Match transaction IDs against merchant database ā
ā 3. If 100% reconciled: Dispatch Heartbeat to Pingzo ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā (POST /api/ping/pb_xxx)
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāā
ā Pingzo Heartbeat ā
ā Monitoring Engine ā
āāāāāāāāāāāāā¬āāāāāāāāāāāā
ā (If batch desync detected)
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāā
ā Instant Alert: ā
ā WhatsApp & Telegram ā
āāāāāāāāāāāāāāāāāāāāāāāāā
If your reconciliation worker identifies un-captured transactions or encounters an API authentication error, it suppresses the heartbeat ping. Pingzo immediately alerts your on-call team via WhatsApp, Telegram, or Slack, ensuring you capture credit card settlements before authorization holds expire.
7. Troubleshooting Authorize.Net Webhook Failures
Follow this structured runbook when Authorize.Net webhook delivery alerts trigger:
- Check Authorize.Net Merchant Portal logs: Go to Account (\rightarrow) Business Settings (\rightarrow) Webhooks to view delivery history and error response codes.
- Confirm Signature Key configuration: Ensure you are verifying against your Signature Key (and not your Transaction Key or API Login ID).
- Inspect raw body parsing: Verify that body parsing middleware has not modified UTF-8 whitespace or line endings before HMAC calculation.
- Audit SSL/TLS certificate chain: Authorize.Net requires valid, unexpired TLS 1.2+ certificates; self-signed certificates in sandbox will fail delivery.
- Confirm heartbeat resumption: Run a test transaction from the Merchant Portal and confirm that the Pingzo heartbeat transitions back to Healthy (Green).
Stop Finding Out About Outages from Angry Users
Get instant WhatsApp & Discord alerts the second your API, website, or server goes down. Setup in 30 seconds with 60-second checks.