Skip to main content

Overview

Webhooks deliver real-time notifications when payment and request events occur. Configure your endpoints to receive HMAC-signed POST requests with automatic retry logic and comprehensive event data.

Webhook Configuration

Manage webhooks in the Dashboard or programmatically through the Auth API at auth.request.network. Each webhook is scoped to the Client ID that creates it; events for any payment link or request created with that Client ID are delivered to that webhook.

Create a webhook

Response (201 Created):
The secret is only returned once at creation. Store it securely β€” you cannot retrieve it again. Use HTTPS in production. localhost URLs are accepted for local testing.

Manage webhooks

All endpoints accept x-client-id and operate on the webhooks owned by that Client ID. Open the Auth API Scalar docs to call these interactively with your wallet session β€” signing in to the Dashboard sets the session cookie that’s shared across all *.request.network services.

Local Development

Use ngrok to receive webhooks locally, then pass the public URL to POST /v1/webhook:

Event Types

See Payload Examples below for detailed webhook structures.

Payment Events (core)

Payment Events (Client ID-scoped)

Emitted in addition to the core events when the originating request was created with a Client ID. Payload includes extra clientId and origin fields.

Payment Events (Checkout / Secure Payment-scoped)

Emitted in addition to the core events when the request was created via a Secure Payment / checkout flow.

Processing Events

Request Events

Compliance Events

Secure Payment Events

Sent to the same registered webhook endpoints as every other event β€” same Client ID scoping, x-request-network-signature HMAC verification, delivery headers, timeout, and 1s/5s/15s retry semantics described elsewhere on this page. The userEvent field distinguishes the 3 funnel steps:
securePaymentToken is the platform’s correlation key, returned when the secure payment was created. requestId is present only when exactly one request is linked to the secure payment (see requestIds for the full list). timestamp is server-stamped on receipt. occurredAt and properties are client-reported telemetry from the payer’s browser β€” useful for analytics, but not authoritative.secure_payment.user_event is best-effort browser telemetry. Navigation, network errors, or browser extensions can prevent the API from receiving it. Webhook retries begin only after the API accepts the event. Do not treat an absent event as evidence that the payer did not take the step; use payment.confirmed for settlement and reconciliation.When the Secure Payment Page includes wallet information in properties, it uses wallet_address_hashed rather than a raw wallet address.

Payer-wallet access rejections

secure_payment.access_rejected is generated server-side when a wallet that is not on an incoming payment’s allowedPayerAddresses allowlist tries to access or pay it. It is not emitted for KYT decisions. See Restrict payer wallets to configure the allowlist. The event is sent to the payment’s platform-wide and Client ID webhooks, not to an orchestrator webhook. Repeated attempts by the same wallet on the same payment are normally suppressed for 10 minutes. If every configured webhook endpoint fails, the next access attempt can trigger another notification.

Security Implementation

Signature Verification

Every webhook includes an HMAC SHA-256 signature in the x-request-network-signature header:

Security Requirements

  • HTTPS only: Production webhooks require HTTPS endpoints
  • Always verify signatures: Never process unverified webhook requests
  • Keep secrets secure: Store signing secrets as environment variables
  • Return 2xx for success: Any 2xx status code confirms successful processing

Request Headers

Each webhook request includes these headers:

Retry Logic

Automatic Retries

  • Max attempts: 3 retries (4 total attempts)
  • Retry delays: 1s, 5s, 15s
  • Trigger conditions: Non-2xx response codes, timeouts, connection errors
  • Timeout: 5 seconds per request

Response Handling

Error Logging

Request API logs all webhook delivery failures with:
  • Endpoint URL
  • Attempt number
  • Error details
  • Final failure after all retries

Payload Examples

All payment events include an explorer field linking to Request Scan for transaction details. Common Fields:
  • requestId / requestID: Unique identifier for the payment request
  • paymentReference: Short reference, also unique to a request, used to link payments to the request
  • timestamp: ISO 8601 formatted event timestamp
  • paymentProcessor: Either request-network (crypto) or request-tech (fiat)
  • payerAddress: Resolved payer wallet β€” the on-chain sender for plain direct payments, or the resolved payer for recurring and intent-based flows (Secure Payment Page, LiFi, Safe, ERC-4337, multicall). null when it cannot be determined. Included on payment.confirmed and payment.partial events (and their .client_id / .checkout variants).
  • payerEoaAddress: The payer’s connected wallet address. It can differ from payerAddress when a smart account is used. null when unavailable. Included on payment.confirmed and payment.partial events (and their .client_id / .checkout variants).

Payment Confirmed

Payment Processing

Payment Partial

Payment Failed

Compliance Updated

Secure Payment User Event

Secure Payment Access Rejected

Use POST /v1/webhook/test with { "eventType": "secure_payment.access_rejected" } to test this event without a rejected access attempt.

Implementation Examples

For a complete working example, see Webhook reconciliation which implements webhook handling for payment notifications.

Testing

Test deliveries

Fire a test webhook from the Auth API:
Or call it interactively from the Auth API Scalar docs. Test deliveries arrive at all active webhooks for that Client ID and include the x-request-network-test: true header so handlers can branch on test vs real.

Test Webhook Identification

Test webhooks include the x-request-network-test: true header:

Best Practices

Error Handling

  • Implement idempotency: Use delivery IDs to prevent duplicate processing
  • Graceful degradation: Handle unknown event types without errors

Performance

  • Timeout management: Complete processing within 5 seconds

Troubleshooting

Common Issues

Signature verification fails:
  • Check your signing secret matches the value returned by POST /v1/webhook at creation
  • Ensure you’re using the raw request body for signature calculation
  • Verify HMAC SHA-256 implementation
Webhooks not received:
  • Confirm endpoint URL is accessible via HTTPS
  • Verify endpoint returns 2xx status codes
  • Confirm the webhook is active via GET /v1/webhook (toggle with PUT /v1/webhook/:id)

Debugging Tips

  • Use ngrok request inspector to see raw webhook data
  • Monitor retry counts in headers to identify issues
  • Fire test deliveries via POST /v1/webhook/test

Webhooks & Events

High-level webhook concepts and workflow

Webhook reconciliation

Complete webhook implementation example

Authentication

API credential setup and webhook security

Request Dashboard

Manage Client IDs, payment destinations, and webhooks
Last modified on August 19, 2026