Stripe must be told where to send payment event notifications. The URL must be on your Main Backend host (MAIN_BACKEND_DOMAIN — hosted: webhook.payment-gateway.app) — Hostnames & DNS conventions.
[!NOTE]
For self-hosted stacks using branded webhook domains, keep this hostname stable and under your control. Many providers expect webhook and return/callback URLs to stay on approved domains. If that hostname is behind Cloudflare proxying, review the custom-domain Cloudflare caveat in Hostnames & DNS conventions.
In Stripe Dashboard, go to Developers → Webhooks → Add endpoint.
(Hosted: https://webhook.payment-gateway.app/hooks/stripe/{providerId}.)
The {providerId} is the MongoDB ObjectId of your provider record — visible in the Admin Panel URL after you create the provider.
Set the webhook Event payload API version to 2026-03-25.dahlia or later.
The gateway tolerates signed Stripe webhooks from other API versions, but matching the backend SDK version gives the safest object deserialization.
Under Events to listen to, select only the events you need. At minimum, enable payment_intent.succeeded, payment_intent.payment_failed, charge.succeeded, charge.failed, charge.refunded, and charge.dispute.created.
Use your Main Backend host (MAIN_BACKEND_DOMAIN — hosted: webhook.payment-gateway.app) — Hostnames & DNS conventions.
[!NOTE]
For self-hosted stacks using branded webhook domains, keep this hostname stable and under your control. If you proxy it through Cloudflare, review the custom-domain Cloudflare caveat in Hostnames & DNS conventions before onboarding merchant custom domains.
In GoCardless Dashboard, go to Developers → Webhooks → Create Webhook.
Unlike card payments, GoCardless uses a redirect mandate flow:
Customer clicks Pay on checkout → redirected to GoCardless mandate authorization page.
Customer authorizes the debit mandate at their bank.
GoCardless redirects back to the gateway.
The gateway creates a pending_provider transaction; payment is captured asynchronously (usually within 1–5 business days).
GoCardless sends a webhook when payment clears → transaction moves to succeeded.
[!IMPORTANT]
GoCardless payments are not instant. Design your fulfillment logic to handle pending_provider state and wait for the succeeded webhook before delivering goods/services.
Wire Transfer is a manual-confirmation provider — the gateway generates payment instructions and marks transactions as paid when you manually confirm receipt.