1.123.0 (2026-04-13)
Docker Images
-
v1.123.0(with AWS SES support):docker pull docker.juspay.io/juspaydotin/hyperswitch-router:v1.123.0 -
v1.123.0-standalone(without AWS SES support):docker pull docker.juspay.io/juspaydotin/hyperswitch-router:v1.123.0-standalone
Features
- connector:
- core:
Bug Fixes
- connector:
- connectors: [stripe] fix webhook event type mapping (#11687)
- payload: Update request structure and switch to JSON payload format (#11528)
Refactors
- connector: [Adyen] [paypal] fix error propogation in webhook flows (#11730)
- router: Handle dispute webhook validation failure with 4xx response (#11648)
Compatibility
This version of the Hyperswitch App server is compatible with the following versions of the other components:
- Control Center: v1.38.3
- Web Client: v0.130.0
- WooCommerce Plugin: v1.6.1
- Card Vault: v0.7.0
- Encryption Service: v0.1.12
Database Migration Changes
Important
Stripe Dispute Status Mapping Fix
We previously had a bug where incorrect dispute statuses were recorded (e.g., disputes marked as lost instead of opened) due to an incorrect mapping of Stripe's webhook events. This bug has been fixed in this release. Please run the following query to fix existing dispute records. This query uses Stripe's dispute states (stored in the connector_status column of the dispute table) for accurate state handling.
UPDATE dispute
SET dispute_status = CASE
WHEN LOWER(connector_status) = 'won' THEN 'dispute_won'
WHEN LOWER(connector_status) = 'lost' THEN 'dispute_lost'
WHEN LOWER(connector_status) IN ('needsresponse', 'warningneedsresponse') THEN 'dispute_opened'
WHEN LOWER(connector_status) IN ('underreview', 'warningunderreview') THEN 'dispute_challenged'
WHEN LOWER(connector_status) = 'warningclosed' THEN 'dispute_cancelled'
ELSE dispute_status
END
WHERE connector = 'stripe';Configuration Changes
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index 52dac46bc1..57cd9688e7 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -99,21 +99,21 @@ loonio.base_url = "https://integration.loonio.ca/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
mollie.secondary_base_url = "https://api.cc.mollie.com/v1/"
moneris.base_url = "https://api.sb.moneris.io"
mpgs.base_url = "https://test-gateway.mastercard.com"
multisafepay.base_url = "https://testapi.multisafepay.com/"
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
-noon.base_url = "https://api-test.noonpayments.com/"
+noon.base_url = "https://api-test{{region}}.noonpayments.com/"
nordea.base_url = "https://api.nordeaopenbanking.com"
noon.key_mode = "Test"
novalnet.base_url = "https://payport.novalnet.de/v2"
nuvei.base_url = "https://ppp-test.nuvei.com/"
opayo.base_url = "https://pi-test.sagepay.com/"
opennode.base_url = "https://dev-api.opennode.com"
paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
paybox.secondary_base_url="https://preprod-tpeweb.paybox.com/"
payeezy.base_url = "https://api-cert.payeezy.com/"
payjustnow.base_url = "https://sandbox-checkout.payjustnow.io/v2"
@@ -228,21 +228,21 @@ enabled = true
[zero_mandates.supported_payment_methods]
bank_debit.ach = { connector_list = "gocardless,adyen,payload" }
bank_debit.becs = { connector_list = "gocardless,adyen" }
bank_debit.bacs = { connector_list = "gocardless" }
bank_debit.sepa = { connector_list = "gocardless,adyen" }
card.credit.connector_list = "checkout,stripe,adyen,zift,authorizedotnet,cybersource,datatrans,worldpay,nmi,bankofamerica,wellsfargo,bamboraapac,nexixpay,novalnet,paypal,archipel,tesouro,mollie"
card.debit.connector_list = "checkout,stripe,adyen,zift,authorizedotnet,cybersource,datatrans,worldpay,nmi,bankofamerica,wellsfargo,bamboraapac,nexixpay,novalnet,paypal,archipel,tesouro,mollie"
pay_later.klarna.connector_list = "adyen"
wallet.apple_pay.connector_list = "checkout,stripe,adyen,cybersource,bankofamerica,novalnet,nuvei,authorizedotnet,nmi,tesouro,worldpaymodular,worldpayxml"
wallet.samsung_pay.connector_list = "cybersource"
-wallet.google_pay.connector_list = "checkout,stripe,adyen,cybersource,bankofamerica,novalnet,nuvei,authorizedotnet,tesouro,worldpaymodular,worldpayxml"
+wallet.google_pay.connector_list = "checkout,stripe,adyen,cybersource,bankofamerica,novalnet,nuvei,authorizedotnet,nmi,tesouro,worldpaymodular,worldpayxml"
wallet.paypal.connector_list = "adyen,novalnet"
wallet.momo.connector_list = "adyen"
wallet.kakao_pay.connector_list = "adyen"
wallet.go_pay.connector_list = "adyen"
wallet.gcash.connector_list = "adyen"
wallet.dana.connector_list = "adyen"
wallet.twint.connector_list = "adyen"
wallet.vipps.connector_list = "adyen"
bank_redirect.ideal.connector_list = "adyen"
bank_redirect.bancontact_card.connector_list = "adyen"
@@ -252,21 +252,21 @@ bank_redirect.open_banking_uk.connector_list = "adyen"
[mandates.supported_payment_methods]
bank_debit.ach = { connector_list = "gocardless,adyen,stripe,payload" }
bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
bank_debit.bacs = { connector_list = "stripe,gocardless" }
bank_debit.sepa = { connector_list = "gocardless,adyen,stripe,deutschebank" }
card.credit.connector_list = "aci,checkout,stripe,adyen,authorizedotnet,cybersource,datatrans,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal,xendit,moneris,archipel,worldpayvantiv,payload,paysafe,finix,tesouro,mollie,airwallex"
card.debit.connector_list = "aci,checkout,stripe,adyen,authorizedotnet,cybersource,datatrans,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal,xendit,moneris,archipel,worldpayvantiv,payload,paysafe,finix,tesouro,mollie,airwallex"
pay_later.klarna.connector_list = "adyen,aci"
wallet.apple_pay.connector_list = "checkout,stripe,adyen,braintree,cybersource,noon,bankofamerica,nexinets,novalnet,nuvei,authorizedotnet,wellsfargo,worldpaymodular,worldpayvantiv,finix,nmi,tesouro,worldpayxml"
wallet.samsung_pay.connector_list = "cybersource"
-wallet.google_pay.connector_list = "checkout,stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet,nuvei,authorizedotnet,wellsfargo,worldpaymodular,worldpayvantiv,finix,tesouro,worldpayxml"
+wallet.google_pay.connector_list = "checkout,stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet,nuvei,authorizedotnet,wellsfargo,worldpaymodular,worldpayvantiv,finix,nmi,tesouro,worldpayxml"
wallet.paypal.connector_list = "adyen,globalpay,nexinets,novalnet,paypal,authorizedotnet"
wallet.momo.connector_list = "adyen"
wallet.kakao_pay.connector_list = "adyen"
wallet.go_pay.connector_list = "adyen"
wallet.gcash.connector_list = "adyen"
wallet.dana.connector_list = "adyen"
wallet.twint.connector_list = "adyen"
wallet.vipps.connector_list = "adyen"
bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay,nexinets,aci"Full Changelog: v1.122.0...v1.123.0