Skip to content

HyperSwitch

API Development

Open‑source, modular payments infrastructure for flexible integration of payment modules without vendor lock‑in

Rust Latest v1.125.0 · 16d ago Security brief →

Features

  • Modular Payment Suite – pick and integrate only needed components (Cost Observability, Revenue Recovery, Vault, Intelligent Routing, Reconciliation, Alternate Payment Methods)
  • Self‑hosted or hosted sandbox deployment via Docker with quick‑setup script
  • PCI‑compliant vault for secure storage of cards, tokens, wallets, and bank credentials

Recent releases

View all 13 releases →
Review required
v1.125.0 Breaking risk
Auth Breaking upgrade

Breaking changes — review before upgrading.

Config change
v1.124.0
Breaking upgrade

Routine maintenance and dependency updates.

No immediate action
v1.121.2 Bug fix

Analytics query fix

Review required
v1.123.1 New feature
Auth

Payment method blocking + new wallets

v1.123.0 New feature
Notable features
  • Processing account ID in payload MITs
  • Stripe dispute status mapping fix for correct webhook event handling
  • Config-based UAS eligibility at org and merchant level
Full changelog

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:
    • Add processing account id in payload MITs (#11578)
    • [Nmi] googlepay decryptedflow with mandates (#11629)
    • [Noon] Add support for configurable region_based_endpoint while creating mca (#11675)
    • Add MIT category mapping for Checkout.com mandate payments (#11731)
  • core:
    • Implement NTID flow for Decrypted Wallet Token and also Implement for checkout connector (#11720)
    • Enable config-based UAS eligibility at org and merchant level (#11729)

Bug Fixes

  • connector:
    • [Worldpayxml] correctly map authenticate_shopper_id and scheme transaction id (#11525)
    • [Adyen] Remove recurringProcessingModel for CIT transactions (#11622)
    • [Adyen] Add Subscription to AdyenRecurringProcessingModel enum (#11605)
  • 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:

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

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
43,327
Forks
4,961
Languages
Rust JavaScript Shell

Install & Platforms

Install via
docker shell-script

Community & Support

Beta — feedback welcome: [email protected]